From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rusty Russell Subject: [PATCH 3/5] Hoist SVM's get_cs_db_l_bits into core code. Date: Thu, 06 Sep 2007 01:21:32 +1000 Message-ID: <1189005692.10802.132.camel@localhost.localdomain> References: <1189005567.10802.127.camel@localhost.localdomain> <1189005638.10802.129.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm-devel Return-path: In-Reply-To: <1189005638.10802.129.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org SVM gets the DB and L bits for the cs by decoding the segment. This is in fact the completely generic code, so hoist it for kvm-lite to use. Signed-off-by: Rusty Russell diff -r 01dea2154ac6 drivers/kvm/kvm.h --- a/drivers/kvm/kvm.h Tue Aug 21 10:11:26 2007 +1000 +++ b/drivers/kvm/kvm.h Thu Aug 30 11:17:45 2007 +1000 @@ -558,6 +560,7 @@ void set_cr4(struct kvm_vcpu *vcpu, unsi void set_cr4(struct kvm_vcpu *vcpu, unsigned long cr0); void set_cr8(struct kvm_vcpu *vcpu, unsigned long cr0); void lmsw(struct kvm_vcpu *vcpu, unsigned long msw); +void generic_get_cs_db_l_bits(struct kvm_vcpu *vcpu, int *db, int *l); int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata); int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data); diff -r 01dea2154ac6 drivers/kvm/kvm_main.c --- a/drivers/kvm/kvm_main.c Tue Aug 21 10:11:26 2007 +1000 +++ b/drivers/kvm/kvm_main.c Thu Aug 30 11:17:07 2007 +1000 @@ -2086,6 +2087,16 @@ static int kvm_vcpu_ioctl_set_sregs(stru return 0; } + +void generic_get_cs_db_l_bits(struct kvm_vcpu *vcpu, int *db, int *l) +{ + struct kvm_segment cs; + + get_segment(vcpu, &cs, VCPU_SREG_CS); + *db = cs.db; + *l = cs.l; +} +EXPORT_SYMBOL_GPL(generic_get_cs_db_l_bits); /* * List of msr numbers which we expose to userspace through KVM_GET_MSRS diff -r 01dea2154ac6 drivers/kvm/svm.c --- a/drivers/kvm/svm.c Tue Aug 21 10:11:26 2007 +1000 +++ b/drivers/kvm/svm.c Thu Aug 30 11:16:34 2007 +1000 @@ -674,14 +674,6 @@ static void svm_get_segment(struct kvm_v var->unusable = !var->present; } -static void svm_get_cs_db_l_bits(struct kvm_vcpu *vcpu, int *db, int *l) -{ - struct vmcb_seg *s = svm_seg(vcpu, VCPU_SREG_CS); - - *db = (s->attrib >> SVM_SELECTOR_DB_SHIFT) & 1; - *l = (s->attrib >> SVM_SELECTOR_L_SHIFT) & 1; -} - static void svm_get_idt(struct kvm_vcpu *vcpu, struct descriptor_table *dt) { struct vcpu_svm *svm = to_svm(vcpu); @@ -1651,7 +1638,7 @@ static struct kvm_arch_ops svm_arch_ops .get_segment_base = svm_get_segment_base, .get_segment = svm_get_segment, .set_segment = svm_set_segment, - .get_cs_db_l_bits = svm_get_cs_db_l_bits, + .get_cs_db_l_bits = generic_get_cs_db_l_bits, .decache_cr4_guest_bits = svm_decache_cr4_guest_bits, .set_cr0 = svm_set_cr0, .set_cr3 = svm_set_cr3, ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/