Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757394AbbFQB0M (ORCPT ); Tue, 16 Jun 2015 21:26:12 -0400 Received: from e23smtp08.au.ibm.com ([202.81.31.141]:42806 "EHLO e23smtp08.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755490AbbFQB0D (ORCPT ); Tue, 16 Jun 2015 21:26:03 -0400 X-Helo: d23dlp02.au.ibm.com X-MailFrom: hemant@linux.vnet.ibm.com X-RcptTo: linux-kernel@vger.kernel.org Message-ID: <5580CC69.2090200@linux.vnet.ibm.com> Date: Wed, 17 Jun 2015 06:54:57 +0530 From: Hemant Kumar User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: David Ahern , linuxppc-dev@lists.ozlabs.org CC: linux-kernel@vger.kernel.org, kvm-ppc@vger.kernel.org, acme@kernel.org, mingo@kernel.org, sukadev@linux.vnet.ibm.com, maddy@linux.vnet.ibm.com, srikar@linux.vnet.ibm.com, paulus@samba.org, namhyung@kernel.org, jolsa@kernel.org, peterz@infradead.org Subject: Re: [RFC PATCH] perf/kvm: Guest Symbol Resolution for powerpc References: <1434423053-2173-1-git-send-email-hemant@linux.vnet.ibm.com> <55803883.50504@gmail.com> In-Reply-To: <55803883.50504@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15061701-0029-0000-0000-000001B4ABDC Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2655 Lines: 85 Hi David, Thanks for the review. On 06/16/2015 08:23 PM, David Ahern wrote: > On 6/15/15 8:50 PM, Hemant Kumar wrote: >> +/* >> + * Get the instruction pointer from the tracepoint data >> + */ >> +u64 arch__get_ip(struct perf_evsel *evsel, struct perf_sample *data) >> +{ >> + u64 tp_ip = data->ip; >> + int trap; >> + >> + if (!strcmp(KVMPPC_EXIT, evsel->name)) { >> + trap = raw_field_value(evsel->tp_format, "trap", >> data->raw_data); >> + >> + if (trap == HV_DECREMENTER) >> + tp_ip = raw_field_value(evsel->tp_format, "pc", >> + data->raw_data); >> + } >> + return tp_ip; >> +} > > You can tie a handler to an event; see builtin-trace.c for example > (evsel->handler = handler). Then have the sample handler call it (e.g, > see trace__process_sample). Then you don't have to check event names > on each pass like this and just do event based processing. > >> + >> +/* >> + * Get the HV and PR bits and accordingly, determine the cpumode >> + */ >> +u8 arch__get_cpumode(union perf_event *event, struct perf_evsel *evsel, >> + struct perf_sample *data) >> +{ >> + unsigned long hv, pr, msr; >> + u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; >> + >> + if (strcmp(KVMPPC_EXIT, evsel->name)) >> + goto ret; >> + >> + if (data->raw_data) >> + msr = raw_field_value(evsel->tp_format, "msr", data->raw_data); >> + else >> + goto ret; >> + >> + hv = msr & ((long unsigned)1 << (PPC_MAX - HV_BIT)); >> + pr = msr & ((long unsigned)1 << (PPC_MAX - PR_BIT)); >> + >> + if (!hv && pr) >> + cpumode = PERF_RECORD_MISC_GUEST_USER; >> + else >> + cpumode = PERF_RECORD_MISC_GUEST_KERNEL; >> +ret: >> + return cpumode; >> +} > > Why isn't that set properly kernel side when the sample is generated? > > Because, this depends on the kernel tracepoint "kvm_hv:kvm_guest_exit". perf_prepare_sample() in the kernel side sets the event->header.misc field to PERF_RECORD_MISC_KERNEL through perf_misc_flags(pt_regs). In case of tracepoints which always get hit in the host kernel context, the perf_misc_flags() will always return PERF_RECORD_MISC_KERNEL. IMHO we will rather have to set the cpumode in the user space for this tracepoint and we can't depend on the event->header.misc field for this case. What would you suggest? -- Thanks, Hemant Kumar -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/