Mailing List Archive

[xen staging] lockprof: don't leave locks uninitialized upon allocation failure
commit 82cba984b2e37496360ef2bf22e529a53c084631
Author: Jan Beulich <jbeulich@suse.com>
AuthorDate: Fri Jul 24 10:18:30 2020 +0200
Commit: Jan Beulich <jbeulich@suse.com>
CommitDate: Fri Jul 24 10:18:30 2020 +0200

lockprof: don't leave locks uninitialized upon allocation failure

Even if a specific struct lock_profile instance can't be allocated, the
lock itself should still be functional. As this isn't a production use
feature, also log a message in the event that the profiling struct can't
be allocated.

Fixes: d98feda5c756 ("Make lock profiling usable again")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
xen/include/xen/spinlock.h | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/xen/include/xen/spinlock.h b/xen/include/xen/spinlock.h
index 468b9ac9ef..c0e7690a6c 100644
--- a/xen/include/xen/spinlock.h
+++ b/xen/include/xen/spinlock.h
@@ -103,10 +103,16 @@ struct lock_profile_qhead {
do { \
struct lock_profile *prof; \
prof = xzalloc(struct lock_profile); \
- if (!prof) break; \
+ (s)->l = (spinlock_t)_SPIN_LOCK_UNLOCKED(prof); \
+ if ( !prof ) \
+ { \
+ printk(XENLOG_WARNING \
+ "lock profiling unavailable for %p(%d)'s %s\n", \
+ s, (s)->profile_head.idx, #l); \
+ break; \
+ } \
prof->name = #l; \
prof->lock = &(s)->l; \
- (s)->l = (spinlock_t)_SPIN_LOCK_UNLOCKED(prof); \
prof->next = (s)->profile_head.elem_q; \
(s)->profile_head.elem_q = prof; \
} while(0)
--
generated by git-patchbot for /home/xen/git/xen.git#staging