qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v8 22/35] RISC-V: Use atomic_cmpxchg to update P


From: Michael Clark
Subject: Re: [Qemu-devel] [PATCH v8 22/35] RISC-V: Use atomic_cmpxchg to update PLIC bitmaps
Date: Fri, 27 Apr 2018 19:18:43 +1200

On Fri, Apr 27, 2018 at 12:14 PM, Richard Henderson <
address@hidden> wrote:

> On 04/25/2018 01:45 PM, Michael Clark wrote:
> > +    uint32_t old, new;
> > +    do {
> > +        old = atomic_read(&plic->pending[word]);
> > +        new = (old & ~(1 << (irq & 31))) | (-!!pending & (1 << (irq &
> 31)));
> > +    } while (atomic_cmpxchg(&plic->pending[word], old, new) != old);
>
> I prefer
>
>   uint32_t old, new, cmp = atomic_read(...);
>   do {
>     old = cmp;
>     new = ...;
>     cmp = atomic_cmpxchg(...);
>   } while (old != cmp);
>
> to avoid an extra load, should we loop.
>

Thanks. I've revised the code to use this convention.

I've also done so in "Implement atomic mip/sip CSR updates" which has the
same pattern.

That said, what you have is not wrong.  So,
> Reviewed-by: Richard Henderson <address@hidden>
>
>
> r~
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]