From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60206) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHCWk-0000N2-DJ for qemu-devel@nongnu.org; Thu, 07 Jan 2016 10:31:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aHCWf-0000TB-4f for qemu-devel@nongnu.org; Thu, 07 Jan 2016 10:31:02 -0500 Received: from mail-wm0-x233.google.com ([2a00:1450:400c:c09::233]:33486) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHCWe-0000T6-UF for qemu-devel@nongnu.org; Thu, 07 Jan 2016 10:30:57 -0500 Received: by mail-wm0-x233.google.com with SMTP id f206so102287714wmf.0 for ; Thu, 07 Jan 2016 07:30:56 -0800 (PST) Sender: Paolo Bonzini References: <1449749584-23214-1-git-send-email-frankja@linux.vnet.ibm.com> <1449749584-23214-26-git-send-email-frankja@linux.vnet.ibm.com> From: Paolo Bonzini Message-ID: <568E84AE.1050607@redhat.com> Date: Thu, 7 Jan 2016 16:30:54 +0100 MIME-Version: 1.0 In-Reply-To: <1449749584-23214-26-git-send-email-frankja@linux.vnet.ibm.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 25/34] scripts/kvm/kvm_stat: Group arch specific data List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Janosch Frank , qemu-devel@nongnu.org Cc: cornelia.huck@de.ibm.com On 10/12/2015 13:12, Janosch Frank wrote: > + self.exit_reasons = None > + self.sc_perf_evt_open = None > + self.ioctl_numbers = { > + 'SET_FILTER': 0x40082406, > + 'ENABLE': 0x00002400, > + 'DISABLE': 0x00002401, > + 'RESET': 0x00002403, > + } > + self.set_arch_data() > > - SC_PERF_EVT_OPEN = 298 > - EXIT_REASONS = X86_EXIT_REASONS[flag] > + def set_arch_data(self): > + machine = os.uname()[4] > > -def s390_init(): > - global SC_PERF_EVT_OPEN > + if machine.startswith('ppc'): > + self.sc_perf_evt_open = 319 > + self.ioctl_numbers['ENABLE'] = 0x20002400 > + self.ioctl_numbers['DISABLE'] = 0x20002401 Please keep the separate foo_init() methods. Even better, change them to __init__ of Arch subclasses, and add a static get_arch() method that instantiates the appropriate subclass. Then get_arch() can be used to initialize ARCH. Paolo > > - SC_PERF_EVT_OPEN = 331 > + # PPC comes in 32 and 64 bit and some generated ioctl > + # numbers depend on the wordsize. > + char_ptr_size = ctypes.sizeof(ctypes.c_char_p) > + self.ioctl_numbers['SET_FILTER'] = 0x80002406 | char_ptr_size << 16 > > -def ppc_init(): > - global SC_PERF_EVT_OPEN > - global IOCTL_NUMBERS > + elif machine.startswith('aarch64'): > + self.sc_perf_evt_open = 241 > + self.exit_reasons = AARCH64_EXIT_REASONS > > - SC_PERF_EVT_OPEN = 319 > + elif machine.startswith('s390'): > + self.sc_perf_evt_open = 331 > > - IOCTL_NUMBERS['ENABLE'] = 0x20002400 > - IOCTL_NUMBERS['DISABLE'] = 0x20002401 > - IOCTL_NUMBERS['SET_FILTER'] = 0x80002406 | (ctypes.sizeof(ctypes.c_char_p) > - << 16) > + else: > + # X86_64 > + for line in open('/proc/cpuinfo'): > + if not line.startswith('flags'): > + continue > > -def aarch64_init(): > - global SC_PERF_EVT_OPEN > - global EXIT_REASONS > + self.sc_perf_evt_open = 298 > > - SC_PERF_EVT_OPEN = 241 > - EXIT_REASONS = AARCH64_EXIT_REASONS > + flags = line.split() > + if 'vmx' in flags: > + self.exit_reasons = VMX_EXIT_REASONS > + if 'svm' in flags: > + self.exit_reasons = SVM_EXIT_REASONS > + return > > -def detect_platform():