arm64: Use the new PCB macros in swtch.S
Rather than hard coding the location of these registers in the array use the new macros to find the correct offset. Sponsored by: Arm Ltd
This commit is contained in:
parent
18834929d5
commit
74236cde45
@ -56,6 +56,7 @@ ASSYM(PC_SSBD, offsetof(struct pcpu, pc_ssbd));
|
||||
ASSYM(PCB_SIZE, roundup2(sizeof(struct pcb), STACKALIGNBYTES + 1));
|
||||
ASSYM(PCB_SINGLE_STEP_SHIFT, PCB_SINGLE_STEP_SHIFT);
|
||||
ASSYM(PCB_REGS, offsetof(struct pcb, pcb_x));
|
||||
ASSYM(PCB_X19, PCB_X19);
|
||||
ASSYM(PCB_LR, offsetof(struct pcb, pcb_lr));
|
||||
ASSYM(PCB_SP, offsetof(struct pcb, pcb_sp));
|
||||
ASSYM(PCB_TPIDRRO, offsetof(struct pcb, pcb_tpidrro_el0));
|
||||
|
@ -102,12 +102,12 @@ ENTRY(cpu_throw)
|
||||
msr tpidr_el0, x6
|
||||
ldr x6, [x4, #PCB_TPIDRRO]
|
||||
msr tpidrro_el0, x6
|
||||
ldp x19, x20, [x4, #PCB_REGS + 19 * 8]
|
||||
ldp x21, x22, [x4, #PCB_REGS + 21 * 8]
|
||||
ldp x23, x24, [x4, #PCB_REGS + 23 * 8]
|
||||
ldp x25, x26, [x4, #PCB_REGS + 25 * 8]
|
||||
ldp x27, x28, [x4, #PCB_REGS + 27 * 8]
|
||||
ldp x29, lr, [x4, #PCB_REGS + 29 * 8]
|
||||
ldp x19, x20, [x4, #PCB_REGS + (PCB_X19 + 0) * 8]
|
||||
ldp x21, x22, [x4, #PCB_REGS + (PCB_X19 + 2) * 8]
|
||||
ldp x23, x24, [x4, #PCB_REGS + (PCB_X19 + 4) * 8]
|
||||
ldp x25, x26, [x4, #PCB_REGS + (PCB_X19 + 6) * 8]
|
||||
ldp x27, x28, [x4, #PCB_REGS + (PCB_X19 + 8) * 8]
|
||||
ldp x29, lr, [x4, #PCB_REGS + (PCB_X19 + 10) * 8]
|
||||
|
||||
ret
|
||||
END(cpu_throw)
|
||||
@ -127,12 +127,12 @@ ENTRY(cpu_switch)
|
||||
ldr x4, [x0, #TD_PCB]
|
||||
|
||||
/* Store the callee-saved registers */
|
||||
stp x19, x20, [x4, #PCB_REGS + 19 * 8]
|
||||
stp x21, x22, [x4, #PCB_REGS + 21 * 8]
|
||||
stp x23, x24, [x4, #PCB_REGS + 23 * 8]
|
||||
stp x25, x26, [x4, #PCB_REGS + 25 * 8]
|
||||
stp x27, x28, [x4, #PCB_REGS + 27 * 8]
|
||||
stp x29, lr, [x4, #PCB_REGS + 29 * 8]
|
||||
stp x19, x20, [x4, #PCB_REGS + (PCB_X19 + 0) * 8]
|
||||
stp x21, x22, [x4, #PCB_REGS + (PCB_X19 + 2) * 8]
|
||||
stp x23, x24, [x4, #PCB_REGS + (PCB_X19 + 4) * 8]
|
||||
stp x25, x26, [x4, #PCB_REGS + (PCB_X19 + 6) * 8]
|
||||
stp x27, x28, [x4, #PCB_REGS + (PCB_X19 + 8) * 8]
|
||||
stp x29, lr, [x4, #PCB_REGS + (PCB_X19 + 10) * 8]
|
||||
/* And the old stack pointer */
|
||||
mov x5, sp
|
||||
mrs x6, tpidrro_el0
|
||||
@ -196,12 +196,12 @@ ENTRY(cpu_switch)
|
||||
msr tpidr_el0, x6
|
||||
ldr x6, [x4, #PCB_TPIDRRO]
|
||||
msr tpidrro_el0, x6
|
||||
ldp x19, x20, [x4, #PCB_REGS + 19 * 8]
|
||||
ldp x21, x22, [x4, #PCB_REGS + 21 * 8]
|
||||
ldp x23, x24, [x4, #PCB_REGS + 23 * 8]
|
||||
ldp x25, x26, [x4, #PCB_REGS + 25 * 8]
|
||||
ldp x27, x28, [x4, #PCB_REGS + 27 * 8]
|
||||
ldp x29, lr, [x4, #PCB_REGS + 29 * 8]
|
||||
ldp x19, x20, [x4, #PCB_REGS + (PCB_X19 + 0) * 8]
|
||||
ldp x21, x22, [x4, #PCB_REGS + (PCB_X19 + 2) * 8]
|
||||
ldp x23, x24, [x4, #PCB_REGS + (PCB_X19 + 4) * 8]
|
||||
ldp x25, x26, [x4, #PCB_REGS + (PCB_X19 + 6) * 8]
|
||||
ldp x27, x28, [x4, #PCB_REGS + (PCB_X19 + 8) * 8]
|
||||
ldp x29, lr, [x4, #PCB_REGS + (PCB_X19 + 10) * 8]
|
||||
|
||||
str xzr, [x4, #PCB_REGS + 18 * 8]
|
||||
ret
|
||||
@ -258,12 +258,12 @@ END(fork_trampoline)
|
||||
|
||||
ENTRY(savectx)
|
||||
/* Store the callee-saved registers */
|
||||
stp x19, x20, [x0, #PCB_REGS + 19 * 8]
|
||||
stp x21, x22, [x0, #PCB_REGS + 21 * 8]
|
||||
stp x23, x24, [x0, #PCB_REGS + 23 * 8]
|
||||
stp x25, x26, [x0, #PCB_REGS + 25 * 8]
|
||||
stp x27, x28, [x0, #PCB_REGS + 27 * 8]
|
||||
stp x29, lr, [x0, #PCB_REGS + 29 * 8]
|
||||
stp x19, x20, [x0, #PCB_REGS + (PCB_X19 + 0) * 8]
|
||||
stp x21, x22, [x0, #PCB_REGS + (PCB_X19 + 2) * 8]
|
||||
stp x23, x24, [x0, #PCB_REGS + (PCB_X19 + 4) * 8]
|
||||
stp x25, x26, [x0, #PCB_REGS + (PCB_X19 + 6) * 8]
|
||||
stp x27, x28, [x0, #PCB_REGS + (PCB_X19 + 8) * 8]
|
||||
stp x29, lr, [x0, #PCB_REGS + (PCB_X19 + 10) * 8]
|
||||
/* And the old stack pointer */
|
||||
mov x5, sp
|
||||
mrs x6, tpidrro_el0
|
||||
|
Loading…
Reference in New Issue
Block a user