[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v11 for-xen-4.5 16/20] x86/VPMU: Handle PMU interrupts for PV guests
On 09/23/2014 01:18 PM, Konrad Rzeszutek Wilk wrote: int vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, uint64_t supported) { - struct vpmu_struct *vpmu = vcpu_vpmu(current); + struct vcpu *curr = current; + struct vpmu_struct *vpmu = vcpu_vpmu(curr);if ( !(vpmu_mode & (XENPMU_MODE_SELF | XENPMU_MODE_HV)) )return 0;if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->do_wrmsr )- return vpmu->arch_vpmu_ops->do_wrmsr(msr, msr_content, supported); + { + int ret = vpmu->arch_vpmu_ops->do_wrmsr(msr, msr_content, supported); + + /* + * We may have received a PMU interrupt during WRMSR handling + * and since do_wrmsr may load VPMU context we should save + * (and unload) it again. + */ + if ( !is_hvm_domain(curr->domain) && + vpmu->xenpmu_data && (vpmu->xenpmu_data->pmu_flags & PMU_CACHED) ) + { + vpmu_set(vpmu, VPMU_CONTEXT_SAVE); + vpmu->arch_vpmu_ops->arch_vpmu_save(curr); + vpmu_reset(vpmu, VPMU_CONTEXT_SAVE | VPMU_CONTEXT_LOADED); + } + return ret; + } return 0; }int vpmu_do_rdmsr(unsigned int msr, uint64_t *msr_content){ - struct vpmu_struct *vpmu = vcpu_vpmu(current); + struct vcpu *curr = current; + struct vpmu_struct *vpmu = vcpu_vpmu(curr);if ( !(vpmu_mode & (XENPMU_MODE_SELF | XENPMU_MODE_HV)) )return 0;if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->do_rdmsr )- return vpmu->arch_vpmu_ops->do_rdmsr(msr, msr_content); + { You have a nice comment in the above code. Could you replicate it here or just point the reader of the code to the reasoning? The next patch will merge these two routines and the comment will be part of the new routine that combines them. -boris + int ret = vpmu->arch_vpmu_ops->do_rdmsr(msr, msr_content); + + if ( !is_hvm_domain(curr->domain) && + vpmu->xenpmu_data && (vpmu->xenpmu_data->pmu_flags & PMU_CACHED) ) + { + vpmu_set(vpmu, VPMU_CONTEXT_SAVE); + vpmu->arch_vpmu_ops->arch_vpmu_save(curr); + vpmu_reset(vpmu, VPMU_CONTEXT_SAVE | VPMU_CONTEXT_LOADED); + } + return ret; + } return 0; } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |