# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID dfdb9cfc8b7969cb9ea4fd4995c68cdfdb3acdac
# Parent 1d36cca98fc3710643483e5a5648b7ae317c735d
# Parent 6526a91d55553b712cb210cbefb363e71b380679
merge
diff -r 1d36cca98fc3 -r dfdb9cfc8b79
linux-2.6-xen-sparse/arch/ia64/kernel/setup.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c Fri Feb 10 11:35:19 2006
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c Fri Feb 10 15:37:14 2006
@@ -61,6 +61,9 @@
#include <asm/system.h>
#include <asm/unistd.h>
#include <asm/system.h>
+#ifdef CONFIG_XEN
+#include <asm/hypervisor.h>
+#endif
#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
# error "struct cpuinfo_ia64 too big!"
@@ -240,6 +243,12 @@
rsvd_region[n].start = (unsigned long) ia64_imva((void *)KERNEL_START);
rsvd_region[n].end = (unsigned long) ia64_imva(_end);
n++;
+
+#ifdef CONFIG_XEN
+ rsvd_region[n].start = (unsigned long)
(HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT);
+ rsvd_region[n].end = rsvd_region[n].start + PAGE_SIZE;
+ n++;
+#endif
#ifdef CONFIG_BLK_DEV_INITRD
if (ia64_boot_param->initrd_start) {
diff -r 1d36cca98fc3 -r dfdb9cfc8b79
linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c Fri Feb 10
11:35:19 2006
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c Fri Feb 10
15:37:14 2006
@@ -106,8 +106,10 @@
BUG_ON(HYPERVISOR_event_channel_op(&op) != 0 );
evtchn = op.u.bind_virq.port;
- if (!unbound_irq(evtchn))
- return -EINVAL;
+ if (!unbound_irq(evtchn)) {
+ evtchn = -EINVAL;
+ goto out;
+ }
evtchns[evtchn].handler = handler;
evtchns[evtchn].dev_id = dev_id;
@@ -115,6 +117,7 @@
irq_info[evtchn] = mk_irq_info(IRQT_VIRQ, virq, evtchn);
unmask_evtchn(evtchn);
+out:
spin_unlock(&irq_mapping_update_lock);
return evtchn;
}
@@ -125,8 +128,10 @@
{
spin_lock(&irq_mapping_update_lock);
- if (!unbound_irq(evtchn))
- return -EINVAL;
+ if (!unbound_irq(evtchn)) {
+ evtchn = -EINVAL;
+ goto out;
+ }
evtchns[evtchn].handler = handler;
evtchns[evtchn].dev_id = dev_id;
@@ -134,6 +139,7 @@
irq_info[evtchn] = mk_irq_info(IRQT_EVTCHN, 0, evtchn);
unmask_evtchn(evtchn);
+out:
spin_unlock(&irq_mapping_update_lock);
return evtchn;
}
@@ -158,7 +164,7 @@
spin_lock(&irq_mapping_update_lock);
if (unbound_irq(irq))
- return;
+ goto out;
op.cmd = EVTCHNOP_close;
op.u.close.port = evtchn;
@@ -179,6 +185,7 @@
evtchns[evtchn].handler = NULL;
evtchns[evtchn].opened = 0;
+out:
spin_unlock(&irq_mapping_update_lock);
}
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/arch/ia64/vmx/vmx_init.c
--- a/xen/arch/ia64/vmx/vmx_init.c Fri Feb 10 11:35:19 2006
+++ b/xen/arch/ia64/vmx/vmx_init.c Fri Feb 10 15:37:14 2006
@@ -317,7 +317,7 @@
for (j = io_ranges[i].start;
j < io_ranges[i].start + io_ranges[i].size;
j += PAGE_SIZE)
- map_domain_page(d, j, io_ranges[i].type);
+ assign_domain_page(d, j, io_ranges[i].type);
}
conf_nr = VMX_CONFIG_PAGES(d);
@@ -334,14 +334,14 @@
for (i = 0;
i < (end < MMIO_START ? end : MMIO_START);
i += PAGE_SIZE, pgnr++)
- map_domain_page(d, i, pgnr << PAGE_SHIFT);
+ assign_domain_page(d, i, pgnr << PAGE_SHIFT);
/* 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, pgnr++)
- map_domain_page(d, i, pgnr << PAGE_SHIFT);
+ assign_domain_page(d, i, pgnr << PAGE_SHIFT);
}
d->arch.max_pfn = end >> PAGE_SHIFT;
@@ -356,7 +356,7 @@
/* Map guest firmware */
pgnr = page_to_mfn(page);
for (i = GFW_START; i < GFW_START + GFW_SIZE; i += PAGE_SIZE, pgnr++)
- map_domain_page(d, i, pgnr << PAGE_SHIFT);
+ 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");
@@ -365,9 +365,9 @@
/* Map for shared I/O page and xenstore */
pgnr = page_to_mfn(page);
- map_domain_page(d, IO_PAGE_START, pgnr << PAGE_SHIFT);
+ assign_domain_page(d, IO_PAGE_START, pgnr << PAGE_SHIFT);
pgnr++;
- map_domain_page(d, STORE_PAGE_START, pgnr << PAGE_SHIFT);
+ assign_domain_page(d, STORE_PAGE_START, pgnr << PAGE_SHIFT);
set_bit(ARCH_VMX_CONTIG_MEM, &v->arch.arch_vmx.flags);
return 0;
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Fri Feb 10 11:35:19 2006
+++ b/xen/arch/ia64/xen/domain.c Fri Feb 10 15:37:14 2006
@@ -389,7 +389,7 @@
}
/* allocate new page for domain and map it to the specified metaphysical addr
*/
-struct page * map_new_domain_page(struct domain *d, unsigned long mpaddr)
+struct page * assign_new_domain_page(struct domain *d, unsigned long mpaddr)
{
struct mm_struct *mm = d->arch.mm;
struct page *p = (struct page *)0;
@@ -400,7 +400,7 @@
extern unsigned long vhpt_paddr, vhpt_pend;
if (!mm->pgd) {
- printk("map_new_domain_page: domain pgd must exist!\n");
+ printk("assign_new_domain_page: domain pgd must exist!\n");
return(p);
}
pgd = pgd_offset(mm,mpaddr);
@@ -428,21 +428,21 @@
if (p) memset(__va(page_to_maddr(p)),0,PAGE_SIZE);
}
if (unlikely(!p)) {
-printf("map_new_domain_page: Can't alloc!!!! Aaaargh!\n");
+printf("assign_new_domain_page: Can't alloc!!!! Aaaargh!\n");
return(p);
}
if (unlikely(page_to_maddr(p) > vhpt_paddr && page_to_maddr(p) < vhpt_pend)) {
- printf("map_new_domain_page: reassigned vhpt page %p!!\n",page_to_maddr(p));
+ printf("assign_new_domain_page: reassigned vhpt page
%p!!\n",page_to_maddr(p));
}
set_pte(pte, pfn_pte(page_to_maddr(p) >> PAGE_SHIFT,
__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX)));
}
- else printk("map_new_domain_page: mpaddr %lx already mapped!\n",mpaddr);
+ else printk("assign_new_domain_page: mpaddr %lx already
mapped!\n",mpaddr);
return p;
}
/* map a physical address to the specified metaphysical addr */
-void map_domain_page(struct domain *d, unsigned long mpaddr, unsigned long
physaddr)
+void assign_domain_page(struct domain *d, unsigned long mpaddr, unsigned long
physaddr)
{
struct mm_struct *mm = d->arch.mm;
pgd_t *pgd;
@@ -451,7 +451,7 @@
pte_t *pte;
if (!mm->pgd) {
- printk("map_domain_page: domain pgd must exist!\n");
+ printk("assign_domain_page: domain pgd must exist!\n");
return;
}
pgd = pgd_offset(mm,mpaddr);
@@ -472,11 +472,11 @@
set_pte(pte, pfn_pte(physaddr >> PAGE_SHIFT,
__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX)));
}
- else printk("map_domain_page: mpaddr %lx already mapped!\n",mpaddr);
+ else printk("assign_domain_page: mpaddr %lx already mapped!\n",mpaddr);
}
#if 0
/* map a physical address with specified I/O flag */
-void map_domain_io_page(struct domain *d, unsigned long mpaddr, unsigned long
flags)
+void assign_domain_io_page(struct domain *d, unsigned long mpaddr, unsigned
long flags)
{
struct mm_struct *mm = d->arch.mm;
pgd_t *pgd;
@@ -486,7 +486,7 @@
pte_t io_pte;
if (!mm->pgd) {
- printk("map_domain_page: domain pgd must exist!\n");
+ printk("assign_domain_page: domain pgd must exist!\n");
return;
}
ASSERT(flags & GPFN_IO_MASK);
@@ -509,7 +509,7 @@
pte_val(io_pte) = flags;
set_pte(pte, io_pte);
}
- else printk("map_domain_page: mpaddr %lx already mapped!\n",mpaddr);
+ else printk("assign_domain_page: mpaddr %lx already mapped!\n",mpaddr);
}
#endif
void mpafoo(unsigned long mpaddr)
@@ -557,7 +557,7 @@
}
/* if lookup fails and mpaddr is "legal", "create" the page */
if ((mpaddr >> PAGE_SHIFT) < d->max_pages) {
- if (map_new_domain_page(d,mpaddr)) goto tryagain;
+ if (assign_new_domain_page(d,mpaddr)) goto tryagain;
}
printk("lookup_domain_mpa: bad mpa %p (> %p\n",
mpaddr,d->max_pages<<PAGE_SHIFT);
@@ -655,15 +655,9 @@
else
#endif
while (memsz > 0) {
-#ifdef DOMU_AUTO_RESTART
- pteval = lookup_domain_mpa(d,dom_mpaddr);
- if (pteval) dom_imva = __va(pteval & _PFN_MASK);
- else { printf("loaddomainelfimage: BAD!\n"); while(1); }
-#else
- p = map_new_domain_page(d,dom_mpaddr);
+ p = assign_new_domain_page(d,dom_mpaddr);
if (unlikely(!p)) BUG();
dom_imva = __va(page_to_maddr(p));
-#endif
if (filesz > 0) {
if (filesz >= PAGE_SIZE)
copy_memory(dom_imva,elfaddr,PAGE_SIZE);
@@ -788,16 +782,15 @@
unsigned long pkern_entry;
unsigned long pkern_end;
unsigned long pinitrd_start = 0;
+ unsigned long pstart_info;
unsigned long ret, progress = 0;
//printf("construct_dom0: starting\n");
-#ifndef CLONE_DOMAIN0
/* Sanity! */
BUG_ON(d != dom0);
BUG_ON(d->vcpu[0] == NULL);
BUG_ON(test_bit(_VCPUF_initialised, &v->vcpu_flags));
-#endif
memset(&dsi, 0, sizeof(struct domain_setup_info));
@@ -847,13 +840,18 @@
(PAGE_ALIGN(initrd_len) + 4*1024*1024);
memcpy(__va(pinitrd_start),initrd_start,initrd_len);
+ pstart_info = PAGE_ALIGN(pinitrd_start + initrd_len);
+ } else {
+ pstart_info = PAGE_ALIGN(pkern_end);
}
printk("METAPHYSICAL MEMORY ARRANGEMENT:\n"
" Kernel image: %lx->%lx\n"
" Entry address: %lx\n"
- " Init. ramdisk: %lx len %lx\n",
- pkern_start, pkern_end, pkern_entry, pinitrd_start, initrd_len);
+ " Init. ramdisk: %lx len %lx\n"
+ " Start info.: %lx->%lx\n",
+ pkern_start, pkern_end, pkern_entry, pinitrd_start, initrd_len,
+ pstart_info, pstart_info + PAGE_SIZE);
if ( (pkern_end - pkern_start) > (d->max_pages * PAGE_SIZE) )
{
@@ -908,9 +906,9 @@
/* Set up start info area. */
- si = (start_info_t *)alloc_xenheap_page();
+ d->shared_info->arch.start_info_pfn = pstart_info >> PAGE_SHIFT;
+ si = __va(pstart_info);
memset(si, 0, PAGE_SIZE);
- d->shared_info->arch.start_info_pfn = __pa(si) >> PAGE_SHIFT;
sprintf(si->magic, "xen-%i.%i-ia64", XEN_VERSION, XEN_SUBVERSION);
si->nr_pages = d->tot_pages;
@@ -962,9 +960,6 @@
sync_split_caches();
// FIXME: Hack for keyboard input
-#ifdef CLONE_DOMAIN0
-if (d == dom0)
-#endif
serial_input_init();
if (d == dom0) {
VCPU(v, delivery_mask[0]) = -1L;
@@ -977,65 +972,6 @@
return 0;
}
-// FIXME: When dom0 can construct domains, this goes away (or is rewritten)
-int construct_domU(struct domain *d,
- unsigned long image_start, unsigned long image_len,
- unsigned long initrd_start, unsigned long initrd_len,
- char *cmdline)
-{
- int i, rc;
- struct vcpu *v = d->vcpu[0];
- unsigned long pkern_entry;
-
-#ifndef DOMU_AUTO_RESTART
- BUG_ON(test_bit(_VCPUF_initialised, &v->vcpu_flags));
-#endif
-
- printk("*** LOADING DOMAIN %d ***\n",d->domain_id);
-
- d->max_pages = dom0_size/PAGE_SIZE; // FIXME: use dom0 size
- // FIXME: use domain0 command line
- rc = parsedomainelfimage(image_start, image_len, &pkern_entry);
- printk("parsedomainelfimage returns %d\n",rc);
- if ( rc != 0 ) return rc;
-
- /* Mask all upcalls... */
- for ( i = 0; i < MAX_VIRT_CPUS; i++ )
- d->shared_info->vcpu_info[i].evtchn_upcall_mask = 1;
-
- /* Copy the OS image. */
- printk("calling loaddomainelfimage(%p,%p)\n",d,image_start);
- loaddomainelfimage(d,image_start);
- printk("loaddomainelfimage returns\n");
-
- set_bit(_VCPUF_initialised, &v->vcpu_flags);
-
- printk("calling new_thread, entry=%p\n",pkern_entry);
-#ifdef DOMU_AUTO_RESTART
- v->domain->arch.image_start = image_start;
- v->domain->arch.image_len = image_len;
- v->domain->arch.entry = pkern_entry;
-#endif
- new_thread(v, pkern_entry, 0, 0);
- printk("new_thread returns\n");
- sync_split_caches();
- __set_bit(0x30, VCPU(v, delivery_mask));
-
- return 0;
-}
-
-#ifdef DOMU_AUTO_RESTART
-void reconstruct_domU(struct vcpu *v)
-{
- /* re-copy the OS image to reset data values to original */
- printk("reconstruct_domU: restarting domain %d...\n",
- v->domain->domain_id);
- loaddomainelfimage(v->domain,v->domain->arch.image_start);
- new_thread(v, v->domain->arch.entry, 0, 0);
- sync_split_caches();
-}
-#endif
-
void machine_restart(char * __unused)
{
if (platform_is_hp_ski()) dummy();
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c Fri Feb 10 11:35:19 2006
+++ b/xen/arch/ia64/xen/hypercall.c Fri Feb 10 15:37:14 2006
@@ -9,6 +9,7 @@
#include <xen/config.h>
#include <xen/sched.h>
#include <xen/hypercall.h>
+#include <xen/multicall.h>
#include <linux/efi.h> /* FOR EFI_UNIMPLEMENTED */
#include <asm/sal.h> /* FOR struct ia64_sal_retval */
@@ -22,6 +23,42 @@
unsigned long idle_when_pending = 0;
unsigned long pal_halt_light_count = 0;
+
+hypercall_t ia64_hypercall_table[] =
+ {
+ (hypercall_t)do_ni_hypercall, /* do_set_trap_table */
/* 0 */
+ (hypercall_t)do_ni_hypercall, /* do_mmu_update */
+ (hypercall_t)do_ni_hypercall, /* do_set_gdt */
+ (hypercall_t)do_ni_hypercall, /* do_stack_switch */
+ (hypercall_t)do_ni_hypercall, /* do_set_callbacks */
+ (hypercall_t)do_ni_hypercall, /* do_fpu_taskswitch */
/* 5 */
+ (hypercall_t)do_ni_hypercall, /* do_sched_op */
+ (hypercall_t)do_dom0_op,
+ (hypercall_t)do_ni_hypercall, /* do_set_debugreg */
+ (hypercall_t)do_ni_hypercall, /* do_get_debugreg */
+ (hypercall_t)do_ni_hypercall, /* do_update_descriptor */
/* 10 */
+ (hypercall_t)do_ni_hypercall, /* do_ni_hypercall */
+ (hypercall_t)do_memory_op,
+ (hypercall_t)do_multicall,
+ (hypercall_t)do_ni_hypercall, /* do_update_va_mapping */
+ (hypercall_t)do_ni_hypercall, /* do_set_timer_op */
/* 15 */
+ (hypercall_t)do_event_channel_op,
+ (hypercall_t)do_xen_version,
+ (hypercall_t)do_console_io,
+ (hypercall_t)do_ni_hypercall, /* do_physdev_op */
+ (hypercall_t)do_grant_table_op,
/* 20 */
+ (hypercall_t)do_ni_hypercall, /* do_vm_assist */
+ (hypercall_t)do_ni_hypercall, /*
do_update_va_mapping_otherdomain */
+ (hypercall_t)do_ni_hypercall, /* (x86 only) */
+ (hypercall_t)do_ni_hypercall, /* do_vcpu_op */
+ (hypercall_t)do_ni_hypercall, /* (x86_64 only) */
/* 25 */
+ (hypercall_t)do_ni_hypercall, /* do_mmuext_op */
+ (hypercall_t)do_ni_hypercall, /* do_acm_op */
+ (hypercall_t)do_ni_hypercall, /* do_nmi_op */
+ (hypercall_t)do_ni_hypercall, /* */
+ (hypercall_t)do_ni_hypercall, /* */
/* 30 */
+ (hypercall_t)do_ni_hypercall /* */
+ };
int
ia64_hypercall (struct pt_regs *regs)
@@ -94,15 +131,8 @@
printf("(by dom0)\n ");
(*efi.reset_system)(EFI_RESET_WARM,0,0,NULL);
}
-#ifdef DOMU_AUTO_RESTART
- else {
- reconstruct_domU(current);
- return 0; // don't increment ip!
- }
-#else
printf("(not supported for non-0 domain)\n");
regs->r8 = EFI_UNSUPPORTED;
-#endif
break;
case FW_HYPERCALL_EFI_GET_TIME:
tv = vcpu_get_gr(v,32);
@@ -181,9 +211,13 @@
regs->r8 = do_xen_version(regs->r14, regs->r15);
break;
+ case __HYPERVISOR_multicall:
+ regs->r8 = do_multicall(regs->r14, regs->r15);
+ break;
+
default:
printf("unknown hypercall %x\n", regs->r2);
- regs->r8 = (unsigned long)-1;
+ regs->r8 = do_ni_hypercall();
}
return 1;
}
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/arch/ia64/xen/xenmisc.c
--- a/xen/arch/ia64/xen/xenmisc.c Fri Feb 10 11:35:19 2006
+++ b/xen/arch/ia64/xen/xenmisc.c Fri Feb 10 15:37:14 2006
@@ -168,7 +168,11 @@
void *pgtable_quicklist_alloc(void)
{
- return alloc_xenheap_pages(0);
+ void *p;
+ p = alloc_xenheap_pages(0);
+ if (p)
+ clear_page(p);
+ return p;
}
void pgtable_quicklist_free(void *pgtable_entry)
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/arch/ia64/xen/xensetup.c
--- a/xen/arch/ia64/xen/xensetup.c Fri Feb 10 11:35:19 2006
+++ b/xen/arch/ia64/xen/xensetup.c Fri Feb 10 15:37:14 2006
@@ -31,9 +31,6 @@
cpumask_t cpu_present_map;
-#ifdef CLONE_DOMAIN0
-struct domain *clones[CLONE_DOMAIN0];
-#endif
extern unsigned long domain0_ready;
int find_max_pfn (unsigned long, unsigned long, void *);
@@ -342,16 +339,6 @@
printk("About to call domain_create()\n");
dom0 = domain_create(0, 0);
-#ifdef CLONE_DOMAIN0
- {
- int i;
- for (i = 0; i < CLONE_DOMAIN0; i++) {
- clones[i] = domain_create(i+1, 0);
- if ( clones[i] == NULL )
- panic("Error creating domain0 clone %d\n",i);
- }
- }
-#endif
if ( dom0 == NULL )
panic("Error creating domain 0\n");
@@ -376,22 +363,6 @@
/* PIN domain0 on CPU 0. */
dom0->vcpu[0]->cpu_affinity = cpumask_of_cpu(0);
-#ifdef CLONE_DOMAIN0
- {
- int i;
- dom0_memory_start = __va(ia64_boot_param->domain_start);
- dom0_memory_size = ia64_boot_param->domain_size;
-
- for (i = 0; i < CLONE_DOMAIN0; i++) {
- printk("CONSTRUCTING DOMAIN0 CLONE #%d\n",i+1);
- if ( construct_domU(clones[i], dom0_memory_start, dom0_memory_size,
- dom0_initrd_start,dom0_initrd_size,
- 0) != 0)
- panic("Could not set up DOM0 clone %d\n",i);
- }
- }
-#endif
-
/* The stash space for the initial kernel image can now be freed up. */
init_domheap_pages(ia64_boot_param->domain_start,
ia64_boot_param->domain_size);
@@ -412,13 +383,6 @@
console_endboot(cmdline && strstr(cmdline, "tty0"));
#endif
-#ifdef CLONE_DOMAIN0
- {
- int i;
- for (i = 0; i < CLONE_DOMAIN0; i++)
- domain_unpause_by_systemcontroller(clones[i]);
- }
-#endif
domain0_ready = 1;
local_irq_enable();
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/include/asm-ia64/config.h
--- a/xen/include/asm-ia64/config.h Fri Feb 10 11:35:19 2006
+++ b/xen/include/asm-ia64/config.h Fri Feb 10 15:37:14 2006
@@ -3,11 +3,8 @@
#undef USE_PAL_EMULATOR
// control flags for turning on/off features under test
-#undef CLONE_DOMAIN0
-//#define CLONE_DOMAIN0 1
#undef DOMU_BUILD_STAGING
#define VHPT_GLOBAL
-#define DOMU_AUTO_RESTART
#undef DEBUG_PFMON
@@ -215,9 +212,6 @@
// see include/asm-ia64/mm.h, handle remaining page_info uses until gone
#define page_info page
-// see common/memory.c
-#define set_gpfn_from_mfn(x,y) do { } while (0)
-
// see common/keyhandler.c
#define nop() asm volatile ("nop 0")
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h Fri Feb 10 11:35:19 2006
+++ b/xen/include/asm-ia64/domain.h Fri Feb 10 15:37:14 2006
@@ -32,11 +32,6 @@
u64 xen_vastart;
u64 xen_vaend;
u64 shared_info_va;
-#ifdef DOMU_AUTO_RESTART
- u64 image_start;
- u64 image_len;
- u64 entry;
-#endif
unsigned long initrd_start;
unsigned long initrd_len;
char *cmdline;
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/include/asm-ia64/grant_table.h
--- a/xen/include/asm-ia64/grant_table.h Fri Feb 10 11:35:19 2006
+++ b/xen/include/asm-ia64/grant_table.h Fri Feb 10 15:37:14 2006
@@ -17,7 +17,7 @@
#define gnttab_shared_gmfn(d, t, i) \
( ((d) == dom0) ? \
((virt_to_maddr((t)->shared) >> PAGE_SHIFT) + (i)) : \
- (map_domain_page((d), 1UL<<40, virt_to_maddr((t)->shared)), \
+ (assign_domain_page((d), 1UL<<40, virt_to_maddr((t)->shared)), \
1UL << (40 - PAGE_SHIFT)) \
)
diff -r 1d36cca98fc3 -r dfdb9cfc8b79 xen/include/asm-ia64/multicall.h
--- a/xen/include/asm-ia64/multicall.h Fri Feb 10 11:35:19 2006
+++ b/xen/include/asm-ia64/multicall.h Fri Feb 10 15:37:14 2006
@@ -1,5 +1,27 @@
#ifndef __ASM_IA64_MULTICALL_H__
#define __ASM_IA64_MULTICALL_H__
-#define do_multicall_call(_call) BUG()
+#include <public/xen.h>
+
+typedef unsigned long (*hypercall_t)(
+ unsigned long arg0,
+ unsigned long arg1,
+ unsigned long arg2,
+ unsigned long arg3,
+ unsigned long arg4,
+ unsigned long arg5);
+
+extern hypercall_t ia64_hypercall_table[];
+
+static inline void do_multicall_call(multicall_entry_t *call)
+{
+ call->result = (*ia64_hypercall_table[call->op])(
+ call->args[0],
+ call->args[1],
+ call->args[2],
+ call->args[3],
+ call->args[4],
+ call->args[5]);
+}
+
#endif /* __ASM_IA64_MULTICALL_H__ */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|