Convert the 'lock_profile' option to Kconfig as CONFIG_LOCK_PROFILE.
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Julien Grall <julien.grall@arm.com>
The following variables can be used to tweak some aspects of the
hypervisor build.
-lock_profile=y
lto=y
During tools build external repos will be cloned into the source tree.
maybe slower, but it gives very useful debugging information
in case of any Xen bugs.
+config LOCK_PROFILE
+ bool "Lock Profiling"
+ ---help---
+ Lock profiling allows you to see how often locks are taken and blocked.
+ You can use serial console to print (and reset) using 'l' and 'L'
+ respectively, or the 'xenlockprof' tool.
+
config PERF_COUNTERS
bool "Performance Counters"
---help---
# If you change any of these configuration options then you must
# 'make clean' before rebuilding.
#
-lock_profile ?= n
lto ?= n
-include $(BASEDIR)/include/config/auto.conf
ifneq ($(origin kexec),undefined)
$(error "You must use 'make menuconfig' to enable/disable kexec now.")
endif
+ifneq ($(origin lock_profile),undefined)
+$(error "You must use 'make menuconfig' to enable/disable lock_profile now.")
+endif
ifneq ($(origin perfc),undefined)
$(error "You must use 'make menuconfig' to enable/disable perfc now.")
endif
CFLAGS += -Wa,--strip-local-absolute
endif
-CFLAGS-$(lock_profile) += -DLOCK_PROFILE
CFLAGS-$(CONFIG_FRAME_POINTER) += -fno-omit-frame-pointer
ifneq ($(max_phys_irqs),)
*(.rodata)
*(.rodata.*)
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
. = ALIGN(POINTER_ALIGN);
__lock_profile_start = .;
*(.lockprofile.data)
#endif
-#ifndef LOCK_PROFILE
+#ifndef CONFIG_LOCK_PROFILE
BUILD_BUG_ON(sizeof(*d) > PAGE_SIZE);
#endif
d = alloc_xenheap_pages(order, MEMF_bits(bits));
*(.ex_table.pre)
__stop___pre_ex_table = .;
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
. = ALIGN(POINTER_ALIGN);
__lock_profile_start = .;
*(.lockprofile.data)
KEYHANDLER('P', perfc_reset, "reset performance counters", 0),
#endif
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
KEYHANDLER('l', spinlock_profile_printall, "print lock profile info", 1),
KEYHANDLER('L', spinlock_profile_reset, "reset lock profile info", 0),
#endif
#endif
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
#define LOCK_PROFILE_REL \
if (lock->profile) \
if ( cmpxchg(&lock->tickets.head_tail,
old.head_tail, new.head_tail) != old.head_tail )
return 0;
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
if (lock->profile)
lock->profile->time_locked = NOW();
#endif
void _spin_barrier(spinlock_t *lock)
{
spinlock_tickets_t sample;
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
s_time_t block = NOW();
#endif
{
while ( observe_head(&lock->tickets) == sample.head )
arch_lock_relax();
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
if ( lock->profile )
{
lock->profile->time_block += NOW() - block;
}
}
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
struct lock_profile_anc {
struct lock_profile_qhead *head_q; /* first head of this type */
break;
#endif
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
case XEN_SYSCTL_lockprof_op:
ret = spinlock_profile_control(&op->u.lockprof_op);
break;
#define spin_debug_disable() ((void)0)
#endif
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
#include <public/sysctl.h>
u16 recurse_cnt:4;
#define SPINLOCK_MAX_RECURSE 0xfu
struct lock_debug debug;
-#ifdef LOCK_PROFILE
+#ifdef CONFIG_LOCK_PROFILE
struct lock_profile *profile;
#endif
} spinlock_t;