[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/4] xen/spinlocks: in debug builds store cpu holding the lock
On 07.08.2019 16:31, Juergen Gross wrote: > --- a/xen/common/spinlock.c > +++ b/xen/common/spinlock.c > @@ -13,9 +13,9 @@ > > static atomic_t spin_debug __read_mostly = ATOMIC_INIT(0); > > -static void check_lock(struct lock_debug *debug) > +static void check_lock(union lock_debug *debug) > { > - int irq_safe = !local_irq_is_enabled(); > + unsigned short irq_safe = !local_irq_is_enabled(); bool? Seeing your heavy use of "unsigned short" I realize that my CodingStyle change committed yesterday still wasn't precise enough. > @@ -43,18 +43,21 @@ static void check_lock(struct lock_debug *debug) > */ > if ( unlikely(debug->irq_safe != irq_safe) ) > { > - int seen = cmpxchg(&debug->irq_safe, -1, irq_safe); > + union lock_debug seen, new = { 0 }; > > - if ( seen == !irq_safe ) > + new.irq_safe = irq_safe; > + seen.val = cmpxchg(&debug->val, 0xffff, new.val); This 0xffff should be connected (by way of at least a #define) to the one used in _LOCK_DEBUG. > + if ( !seen.unused && seen.irq_safe == !irq_safe ) While "unused" makes sufficient sense here, ... > --- a/xen/include/xen/spinlock.h > +++ b/xen/include/xen/spinlock.h > @@ -7,14 +7,20 @@ > #include <xen/percpu.h> > > #ifndef NDEBUG > -struct lock_debug { > - s16 irq_safe; /* +1: IRQ-safe; 0: not IRQ-safe; -1: don't know yet */ > +union lock_debug { > + unsigned short val; > + struct { > + unsigned short unused:1; ... it gives a rather misleading impression of this being an unused field here. How about e.g. "unseen" instead? > + unsigned short irq_safe:1; > + unsigned short pad:2; > + unsigned short cpu:12; > + }; > }; Do we have an implied assumption somewhere that unsigned short is exactly 16 bits wide? I think "val" wants to be uint16_t here (as you really mean "exactly 16 bits"), the two boolean fields want to be bool, and the remaining two ones unsigned int. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |