|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH ARM v6 09/14] mini-os: arm: scheduling
On Mon, 2014-07-28 at 12:20 +0100, Thomas Leonard wrote:
> On 28 July 2014 11:53, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> > On Wed, 2014-07-16 at 12:07 +0100, Thomas Leonard wrote:
> >> Based on an initial patch by Karim Raslan.
> >>
> >> Signed-off-by: Karim Allah Ahmed <karim.allah.ahmed@xxxxxxxxx>
> >> Signed-off-by: Thomas Leonard <talex5@xxxxxxxxx>
> >> ---
> >> extras/mini-os/arch/arm/arm32.S | 22 ++++++++++++++++++++++
> >> extras/mini-os/arch/arm/sched.c | 38
> >> ++++++++++++++++++++++++++++++++++++++
> >> 2 files changed, 60 insertions(+)
> >> create mode 100644 extras/mini-os/arch/arm/sched.c
> >>
> >> diff --git a/extras/mini-os/arch/arm/arm32.S
> >> b/extras/mini-os/arch/arm/arm32.S
> >> index 88efe24..56429b1 100644
> >> --- a/extras/mini-os/arch/arm/arm32.S
> >> +++ b/extras/mini-os/arch/arm/arm32.S
> >> @@ -204,8 +204,30 @@ irq_handler:
> >> IRQ_handler:
> >> .long 0x0
> >>
> >> +
> >> +.globl __arch_switch_threads
> >> +@ => r0 = &prev->sp
> >> +@ r1 = &next->sp
> >> +@ <= returns to next thread's saved return address
> >> +__arch_switch_threads:
> >> + stmia r0, {sp, lr} @ Store current sp and ip to prev's struct
> >> thread
> >> + str fp, [sp, #-4] @ Store fp on the old stack
> >> +
> >> + ldmia r1, {sp, lr} @ Load new sp, ip from next's struct thread
> >> + ldr fp, [sp, #-4] @ Restore fp from the stack
> >> +
> >> + mov pc, lr
> >
> > I'm a bit confused by the lack of saving of the GPRs here. Shouldn't at
> > least the caller saved registers (r4..r11) be saved/restored here?
>
> If they were caller saved then sched.c would save them itself before
> calling switch_threads. But the AAPCS says:
>
> "A subroutine must preserve the contents of the registers r4-r8, r10,
> r11 and SP (and r9 in PCS variants that designate r9 as v6)."
>
> So I think these are callee-saved and we should save them here.
I had a typo in my register/AAPCS cheatsheet but not in my head, so I
was kind of right for the wrong reason ;-). r4..r11 are indeed *callee*
saved.
Normally on ctxt switch you would save and restore everything to prevent
information leaks but since mini-os processes^Wthreads are mutually
trusting it doesn't seem entirely necessary here (but it does save
remembering which registers are which ;-)).
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |