From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: Re: [PATCH v4 1/2] SVM: support data breakpoint extension registers Date: Tue, 22 Apr 2014 10:04:35 -0400 Message-ID: <535676F3.9000408@oracle.com> References: <534EAE6402000078000098FB@nat28.tlf.novell.com> <534EB0EE020000780000996A@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WcbGC-0004n3-Gp for xen-devel@lists.xenproject.org; Tue, 22 Apr 2014 14:01:20 +0000 In-Reply-To: <534EB0EE020000780000996A@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 Fraser , Tim Deegan , Ian Jackson , Ian Campbell , Aravind Gopalakrishnan , suravee.suthikulpanit@amd.com, xen-devel List-Id: xen-devel@lists.xenproject.org (Sorry for being late). On 04/16/2014 10:33 AM, Jan Beulich wrote: > @@ -1451,6 +1551,8 @@ static int svm_msr_read_intercept(unsign > > switch ( msr ) > { > + unsigned int ecx; > + > case MSR_IA32_SYSENTER_CS: > *msr_content = v->arch.hvm_svm.guest_sysenter_cs; > break; > @@ -1526,6 +1628,21 @@ static int svm_msr_read_intercept(unsign > vpmu_do_rdmsr(msr, msr_content); > break; > > + case MSR_AMD64_DR0_ADDRESS_MASK: > + hvm_cpuid(0x80000001, NULL, NULL, &ecx, NULL); > + if ( !test_bit(X86_FEATURE_DBEXT & 31, &ecx) ) > + goto gpf; > + *msr_content = v->arch.hvm_svm.dr_mask[0]; > + break; > + > + case MSR_AMD64_DR1_ADDRESS_MASK ... MSR_AMD64_DR3_ADDRESS_MASK: > + hvm_cpuid(0x80000001, NULL, NULL, &ecx, NULL); > + if ( !test_bit(X86_FEATURE_DBEXT & 31, &ecx) ) > + goto gpf; > + *msr_content = > + v->arch.hvm_svm.dr_mask[msr - MSR_AMD64_DR1_ADDRESS_MASK + 1]; > + break; > + Can you merge these two cases (here and in write_intercept)? They are doing logically the same thing, the only difference is index calculation (and you can have a macro or something similar for that). -boris