From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: Re: [PATCH v3 15/16] x86/VPMU: NMI-based VPMU support Date: Thu, 16 Jan 2014 10:13:32 -0500 Message-ID: <52D7F71C.4010303@oracle.com> References: <1389036295-3877-1-git-send-email-boris.ostrovsky@oracle.com> <1389036295-3877-16-git-send-email-boris.ostrovsky@oracle.com> <52D7B60002000078001142A2@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <52D7B60002000078001142A2@nat28.tlf.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: keir@xen.org, suravee.suthikulpanit@amd.com, andrew.cooper3@citrix.com, eddie.dong@intel.com, dietmar.hahn@ts.fujitsu.com, xen-devel@lists.xen.org, jun.nakajima@intel.com List-Id: xen-devel@lists.xenproject.org On 01/16/2014 04:35 AM, Jan Beulich wrote: > >> +/* Process the softirq set by PMU NMI handler */ >> +static void pmu_softnmi(void) >> +{ >> + struct cpu_user_regs *regs; >> + struct vcpu *v, *sampled = per_cpu(sampled_vcpu, smp_processor_id()); >> + >> + if ( vpmu_mode & XENPMU_MODE_PRIV || >> + sampled->domain->domain_id >= DOMID_FIRST_RESERVED ) >> + v = dom0->vcpu[smp_processor_id()]; >> + else >> + v = sampled; >> + >> + regs = &v->arch.vpmu.xenpmu_data->pmu.regs; >> + if ( is_hvm_domain(sampled->domain) ) >> + { >> + struct segment_register cs; >> + >> + hvm_get_segment_register(sampled, x86_seg_cs, &cs); >> + regs->cs = cs.attr.fields.dpl; >> + } >> + >> + send_guest_vcpu_virq(v, VIRQ_XENPMU); >> +} > Perhaps I should have asked this on an earlier patch already: > How is this supposed to work for a 32-bit HVM guest? > struct cpu_user_regs is clearly different for it than what the > hypervisor or a 64-bit HVM guest would use. Right, I need to XLAT_cpu_user_regs() for 32-bit HVM guest in vpmu_interrupt() (I already do it for a PV guest). Thanks. -boris