public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] qemu-kvm tests: make x86/vm.c support 32-bit host
@ 2010-06-07 15:11 Asias He
  2010-06-07 15:11 ` [PATCH 2/2] qemu-kvm tests: make sieve test runable on " Asias He
  0 siblings, 1 reply; 3+ messages in thread
From: Asias He @ 2010-06-07 15:11 UTC (permalink / raw)
  To: kvm, Avi Kivity, Naphtali Sprei, Marcelo Tosatti

Signed-off-by: Asias He <asias.hejun@gmail.com>
---
 kvm/test/x86/vm.c |   46 +++++++++++++++++++++++++++++++++++-----------
 1 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/kvm/test/x86/vm.c b/kvm/test/x86/vm.c
index ec9c145..c9876e5 100644
--- a/kvm/test/x86/vm.c
+++ b/kvm/test/x86/vm.c
@@ -1,11 +1,16 @@
-
 #include "vm.h"
-
-void print(const char *s);
+#include "libcflat.h"
 
 #define PAGE_SIZE 4096ul
+#ifdef __x86_64__
 #define LARGE_PAGE_SIZE (512 * PAGE_SIZE)
+#else
+#define LARGE_PAGE_SIZE (1024 * PAGE_SIZE)
+#endif
 
+#define X86_CR0_PE      0x00000001
+#define X86_CR0_PG      0x80000000
+#define X86_CR4_PSE     0x00000010
 static void *free = 0;
 static void *vfree_top = 0;
 
@@ -66,6 +71,16 @@ static unsigned long end_of_memory;
 #define PTE_WRITE   (1ull << 1)
 #define PTE_ADDR    (0xffffffffff000ull)
 
+#ifdef __x86_64__
+#define	PAGE_LEVEL	4
+#define	PGDIR_WIDTH	9
+#define	PGDIR_MASK	511
+#else
+#define	PAGE_LEVEL	2
+#define	PGDIR_WIDTH	10
+#define	PGDIR_MASK	1023
+#endif
+
 static void install_pte(unsigned long *cr3, 
 			int pte_level, 
 			void *virt,
@@ -75,8 +90,8 @@ static void install_pte(unsigned long *cr3,
     unsigned long *pt = cr3;
     unsigned offset;
 
-    for (level = 4; level > pte_level; --level) {
-	offset = ((unsigned long)virt >> ((level-1) * 9 + 12)) & 511;
+    for (level = PAGE_LEVEL; level > pte_level; --level) {
+	offset = ((unsigned long)virt >> ((level-1) * PGDIR_WIDTH + 12)) & PGDIR_MASK;
 	if (!(pt[offset] & PTE_PRESENT)) {
 	    unsigned long *new_pt = alloc_page();
 	    memset(new_pt, 0, PAGE_SIZE);
@@ -84,7 +99,7 @@ static void install_pte(unsigned long *cr3,
 	}
 	pt = phys_to_virt(pt[offset] & 0xffffffffff000ull);
     }
-    offset = ((unsigned long)virt >> (((level-1) * 9) + 12)) & 511;
+    offset = ((unsigned long)virt >> ((level-1) * PGDIR_WIDTH + 12)) & PGDIR_MASK;
     pt[offset] = pte;
 }
 
@@ -94,8 +109,8 @@ static unsigned long get_pte(unsigned long *cr3, void *virt)
     unsigned long *pt = cr3, pte;
     unsigned offset;
 
-    for (level = 4; level > 1; --level) {
-	offset = ((unsigned long)virt >> (((level-1) * 9) + 12)) & 511;
+    for (level = PAGE_LEVEL; level > 1; --level) {
+	offset = ((unsigned long)virt >> (((level-1) * PGDIR_WIDTH) + 12)) & PGDIR_MASK;
 	pte = pt[offset];
 	if (!(pte & PTE_PRESENT))
 	    return 0;
@@ -103,7 +118,7 @@ static unsigned long get_pte(unsigned long *cr3, void *virt)
 	    return pte;
 	pt = phys_to_virt(pte & 0xffffffffff000ull);
     }
-    offset = ((unsigned long)virt >> (((level-1) * 9) + 12)) & 511;
+    offset = ((unsigned long)virt >> (((level-1) * PGDIR_WIDTH) + 12)) & PGDIR_MASK;
     pte = pt[offset];
     return pte;
 }
@@ -189,8 +204,10 @@ static void setup_mmu(unsigned long len)
     unsigned long *cr3 = alloc_page();
     unsigned long phys = 0;
 
+#if 0
     if (len < (1ul << 32))
         len = 1ul << 32;  /* map mmio 1:1 */
+#endif
 
     memset(cr3, 0, PAGE_SIZE);
     while (phys + LARGE_PAGE_SIZE <= len) {
@@ -201,9 +218,16 @@ static void setup_mmu(unsigned long len)
 	install_page(cr3, phys, (void *)phys);
 	phys += PAGE_SIZE;
     }
-    
     load_cr3(virt_to_phys(cr3));
-    print("paging enabled\n");
+#ifndef __x86_64__
+    load_cr4(X86_CR4_PSE);
+#endif
+    load_cr0(X86_CR0_PG |X86_CR0_PE);
+
+    printf("paging enabled\n");
+    printf("cr0 = %x\n", read_cr0());
+    printf("cr3 = %x\n", read_cr3());
+    printf("cr4 = %x\n", read_cr4());
 }
 
 static unsigned int inl(unsigned short port)
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] qemu-kvm tests: make sieve test runable on 32-bit host
  2010-06-07 15:11 [PATCH 1/2] qemu-kvm tests: make x86/vm.c support 32-bit host Asias He
@ 2010-06-07 15:11 ` Asias He
  2010-06-08 13:44   ` Avi Kivity
  0 siblings, 1 reply; 3+ messages in thread
From: Asias He @ 2010-06-07 15:11 UTC (permalink / raw)
  To: kvm, Avi Kivity, Naphtali Sprei, Marcelo Tosatti

Signed-off-by: Asias He <asias.hejun@gmail.com>
---
 kvm/test/config-x86-common.mak |    4 +-
 kvm/test/config-x86_64.mak     |    4 +-
 kvm/test/x86/sieve.c           |   48 ++++-----------------------------------
 3 files changed, 9 insertions(+), 47 deletions(-)

diff --git a/kvm/test/config-x86-common.mak b/kvm/test/config-x86-common.mak
index 38dbf5a..c97de52 100644
--- a/kvm/test/config-x86-common.mak
+++ b/kvm/test/config-x86-common.mak
@@ -25,7 +25,7 @@ FLATLIBS = lib/libcflat.a $(libgcc)
 tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \
                $(TEST_DIR)/smptest.flat  $(TEST_DIR)/port80.flat \
                $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \
-               $(TEST_DIR)/hypercall.flat
+               $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat
 
 test_cases: $(tests-common) $(tests)
 
@@ -36,7 +36,7 @@ $(TEST_DIR)/access.flat: $(cstart.o) $(TEST_DIR)/access.o $(TEST_DIR)/print.o
 $(TEST_DIR)/hypercall.flat: $(cstart.o) $(TEST_DIR)/hypercall.o
  
 $(TEST_DIR)/sieve.flat: $(cstart.o) $(TEST_DIR)/sieve.o \
-		$(TEST_DIR)/print.o $(TEST_DIR)/vm.o
+		$(TEST_DIR)/vm.o
  
 $(TEST_DIR)/vmexit.flat: $(cstart.o) $(TEST_DIR)/vmexit.o
  
diff --git a/kvm/test/config-x86_64.mak b/kvm/test/config-x86_64.mak
index cc7d7d7..d8fd2b5 100644
--- a/kvm/test/config-x86_64.mak
+++ b/kvm/test/config-x86_64.mak
@@ -4,7 +4,7 @@ bits = 64
 ldarch = elf64-x86-64
 CFLAGS += -D__x86_64__
 
-tests = $(TEST_DIR)/access.flat $(TEST_DIR)/sieve.flat \
-	  $(TEST_DIR)/emulator.flat $(TEST_DIR)/apic.flat
+tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \
+	  $(TEST_DIR)/emulator.flat
 
 include config-x86-common.mak
diff --git a/kvm/test/x86/sieve.c b/kvm/test/x86/sieve.c
index a707b92..ef4a5a0 100644
--- a/kvm/test/x86/sieve.c
+++ b/kvm/test/x86/sieve.c
@@ -1,40 +1,5 @@
 #include "vm.h"
-
-void print(const char *text);
-
-void printi(int n)
-{
-    char buf[10], *p = buf;
-    int s = 0, i;
-    
-    if (n < 0) {
-	n = -n;
-	s = 1;
-    }
-
-    while (n) {
-	*p++ = '0' + n % 10;
-	n /= 10;
-    }
-    
-    if (s)
-	*p++ = '-';
-
-    if (p == buf)
-	*p++ = '0';
-    
-    for (i = 0; i < (p - buf) / 2; ++i) {
-	char tmp;
-
-	tmp = buf[i];
-	buf[i] = p[-1-i];
-	p[-1-i] = tmp;
-    }
-
-    *p = 0;
-
-    print(buf);
-}
+#include "libcflat.h"
 
 int sieve(char* data, int size)
 {
@@ -58,11 +23,9 @@ void test_sieve(const char *msg, char *data, int size)
 {
     int r;
 
-    print(msg);
-    print(": ");
+    printf("%s:", msg);
     r = sieve(data, size);
-    printi(r);
-    print("\n");
+    printf("%d out of %d\n", r, size);
 }
 
 #define STATIC_SIZE 1000000
@@ -74,12 +37,11 @@ int main()
     void *v;
     int i;
 
-    print("starting sieve\n");
+    printf("starting sieve\n");
     test_sieve("static", static_data, STATIC_SIZE);
     setup_vm();
-    print("mapped: ");
     test_sieve("mapped", static_data, STATIC_SIZE);
-    for (i = 0; i < 30; ++i) {
+    for (i = 0; i < 3; ++i) {
 	v = vmalloc(VSIZE);
 	test_sieve("virtual", v, VSIZE);
 	vfree(v);
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 2/2] qemu-kvm tests: make sieve test runable on 32-bit host
  2010-06-07 15:11 ` [PATCH 2/2] qemu-kvm tests: make sieve test runable on " Asias He
@ 2010-06-08 13:44   ` Avi Kivity
  0 siblings, 0 replies; 3+ messages in thread
From: Avi Kivity @ 2010-06-08 13:44 UTC (permalink / raw)
  To: Asias He; +Cc: kvm, Naphtali Sprei, Marcelo Tosatti

On 06/07/2010 06:11 PM, Asias He wrote:
> Signed-off-by: Asias He<asias.hejun@gmail.com>
> ---
>   kvm/test/config-x86-common.mak |    4 +-
>   kvm/test/config-x86_64.mak     |    4 +-
>   kvm/test/x86/sieve.c           |   48 ++++-----------------------------------
>    


Applied both, thanks.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-06-08 13:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-07 15:11 [PATCH 1/2] qemu-kvm tests: make x86/vm.c support 32-bit host Asias He
2010-06-07 15:11 ` [PATCH 2/2] qemu-kvm tests: make sieve test runable on " Asias He
2010-06-08 13:44   ` Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox