]> xenbits.xensource.com Git - xen.git/commitdiff
xen/spinlock: use correct pointer
authorStewart Hildebrand <stewart.hildebrand@amd.com>
Fri, 26 Apr 2024 10:43:24 +0000 (12:43 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 26 Apr 2024 10:43:24 +0000 (12:43 +0200)
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>
xen/common/spinlock.c

index 558ea7ac351839930618ba17f1f239c96509f28c..28c6e9d3ac6089d69060fe34fb34e66e5fd6f548 100644 (file)
@@ -789,7 +789,11 @@ static int __init cf_check lock_prof_init(void)
     {
         (*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,