64 bit xend cleanups.
PATCH 5/10 64 bit xend cleanups.
64 bit xend cleanups.
Signed-off-by Xin Li <[email protected]>
Signed-off-by Xiofeng Ling <[email protected]>
Signed-off-by Arun Sharma <[email protected]>
tools/libxc/xc_vmx_build.c +18 -14
@@ -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
@@ -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
@@ -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 */