diff options
Diffstat (limited to 'kernel/locking/lock_events.c')
-rw-r--r-- | kernel/locking/lock_events.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/kernel/locking/lock_events.c b/kernel/locking/lock_events.c index 71c36d1fb834..fa2c2f951c6b 100644 --- a/kernel/locking/lock_events.c +++ b/kernel/locking/lock_events.c | |||
@@ -115,6 +115,29 @@ static const struct file_operations fops_lockevent = { | |||
115 | .llseek = default_llseek, | 115 | .llseek = default_llseek, |
116 | }; | 116 | }; |
117 | 117 | ||
118 | #ifdef CONFIG_PARAVIRT_SPINLOCKS | ||
119 | #include <asm/paravirt.h> | ||
120 | |||
121 | static bool __init skip_lockevent(const char *name) | ||
122 | { | ||
123 | static int pv_on __initdata = -1; | ||
124 | |||
125 | if (pv_on < 0) | ||
126 | pv_on = !pv_is_native_spin_unlock(); | ||
127 | /* | ||
128 | * Skip PV qspinlock events on bare metal. | ||
129 | */ | ||
130 | if (!pv_on && !memcmp(name, "pv_", 3)) | ||
131 | return true; | ||
132 | return false; | ||
133 | } | ||
134 | #else | ||
135 | static inline bool skip_lockevent(const char *name) | ||
136 | { | ||
137 | return false; | ||
138 | } | ||
139 | #endif | ||
140 | |||
118 | /* | 141 | /* |
119 | * Initialize debugfs for the locking event counts. | 142 | * Initialize debugfs for the locking event counts. |
120 | */ | 143 | */ |
@@ -133,10 +156,13 @@ static int __init init_lockevent_counts(void) | |||
133 | * root is allowed to do the read/write to limit impact to system | 156 | * root is allowed to do the read/write to limit impact to system |
134 | * performance. | 157 | * performance. |
135 | */ | 158 | */ |
136 | for (i = 0; i < lockevent_num; i++) | 159 | for (i = 0; i < lockevent_num; i++) { |
160 | if (skip_lockevent(lockevent_names[i])) | ||
161 | continue; | ||
137 | if (!debugfs_create_file(lockevent_names[i], 0400, d_counts, | 162 | if (!debugfs_create_file(lockevent_names[i], 0400, d_counts, |
138 | (void *)(long)i, &fops_lockevent)) | 163 | (void *)(long)i, &fops_lockevent)) |
139 | goto fail_undo; | 164 | goto fail_undo; |
165 | } | ||
140 | 166 | ||
141 | if (!debugfs_create_file(lockevent_names[LOCKEVENT_reset_cnts], 0200, | 167 | if (!debugfs_create_file(lockevent_names[LOCKEVENT_reset_cnts], 0200, |
142 | d_counts, (void *)(long)LOCKEVENT_reset_cnts, | 168 | d_counts, (void *)(long)LOCKEVENT_reset_cnts, |