tools/kvm_stat: fix debugfs handling
Te checks for debugfs assumed that debugfs is always mounted at /sys/kernel/debug - which is likely, but not guaranteed. This is addressed by checking /proc/mounts for the actual location. Furthermore, when debugfs was mounted, but the kvm module not loaded, a misleading error pointing towards debugfs not present was given. To reproduce, (a) run kvm_stat with debugfs mounted at a place different from /sys/kernel/debug (b) run kvm_stat with debugfs mounted but kvm module not loaded Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
1cd8bfb1ed
commit
1fd6a708c8
1 changed files with 26 additions and 14 deletions
|
@ -331,9 +331,6 @@ class perf_event_attr(ctypes.Structure):
|
||||||
PERF_TYPE_TRACEPOINT = 2
|
PERF_TYPE_TRACEPOINT = 2
|
||||||
PERF_FORMAT_GROUP = 1 << 3
|
PERF_FORMAT_GROUP = 1 << 3
|
||||||
|
|
||||||
PATH_DEBUGFS_TRACING = '/sys/kernel/debug/tracing'
|
|
||||||
PATH_DEBUGFS_KVM = '/sys/kernel/debug/kvm'
|
|
||||||
|
|
||||||
|
|
||||||
class Group(object):
|
class Group(object):
|
||||||
"""Represents a perf event group."""
|
"""Represents a perf event group."""
|
||||||
|
@ -1544,17 +1541,6 @@ Press any other key to refresh statistics immediately.
|
||||||
|
|
||||||
def check_access(options):
|
def check_access(options):
|
||||||
"""Exits if the current user can't access all needed directories."""
|
"""Exits if the current user can't access all needed directories."""
|
||||||
if not os.path.exists('/sys/kernel/debug'):
|
|
||||||
sys.stderr.write('Please enable CONFIG_DEBUG_FS in your kernel.')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if not os.path.exists(PATH_DEBUGFS_KVM):
|
|
||||||
sys.stderr.write("Please make sure, that debugfs is mounted and "
|
|
||||||
"readable by the current user:\n"
|
|
||||||
"('mount -t debugfs debugfs /sys/kernel/debug')\n"
|
|
||||||
"Also ensure, that the kvm modules are loaded.\n")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if not os.path.exists(PATH_DEBUGFS_TRACING) and (options.tracepoints or
|
if not os.path.exists(PATH_DEBUGFS_TRACING) and (options.tracepoints or
|
||||||
not options.debugfs):
|
not options.debugfs):
|
||||||
sys.stderr.write("Please enable CONFIG_TRACING in your kernel "
|
sys.stderr.write("Please enable CONFIG_TRACING in your kernel "
|
||||||
|
@ -1572,7 +1558,33 @@ def check_access(options):
|
||||||
return options
|
return options
|
||||||
|
|
||||||
|
|
||||||
|
def assign_globals():
|
||||||
|
global PATH_DEBUGFS_KVM
|
||||||
|
global PATH_DEBUGFS_TRACING
|
||||||
|
|
||||||
|
debugfs = ''
|
||||||
|
for line in file('/proc/mounts'):
|
||||||
|
if line.split(' ')[0] == 'debugfs':
|
||||||
|
debugfs = line.split(' ')[1]
|
||||||
|
break
|
||||||
|
if debugfs == '':
|
||||||
|
sys.stderr.write("Please make sure that CONFIG_DEBUG_FS is enabled in "
|
||||||
|
"your kernel, mounted and\nreadable by the current "
|
||||||
|
"user:\n"
|
||||||
|
"('mount -t debugfs debugfs /sys/kernel/debug')\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
PATH_DEBUGFS_KVM = os.path.join(debugfs, 'kvm')
|
||||||
|
PATH_DEBUGFS_TRACING = os.path.join(debugfs, 'tracing')
|
||||||
|
|
||||||
|
if not os.path.exists(PATH_DEBUGFS_KVM):
|
||||||
|
sys.stderr.write("Please make sure that CONFIG_KVM is enabled in "
|
||||||
|
"your kernel and that the modules are loaded.\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
assign_globals()
|
||||||
options = get_options()
|
options = get_options()
|
||||||
options = check_access(options)
|
options = check_access(options)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue