The ->profile member is at different offsets in struct rspinlock and
struct spinlock. When initializing the profiling bits of an rspinlock,
an unrelated member in struct rspinlock was being overwritten, leading
to mild havoc. Use the correct pointer.
Fixes: b053075d1a7b ("xen/spinlock: make struct lock_profile rspinlock_t aware")
Signed-off-by: Stewart Hildebrand <stewart.hildebrand@amd.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
{
(*q)->next = lock_profile_glb_q.elem_q;
lock_profile_glb_q.elem_q = *q;
- (*q)->ptr.lock->profile = *q;
+
+ if ( (*q)->is_rlock )
+ (*q)->ptr.rlock->profile = *q;
+ else
+ (*q)->ptr.lock->profile = *q;
}
_lock_profile_register_struct(LOCKPROF_TYPE_GLOBAL,