[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCHv4 2/5] arm: provide add_sized()
>>> On 11.05.15 at 16:45, <david.vrabel@xxxxxxxxxx> wrote: > On 11/05/15 15:37, David Vrabel wrote: >> add_sized(ptr, inc) adds inc to the value at ptr using only the correct >> size of loads and stores for the type of *ptr. The add is /not/ atomic. >> >> This is needed for ticket locks to ensure the increment of the head ticket >> does not affect the tail ticket. > [...] >> >> +#define add_sized(p, x) ({ \ >> + typeof(*p) __x = (x); \ >> + switch ( sizeof(*p) ) \ >> + { \ >> + case 1: add_u8_sized((uint8_t *)p, (uint8_t)__x); break; \ >> + case 2: add_u16_sized((uint16_t *)p, (uint16_t)__x); break; \ >> + case 4: add_u32_sized((uint32_t *)p, (uint32_t)__x); break; \ >> + default: __bad_atomic_size(); break; \ >> + } \ >> + __x; \ > > I should have cleaned up this arm implementation in the same way I did > x86. Please drop this "__x;" before committing, or I can resubmit if it > is preferred. No problem. But I suppose the casts on __x inside the individual case statements aren't needed either. Also it looks a little odd that x86 handles 8-byte operands here, but ARM (and namely ARM64) doesn't. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |