Skip to contentSkip to conversation

64 bit xend cleanups.

PATCH New Arun Sharma 1 participant 1 message Jun 30, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 5/10 64 bit xend cleanups.

64 bit xend cleanups.

tools/libxc/xc_vmx_build.c +18 -14
diff -r b4f1afa166af -r 18df82c3dcc7 tools/libxc/xc_vmx_build.c
@@ -92,18 +92,20 @@
 }
 
 static int zap_mmio_range(int xc_handle, u32 dom,
-                            l2_pgentry_t *vl2tab,
+                            l2_pgentry_32_t *vl2tab,
                             unsigned long mmio_range_start,
                             unsigned long mmio_range_size)
 {
     unsigned long mmio_addr;
     unsigned long mmio_range_end = mmio_range_start + mmio_range_size;
     unsigned long vl2e;
-    l1_pgentry_t *vl1tab;
+    l1_pgentry_32_t *vl1tab;
 
     mmio_addr = mmio_range_start & PAGE_MASK;
     for (; mmio_addr < mmio_range_end; mmio_addr += PAGE_SIZE) {
         vl2e = vl2tab[l2_table_offset(mmio_addr)];
+        if (vl2e == 0)
+            continue;
         vl1tab = xc_map_foreign_range(xc_handle, dom, PAGE_SIZE,
                                 PROT_READ|PROT_WRITE, vl2e >> PAGE_SHIFT);
 	if (vl1tab == 0) {
@@ -121,7 +123,7 @@
                             struct mem_map *mem_mapp)
 {
     int i;
-    l2_pgentry_t *vl2tab = xc_map_foreign_range(xc_handle, dom, PAGE_SIZE,
+    l2_pgentry_32_t *vl2tab = xc_map_foreign_range(xc_handle, dom, PAGE_SIZE,
                                                 PROT_READ|PROT_WRITE,
                                                 l2tab >> PAGE_SHIFT);
     if (vl2tab == 0)
@@ -149,8 +151,8 @@
                          unsigned long flags,
                          struct mem_map * mem_mapp)
 {
-    l1_pgentry_t *vl1tab=NULL, *vl1e=NULL;
-    l2_pgentry_t *vl2tab=NULL, *vl2e=NULL;
+    l1_pgentry_32_t *vl1tab=NULL, *vl1e=NULL;
+    l2_pgentry_32_t *vl2tab=NULL, *vl2e=NULL;
     unsigned long *page_array = NULL;
     unsigned long l2tab;
     unsigned long l1tab;
@@ -426,8 +428,10 @@
      * Pin down l2tab addr as page dir page - causes hypervisor to provide
      * correct protection for the page
      */ 
+#ifdef __i386__
     if ( pin_table(xc_handle, MMUEXT_PIN_L2_TABLE, l2tab>>PAGE_SHIFT, dom) )
         goto error_out;
+#endif
 
     /* Send the page update requests down to the hypervisor. */
     if ( finish_mmu_updates(xc_handle, mmu) )
@@ -646,7 +650,7 @@
     return -1;
 }
 
-static inline int is_loadable_phdr(Elf_Phdr *phdr)
+static inline int is_loadable_phdr(Elf32_Phdr *phdr)
 {
     return ((phdr->p_type == PT_LOAD) &&
             ((phdr->p_flags & (PF_W|PF_X)) != 0));
@@ -656,9 +660,9 @@
                          unsigned long elfsize,
                          struct domain_setup_info *dsi)
 {
-    Elf_Ehdr *ehdr = (Elf_Ehdr *)elfbase;
-    Elf_Phdr *phdr;
-    Elf_Shdr *shdr;
+    Elf32_Ehdr *ehdr = (Elf32_Ehdr *)elfbase;
+    Elf32_Phdr *phdr;
+    Elf32_Shdr *shdr;
     unsigned long kernstart = ~0UL, kernend=0UL;
     char *shstrtab;
     int h;
@@ -687,13 +691,13 @@
         ERROR("ELF image has no section-header strings table (shstrtab).");
         return -EINVAL;
     }
-    shdr = (Elf_Shdr *)(elfbase + ehdr->e_shoff + 
+    shdr = (Elf32_Shdr *)(elfbase + ehdr->e_shoff + 
                         (ehdr->e_shstrndx*ehdr->e_shentsize));
     shstrtab = elfbase + shdr->sh_offset;
     
     for ( h = 0; h < ehdr->e_phnum; h++ ) 
     {
-        phdr = (Elf_Phdr *)(elfbase + ehdr->e_phoff + (h*ehdr->e_phentsize));
+        phdr = (Elf32_Phdr *)(elfbase + ehdr->e_phoff + (h*ehdr->e_phentsize));
         if ( !is_loadable_phdr(phdr) )
             continue;
         if ( phdr->p_paddr < kernstart )
@@ -726,8 +730,8 @@
     char *elfbase, int xch, u32 dom, unsigned long *parray,
     struct domain_setup_info *dsi)
 {
-    Elf_Ehdr *ehdr = (Elf_Ehdr *)elfbase;
-    Elf_Phdr *phdr;
+    Elf32_Ehdr *ehdr = (Elf32_Ehdr *)elfbase;
+    Elf32_Phdr *phdr;
     int h;
 
     char         *va;
@@ -735,7 +739,7 @@
 
     for ( h = 0; h < ehdr->e_phnum; h++ ) 
     {
-        phdr = (Elf_Phdr *)(elfbase + ehdr->e_phoff + (h*ehdr->e_phentsize));
+        phdr = (Elf32_Phdr *)(elfbase + ehdr->e_phoff + (h*ehdr->e_phentsize));
         if ( !is_loadable_phdr(phdr) )
             continue;
         
tools/libxc/xc_private.h +2 -0
diff -r b4f1afa166af -r 18df82c3dcc7 tools/libxc/xc_private.h
@@ -53,6 +53,8 @@
 #define PAGE_SIZE               (1UL << PAGE_SHIFT)
 #define PAGE_MASK               (~(PAGE_SIZE-1))
 
+typedef u32 l1_pgentry_32_t;
+typedef u32 l2_pgentry_32_t;
 typedef unsigned long l1_pgentry_t;
 typedef unsigned long l2_pgentry_t;
 #if defined(__x86_64__)
tools/libxc/linux_boot_params.h +12 -12
diff -r b4f1afa166af -r 18df82c3dcc7 tools/libxc/linux_boot_params.h
@@ -8,9 +8,9 @@
 struct mem_map {
     int nr_map;
     struct entry {
-        unsigned long long addr;	/* start of memory segment */
-        unsigned long long size;	/* size of memory segment */
-        unsigned long type;		/* type of memory segment */
+        u64 addr;	/* start of memory segment */
+        u64 size;	/* size of memory segment */
+        u32 type;		/* type of memory segment */
 #define E820_RAM        1
 #define E820_RESERVED   2
 #define E820_ACPI       3 /* usable as RAM once ACPI tables have been read */
@@ -18,7 +18,7 @@
 #define E820_IO         16
 #define E820_SHARED     17
 
-        unsigned long caching_attr;    /* used by hypervisor */
+        u32 caching_attr;    /* used by hypervisor */
 #define MEMMAP_UC	0
 #define MEMMAP_WC	1
 #define MEMMAP_WT	4
@@ -29,15 +29,15 @@
 };
 
 struct e820entry {
-	unsigned long long addr;	/* start of memory segment */
-	unsigned long long size;	/* size of memory segment */
-	unsigned long type;		/* type of memory segment */
-};
+	u64 addr;	/* start of memory segment */
+	u64 size;	/* size of memory segment */
+	u32 type;	/* type of memory segment */
+}__attribute__((packed));
 
 struct e820map {
-    int nr_map;
+    u32 nr_map;
     struct e820entry map[E820MAX];
-};
+}__attribute__((packed));
 
 struct drive_info_struct { __u8 dummy[32]; }; 
 
@@ -64,8 +64,8 @@
     unsigned short lfb_width;		/* 0x12 */
     unsigned short lfb_height;		/* 0x14 */
     unsigned short lfb_depth;		/* 0x16 */
-    unsigned long  lfb_base;		/* 0x18 */
-    unsigned long  lfb_size;		/* 0x1c */
+    unsigned int   lfb_base;		/* 0x18 */
+    unsigned int   lfb_size;		/* 0x1c */
     unsigned short dontuse2, dontuse3;	/* 0x20 -- CL_MAGIC and CL_OFFSET here */
     unsigned short lfb_linelength;	/* 0x24 */
     unsigned char  red_size;		/* 0x26 */