[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v8 02/17] xen: introduce generic non-atomic test_*bit()
On 17.04.2024 12:04, Oleksii Kurochko wrote: > --- a/xen/arch/ppc/include/asm/page.h > +++ b/xen/arch/ppc/include/asm/page.h > @@ -4,7 +4,7 @@ > > #include <xen/types.h> > > -#include <asm/bitops.h> > +#include <xen/bitops.h> > #include <asm/byteorder.h> This wants to move up into the xen/*.h group then, like you have done ... > --- a/xen/arch/ppc/mm-radix.c > +++ b/xen/arch/ppc/mm-radix.c > @@ -1,11 +1,11 @@ > /* SPDX-License-Identifier: GPL-2.0-or-later */ > +#include <xen/bitops.h> > #include <xen/init.h> > #include <xen/kernel.h> > #include <xen/mm.h> > #include <xen/types.h> > #include <xen/lib.h> > > -#include <asm/bitops.h> > #include <asm/byteorder.h> > #include <asm/early_printk.h> > #include <asm/page.h> .. e.g. here. > --- a/xen/include/xen/bitops.h > +++ b/xen/include/xen/bitops.h > @@ -65,10 +65,137 @@ static inline int generic_flsl(unsigned long x) > * scope > */ > > +#define BITOP_MASK(nr) ((bitop_uint_t)1 << ((nr) % BITOP_BITS_PER_WORD)) > + > +#define BITOP_WORD(nr) ((nr) / BITOP_BITS_PER_WORD) > + > /* --------------------- Please tidy above here --------------------- */ > > #include <asm/bitops.h> > > +#ifndef arch_check_bitop_size > +#define arch_check_bitop_size(addr) Can this really do nothing? Passing the address of an object smaller than bitop_uint_t will read past the object in the generic__*_bit() functions. > +#endif > + > +/** > + * generic__test_and_set_bit - Set a bit and return its old value > + * @nr: Bit to set > + * @addr: Address to count from > + * > + * This operation is non-atomic and can be reordered. > + * If two examples of this operation race, one can appear to succeed > + * but actually fail. You must protect multiple accesses with a lock. > + */ > +static always_inline bool > +generic__test_and_set_bit(unsigned long nr, volatile void *addr) > +{ > + bitop_uint_t mask = BITOP_MASK(nr); > + volatile bitop_uint_t *p = ((volatile bitop_uint_t *)addr) + > BITOP_WORD(nr); The revision log suggests excess parentheses were dropped from such cast expressions. > --- a/xen/include/xen/types.h > +++ b/xen/include/xen/types.h > @@ -64,6 +64,11 @@ typedef __u64 __be64; > > typedef unsigned int __attribute__((__mode__(__pointer__))) uintptr_t; > > +#ifndef BITOP_TYPE > + #define BITOP_BITS_PER_WORD 32 > + typedef uint32_t bitop_uint_t; Personally I find this indentation odd / misleading. For pre-processor directives the # preferrably remains first on a line (as was iirc demanded by earlier C standards), followed by one or more blanks if so desired. File-scope declarations imo should never be indented. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |