ChangeSet 1.1777, 2005/06/30 09:08:42+01:00, arun.sharma@xxxxxxxxx
[PATCH] 64 bit xend cleanups.
64 bit xend cleanups.
Signed-off-by: Xin Li <xin.bi.li@xxxxxxxxx>
Signed-off-by: Xiofeng Ling <xiaofeng.ling@xxxxxxxxx>
Signed-off-by: Arun Sharma <arun.sharma@xxxxxxxxx>
linux_boot_params.h | 24 ++++++++++++------------
xc_private.h | 2 ++
xc_vmx_build.c | 32 ++++++++++++++++++--------------
3 files changed, 32 insertions(+), 26 deletions(-)
diff -Nru a/tools/libxc/linux_boot_params.h b/tools/libxc/linux_boot_params.h
--- a/tools/libxc/linux_boot_params.h 2005-06-30 05:03:34 -04:00
+++ b/tools/libxc/linux_boot_params.h 2005-06-30 05:03:34 -04:00
@@ -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 */
diff -Nru a/tools/libxc/xc_private.h b/tools/libxc/xc_private.h
--- a/tools/libxc/xc_private.h 2005-06-30 05:03:34 -04:00
+++ b/tools/libxc/xc_private.h 2005-06-30 05:03:34 -04:00
@@ -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__)
diff -Nru a/tools/libxc/xc_vmx_build.c b/tools/libxc/xc_vmx_build.c
--- a/tools/libxc/xc_vmx_build.c 2005-06-30 05:03:34 -04:00
+++ b/tools/libxc/xc_vmx_build.c 2005-06-30 05:03:34 -04:00
@@ -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;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|