[PATCH 2/2] ARM: include: asm: use 'int' instead of 'unsigned long' for normal register variables within atomic.h

Will Deacon will.deacon at arm.com
Tue Oct 8 06:33:31 EDT 2013


On Sat, Oct 05, 2013 at 12:55:18AM +0100, Chen Gang wrote:
> On 10/04/2013 11:42 PM, Will Deacon wrote:
> > On Fri, Oct 04, 2013 at 04:37:42PM +0100, Will Deacon wrote:
> >> On Fri, Oct 04, 2013 at 10:51:56AM +0100, Chen Gang wrote:
> >>> On 10/04/2013 12:32 AM, Will Deacon wrote:
> >>>> The problem with arm64 is that we're using *unsigned long* for 32-bit
> >>>> clear_mask, which is definitely wrong because it's 64-bit (another patch to
> >>>> fix this!).
> >>>>
> >>>
> >>> At least, that is not a bug.
> >>
> >> Sure it is. What if the adjacent 32-bit value was being accessed by another
> >> CPU under a spinlock?
> > 
> > (Oh, ok, that would still work on arm because of the way the exclusive
> > monitor is implemented, but we shouldn't rely on that).
> >
> 
> Hmm... in my opinion, we need divide atomic_*_mask() into 32-bit and
> 64-bit versions. We already have demands to only use 32-bit value to
> express mask (can save size), and may have demands to use 64-bit too.

Right, but isn't this code only used by that s390 SCSI driver? Why do other
architectures even need to bother implementing it?

> And also, excuse me, I am not quite familiar with "exclusive monitor",
> could you please provide more details about it?

You'll need to take a look at the ARM ARM, in particular the section about
`Synchronisation and Semaphores'.

Will



More information about the linux-arm-kernel mailing list