[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 13/19] kvm_stat: Print errno when syscall to perf_eve
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 13/19] kvm_stat: Print errno when syscall to perf_event_open() fails |
Date: |
Mon, 26 Jan 2015 10:24:24 +0100 |
From: Wei Huang <address@hidden>
kvm_stat uses syscall() to call perf_event_open(). If this function
call fails, the returned value is -1, which doesn't tell the details
of such failure (i.e. ENOSYS or EINVAL). This patch retrieves errno
and prints it when syscall() fails. The error message will look like
"Exception: perf_event_open failed, errno = 38".
Signed-off-by: Wei Huang <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
scripts/kvm/kvm_stat | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 95c650b..8f6f007 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -13,6 +13,7 @@
import curses
import sys, os, time, optparse, ctypes
+from ctypes import *
class DebugfsProvider(object):
def __init__(self):
@@ -247,6 +248,9 @@ import struct, array
libc = ctypes.CDLL('libc.so.6')
syscall = libc.syscall
+get_errno = libc.__errno_location
+get_errno.restype = POINTER(c_int)
+
class perf_event_attr(ctypes.Structure):
_fields_ = [('type', ctypes.c_uint32),
('size', ctypes.c_uint32),
@@ -330,7 +334,8 @@ class Event(object):
group_leader = group.events[0].fd
fd = _perf_event_open(attr, -1, group.cpu, group_leader, 0)
if fd == -1:
- raise Exception('perf_event_open failed')
+ err = get_errno()[0]
+ raise Exception('perf_event_open failed, errno = ' + err.__str__())
if filter:
import fcntl
fcntl.ioctl(fd, ioctl_numbers['SET_FILTER'], filter)
--
1.8.3.1
- [Qemu-devel] [PULL 02/19] tests/multiboot: Update reference output, (continued)
- [Qemu-devel] [PULL 02/19] tests/multiboot: Update reference output, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 11/19] kvm_stat: Add aarch64 support, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 14/19] apic: do not dereference pointer before it is checked for NULL, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 10/19] hw: misc, add educational driver, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 15/19] .travis.yml: Add "--enable-modules", Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 08/19] qemu-timer: introduce timer_deinit, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 17/19] sparse: Fix build with sparse on .S files, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 19/19] kvm_stat: Add RESET support for perf event ioctl, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 12/19] kvm_stat: Update exit reasons to the latest defintion, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 16/19] exec: fix madvise of NULL pointer, Paolo Bonzini, 2015/01/26
- [Qemu-devel] [PULL 13/19] kvm_stat: Print errno when syscall to perf_event_open() fails,
Paolo Bonzini <=
- [Qemu-devel] [PULL 18/19] target-i386: Disable HLE and RTM on Haswell & Broadwell, Paolo Bonzini, 2015/01/26
- Re: [Qemu-devel] [PULL 00/19] i386, KVM, misc changes for 2015-01-26, Peter Maydell, 2015/01/26