|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: arm: clear the exclusive monitor on exception return
On Wed, 2013-07-17 at 20:48 +0100, Tim Deegan wrote:
> At 12:18 +0100 on 17 Jul (1374063531), Ian Campbell wrote:
> > Otherwise context switching between two vcpus which are contending the same
> > lock can result in a spurious success.
>
> Shouldn't this go in ctxt_swicth_to(), then? I think any use that Xen
> itself makes of the monitor should end with it cleared.
Our atomic read/set which we stole^Winherited from Linux relies on this
behaviour (interlocking with atomic_add_and_blah stuff).
/*
* On ARM, ordinary assignment (str instruction) doesn't clear the local
* strex/ldrex monitor on some implementations. The reason we can use
it for
* atomic_set() is the clrex or dummy strex done on every exception
return.
*/
As well as atomics our spin unlock (also inherited) is just a plain
store.
If nothing else it makes v7 and v8 consistent since the clrex is
implicit in the eret on v8.
>
> Tim.
>
> > This is not required on ARMv8 since eret implicitly clears the monitor.
> >
> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> > ---
> > xen/arch/arm/arm32/entry.S | 1 +
> > 1 files changed, 1 insertions(+), 0 deletions(-)
> >
> > diff --git a/xen/arch/arm/arm32/entry.S b/xen/arch/arm/arm32/entry.S
> > index 76814dd..1c26835 100644
> > --- a/xen/arch/arm/arm32/entry.S
> > +++ b/xen/arch/arm/arm32/entry.S
> > @@ -117,6 +117,7 @@ ENTRY(return_to_hypervisor)
> > msr SPSR_hyp, r11
> > pop {r0-r12}
> > add sp, #(UREGS_SP_usr - UREGS_sp); /* SP, LR, SPSR, PC */
> > + clrex
> > eret
> >
> > /*
> > --
> > 1.7.2.5
> >
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@xxxxxxxxxxxxx
> > http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |