# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 827c65c06a66dd067c64ebb56b17b4379d83cbf9
# Parent 0a6f5527ca4bd560fc5c750e7ade3a0040144e40
[IA64] Add memory operations for xen/ia64
This patch removes ugly hack upon memory operation and thus
allow inc/decrease_reservation op available for xen/ia64 now.
As a result:
* Now we conform to common sequence where all domain pages
are allocated together by increase_reservation before
image builder
* physmap table is now built at point of arch_set_info_guest
* DOM0_GETMEMLIST can only query without allocation now
After this patch, some long-existing hacks due to mismatched
memory interface are cleaned this time. Also this is a base
step toward introducing balloon feature into xen/ia64.
Signed-off-by Kevin Tian <kevin.tian@xxxxxxxxx>
diff -r 0a6f5527ca4b -r 827c65c06a66 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c Tue Apr 04 09:39:45 2006 -0600
+++ b/tools/ioemu/vl.c Tue Apr 04 09:43:41 2006 -0600
@@ -3226,7 +3226,8 @@ int main(int argc, char **argv)
}
if ( xc_ia64_get_pfn_list(xc_handle, domid,
- page_array, IO_PAGE_START >> PAGE_SHIFT, 1) != 1
)
+ page_array,
+ ram_pages + (GFW_SIZE >> PAGE_SHIFT), 1) != 1 )
{
fprintf(logfile, "xc_ia64_get_pfn_list returned error %d\n", errno);
exit(-1);
diff -r 0a6f5527ca4b -r 827c65c06a66 tools/libxc/xc_ia64_stubs.c
--- a/tools/libxc/xc_ia64_stubs.c Tue Apr 04 09:39:45 2006 -0600
+++ b/tools/libxc/xc_ia64_stubs.c Tue Apr 04 09:43:41 2006 -0600
@@ -101,7 +101,7 @@ int xc_ia64_copy_to_domain_pages(int xc_
goto error_out;
}
if ( xc_ia64_get_pfn_list(xc_handle, domid, page_array,
- dst_pfn>>PAGE_SHIFT, nr_pages) != nr_pages ){
+ dst_pfn, nr_pages) != nr_pages ){
PERROR("Could not get the page frame list");
goto error_out;
}
@@ -121,10 +121,17 @@ error_out:
#define HOB_SIGNATURE 0x3436474953424f48 // "HOBSIG64"
-#define GFW_HOB_START ((4UL<<30)-(14UL<<20)) //4G -14M
-#define GFW_HOB_SIZE (1UL<<20) //1M
-#define MEM_G (1UL << 30)
-#define MEM_M (1UL << 20)
+#define GFW_HOB_START ((4UL<<30)-(14UL<<20)) //4G -14M
+#define GFW_HOB_SIZE (1UL<<20) //1M
+#define RAW_GFW_START_NR(s) ((s) >> PAGE_SHIFT)
+#define RAW_GFW_HOB_START_NR(s) \
+ (RAW_GFW_START_NR(s) + ((GFW_HOB_START - GFW_START) >> PAGE_SHIFT))
+#define RAW_GFW_IMAGE_START_NR(s,i) \
+ (RAW_GFW_START_NR(s) + (((GFW_SIZE - (i))) >> PAGE_SHIFT))
+#define RAW_IO_PAGE_START_NR(s) \
+ (RAW_GFW_START_NR(s) + (GFW_SIZE >> PAGE_SHIFT))
+#define RAW_STORE_PAGE_START_NR(s) \
+ (RAW_IO_PAGE_START_NR(s) + (IO_PAGE_SIZE >> PAGE_SHFIT))
typedef struct {
unsigned long signature;
@@ -179,7 +186,8 @@ static int add_mem_hob(void* hob_buf, un
static int add_mem_hob(void* hob_buf, unsigned long dom_mem_size);
static int build_hob (void* hob_buf, unsigned long hob_buf_size,
unsigned long dom_mem_size);
-static int load_hob(int xc_handle,uint32_t dom, void *hob_buf);
+static int load_hob(int xc_handle,uint32_t dom, void *hob_buf,
+ unsigned long dom_mem_size);
int xc_ia64_build_hob(int xc_handle, uint32_t dom, unsigned long memsize){
@@ -191,13 +199,13 @@ int xc_ia64_build_hob(int xc_handle, uin
return -1;
}
- if ( build_hob( hob_buf, GFW_HOB_SIZE, memsize<<20) < 0){
+ if ( build_hob( hob_buf, GFW_HOB_SIZE, memsize) < 0){
free (hob_buf);
PERROR("Could not build hob");
return -1;
}
- if ( load_hob( xc_handle, dom, hob_buf) <0){
+ if ( load_hob( xc_handle, dom, hob_buf, memsize) < 0){
free (hob_buf);
PERROR("Could not load hob");
return -1;
@@ -317,7 +325,8 @@ err_out:
}
static int
-load_hob(int xc_handle, uint32_t dom, void *hob_buf)
+load_hob(int xc_handle, uint32_t dom, void *hob_buf,
+ unsigned long dom_mem_size)
{
// hob_buf should be page aligned
int hob_size;
@@ -336,7 +345,7 @@ load_hob(int xc_handle, uint32_t dom, vo
nr_pages = (hob_size + PAGE_SIZE -1) >> PAGE_SHIFT;
return xc_ia64_copy_to_domain_pages(xc_handle, dom,
- hob_buf, GFW_HOB_START, nr_pages );
+ hob_buf, RAW_GFW_HOB_START_NR(dom_mem_size), nr_pages );
}
#define MIN(x, y) ((x) < (y)) ? (x) : (y)
@@ -576,13 +585,8 @@ static int setup_guest( int xc_handle,
unsigned long page_array[2];
shared_iopage_t *sp;
int i;
-
- // FIXME: initialize pfn list for a temp hack
- if (xc_ia64_get_pfn_list(xc_handle, dom, NULL, -1, -1) == -1) {
- PERROR("Could not allocate continuous memory");
- goto error_out;
- }
-
+ unsigned long dom_memsize = (memsize << 20);
+
if ((image_size > 12 * MEM_M) || (image_size & (PAGE_SIZE - 1))) {
PERROR("Guest firmware size is incorrect [%ld]?", image_size);
return -1;
@@ -590,19 +594,21 @@ static int setup_guest( int xc_handle,
/* Load guest firmware */
if( xc_ia64_copy_to_domain_pages( xc_handle, dom,
- image, 4*MEM_G-image_size, image_size>>PAGE_SHIFT)) {
+ image, RAW_GFW_IMAGE_START_NR(dom_memsize, image_size),
+ image_size>>PAGE_SHIFT)) {
PERROR("Could not load guest firmware into domain");
goto error_out;
}
/* Hand-off state passed to guest firmware */
- if (xc_ia64_build_hob(xc_handle, dom, memsize) < 0){
+ if (xc_ia64_build_hob(xc_handle, dom, dom_memsize) < 0){
PERROR("Could not build hob\n");
goto error_out;
}
/* Retrieve special pages like io, xenstore, etc. */
- if ( xc_ia64_get_pfn_list(xc_handle, dom, page_array,
IO_PAGE_START>>PAGE_SHIFT, 2) != 2 )
+ if ( xc_ia64_get_pfn_list(xc_handle, dom, page_array,
+ RAW_IO_PAGE_START_NR(dom_memsize), 2) != 2 )
{
PERROR("Could not get the page frame list");
goto error_out;
diff -r 0a6f5527ca4b -r 827c65c06a66 xen/arch/ia64/vmx/vmx_init.c
--- a/xen/arch/ia64/vmx/vmx_init.c Tue Apr 04 09:39:45 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_init.c Tue Apr 04 09:43:41 2006 -0600
@@ -327,13 +327,15 @@ io_range_t io_ranges[] = {
#define VMX_SYS_PAGES (2 + (GFW_SIZE >> PAGE_SHIFT))
#define VMX_CONFIG_PAGES(d) ((d)->max_pages - VMX_SYS_PAGES)
-int vmx_alloc_contig_pages(struct domain *d)
-{
- unsigned long i, j, start,tmp, end, pgnr, conf_nr;
- struct page_info *page;
+int vmx_build_physmap_table(struct domain *d)
+{
+ unsigned long i, j, start, tmp, end, mfn;
struct vcpu *v = d->vcpu[0];
-
+ struct list_head *list_ent = d->page_list.next;
+
+ ASSERT(!d->arch.physmap_built);
ASSERT(!test_bit(ARCH_VMX_CONTIG_MEM, &v->arch.arch_vmx.flags));
+ ASSERT(d->max_pages == d->tot_pages);
/* Mark I/O ranges */
for (i = 0; i < (sizeof(io_ranges) / sizeof(io_range_t)); i++) {
@@ -343,103 +345,54 @@ int vmx_alloc_contig_pages(struct domain
assign_domain_page(d, j, io_ranges[i].type);
}
- conf_nr = VMX_CONFIG_PAGES(d);
- if((conf_nr<<PAGE_SHIFT)<(1UL<<(_PAGE_SIZE_64M+1)))
- panic("vti domain needs 128M memory at least\n");
-/*
- order = get_order_from_pages(conf_nr);
- if (unlikely((page = alloc_domheap_pages(d, order, 0)) == NULL)) {
- printk("Could not allocate order=%d pages for vmx contig alloc\n",
- order);
- return -1;
- }
-*/
-
-/* reserve contiguous 64M for linux kernel */
-
- if (unlikely((page =
alloc_domheap_pages(d,(KERNEL_TR_PAGE_SHIFT-PAGE_SHIFT), 0)) == NULL)) {
- printk("No enough memory for vti domain!!!\n");
- return -1;
- }
- pgnr = page_to_mfn(page);
- for
(i=(1UL<<KERNEL_TR_PAGE_SHIFT);i<(1UL<<(KERNEL_TR_PAGE_SHIFT+1));i+=PAGE_SIZE,pgnr++){
- assign_domain_page(d, i, pgnr << PAGE_SHIFT);
- }
-
- for (i = 0; i < (1UL<<KERNEL_TR_PAGE_SHIFT) ; i += PAGE_SIZE){
- if (unlikely((page = alloc_domheap_pages(d, 0, 0)) == NULL)) {
- printk("No enough memory for vti domain!!!\n");
- return -1;
- }
- pgnr = page_to_mfn(page);
- assign_domain_page(d, i, pgnr << PAGE_SHIFT);
- }
-
/* Map normal memory below 3G */
- end = conf_nr << PAGE_SHIFT;
- tmp = end < MMIO_START ? end : MMIO_START;
- for (i = (1UL<<(KERNEL_TR_PAGE_SHIFT+1)); i < tmp; i += PAGE_SIZE){
- if (unlikely((page = alloc_domheap_pages(d, 0, 0)) == NULL)) {
- printk("No enough memory for vti domain!!!\n");
- return -1;
- }
- pgnr = page_to_mfn(page);
- assign_domain_page(d, i, pgnr << PAGE_SHIFT);
- }
+ end = VMX_CONFIG_PAGES(d) << PAGE_SHIFT;
+ tmp = end < MMIO_START ? end : MMIO_START;
+ for (i = 0; (i < tmp) && (list_ent != &d->page_list); i += PAGE_SIZE) {
+ mfn = page_to_mfn(list_entry(
+ list_ent, struct page_info, list));
+ assign_domain_page(d, i, mfn << PAGE_SHIFT);
+ list_ent = mfn_to_page(mfn)->list.next;
+ }
+ ASSERT(list_ent != &d->page_list);
+
/* Map normal memory beyond 4G */
if (unlikely(end > MMIO_START)) {
start = 4 * MEM_G;
end = start + (end - 3 * MEM_G);
- for (i = start; i < end; i += PAGE_SIZE){
- if (unlikely((page = alloc_domheap_pages(d, 0, 0)) == NULL)) {
- printk("No enough memory for vti domain!!!\n");
- return -1;
- }
- pgnr = page_to_mfn(page);
- assign_domain_page(d, i, pgnr << PAGE_SHIFT);
+ for (i = start; (i < end) &&
+ (list_ent != &d->page_list); i += PAGE_SIZE) {
+ mfn = page_to_mfn(list_entry(
+ list_ent, struct page_info, list));
+ assign_domain_page(d, i, mfn << PAGE_SHIFT);
+ list_ent = mfn_to_page(mfn)->list.next;
+ }
+ ASSERT(list_ent != &d->page_list);
}
- }
+
+ /* Map guest firmware */
+ for (i = GFW_START; (i < GFW_START + GFW_SIZE) &&
+ (list_ent != &d->page_list); i += PAGE_SIZE) {
+ mfn = page_to_mfn(list_entry(
+ list_ent, struct page_info, list));
+ assign_domain_page(d, i, mfn << PAGE_SHIFT);
+ list_ent = mfn_to_page(mfn)->list.next;
+ }
+ ASSERT(list_ent != &d->page_list);
+
+ /* Map for shared I/O page and xenstore */
+ mfn = page_to_mfn(list_entry(list_ent, struct page_info, list));
+ assign_domain_page(d, IO_PAGE_START, mfn << PAGE_SHIFT);
+ list_ent = mfn_to_page(mfn)->list.next;
+ ASSERT(list_ent != &d->page_list);
+
+ mfn = page_to_mfn(list_entry(list_ent, struct page_info, list));
+ assign_domain_page(d, STORE_PAGE_START, mfn << PAGE_SHIFT);
+ list_ent = mfn_to_page(mfn)->list.next;
+ ASSERT(list_ent == &d->page_list);
d->arch.max_pfn = end >> PAGE_SHIFT;
-/*
- order = get_order_from_pages(GFW_SIZE >> PAGE_SHIFT);
- if (unlikely((page = alloc_domheap_pages(d, order, 0)) == NULL)) {
- printk("Could not allocate order=%d pages for vmx contig alloc\n",
- order);`
- return -1;
- }
-*/
- /* Map guest firmware */
- for (i = GFW_START; i < GFW_START + GFW_SIZE; i += PAGE_SIZE, pgnr++){
- if (unlikely((page = alloc_domheap_pages(d, 0, 0)) == NULL)) {
- printk("No enough memory for vti domain!!!\n");
- return -1;
- }
- pgnr = page_to_mfn(page);
- assign_domain_page(d, i, pgnr << PAGE_SHIFT);
- }
-
-/*
- if (unlikely((page = alloc_domheap_pages(d, 1, 0)) == NULL)) {
- printk("Could not allocate order=1 pages for vmx contig alloc\n");
- return -1;
- }
-*/
- /* Map for shared I/O page and xenstore */
- if (unlikely((page = alloc_domheap_pages(d, 0, 0)) == NULL)) {
- printk("No enough memory for vti domain!!!\n");
- return -1;
- }
- pgnr = page_to_mfn(page);
- assign_domain_page(d, IO_PAGE_START, pgnr << PAGE_SHIFT);
-
- if (unlikely((page = alloc_domheap_pages(d, 0, 0)) == NULL)) {
- printk("No enough memory for vti domain!!!\n");
- return -1;
- }
- pgnr = page_to_mfn(page);
- assign_domain_page(d, STORE_PAGE_START, pgnr << PAGE_SHIFT);
-
+ d->arch.physmap_built = 1;
set_bit(ARCH_VMX_CONTIG_MEM, &v->arch.arch_vmx.flags);
return 0;
}
@@ -447,6 +400,10 @@ void vmx_setup_platform(struct domain *d
void vmx_setup_platform(struct domain *d, struct vcpu_guest_context *c)
{
ASSERT(d != dom0); /* only for non-privileged vti domain */
+
+ if (!d->arch.physmap_built)
+ vmx_build_physmap_table(d);
+
d->arch.vmx_platform.shared_page_va =
(unsigned long)__va(__gpa_to_mpa(d, IO_PAGE_START));
/* TEMP */
diff -r 0a6f5527ca4b -r 827c65c06a66 xen/arch/ia64/xen/dom0_ops.c
--- a/xen/arch/ia64/xen/dom0_ops.c Tue Apr 04 09:39:45 2006 -0600
+++ b/xen/arch/ia64/xen/dom0_ops.c Tue Apr 04 09:43:41 2006 -0600
@@ -157,40 +157,45 @@ long arch_do_dom0_op(dom0_op_t *op, GUES
*/
case DOM0_GETMEMLIST:
{
- unsigned long i;
+ unsigned long i = 0;
struct domain *d = find_domain_by_id(op->u.getmemlist.domain);
unsigned long start_page = op->u.getmemlist.max_pfns >> 32;
unsigned long nr_pages = op->u.getmemlist.max_pfns & 0xffffffff;
unsigned long mfn;
+ struct list_head *list_ent;
ret = -EINVAL;
if ( d != NULL )
{
ret = 0;
- /* A temp trick here. When max_pfns == -1, we assume
- * the request is for machine contiguous pages, so request
- * all pages at first query
- */
- if ( (op->u.getmemlist.max_pfns == -1UL) &&
- !test_bit(ARCH_VMX_CONTIG_MEM,
- &d->vcpu[0]->arch.arch_vmx.flags) ) {
- ret = (long) vmx_alloc_contig_pages(d);
- put_domain(d);
- return ret ? (-ENOMEM) : 0;
- }
-
- for ( i = start_page; i < (start_page + nr_pages); i++ )
- {
- mfn = gmfn_to_mfn_foreign(d, i);
-
- if ( copy_to_guest_offset(op->u.getmemlist.buffer,
+ list_ent = d->page_list.next;
+ while ( (i != start_page) && (list_ent != &d->page_list)) {
+ mfn = page_to_mfn(list_entry(
+ list_ent, struct page_info, list));
+ i++;
+ list_ent = mfn_to_page(mfn)->list.next;
+ }
+
+ if (i == start_page)
+ {
+ while((i < (start_page + nr_pages)) &&
+ (list_ent != &d->page_list))
+ {
+ mfn = page_to_mfn(list_entry(
+ list_ent, struct page_info, list));
+
+ if ( copy_to_guest_offset(op->u.getmemlist.buffer,
i - start_page, &mfn, 1) )
- {
- ret = -EFAULT;
- break;
- }
- }
+ {
+ ret = -EFAULT;
+ break;
+ }
+ i++;
+ list_ent = mfn_to_page(mfn)->list.next;
+ }
+ } else
+ ret = -ENOMEM;
op->u.getmemlist.num_pfns = i - start_page;
copy_to_guest(u_dom0_op, op, 1);
diff -r 0a6f5527ca4b -r 827c65c06a66 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Tue Apr 04 09:39:45 2006 -0600
+++ b/xen/arch/ia64/xen/domain.c Tue Apr 04 09:43:41 2006 -0600
@@ -76,6 +76,7 @@ extern void serial_input_init(void);
extern void serial_input_init(void);
static void init_switch_stack(struct vcpu *v);
+void build_physmap_table(struct domain *d);
/* this belongs in include/asm, but there doesn't seem to be a suitable place
*/
void arch_domain_destroy(struct domain *d)
@@ -272,6 +273,7 @@ int arch_domain_create(struct domain *d)
memset(d->arch.mm, 0, sizeof(*d->arch.mm));
INIT_LIST_HEAD(&d->arch.mm->pt_list);
+ d->arch.physmap_built = 0;
if ((d->arch.mm->pgd = pgd_alloc(d->arch.mm)) == NULL)
goto fail_nomem;
@@ -317,7 +319,8 @@ int arch_set_info_guest(struct vcpu *v,
vmx_setup_platform(d, c);
vmx_final_setup_guest(v);
- }
+ } else if (!d->arch.physmap_built)
+ build_physmap_table(d);
*regs = c->regs;
if (v == d->vcpu[0]) {
@@ -583,44 +586,24 @@ void assign_domain_page(struct domain *d
*(mpt_table + (physaddr>>PAGE_SHIFT))=(mpaddr>>PAGE_SHIFT);
}
}
-#if 0
-/* map a physical address with specified I/O flag */
-void assign_domain_io_page(struct domain *d, unsigned long mpaddr, unsigned
long flags)
-{
- struct mm_struct *mm = d->arch.mm;
- pgd_t *pgd;
- pud_t *pud;
- pmd_t *pmd;
- pte_t *pte;
- pte_t io_pte;
-
- if (!mm->pgd) {
- printk("assign_domain_page: domain pgd must exist!\n");
- return;
- }
- ASSERT(flags & GPFN_IO_MASK);
-
- pgd = pgd_offset(mm,mpaddr);
- if (pgd_none(*pgd))
- pgd_populate(mm, pgd, pud_alloc_one(mm,mpaddr));
-
- pud = pud_offset(pgd, mpaddr);
- if (pud_none(*pud))
- pud_populate(mm, pud, pmd_alloc_one(mm,mpaddr));
-
- pmd = pmd_offset(pud, mpaddr);
- if (pmd_none(*pmd))
- pmd_populate_kernel(mm, pmd, pte_alloc_one_kernel(mm,mpaddr));
-// pmd_populate(mm, pmd, pte_alloc_one(mm,mpaddr));
-
- pte = pte_offset_map(pmd, mpaddr);
- if (pte_none(*pte)) {
- pte_val(io_pte) = flags;
- set_pte(pte, io_pte);
- }
- else printk("assign_domain_page: mpaddr %lx already mapped!\n",mpaddr);
-}
-#endif
+
+void build_physmap_table(struct domain *d)
+{
+ struct list_head *list_ent = d->page_list.next;
+ unsigned long mfn, i = 0;
+
+ ASSERT(!d->arch.physmap_built);
+ while(list_ent != &d->page_list) {
+ mfn = page_to_mfn(list_entry(
+ list_ent, struct page_info, list));
+ assign_domain_page(d, i << PAGE_SHIFT, mfn << PAGE_SHIFT);
+
+ i++;
+ list_ent = mfn_to_page(mfn)->list.next;
+ }
+ d->arch.physmap_built = 1;
+}
+
void mpafoo(unsigned long mpaddr)
{
extern unsigned long privop_trace;
@@ -650,7 +633,6 @@ unsigned long lookup_domain_mpa(struct d
return *(unsigned long *)pte;
}
#endif
-tryagain:
if (pgd_present(*pgd)) {
pud = pud_offset(pgd,mpaddr);
if (pud_present(*pud)) {
@@ -665,12 +647,12 @@ tryagain:
}
}
}
- /* if lookup fails and mpaddr is "legal", "create" the page */
if ((mpaddr >> PAGE_SHIFT) < d->max_pages) {
- if (assign_new_domain_page(d,mpaddr)) goto tryagain;
- }
- printk("lookup_domain_mpa: bad mpa 0x%lx (> 0x%lx)\n",
- mpaddr, (unsigned long) d->max_pages<<PAGE_SHIFT);
+ printk("lookup_domain_mpa: non-allocated mpa 0x%lx (< 0x%lx)\n",
+ mpaddr, (unsigned long) d->max_pages<<PAGE_SHIFT);
+ } else
+ printk("lookup_domain_mpa: bad mpa 0x%lx (> 0x%lx)\n",
+ mpaddr, (unsigned long) d->max_pages<<PAGE_SHIFT);
mpafoo(mpaddr);
return 0;
}
diff -r 0a6f5527ca4b -r 827c65c06a66 xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c Tue Apr 04 09:39:45 2006 -0600
+++ b/xen/arch/ia64/xen/hypercall.c Tue Apr 04 09:43:41 2006 -0600
@@ -76,25 +76,8 @@ xen_hypercall (struct pt_regs *regs)
break;
case __HYPERVISOR_memory_op:
- /* we don't handle reservations; just return success */
- {
- struct xen_memory_reservation reservation;
- void *arg = (void *) regs->r15;
-
- switch(regs->r14) {
- case XENMEM_increase_reservation:
- case XENMEM_decrease_reservation:
- if (copy_from_user(&reservation, arg,
- sizeof(reservation)))
- regs->r8 = -EFAULT;
- else
- regs->r8 = reservation.nr_extents;
- break;
- default:
- regs->r8 = do_memory_op((int) regs->r14,
guest_handle_from_ptr(regs->r15, void));
- break;
- }
- }
+ regs->r8 = do_memory_op(regs->r14,
+ guest_handle_from_ptr(regs->r15, void));
break;
case __HYPERVISOR_event_channel_op:
@@ -102,19 +85,24 @@ xen_hypercall (struct pt_regs *regs)
break;
case __HYPERVISOR_grant_table_op:
- regs->r8 = do_grant_table_op((unsigned int) regs->r14,
guest_handle_from_ptr(regs->r15, void), (unsigned int) regs->r16);
+ regs->r8 = do_grant_table_op((unsigned int) regs->r14,
+ guest_handle_from_ptr(regs->r15, void),
+ (unsigned int) regs->r16);
break;
case __HYPERVISOR_console_io:
- regs->r8 = do_console_io((int) regs->r14, (int) regs->r15,
guest_handle_from_ptr(regs->r16, char));
+ regs->r8 = do_console_io((int) regs->r14, (int) regs->r15,
+ guest_handle_from_ptr(regs->r16, char));
break;
case __HYPERVISOR_xen_version:
- regs->r8 = do_xen_version((int) regs->r14,
guest_handle_from_ptr(regs->r15, void));
+ regs->r8 = do_xen_version((int) regs->r14,
+ guest_handle_from_ptr(regs->r15, void));
break;
case __HYPERVISOR_multicall:
- regs->r8 = do_multicall(guest_handle_from_ptr(regs->r14,
multicall_entry_t), (unsigned int) regs->r15);
+ regs->r8 = do_multicall(guest_handle_from_ptr(regs->r14,
+ multicall_entry_t), (unsigned int) regs->r15);
break;
default:
diff -r 0a6f5527ca4b -r 827c65c06a66 xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h Tue Apr 04 09:39:45 2006 -0600
+++ b/xen/include/asm-ia64/domain.h Tue Apr 04 09:43:41 2006 -0600
@@ -27,6 +27,7 @@ struct arch_domain {
int rid_bits; /* number of virtual rid bits (default: 18) */
int breakimm;
+ int physmap_built; /* Whether is physmap built or not */
int imp_va_msb;
/* System pages out of guest memory, like for xenstore/console */
unsigned long sys_pgnr;
diff -r 0a6f5527ca4b -r 827c65c06a66 xen/include/asm-ia64/vmx.h
--- a/xen/include/asm-ia64/vmx.h Tue Apr 04 09:39:45 2006 -0600
+++ b/xen/include/asm-ia64/vmx.h Tue Apr 04 09:43:41 2006 -0600
@@ -40,7 +40,7 @@ extern void vmx_save_state(struct vcpu *
extern void vmx_save_state(struct vcpu *v);
extern void vmx_load_state(struct vcpu *v);
extern void show_registers(struct pt_regs *regs);
-extern int vmx_alloc_contig_pages(struct domain *d);
+extern int vmx_build_physmap_table(struct domain *d);
extern unsigned long __gpfn_to_mfn_foreign(struct domain *d, unsigned long
gpfn);
extern void sync_split_caches(void);
extern void vmx_virq_line_assist(struct vcpu *v);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|