From patchwork Wed Dec 22 15:06:15 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gleb Natapov X-Patchwork-Id: 427851 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oBMF6Zq2013672 for ; Wed, 22 Dec 2010 15:06:38 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753504Ab0LVPGf (ORCPT ); Wed, 22 Dec 2010 10:06:35 -0500 Received: from mx1.redhat.com ([209.132.183.28]:40984 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752897Ab0LVPGb (ORCPT ); Wed, 22 Dec 2010 10:06:31 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oBMF6V9c016926 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 22 Dec 2010 10:06:31 -0500 Received: from dhcp-1-237.tlv.redhat.com (dhcp-1-237.tlv.redhat.com [10.35.1.237]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id oBMF6ULg001363; Wed, 22 Dec 2010 10:06:30 -0500 Received: by dhcp-1-237.tlv.redhat.com (Postfix, from userid 13519) id 7811918D3EB; Wed, 22 Dec 2010 17:06:29 +0200 (IST) From: Gleb Natapov To: avi@redhat.com, mtosatti@redhat.com Cc: kvm@vger.kernel.org Subject: [PATCH unit-tests 02/16] Make access.c use library functions. Date: Wed, 22 Dec 2010 17:06:15 +0200 Message-Id: <1293030389-1143-3-git-send-email-gleb@redhat.com> In-Reply-To: <1293030389-1143-1-git-send-email-gleb@redhat.com> References: <1293030389-1143-1-git-send-email-gleb@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Wed, 22 Dec 2010 15:06:38 +0000 (UTC) diff --git a/x86/access.c b/x86/access.c index 067565b..df943d9 100644 --- a/x86/access.c +++ b/x86/access.c @@ -1,5 +1,7 @@ #include "libcflat.h" +#include "idt.h" +#include "processor.h" #define smp_id() 0 @@ -98,34 +100,6 @@ static inline void *va(pt_element_t phys) return (void *)phys; } -static unsigned long read_cr0() -{ - unsigned long cr0; - - asm volatile ("mov %%cr0, %0" : "=r"(cr0)); - - return cr0; -} - -static void write_cr0(unsigned long cr0) -{ - asm volatile ("mov %0, %%cr0" : : "r"(cr0)); -} - -typedef struct { - unsigned short offset0; - unsigned short selector; - unsigned short ist : 3; - unsigned short : 5; - unsigned short type : 4; - unsigned short : 1; - unsigned short dpl : 2; - unsigned short p : 1; - unsigned short offset1; - unsigned offset2; - unsigned reserved; -} idt_entry_t; - typedef struct { pt_element_t pt_pool; unsigned pt_pool_size; @@ -143,7 +117,6 @@ typedef struct { pt_element_t ignore_pde; int expected_fault; unsigned expected_error; - idt_entry_t idt[256]; } ac_test_t; typedef struct { @@ -154,51 +127,6 @@ typedef struct { static void ac_test_show(ac_test_t *at); -void lidt(idt_entry_t *idt, int nentries) -{ - descriptor_table_t dt; - - dt.limit = nentries * sizeof(*idt) - 1; - dt.linear_addr = (unsigned long)idt; - asm volatile ("lidt %0" : : "m"(dt)); -} - -unsigned short read_cs() -{ - unsigned short r; - - asm volatile ("mov %%cs, %0" : "=r"(r)); - return r; -} - -unsigned long long rdmsr(unsigned index) -{ - unsigned a, d; - - asm volatile("rdmsr" : "=a"(a), "=d"(d) : "c"(index)); - return ((unsigned long long)d << 32) | a; -} - -void wrmsr(unsigned index, unsigned long long val) -{ - unsigned a = val, d = val >> 32; - - asm volatile("wrmsr" : : "a"(a), "d"(d), "c"(index)); -} - -void set_idt_entry(idt_entry_t *e, void *addr, int dpl) -{ - memset(e, 0, sizeof *e); - e->offset0 = (unsigned long)addr; - e->selector = read_cs(); - e->ist = 0; - e->type = 14; - e->dpl = dpl; - e->p = 1; - e->offset1 = (unsigned long)addr >> 16; - e->offset2 = (unsigned long)addr >> 32; -} - void set_cr0_wp(int wp) { unsigned long cr0 = read_cr0(); @@ -222,13 +150,11 @@ void set_efer_nx(int nx) static void ac_env_int(ac_pool_t *pool) { - static idt_entry_t idt[256]; + setup_idt(); - memset(idt, 0, sizeof(idt)); - lidt(idt, 256); extern char page_fault, kernel_entry; - set_idt_entry(&idt[14], &page_fault, 0); - set_idt_entry(&idt[0x20], &kernel_entry, 3); + set_idt_entry(14, &page_fault, 0); + set_idt_entry(0x20, &kernel_entry, 3); pool->pt_pool = 33 * 1024 * 1024; pool->pt_pool_size = 120 * 1024 * 1024 - pool->pt_pool; @@ -273,14 +199,6 @@ int ac_test_bump(ac_test_t *at) return ret; } -unsigned long read_cr3() -{ - unsigned long cr3; - - asm volatile ("mov %%cr3, %0" : "=r"(cr3)); - return cr3; -} - void invlpg(void *addr) { asm volatile ("invlpg (%0)" : : "r"(addr));