From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: Re: [PATCH v12 for-xen-4.5 16/20] x86/VPMU: Handle PMU interrupts for PV guests Date: Wed, 01 Oct 2014 14:06:50 -0400 Message-ID: <542C42BA.4050700@oracle.com> References: <1411673336-32736-1-git-send-email-boris.ostrovsky@oracle.com> <1411673336-32736-17-git-send-email-boris.ostrovsky@oracle.com> <542A81B6020000780003ADD4@mail.emea.novell.com> <542AC71C.6020804@oracle.com> <542AEC00020000780003B224@mail.emea.novell.com> <542ADC57.1070708@oracle.com> <542BC00A020000780003B510@mail.emea.novell.com> <542BF93E.7040505@oracle.com> <542C1B30020000780003B901@mail.emea.novell.com> <542C0AE0.9080203@oracle.com> <542C2B4C020000780003B9C2@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <542C2B4C020000780003B9C2@mail.emea.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: kevin.tian@intel.com, keir@xen.org, suravee.suthikulpanit@amd.com, andrew.cooper3@citrix.com, tim@xen.org, dietmar.hahn@ts.fujitsu.com, xen-devel@lists.xen.org, Aravind.Gopalakrishnan@amd.com, jun.nakajima@intel.com, dgdegra@tycho.nsa.gov List-Id: xen-devel@lists.xenproject.org On 10/01/2014 10:26 AM, Jan Beulich wrote: > >>>>> Looking at the separation of hypervisor vs guest context to report >>>>> again >>>>> >>>>> /* Non-privileged domains are always in XENPMU_MODE_SELF mode */ >>>>> if ( (vpmu_mode & XENPMU_MODE_SELF) || >>>>> (!is_hardware_domain(sampled->domain) && >>>>> !is_idle_vcpu(sampled)) ) >>>>> cur_regs = guest_cpu_user_regs(); >>>>> else >>>>> cur_regs = regs; >>>>> >>>>> I now additionally wonder why the condition here isn't just the SELF >>>>> check: If the interrupt happened while in the hypervisor, why would >>>>> you override this unconditionally to report a guest sample instead? >>>>> Shouldn't the profiling domain tell you what it wants in that case >>>>> (global vs guest local view)? >>>> The second part of the check (!is_hardware_domain(sampled->domain) && >>>> !is_idle_vcpu(sampled)) is to prevent sending hypervisor sample to a >>>> non-privileged guest. vpmu_mode may be, for example, XENPMU_MODE_HV but >>>> that only means that dom0 can get hypervisor samples. >>> Right, but that's not what the code above does: Instead of sending >>> the hypervisor sample to Dom0 it converts it to a guest mode one. >> Oh, I see --- when we get interrupted while in a non-privileged guest's >> context (but in hypervisor) I send guest's registers, not Xen's. >> >> I think just SELF check is not sufficient though, we need to make sure >> that we are not sending hypervisor sample to non-dom0. So >> if ( (vpmu_mode & XENPMU_MODE_SELF) || >> !is_hardware_domain(sampling->domain) ) > Actually I think instead the determination of sampling needs to > depend on the register context rather than solely on the current > domain's ID. Not sure I follow this --- we do need to take domainID into account to avoid sending non-dom0 a hypervisor sample. Or are you saying that what to send depends on both RIP and domainID?, Something like if ( (vpmu_mode & XENPMU_MODE_SELF) ) cur_regs = guest_cpu_user_regs(); else if ( (regs->rip >= XEN_VIRT_START) && (regs->rip < XEN_VIRT_END) && is_hardware_domain(sampling->domain)) cur_regs = regs; else cur_regs = guest_cpu_user_regs(); -boris