[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 1/5] xen/ppc: Implement atomic.h
On 09.09.2023 00:50, Shawn Anastasio wrote: > Implement atomic.h for PPC, based off of the original Xen 3.2 > implementation. This implementation depends on some functions that are > not yet defined (notably __cmpxchg), so it can't yet be used. > > Signed-off-by: Shawn Anastasio <sanastasio@xxxxxxxxxxxxxxxxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> Just one remaining question: > +static always_inline void read_atomic_size(const volatile void *p, void *res, > + unsigned int size) > +{ > + ASSERT(IS_ALIGNED((vaddr_t)p, size)); > + switch ( size ) > + { > + case 1: > + *(uint8_t *)res = read_u8_atomic(p); > + break; > + case 2: > + *(uint16_t *)res = read_u16_atomic(p); > + break; > + case 4: > + *(uint32_t *)res = read_u32_atomic(p); > + break; > + case 8: > + *(uint64_t *)res = read_u64_atomic(p); > + break; > + default: > + __bad_atomic_read(p, res); > + break; > + } > +} > + > +static always_inline void write_atomic_size(volatile void *p, const void > *val, > + unsigned int size) > +{ > + ASSERT(IS_ALIGNED((vaddr_t)p, size)); > + switch ( size ) > + { > + case 1: > + write_u8_atomic(p, *(const uint8_t *)val); > + break; > + case 2: > + write_u16_atomic(p, *(const uint16_t *)val); > + break; > + case 4: > + write_u32_atomic(p, *(const uint32_t *)val); > + break; > + case 8: > + write_u64_atomic(p, *(const uint64_t *)val); > + break; > + default: > + __bad_atomic_size(); > + break; > + } > +} These two functions being as similar as is possible, ... > +#define read_atomic(p) > \ > + ({ > \ > + union { > \ > + typeof(*(p)) val; > \ > + char c[sizeof(*(p))]; > \ > + } x_; > \ > + read_atomic_size(p, x_.c, sizeof(*(p))); > \ > + x_.val; > \ > + }) ... is there a reason you keep using a union here ... > +#define write_atomic(p, x) > \ > + do > \ > + { > \ > + typeof(*(p)) x_ = (x); > \ > + write_atomic_size(p, &x_, sizeof(*(p))); > \ > + } while ( 0 ) ... while you did away with its use here? Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |