ia64/xen-unstable

changeset 8900:ded14681ae84

merge
author awilliam@xenbuild.aw
date Sat Feb 18 13:17:24 2006 -0700 (2006-02-18)
parents 864dcee1f899 dcbe36ee2171
children f53282b4b33a
files linux-2.6-xen-sparse/arch/ia64/kernel/setup.c xen/include/asm-ia64/config.h
line diff
     1.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Sat Feb 18 11:56:51 2006 +0100
     1.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Sat Feb 18 13:17:24 2006 -0700
     1.3 @@ -61,6 +61,9 @@
     1.4  #include <asm/system.h>
     1.5  #include <asm/unistd.h>
     1.6  #include <asm/system.h>
     1.7 +#ifdef CONFIG_XEN
     1.8 +#include <asm/hypervisor.h>
     1.9 +#endif
    1.10  
    1.11  #if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
    1.12  # error "struct cpuinfo_ia64 too big!"
    1.13 @@ -243,6 +246,12 @@ reserve_memory (void)
    1.14  	rsvd_region[n].end   = (unsigned long) ia64_imva(_end);
    1.15  	n++;
    1.16  
    1.17 +#ifdef CONFIG_XEN
    1.18 +	rsvd_region[n].start = (unsigned long) (HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT);
    1.19 +	rsvd_region[n].end   = rsvd_region[n].start + PAGE_SIZE;
    1.20 +	n++;
    1.21 +#endif
    1.22 +
    1.23  #ifdef CONFIG_BLK_DEV_INITRD
    1.24  	if (ia64_boot_param->initrd_start) {
    1.25  		rsvd_region[n].start = (unsigned long)__va(ia64_boot_param->initrd_start);
     2.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c	Sat Feb 18 11:56:51 2006 +0100
     2.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c	Sat Feb 18 13:17:24 2006 -0700
     2.3 @@ -106,8 +106,10 @@ int bind_virq_to_irqhandler(
     2.4      BUG_ON(HYPERVISOR_event_channel_op(&op) != 0 );
     2.5      evtchn = op.u.bind_virq.port;
     2.6  
     2.7 -    if (!unbound_irq(evtchn))
     2.8 -	return -EINVAL;
     2.9 +    if (!unbound_irq(evtchn)) {
    2.10 +        evtchn = -EINVAL;
    2.11 +        goto out;
    2.12 +    }
    2.13  
    2.14      evtchns[evtchn].handler = handler;
    2.15      evtchns[evtchn].dev_id = dev_id;
    2.16 @@ -115,6 +117,7 @@ int bind_virq_to_irqhandler(
    2.17      irq_info[evtchn] = mk_irq_info(IRQT_VIRQ, virq, evtchn);
    2.18  
    2.19      unmask_evtchn(evtchn);
    2.20 +out:
    2.21      spin_unlock(&irq_mapping_update_lock);
    2.22      return evtchn;
    2.23  }
    2.24 @@ -125,8 +128,10 @@ int bind_evtchn_to_irqhandler(unsigned i
    2.25  {
    2.26      spin_lock(&irq_mapping_update_lock);
    2.27  
    2.28 -    if (!unbound_irq(evtchn))
    2.29 -	return -EINVAL;
    2.30 +    if (!unbound_irq(evtchn)) {
    2.31 +	evtchn = -EINVAL;
    2.32 +	goto out;
    2.33 +    }
    2.34  
    2.35      evtchns[evtchn].handler = handler;
    2.36      evtchns[evtchn].dev_id = dev_id;
    2.37 @@ -134,6 +139,7 @@ int bind_evtchn_to_irqhandler(unsigned i
    2.38      irq_info[evtchn] = mk_irq_info(IRQT_EVTCHN, 0, evtchn);
    2.39  
    2.40      unmask_evtchn(evtchn);
    2.41 +out:
    2.42      spin_unlock(&irq_mapping_update_lock);
    2.43      return evtchn;
    2.44  }
    2.45 @@ -158,7 +164,7 @@ void unbind_from_irqhandler(unsigned int
    2.46      spin_lock(&irq_mapping_update_lock);
    2.47  
    2.48      if (unbound_irq(irq))
    2.49 -        return;
    2.50 +        goto out;
    2.51  
    2.52      op.cmd = EVTCHNOP_close;
    2.53      op.u.close.port = evtchn;
    2.54 @@ -179,6 +185,7 @@ void unbind_from_irqhandler(unsigned int
    2.55      evtchns[evtchn].handler = NULL;
    2.56      evtchns[evtchn].opened = 0;
    2.57  
    2.58 +out:
    2.59      spin_unlock(&irq_mapping_update_lock);
    2.60  }
    2.61  
     3.1 --- a/xen/arch/ia64/linux-xen/README.origin	Sat Feb 18 11:56:51 2006 +0100
     3.2 +++ b/xen/arch/ia64/linux-xen/README.origin	Sat Feb 18 13:17:24 2006 -0700
     3.3 @@ -5,19 +5,24 @@
     3.4  # (e.g. with #ifdef XEN or XEN in a comment) so that they can be
     3.5  # easily updated to future versions of the corresponding Linux files.
     3.6  
     3.7 -efi.c		-> linux/arch/ia64/kernel/efi.c
     3.8 -entry.h		-> linux/arch/ia64/kernel/entry.h
     3.9 -entry.S		-> linux/arch/ia64/kernel/entry.S
    3.10 -hpsim_ssc.h	-> linux/arch/ia64/hp/sim/hpsim_ssc.h
    3.11 -irq_ia64.c	-> linux/arch/ia64/kernel/irq_ia64.c
    3.12 -minstate.h	-> linux/arch/ia64/kernel/minstate.h
    3.13 -mm_contig.c	-> linux/arch/ia64/mm/contig.c
    3.14 -pal.S		-> linux/arch/ia64/kernel/pal.S
    3.15 -sal.c		-> linux/arch/ia64/kernel/sal.c
    3.16 -setup.c		-> linux/arch/ia64/kernel/setup.c
    3.17 -smp.c		-> linux/arch/ia64/kernel/smp.c
    3.18 -smpboot.c	-> linux/arch/ia64/kernel/smpboot.c
    3.19 -sort.c		-> linux/lib/sort.c
    3.20 -time.c		-> linux/arch/ia64/kernel/time.c
    3.21 -tlb.c		-> linux/arch/ia64/mm/tlb.c
    3.22 -unaligned.c	-> linux/arch/ia64/kernel/unaligned.c
    3.23 +efi.c			-> linux/arch/ia64/kernel/efi.c
    3.24 +entry.h			-> linux/arch/ia64/kernel/entry.h
    3.25 +entry.S			-> linux/arch/ia64/kernel/entry.S
    3.26 +head.S			-> linux/arch/ia64/kernel/head.S
    3.27 +hpsim_ssc.h		-> linux/arch/ia64/hp/sim/hpsim_ssc.h
    3.28 +irq_ia64.c		-> linux/arch/ia64/kernel/irq_ia64.c
    3.29 +minstate.h		-> linux/arch/ia64/kernel/minstate.h
    3.30 +mm_contig.c		-> linux/arch/ia64/mm/contig.c
    3.31 +pal.S			-> linux/arch/ia64/kernel/pal.S
    3.32 +process-linux-xen.c	-> linux/arch/ia64/kernel/process.c
    3.33 +sal.c			-> linux/arch/ia64/kernel/sal.c
    3.34 +setup.c			-> linux/arch/ia64/kernel/setup.c
    3.35 +smp.c			-> linux/arch/ia64/kernel/smp.c
    3.36 +smpboot.c		-> linux/arch/ia64/kernel/smpboot.c
    3.37 +sort.c			-> linux/lib/sort.c
    3.38 +time.c			-> linux/arch/ia64/kernel/time.c
    3.39 +tlb.c			-> linux/arch/ia64/mm/tlb.c
    3.40 +unaligned.c		-> linux/arch/ia64/kernel/unaligned.c
    3.41 +unwind.c		-> linux/arch/ia64/kernel/unwind.c
    3.42 +unwind_decoder.c	-> linux/arch/ia64/kernel/unwind_decoder.c
    3.43 +unwind_i.h		-> linux/arch/ia64/kernel/unwind_i.h
     4.1 --- a/xen/arch/ia64/linux-xen/irq_ia64.c	Sat Feb 18 11:56:51 2006 +0100
     4.2 +++ b/xen/arch/ia64/linux-xen/irq_ia64.c	Sat Feb 18 13:17:24 2006 -0700
     4.3 @@ -169,7 +169,7 @@ ia64_handle_irq (ia64_vector vector, str
     4.4  	 * handler needs to be able to wait for further keyboard interrupts, which can't
     4.5  	 * come through until ia64_eoi() has been done.
     4.6  	 */
     4.7 -	xen_irq_exit(regs);
     4.8 +	irq_exit();
     4.9  }
    4.10  
    4.11  #ifdef CONFIG_HOTPLUG_CPU
     5.1 --- a/xen/arch/ia64/linux/README.origin	Sat Feb 18 11:56:51 2006 +0100
     5.2 +++ b/xen/arch/ia64/linux/README.origin	Sat Feb 18 13:17:24 2006 -0700
     5.3 @@ -5,14 +5,15 @@ needs to be changed, move it to ../linux
     5.4  the instructions in the README there.
     5.5  
     5.6  cmdline.c		-> linux/lib/cmdline.c
     5.7 -efi_stub.S		-> linux/arch/ia64/efi_stub.S
     5.8 +efi_stub.S		-> linux/arch/ia64/kernel/efi_stub.S
     5.9  extable.c		-> linux/arch/ia64/mm/extable.c
    5.10  hpsim.S			-> linux/arch/ia64/hp/sim/hpsim.S
    5.11  ia64_ksyms.c		-> linux/arch/ia64/kernel/ia64_ksyms.c
    5.12 +irq_lsapic.c		-> linux/arch/ia64/kernel/irq_lsapic.c
    5.13  linuxextable.c		-> linux/kernel/extable.c
    5.14  machvec.c		-> linux/arch/ia64/kernel/machvec.c
    5.15  patch.c			-> linux/arch/ia64/kernel/patch.c
    5.16 -pcdp.h			-> drivers/firmware/pcdp.h
    5.17 +pcdp.h			-> linux/drivers/firmware/pcdp.h
    5.18  
    5.19  bitop.c			-> linux/arch/ia64/lib/bitop.c
    5.20  clear_page.S		-> linux/arch/ia64/lib/clear_page.S
     6.1 --- a/xen/arch/ia64/vmx/vmx_init.c	Sat Feb 18 11:56:51 2006 +0100
     6.2 +++ b/xen/arch/ia64/vmx/vmx_init.c	Sat Feb 18 13:17:24 2006 -0700
     6.3 @@ -317,7 +317,7 @@ int vmx_alloc_contig_pages(struct domain
     6.4  	    for (j = io_ranges[i].start;
     6.5  		 j < io_ranges[i].start + io_ranges[i].size;
     6.6  		 j += PAGE_SIZE)
     6.7 -		map_domain_page(d, j, io_ranges[i].type);
     6.8 +		assign_domain_page(d, j, io_ranges[i].type);
     6.9  	}
    6.10  
    6.11  	conf_nr = VMX_CONFIG_PAGES(d);
    6.12 @@ -334,14 +334,14 @@ int vmx_alloc_contig_pages(struct domain
    6.13  	for (i = 0;
    6.14  	     i < (end < MMIO_START ? end : MMIO_START);
    6.15  	     i += PAGE_SIZE, pgnr++)
    6.16 -	    map_domain_page(d, i, pgnr << PAGE_SHIFT);
    6.17 +	    assign_domain_page(d, i, pgnr << PAGE_SHIFT);
    6.18  
    6.19  	/* Map normal memory beyond 4G */
    6.20  	if (unlikely(end > MMIO_START)) {
    6.21  	    start = 4 * MEM_G;
    6.22  	    end = start + (end - 3 * MEM_G);
    6.23  	    for (i = start; i < end; i += PAGE_SIZE, pgnr++)
    6.24 -		map_domain_page(d, i, pgnr << PAGE_SHIFT);
    6.25 +		assign_domain_page(d, i, pgnr << PAGE_SHIFT);
    6.26  	}
    6.27  
    6.28  	d->arch.max_pfn = end >> PAGE_SHIFT;
    6.29 @@ -356,7 +356,7 @@ int vmx_alloc_contig_pages(struct domain
    6.30  	/* Map guest firmware */
    6.31  	pgnr = page_to_mfn(page);
    6.32  	for (i = GFW_START; i < GFW_START + GFW_SIZE; i += PAGE_SIZE, pgnr++)
    6.33 -	    map_domain_page(d, i, pgnr << PAGE_SHIFT);
    6.34 +	    assign_domain_page(d, i, pgnr << PAGE_SHIFT);
    6.35  
    6.36  	if (unlikely((page = alloc_domheap_pages(d, 1, 0)) == NULL)) {
    6.37  	    printk("Could not allocate order=1 pages for vmx contig alloc\n");
    6.38 @@ -365,9 +365,9 @@ int vmx_alloc_contig_pages(struct domain
    6.39  
    6.40  	/* Map for shared I/O page and xenstore */
    6.41  	pgnr = page_to_mfn(page);
    6.42 -	map_domain_page(d, IO_PAGE_START, pgnr << PAGE_SHIFT);
    6.43 +	assign_domain_page(d, IO_PAGE_START, pgnr << PAGE_SHIFT);
    6.44  	pgnr++;
    6.45 -	map_domain_page(d, STORE_PAGE_START, pgnr << PAGE_SHIFT);
    6.46 +	assign_domain_page(d, STORE_PAGE_START, pgnr << PAGE_SHIFT);
    6.47  
    6.48  	set_bit(ARCH_VMX_CONTIG_MEM, &v->arch.arch_vmx.flags);
    6.49  	return 0;
     7.1 --- a/xen/arch/ia64/xen/domain.c	Sat Feb 18 11:56:51 2006 +0100
     7.2 +++ b/xen/arch/ia64/xen/domain.c	Sat Feb 18 13:17:24 2006 -0700
     7.3 @@ -251,9 +251,12 @@ int arch_domain_create(struct domain *d)
     7.4  	return 0;
     7.5  
     7.6  fail_nomem:
     7.7 -	free_xenheap_page(d->shared_info);
     7.8 -	xfree(d->arch.mm);
     7.9 -	pgd_free(d->arch.mm->pgd);
    7.10 +	if (d->arch.mm->pgd != NULL)
    7.11 +	    pgd_free(d->arch.mm->pgd);
    7.12 +	if (d->arch.mm != NULL)
    7.13 +	    xfree(d->arch.mm);
    7.14 +	if (d->shared_info != NULL)
    7.15 +	    free_xenheap_page(d->shared_info);
    7.16  	return -ENOMEM;
    7.17  }
    7.18  
    7.19 @@ -389,7 +392,7 @@ printk("map_new_domain0_page: start=%p,e
    7.20  }
    7.21  
    7.22  /* allocate new page for domain and map it to the specified metaphysical addr */
    7.23 -struct page * map_new_domain_page(struct domain *d, unsigned long mpaddr)
    7.24 +struct page * assign_new_domain_page(struct domain *d, unsigned long mpaddr)
    7.25  {
    7.26  	struct mm_struct *mm = d->arch.mm;
    7.27  	struct page *p = (struct page *)0;
    7.28 @@ -400,7 +403,7 @@ struct page * map_new_domain_page(struct
    7.29  extern unsigned long vhpt_paddr, vhpt_pend;
    7.30  
    7.31  	if (!mm->pgd) {
    7.32 -		printk("map_new_domain_page: domain pgd must exist!\n");
    7.33 +		printk("assign_new_domain_page: domain pgd must exist!\n");
    7.34  		return(p);
    7.35  	}
    7.36  	pgd = pgd_offset(mm,mpaddr);
    7.37 @@ -428,21 +431,21 @@ extern unsigned long vhpt_paddr, vhpt_pe
    7.38  			if (p) memset(__va(page_to_maddr(p)),0,PAGE_SIZE);
    7.39  		}
    7.40  		if (unlikely(!p)) {
    7.41 -printf("map_new_domain_page: Can't alloc!!!! Aaaargh!\n");
    7.42 +printf("assign_new_domain_page: Can't alloc!!!! Aaaargh!\n");
    7.43  			return(p);
    7.44  		}
    7.45  if (unlikely(page_to_maddr(p) > vhpt_paddr && page_to_maddr(p) < vhpt_pend)) {
    7.46 -  printf("map_new_domain_page: reassigned vhpt page %p!!\n",page_to_maddr(p));
    7.47 +  printf("assign_new_domain_page: reassigned vhpt page %p!!\n",page_to_maddr(p));
    7.48  }
    7.49  		set_pte(pte, pfn_pte(page_to_maddr(p) >> PAGE_SHIFT,
    7.50  			__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX)));
    7.51  	}
    7.52 -	else printk("map_new_domain_page: mpaddr %lx already mapped!\n",mpaddr);
    7.53 +	else printk("assign_new_domain_page: mpaddr %lx already mapped!\n",mpaddr);
    7.54  	return p;
    7.55  }
    7.56  
    7.57  /* map a physical address to the specified metaphysical addr */
    7.58 -void map_domain_page(struct domain *d, unsigned long mpaddr, unsigned long physaddr)
    7.59 +void assign_domain_page(struct domain *d, unsigned long mpaddr, unsigned long physaddr)
    7.60  {
    7.61  	struct mm_struct *mm = d->arch.mm;
    7.62  	pgd_t *pgd;
    7.63 @@ -451,7 +454,7 @@ void map_domain_page(struct domain *d, u
    7.64  	pte_t *pte;
    7.65  
    7.66  	if (!mm->pgd) {
    7.67 -		printk("map_domain_page: domain pgd must exist!\n");
    7.68 +		printk("assign_domain_page: domain pgd must exist!\n");
    7.69  		return;
    7.70  	}
    7.71  	pgd = pgd_offset(mm,mpaddr);
    7.72 @@ -472,11 +475,11 @@ void map_domain_page(struct domain *d, u
    7.73  		set_pte(pte, pfn_pte(physaddr >> PAGE_SHIFT,
    7.74  			__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX)));
    7.75  	}
    7.76 -	else printk("map_domain_page: mpaddr %lx already mapped!\n",mpaddr);
    7.77 +	else printk("assign_domain_page: mpaddr %lx already mapped!\n",mpaddr);
    7.78  }
    7.79  #if 0
    7.80  /* map a physical address with specified I/O flag */
    7.81 -void map_domain_io_page(struct domain *d, unsigned long mpaddr, unsigned long flags)
    7.82 +void assign_domain_io_page(struct domain *d, unsigned long mpaddr, unsigned long flags)
    7.83  {
    7.84  	struct mm_struct *mm = d->arch.mm;
    7.85  	pgd_t *pgd;
    7.86 @@ -486,7 +489,7 @@ void map_domain_io_page(struct domain *d
    7.87  	pte_t io_pte;
    7.88  
    7.89  	if (!mm->pgd) {
    7.90 -		printk("map_domain_page: domain pgd must exist!\n");
    7.91 +		printk("assign_domain_page: domain pgd must exist!\n");
    7.92  		return;
    7.93  	}
    7.94  	ASSERT(flags & GPFN_IO_MASK);
    7.95 @@ -509,7 +512,7 @@ void map_domain_io_page(struct domain *d
    7.96  		pte_val(io_pte) = flags;
    7.97  		set_pte(pte, io_pte);
    7.98  	}
    7.99 -	else printk("map_domain_page: mpaddr %lx already mapped!\n",mpaddr);
   7.100 +	else printk("assign_domain_page: mpaddr %lx already mapped!\n",mpaddr);
   7.101  }
   7.102  #endif
   7.103  void mpafoo(unsigned long mpaddr)
   7.104 @@ -557,7 +560,7 @@ tryagain:
   7.105  	}
   7.106  	/* if lookup fails and mpaddr is "legal", "create" the page */
   7.107  	if ((mpaddr >> PAGE_SHIFT) < d->max_pages) {
   7.108 -		if (map_new_domain_page(d,mpaddr)) goto tryagain;
   7.109 +		if (assign_new_domain_page(d,mpaddr)) goto tryagain;
   7.110  	}
   7.111  	printk("lookup_domain_mpa: bad mpa %p (> %p\n",
   7.112  		mpaddr,d->max_pages<<PAGE_SHIFT);
   7.113 @@ -655,15 +658,9 @@ void loaddomainelfimage(struct domain *d
   7.114  	else
   7.115  #endif
   7.116  	while (memsz > 0) {
   7.117 -#ifdef DOMU_AUTO_RESTART
   7.118 -		pteval = lookup_domain_mpa(d,dom_mpaddr);
   7.119 -		if (pteval) dom_imva = __va(pteval & _PFN_MASK);
   7.120 -		else { printf("loaddomainelfimage: BAD!\n"); while(1); }
   7.121 -#else
   7.122 -		p = map_new_domain_page(d,dom_mpaddr);
   7.123 +		p = assign_new_domain_page(d,dom_mpaddr);
   7.124  		if (unlikely(!p)) BUG();
   7.125  		dom_imva = __va(page_to_maddr(p));
   7.126 -#endif
   7.127  		if (filesz > 0) {
   7.128  			if (filesz >= PAGE_SIZE)
   7.129  				copy_memory(dom_imva,elfaddr,PAGE_SIZE);
   7.130 @@ -788,16 +785,15 @@ int construct_dom0(struct domain *d,
   7.131  	unsigned long pkern_entry;
   7.132  	unsigned long pkern_end;
   7.133  	unsigned long pinitrd_start = 0;
   7.134 +	unsigned long pstart_info;
   7.135  	unsigned long ret, progress = 0;
   7.136  
   7.137  //printf("construct_dom0: starting\n");
   7.138  
   7.139 -#ifndef CLONE_DOMAIN0
   7.140  	/* Sanity! */
   7.141  	BUG_ON(d != dom0);
   7.142  	BUG_ON(d->vcpu[0] == NULL);
   7.143  	BUG_ON(test_bit(_VCPUF_initialised, &v->vcpu_flags));
   7.144 -#endif
   7.145  
   7.146  	memset(&dsi, 0, sizeof(struct domain_setup_info));
   7.147  
   7.148 @@ -847,13 +843,18 @@ int construct_dom0(struct domain *d,
   7.149                            (PAGE_ALIGN(initrd_len) + 4*1024*1024);
   7.150  
   7.151               memcpy(__va(pinitrd_start),initrd_start,initrd_len);
   7.152 +             pstart_info = PAGE_ALIGN(pinitrd_start + initrd_len);
   7.153 +        } else {
   7.154 +             pstart_info = PAGE_ALIGN(pkern_end);
   7.155          }
   7.156  
   7.157  	printk("METAPHYSICAL MEMORY ARRANGEMENT:\n"
   7.158  	       " Kernel image:  %lx->%lx\n"
   7.159  	       " Entry address: %lx\n"
   7.160 -               " Init. ramdisk: %lx len %lx\n",
   7.161 -               pkern_start, pkern_end, pkern_entry, pinitrd_start, initrd_len);
   7.162 +	       " Init. ramdisk: %lx len %lx\n"
   7.163 +	       " Start info.:   %lx->%lx\n",
   7.164 +	       pkern_start, pkern_end, pkern_entry, pinitrd_start, initrd_len,
   7.165 +	       pstart_info, pstart_info + PAGE_SIZE);
   7.166  
   7.167  	if ( (pkern_end - pkern_start) > (d->max_pages * PAGE_SIZE) )
   7.168  	{
   7.169 @@ -908,9 +909,9 @@ int construct_dom0(struct domain *d,
   7.170  
   7.171  
   7.172  	/* Set up start info area. */
   7.173 -	si = (start_info_t *)alloc_xenheap_page();
   7.174 +	d->shared_info->arch.start_info_pfn = pstart_info >> PAGE_SHIFT;
   7.175 +	si = __va(pstart_info);
   7.176  	memset(si, 0, PAGE_SIZE);
   7.177 -	d->shared_info->arch.start_info_pfn = __pa(si) >> PAGE_SHIFT;
   7.178  	sprintf(si->magic, "xen-%i.%i-ia64", XEN_VERSION, XEN_SUBVERSION);
   7.179  	si->nr_pages     = d->tot_pages;
   7.180  
   7.181 @@ -962,9 +963,6 @@ int construct_dom0(struct domain *d,
   7.182  	sync_split_caches();
   7.183  
   7.184  	// FIXME: Hack for keyboard input
   7.185 -#ifdef CLONE_DOMAIN0
   7.186 -if (d == dom0)
   7.187 -#endif
   7.188  	serial_input_init();
   7.189  	if (d == dom0) {
   7.190  		VCPU(v, delivery_mask[0]) = -1L;
   7.191 @@ -977,65 +975,6 @@ if (d == dom0)
   7.192  	return 0;
   7.193  }
   7.194  
   7.195 -// FIXME: When dom0 can construct domains, this goes away (or is rewritten)
   7.196 -int construct_domU(struct domain *d,
   7.197 -		   unsigned long image_start, unsigned long image_len,
   7.198 -	           unsigned long initrd_start, unsigned long initrd_len,
   7.199 -	           char *cmdline)
   7.200 -{
   7.201 -	int i, rc;
   7.202 -	struct vcpu *v = d->vcpu[0];
   7.203 -	unsigned long pkern_entry;
   7.204 -
   7.205 -#ifndef DOMU_AUTO_RESTART
   7.206 -	BUG_ON(test_bit(_VCPUF_initialised, &v->vcpu_flags));
   7.207 -#endif
   7.208 -
   7.209 -	printk("*** LOADING DOMAIN %d ***\n",d->domain_id);
   7.210 -
   7.211 -	d->max_pages = dom0_size/PAGE_SIZE;	// FIXME: use dom0 size
   7.212 -	// FIXME: use domain0 command line
   7.213 -	rc = parsedomainelfimage(image_start, image_len, &pkern_entry);
   7.214 -	printk("parsedomainelfimage returns %d\n",rc);
   7.215 -	if ( rc != 0 ) return rc;
   7.216 -
   7.217 -	/* Mask all upcalls... */
   7.218 -	for ( i = 0; i < MAX_VIRT_CPUS; i++ )
   7.219 -		d->shared_info->vcpu_info[i].evtchn_upcall_mask = 1;
   7.220 -
   7.221 -	/* Copy the OS image. */
   7.222 -	printk("calling loaddomainelfimage(%p,%p)\n",d,image_start);
   7.223 -	loaddomainelfimage(d,image_start);
   7.224 -	printk("loaddomainelfimage returns\n");
   7.225 -
   7.226 -	set_bit(_VCPUF_initialised, &v->vcpu_flags);
   7.227 -
   7.228 -	printk("calling new_thread, entry=%p\n",pkern_entry);
   7.229 -#ifdef DOMU_AUTO_RESTART
   7.230 -	v->domain->arch.image_start = image_start;
   7.231 -	v->domain->arch.image_len = image_len;
   7.232 -	v->domain->arch.entry = pkern_entry;
   7.233 -#endif
   7.234 -	new_thread(v, pkern_entry, 0, 0);
   7.235 -	printk("new_thread returns\n");
   7.236 -	sync_split_caches();
   7.237 -	__set_bit(0x30, VCPU(v, delivery_mask));
   7.238 -
   7.239 -	return 0;
   7.240 -}
   7.241 -
   7.242 -#ifdef DOMU_AUTO_RESTART
   7.243 -void reconstruct_domU(struct vcpu *v)
   7.244 -{
   7.245 -	/* re-copy the OS image to reset data values to original */
   7.246 -	printk("reconstruct_domU: restarting domain %d...\n",
   7.247 -		v->domain->domain_id);
   7.248 -	loaddomainelfimage(v->domain,v->domain->arch.image_start);
   7.249 -	new_thread(v, v->domain->arch.entry, 0, 0);
   7.250 -	sync_split_caches();
   7.251 -}
   7.252 -#endif
   7.253 -
   7.254  void machine_restart(char * __unused)
   7.255  {
   7.256  	if (platform_is_hp_ski()) dummy();
     8.1 --- a/xen/arch/ia64/xen/hypercall.c	Sat Feb 18 11:56:51 2006 +0100
     8.2 +++ b/xen/arch/ia64/xen/hypercall.c	Sat Feb 18 13:17:24 2006 -0700
     8.3 @@ -9,6 +9,7 @@
     8.4  #include <xen/config.h>
     8.5  #include <xen/sched.h>
     8.6  #include <xen/hypercall.h>
     8.7 +#include <xen/multicall.h>
     8.8  
     8.9  #include <linux/efi.h>	/* FOR EFI_UNIMPLEMENTED */
    8.10  #include <asm/sal.h>	/* FOR struct ia64_sal_retval */
    8.11 @@ -23,10 +24,46 @@ extern unsigned long translate_domain_mp
    8.12  unsigned long idle_when_pending = 0;
    8.13  unsigned long pal_halt_light_count = 0;
    8.14  
    8.15 +hypercall_t ia64_hypercall_table[] =
    8.16 +	{
    8.17 +	(hypercall_t)do_ni_hypercall,		/* do_set_trap_table */		/*  0 */
    8.18 +	(hypercall_t)do_ni_hypercall,		/* do_mmu_update */
    8.19 +	(hypercall_t)do_ni_hypercall,		/* do_set_gdt */
    8.20 +	(hypercall_t)do_ni_hypercall,		/* do_stack_switch */
    8.21 +	(hypercall_t)do_ni_hypercall,		/* do_set_callbacks */
    8.22 +	(hypercall_t)do_ni_hypercall,		/* do_fpu_taskswitch */		/*  5 */
    8.23 +	(hypercall_t)do_ni_hypercall,		/* do_sched_op */
    8.24 +	(hypercall_t)do_dom0_op,
    8.25 +	(hypercall_t)do_ni_hypercall,		/* do_set_debugreg */
    8.26 +	(hypercall_t)do_ni_hypercall,		/* do_get_debugreg */
    8.27 +	(hypercall_t)do_ni_hypercall,		/* do_update_descriptor */	/* 10 */
    8.28 +	(hypercall_t)do_ni_hypercall,		/* do_ni_hypercall */
    8.29 +	(hypercall_t)do_memory_op,
    8.30 +	(hypercall_t)do_multicall,
    8.31 +	(hypercall_t)do_ni_hypercall,		/* do_update_va_mapping */
    8.32 +	(hypercall_t)do_ni_hypercall,		/* do_set_timer_op */		/* 15 */
    8.33 +	(hypercall_t)do_event_channel_op,
    8.34 +	(hypercall_t)do_xen_version,
    8.35 +	(hypercall_t)do_console_io,
    8.36 +	(hypercall_t)do_ni_hypercall,           /* do_physdev_op */
    8.37 +	(hypercall_t)do_grant_table_op,						/* 20 */
    8.38 +	(hypercall_t)do_ni_hypercall,		/* do_vm_assist */
    8.39 +	(hypercall_t)do_ni_hypercall,		/* do_update_va_mapping_otherdomain */
    8.40 +	(hypercall_t)do_ni_hypercall,		/* (x86 only) */
    8.41 +	(hypercall_t)do_ni_hypercall,		/* do_vcpu_op */
    8.42 +	(hypercall_t)do_ni_hypercall,		/* (x86_64 only) */		/* 25 */
    8.43 +	(hypercall_t)do_ni_hypercall,		/* do_mmuext_op */
    8.44 +	(hypercall_t)do_ni_hypercall,		/* do_acm_op */
    8.45 +	(hypercall_t)do_ni_hypercall,		/* do_nmi_op */
    8.46 +	(hypercall_t)do_ni_hypercall,		/*  */
    8.47 +	(hypercall_t)do_ni_hypercall,		/*  */				/* 30 */
    8.48 +	(hypercall_t)do_ni_hypercall		/*  */
    8.49 +	};
    8.50 +
    8.51  int
    8.52  ia64_hypercall (struct pt_regs *regs)
    8.53  {
    8.54 -	struct vcpu *v = (struct domain *) current;
    8.55 +	struct vcpu *v = current;
    8.56  	struct sal_ret_values x;
    8.57  	unsigned long *tv, *tc;
    8.58  	int pi;
    8.59 @@ -94,15 +131,8 @@ ia64_hypercall (struct pt_regs *regs)
    8.60  			printf("(by dom0)\n ");
    8.61  			(*efi.reset_system)(EFI_RESET_WARM,0,0,NULL);
    8.62  		}
    8.63 -#ifdef DOMU_AUTO_RESTART
    8.64 -		else {
    8.65 -			reconstruct_domU(current);
    8.66 -			return 0;  // don't increment ip!
    8.67 -		}
    8.68 -#else	
    8.69  		printf("(not supported for non-0 domain)\n");
    8.70  		regs->r8 = EFI_UNSUPPORTED;
    8.71 -#endif
    8.72  		break;
    8.73  	    case FW_HYPERCALL_EFI_GET_TIME:
    8.74  		tv = vcpu_get_gr(v,32);
    8.75 @@ -181,9 +211,13 @@ ia64_hypercall (struct pt_regs *regs)
    8.76  		regs->r8 = do_xen_version(regs->r14, regs->r15);
    8.77  		break;
    8.78  
    8.79 +	    case __HYPERVISOR_multicall:
    8.80 +		regs->r8 = do_multicall(regs->r14, regs->r15);
    8.81 +		break;
    8.82 +
    8.83  	    default:
    8.84  		printf("unknown hypercall %x\n", regs->r2);
    8.85 -		regs->r8 = (unsigned long)-1;
    8.86 +		regs->r8 = do_ni_hypercall();
    8.87  	}
    8.88  	return 1;
    8.89  }
     9.1 --- a/xen/arch/ia64/xen/hyperprivop.S	Sat Feb 18 11:56:51 2006 +0100
     9.2 +++ b/xen/arch/ia64/xen/hyperprivop.S	Sat Feb 18 13:17:24 2006 -0700
     9.3 @@ -1336,7 +1336,7 @@ ENTRY(hyper_ssm_dt)
     9.4  	movl r22=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;
     9.5  	ld8 r22=[r22];;
     9.6  	adds r22=IA64_VCPU_META_SAVED_RR0_OFFSET,r22;;
     9.7 -	ld4 r23=[r22];;
     9.8 +	ld8 r23=[r22];;
     9.9  	mov rr[r0]=r23;;
    9.10  	srlz.i;;
    9.11  	st4 [r20]=r0 ;;
    9.12 @@ -1372,7 +1372,7 @@ ENTRY(hyper_rsm_dt)
    9.13  	movl r22=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;
    9.14  	ld8 r22=[r22];;
    9.15  	adds r22=IA64_VCPU_META_RR0_OFFSET,r22;;
    9.16 -	ld4 r23=[r22];;
    9.17 +	ld8 r23=[r22];;
    9.18  	mov rr[r0]=r23;;
    9.19  	srlz.i;;
    9.20  	adds r21=1,r0 ;;
    9.21 @@ -1733,7 +1733,7 @@ ENTRY(hyper_set_rr)
    9.22  	dep r23=r28,r23,16,8;;
    9.23  	dep r23=r29,r23,8,8
    9.24  	cmp.eq p6,p0=r25,r0;;	// if rr0, save for metaphysical
    9.25 -(p6)	st4 [r24]=r23
    9.26 +(p6)	st8 [r24]=r23
    9.27  	mov rr[r8]=r23;;
    9.28  	// done, mosey on back
    9.29  1:	mov r24=cr.ipsr
    10.1 --- a/xen/arch/ia64/xen/vcpu.c	Sat Feb 18 11:56:51 2006 +0100
    10.2 +++ b/xen/arch/ia64/xen/vcpu.c	Sat Feb 18 13:17:24 2006 -0700
    10.3 @@ -81,7 +81,7 @@ unsigned long vcpu_verbose = 0;
    10.4  **************************************************************************/
    10.5  #ifdef XEN
    10.6  UINT64
    10.7 -vcpu_get_gr(VCPU *vcpu, unsigned reg)
    10.8 +vcpu_get_gr(VCPU *vcpu, unsigned long reg)
    10.9  {
   10.10  	REGS *regs = vcpu_regs(vcpu);
   10.11  	UINT64 val;
   10.12 @@ -90,7 +90,7 @@ vcpu_get_gr(VCPU *vcpu, unsigned reg)
   10.13  	return val;
   10.14  }
   10.15  IA64FAULT
   10.16 -vcpu_get_gr_nat(VCPU *vcpu, unsigned reg, UINT64 *val)
   10.17 +vcpu_get_gr_nat(VCPU *vcpu, unsigned long reg, UINT64 *val)
   10.18  {
   10.19  	REGS *regs = vcpu_regs(vcpu);
   10.20      int nat;
   10.21 @@ -104,7 +104,7 @@ vcpu_get_gr_nat(VCPU *vcpu, unsigned reg
   10.22  //   IA64_ILLOP_FAULT if the register would cause an Illegal Operation fault
   10.23  //   IA64_NO_FAULT otherwise
   10.24  IA64FAULT
   10.25 -vcpu_set_gr(VCPU *vcpu, unsigned reg, UINT64 value, int nat)
   10.26 +vcpu_set_gr(VCPU *vcpu, unsigned long reg, UINT64 value, int nat)
   10.27  {
   10.28  	REGS *regs = vcpu_regs(vcpu);
   10.29  	if (!reg) return IA64_ILLOP_FAULT;
   10.30 @@ -118,7 +118,7 @@ vcpu_set_gr(VCPU *vcpu, unsigned reg, UI
   10.31  //   IA64_ILLOP_FAULT if the register would cause an Illegal Operation fault
   10.32  //   IA64_NO_FAULT otherwise
   10.33  IA64FAULT
   10.34 -vcpu_set_gr(VCPU *vcpu, unsigned reg, UINT64 value)
   10.35 +vcpu_set_gr(VCPU *vcpu, unsigned long reg, UINT64 value)
   10.36  {
   10.37  	REGS *regs = vcpu_regs(vcpu);
   10.38  	long sof = (regs->cr_ifs) & 0x7f;
    11.1 --- a/xen/arch/ia64/xen/xenirq.c	Sat Feb 18 11:56:51 2006 +0100
    11.2 +++ b/xen/arch/ia64/xen/xenirq.c	Sat Feb 18 13:17:24 2006 -0700
    11.3 @@ -59,7 +59,7 @@ xen_do_IRQ(ia64_vector vector)
    11.4  /*
    11.5   * Exit an interrupt context. Process softirqs if needed and possible:
    11.6   */
    11.7 -void xen_irq_exit(struct pt_regs *regs)
    11.8 +void irq_exit(void)
    11.9  {
   11.10  	sub_preempt_count(IRQ_EXIT_OFFSET);
   11.11  }
    12.1 --- a/xen/arch/ia64/xen/xenmisc.c	Sat Feb 18 11:56:51 2006 +0100
    12.2 +++ b/xen/arch/ia64/xen/xenmisc.c	Sat Feb 18 13:17:24 2006 -0700
    12.3 @@ -168,7 +168,11 @@ void __free_pages(struct page *page, uns
    12.4  
    12.5  void *pgtable_quicklist_alloc(void)
    12.6  {
    12.7 -	return alloc_xenheap_pages(0);
    12.8 +    void *p;
    12.9 +    p = alloc_xenheap_pages(0);
   12.10 +    if (p) 
   12.11 +        clear_page(p);
   12.12 +    return p;
   12.13  }
   12.14  
   12.15  void pgtable_quicklist_free(void *pgtable_entry)
   12.16 @@ -291,6 +295,7 @@ unsigned long context_switch_count = 0;
   12.17  void context_switch(struct vcpu *prev, struct vcpu *next)
   12.18  {
   12.19      uint64_t spsr;
   12.20 +    uint64_t pta;
   12.21  
   12.22      local_irq_save(spsr);
   12.23      if(VMX_DOMAIN(prev)){
   12.24 @@ -298,9 +303,9 @@ void context_switch(struct vcpu *prev, s
   12.25      }
   12.26  	context_switch_count++;
   12.27  	switch_to(prev,next,prev);
   12.28 -    if(VMX_DOMAIN(current)){
   12.29 -        vtm_domain_in(current);
   12.30 -    }
   12.31 +//    if(VMX_DOMAIN(current)){
   12.32 +//        vtm_domain_in(current);
   12.33 +//    }
   12.34  
   12.35  // leave this debug for now: it acts as a heartbeat when more than
   12.36  // one domain is active
   12.37 @@ -313,18 +318,26 @@ if (!i--) { printk("+",id); i = 1000000;
   12.38  }
   12.39  
   12.40      if (VMX_DOMAIN(current)){
   12.41 +        vtm_domain_in(current);
   12.42  		vmx_load_all_rr(current);
   12.43      }else{
   12.44 -	extern char ia64_ivt;
   12.45 -	ia64_set_iva(&ia64_ivt);
   12.46 -	ia64_set_pta(VHPT_ADDR | (1 << 8) | (VHPT_SIZE_LOG2 << 2) |
   12.47 -		VHPT_ENABLED);
   12.48 +    	extern char ia64_ivt;
   12.49 +    	ia64_set_iva(&ia64_ivt);
   12.50      	if (!is_idle_domain(current->domain)) {
   12.51 +        	ia64_set_pta(VHPT_ADDR | (1 << 8) | (VHPT_SIZE_LOG2 << 2) |
   12.52 +		        VHPT_ENABLED);
   12.53  	    	load_region_regs(current);
   12.54  	    	vcpu_load_kernel_regs(current);
   12.55 -		    if (vcpu_timer_expired(current)) vcpu_pend_timer(current);
   12.56 -    	}
   12.57 -	    if (vcpu_timer_expired(current)) vcpu_pend_timer(current);
   12.58 +		    if (vcpu_timer_expired(current))
   12.59 +                vcpu_pend_timer(current);
   12.60 +    	}else {
   12.61 +        /* When switching to idle domain, only need to disable vhpt
   12.62 +        * walker. Then all accesses happen within idle context will
   12.63 +        * be handled by TR mapping and identity mapping.
   12.64 +        */
   12.65 +           pta = ia64_get_pta();
   12.66 +           ia64_set_pta(pta & ~VHPT_ENABLED);
   12.67 +        }
   12.68      }
   12.69  
   12.70      local_irq_restore(spsr);
    13.1 --- a/xen/arch/ia64/xen/xensetup.c	Sat Feb 18 11:56:51 2006 +0100
    13.2 +++ b/xen/arch/ia64/xen/xensetup.c	Sat Feb 18 13:17:24 2006 -0700
    13.3 @@ -31,9 +31,6 @@ struct vcpu *idle_vcpu[NR_CPUS];
    13.4  
    13.5  cpumask_t cpu_present_map;
    13.6  
    13.7 -#ifdef CLONE_DOMAIN0
    13.8 -struct domain *clones[CLONE_DOMAIN0];
    13.9 -#endif
   13.10  extern unsigned long domain0_ready;
   13.11  
   13.12  int find_max_pfn (unsigned long, unsigned long, void *);
   13.13 @@ -342,16 +339,6 @@ printk("About to call sort_main_extable(
   13.14  printk("About to call domain_create()\n");
   13.15      dom0 = domain_create(0, 0);
   13.16  
   13.17 -#ifdef CLONE_DOMAIN0
   13.18 -    {
   13.19 -    int i;
   13.20 -    for (i = 0; i < CLONE_DOMAIN0; i++) {
   13.21 -	clones[i] = domain_create(i+1, 0);
   13.22 -        if ( clones[i] == NULL )
   13.23 -            panic("Error creating domain0 clone %d\n",i);
   13.24 -    }
   13.25 -    }
   13.26 -#endif
   13.27      if ( dom0 == NULL )
   13.28          panic("Error creating domain 0\n");
   13.29  
   13.30 @@ -376,22 +363,6 @@ printk("About to call domain_create()\n"
   13.31      /* PIN domain0 on CPU 0.  */
   13.32      dom0->vcpu[0]->cpu_affinity = cpumask_of_cpu(0);
   13.33  
   13.34 -#ifdef CLONE_DOMAIN0
   13.35 -    {
   13.36 -    int i;
   13.37 -    dom0_memory_start = __va(ia64_boot_param->domain_start);
   13.38 -    dom0_memory_size = ia64_boot_param->domain_size;
   13.39 -
   13.40 -    for (i = 0; i < CLONE_DOMAIN0; i++) {
   13.41 -      printk("CONSTRUCTING DOMAIN0 CLONE #%d\n",i+1);
   13.42 -      if ( construct_domU(clones[i], dom0_memory_start, dom0_memory_size,
   13.43 -			  dom0_initrd_start,dom0_initrd_size,
   13.44 -			  0) != 0)
   13.45 -            panic("Could not set up DOM0 clone %d\n",i);
   13.46 -    }
   13.47 -    }
   13.48 -#endif
   13.49 -
   13.50      /* The stash space for the initial kernel image can now be freed up. */
   13.51      init_domheap_pages(ia64_boot_param->domain_start,
   13.52                         ia64_boot_param->domain_size);
   13.53 @@ -412,13 +383,6 @@ printk("About to call init_trace_bufs()\
   13.54      console_endboot(cmdline && strstr(cmdline, "tty0"));
   13.55  #endif
   13.56  
   13.57 -#ifdef CLONE_DOMAIN0
   13.58 -    {
   13.59 -    int i;
   13.60 -    for (i = 0; i < CLONE_DOMAIN0; i++)
   13.61 -	domain_unpause_by_systemcontroller(clones[i]);
   13.62 -    }
   13.63 -#endif
   13.64      domain0_ready = 1;
   13.65  
   13.66      local_irq_enable();
    14.1 --- a/xen/include/asm-ia64/config.h	Sat Feb 18 11:56:51 2006 +0100
    14.2 +++ b/xen/include/asm-ia64/config.h	Sat Feb 18 13:17:24 2006 -0700
    14.3 @@ -3,11 +3,8 @@
    14.4  
    14.5  #undef USE_PAL_EMULATOR
    14.6  // control flags for turning on/off features under test
    14.7 -#undef CLONE_DOMAIN0
    14.8 -//#define CLONE_DOMAIN0 1
    14.9  #undef DOMU_BUILD_STAGING
   14.10  #define VHPT_GLOBAL
   14.11 -#define DOMU_AUTO_RESTART
   14.12  
   14.13  #undef DEBUG_PFMON
   14.14  
   14.15 @@ -215,9 +212,6 @@ void sort_main_extable(void);
   14.16  // see include/asm-ia64/mm.h, handle remaining page_info uses until gone
   14.17  #define page_info page
   14.18  
   14.19 -// see common/memory.c
   14.20 -#define set_gpfn_from_mfn(x,y)	do { } while (0)
   14.21 -
   14.22  // see common/keyhandler.c
   14.23  #define	nop()	asm volatile ("nop 0")
   14.24  
    15.1 --- a/xen/include/asm-ia64/domain.h	Sat Feb 18 11:56:51 2006 +0100
    15.2 +++ b/xen/include/asm-ia64/domain.h	Sat Feb 18 13:17:24 2006 -0700
    15.3 @@ -15,8 +15,8 @@ extern void domain_relinquish_resources(
    15.4  struct arch_domain {
    15.5      struct mm_struct *active_mm;
    15.6      struct mm_struct *mm;
    15.7 -    int metaphysical_rr0;
    15.8 -    int metaphysical_rr4;
    15.9 +    unsigned long metaphysical_rr0;
   15.10 +    unsigned long metaphysical_rr4;
   15.11      int starting_rid;		/* first RID assigned to domain */
   15.12      int ending_rid;		/* one beyond highest RID assigned to domain */
   15.13      int rid_bits;		/* number of virtual rid bits (default: 18) */
   15.14 @@ -32,11 +32,6 @@ struct arch_domain {
   15.15      u64 xen_vastart;
   15.16      u64 xen_vaend;
   15.17      u64 shared_info_va;
   15.18 -#ifdef DOMU_AUTO_RESTART
   15.19 -    u64 image_start;
   15.20 -    u64 image_len;
   15.21 -    u64 entry;
   15.22 -#endif
   15.23      unsigned long initrd_start;
   15.24      unsigned long initrd_len;
   15.25      char *cmdline;
   15.26 @@ -66,10 +61,10 @@ struct arch_vcpu {
   15.27  	unsigned long xen_timer_interval;
   15.28  #endif
   15.29      mapped_regs_t *privregs; /* save the state of vcpu */
   15.30 -    int metaphysical_rr0;		// from arch_domain (so is pinned)
   15.31 -    int metaphysical_rr4;		// from arch_domain (so is pinned)
   15.32 -    int metaphysical_saved_rr0;		// from arch_domain (so is pinned)
   15.33 -    int metaphysical_saved_rr4;		// from arch_domain (so is pinned)
   15.34 +    unsigned long metaphysical_rr0;		// from arch_domain (so is pinned)
   15.35 +    unsigned long metaphysical_rr4;		// from arch_domain (so is pinned)
   15.36 +    unsigned long metaphysical_saved_rr0;	// from arch_domain (so is pinned)
   15.37 +    unsigned long metaphysical_saved_rr4;	// from arch_domain (so is pinned)
   15.38      int breakimm;			// from arch_domain (so is pinned)
   15.39      int starting_rid;		/* first RID assigned to domain */
   15.40      int ending_rid;		/* one beyond highest RID assigned to domain */
    16.1 --- a/xen/include/asm-ia64/grant_table.h	Sat Feb 18 11:56:51 2006 +0100
    16.2 +++ b/xen/include/asm-ia64/grant_table.h	Sat Feb 18 13:17:24 2006 -0700
    16.3 @@ -17,7 +17,7 @@
    16.4  #define gnttab_shared_gmfn(d, t, i)                                     \
    16.5      ( ((d) == dom0) ?                                                   \
    16.6        ((virt_to_maddr((t)->shared) >> PAGE_SHIFT) + (i)) :              \
    16.7 -      (map_domain_page((d), 1UL<<40, virt_to_maddr((t)->shared)),       \
    16.8 +      (assign_domain_page((d), 1UL<<40, virt_to_maddr((t)->shared)),       \
    16.9         1UL << (40 - PAGE_SHIFT))                                        \
   16.10      )
   16.11  
    17.1 --- a/xen/include/asm-ia64/linux-xen/asm/README.origin	Sat Feb 18 11:56:51 2006 +0100
    17.2 +++ b/xen/include/asm-ia64/linux-xen/asm/README.origin	Sat Feb 18 13:17:24 2006 -0700
    17.3 @@ -5,6 +5,7 @@
    17.4  # (e.g. with #ifdef XEN or XEN in a comment) so that they can be
    17.5  # easily updated to future versions of the corresponding Linux files.
    17.6  
    17.7 +cache.h		-> linux/include/asm-ia64/cache.h
    17.8  gcc_intrin.h		-> linux/include/asm-ia64/gcc_intrin.h
    17.9  ia64regs.h		-> linux/include/asm-ia64/ia64regs.h
   17.10  io.h			-> linux/include/asm-ia64/io.h
    18.1 --- a/xen/include/asm-ia64/linux-xen/asm/processor.h	Sat Feb 18 11:56:51 2006 +0100
    18.2 +++ b/xen/include/asm-ia64/linux-xen/asm/processor.h	Sat Feb 18 13:17:24 2006 -0700
    18.3 @@ -639,6 +639,19 @@ ia64_get_ivr (void)
    18.4  	return r;
    18.5  }
    18.6  
    18.7 +#ifdef XEN
    18.8 +/* Get the page table address and control bits.  */
    18.9 +static inline __u64
   18.10 +ia64_get_pta (void)
   18.11 +{
   18.12 +   __u64 r;
   18.13 +   ia64_srlz_d();
   18.14 +   r = ia64_getreg(_IA64_REG_CR_PTA);
   18.15 +   ia64_srlz_d();
   18.16 +   return r;
   18.17 +}
   18.18 +#endif
   18.19 +
   18.20  static inline void
   18.21  ia64_set_dbr (__u64 regnum, __u64 value)
   18.22  {
    19.1 --- a/xen/include/asm-ia64/linux/README.origin	Sat Feb 18 11:56:51 2006 +0100
    19.2 +++ b/xen/include/asm-ia64/linux/README.origin	Sat Feb 18 13:17:24 2006 -0700
    19.3 @@ -4,31 +4,31 @@
    19.4  # needs to be changed, move it to ../linux-xen and follow
    19.5  # the instructions in the README there.
    19.6  
    19.7 -bcd.h			->linux/include/linux/bcd.h
    19.8 -bitmap.h		->linux/include/linux/bitmap.h
    19.9 -bitops.h		->linux/include/linux/bitops.h
   19.10 -dma-mapping.h		->linux/include/linux/dma-mapping.h
   19.11 -efi.h			->linux/include/linux/efi.h
   19.12 -err.h			->linux/include/linux/err.h
   19.13 -initrd.h		->linux/include/linux/initrd.h
   19.14 -jiffies.h		->linux/include/linux/jiffies.h
   19.15 -kmalloc_sizes.h		->linux/include/linux/kmalloc_sizes.h
   19.16 -linkage.h		->linux/include/linux/linkage.h
   19.17 -mmzone.h		->linux/include/linux/mmzone.h
   19.18 -notifier.h		->linux/include/linux/notifier.h
   19.19 -numa.h			->linux/include/linux/numa.h
   19.20 -page-flags.h		->linux/include/linux/page-flags.h
   19.21 -percpu.h		->linux/include/linux/percpu.h
   19.22 -preempt.h		->linux/include/linux/preempt.h
   19.23 -rbtree.h		->linux/include/linux/rbtree.h
   19.24 -rwsem.h			->linux/include/linux/rwsem.h
   19.25 -seqlock.h		->linux/include/linux/seqlock.h
   19.26 -slab.h			->linux/include/linux/slab.h
   19.27 -sort.h			->linux/include/linux/sort.h
   19.28 -stddef.h		->linux/include/linux/stddef.h
   19.29 -thread_info.h		->linux/include/linux/thread_info.h
   19.30 -threads.h		->linux/include/linux/threads.h
   19.31 -time.h			->linux/include/linux/time.h
   19.32 -timex.h			->linux/include/linux/timex.h
   19.33 -topology.h		->linux/include/linux/topology.h
   19.34 -wait.h			->linux/include/linux/wait.h
   19.35 +bcd.h			-> linux/include/linux/bcd.h
   19.36 +bitmap.h		-> linux/include/linux/bitmap.h
   19.37 +bitops.h		-> linux/include/linux/bitops.h
   19.38 +dma-mapping.h		-> linux/include/linux/dma-mapping.h
   19.39 +efi.h			-> linux/include/linux/efi.h
   19.40 +err.h			-> linux/include/linux/err.h
   19.41 +initrd.h		-> linux/include/linux/initrd.h
   19.42 +jiffies.h		-> linux/include/linux/jiffies.h
   19.43 +kmalloc_sizes.h		-> linux/include/linux/kmalloc_sizes.h
   19.44 +linkage.h		-> linux/include/linux/linkage.h
   19.45 +mmzone.h		-> linux/include/linux/mmzone.h
   19.46 +notifier.h		-> linux/include/linux/notifier.h
   19.47 +numa.h			-> linux/include/linux/numa.h
   19.48 +page-flags.h		-> linux/include/linux/page-flags.h
   19.49 +percpu.h		-> linux/include/linux/percpu.h
   19.50 +preempt.h		-> linux/include/linux/preempt.h
   19.51 +rbtree.h		-> linux/include/linux/rbtree.h
   19.52 +rwsem.h			-> linux/include/linux/rwsem.h
   19.53 +seqlock.h		-> linux/include/linux/seqlock.h
   19.54 +slab.h			-> linux/include/linux/slab.h
   19.55 +sort.h			-> linux/include/linux/sort.h
   19.56 +stddef.h		-> linux/include/linux/stddef.h
   19.57 +thread_info.h		-> linux/include/linux/thread_info.h
   19.58 +threads.h		-> linux/include/linux/threads.h
   19.59 +time.h			-> linux/include/linux/time.h
   19.60 +timex.h			-> linux/include/linux/timex.h
   19.61 +topology.h		-> linux/include/linux/topology.h
   19.62 +wait.h			-> linux/include/linux/wait.h
    20.1 --- a/xen/include/asm-ia64/linux/asm/README.origin	Sat Feb 18 11:56:51 2006 +0100
    20.2 +++ b/xen/include/asm-ia64/linux/asm/README.origin	Sat Feb 18 13:17:24 2006 -0700
    20.3 @@ -4,6 +4,7 @@
    20.4  # needs to be changed, move it to ../linux-xen and follow
    20.5  # the instructions in the README there.
    20.6  
    20.7 +acpi.h			-> linux/include/asm-ia64/acpi.h
    20.8  asmmacro.h		-> linux/include/asm-ia64/asmmacro.h
    20.9  atomic.h		-> linux/include/asm-ia64/atomic.h
   20.10  bitops.h		-> linux/include/asm-ia64/bitops.h
   20.11 @@ -11,7 +12,6 @@ break.h			-> linux/include/asm-ia64/brea
   20.12  bug.h			-> linux/include/asm-ia64/bug.h
   20.13  byteorder.h		-> linux/include/asm-ia64/byteorder.h
   20.14  cacheflush.h		-> linux/include/asm-ia64/cacheflush.h
   20.15 -cache.h			-> linux/include/asm-ia64/cache.h
   20.16  checksum.h		-> linux/include/asm-ia64/checksum.h
   20.17  current.h		-> linux/include/asm-ia64/current.h
   20.18  delay.h			-> linux/include/asm-ia64/delay.h
    21.1 --- a/xen/include/asm-ia64/linux/byteorder/README.origin	Sat Feb 18 11:56:51 2006 +0100
    21.2 +++ b/xen/include/asm-ia64/linux/byteorder/README.origin	Sat Feb 18 13:17:24 2006 -0700
    21.3 @@ -4,6 +4,6 @@
    21.4  # needs to be changed, move it to ../linux-xen and follow
    21.5  # the instructions in the README there.
    21.6  
    21.7 -generic.h		-> linux/include/byteorder/generic.h
    21.8 -little_endian.h		-> linux/include/byteorder/little_endian.h
    21.9 -swab.h			-> linux/include/byteorder/swab.h
   21.10 +generic.h		-> linux/include/linux/byteorder/generic.h
   21.11 +little_endian.h		-> linux/include/linux/byteorder/little_endian.h
   21.12 +swab.h			-> linux/include/linux/byteorder/swab.h
    22.1 --- a/xen/include/asm-ia64/multicall.h	Sat Feb 18 11:56:51 2006 +0100
    22.2 +++ b/xen/include/asm-ia64/multicall.h	Sat Feb 18 13:17:24 2006 -0700
    22.3 @@ -1,5 +1,27 @@
    22.4  #ifndef __ASM_IA64_MULTICALL_H__
    22.5  #define __ASM_IA64_MULTICALL_H__
    22.6  
    22.7 -#define do_multicall_call(_call) BUG()
    22.8 +#include <public/xen.h>
    22.9 +
   22.10 +typedef unsigned long (*hypercall_t)(
   22.11 +			unsigned long arg0,
   22.12 +			unsigned long arg1,
   22.13 +			unsigned long arg2,
   22.14 +			unsigned long arg3,
   22.15 +			unsigned long arg4,
   22.16 +			unsigned long arg5);
   22.17 +
   22.18 +extern hypercall_t ia64_hypercall_table[];
   22.19 +
   22.20 +static inline void do_multicall_call(multicall_entry_t *call)
   22.21 +{
   22.22 +	call->result = (*ia64_hypercall_table[call->op])(
   22.23 +			call->args[0],
   22.24 +			call->args[1],
   22.25 +			call->args[2],
   22.26 +			call->args[3],
   22.27 +			call->args[4],
   22.28 +			call->args[5]);
   22.29 +}
   22.30 +
   22.31  #endif /* __ASM_IA64_MULTICALL_H__ */
    23.1 --- a/xen/include/asm-ia64/vcpu.h	Sat Feb 18 11:56:51 2006 +0100
    23.2 +++ b/xen/include/asm-ia64/vcpu.h	Sat Feb 18 13:17:24 2006 -0700
    23.3 @@ -34,9 +34,9 @@ struct privop_addr_count {
    23.4  #endif
    23.5  
    23.6  /* general registers */
    23.7 -extern UINT64 vcpu_get_gr(VCPU *vcpu, unsigned reg);
    23.8 -extern IA64FAULT vcpu_get_gr_nat(VCPU *vcpu, unsigned reg, UINT64 *val);
    23.9 -extern IA64FAULT vcpu_set_gr(VCPU *vcpu, unsigned reg, UINT64 value, int nat);
   23.10 +extern UINT64 vcpu_get_gr(VCPU *vcpu, unsigned long reg);
   23.11 +extern IA64FAULT vcpu_get_gr_nat(VCPU *vcpu, unsigned long reg, UINT64 *val);
   23.12 +extern IA64FAULT vcpu_set_gr(VCPU *vcpu, unsigned long reg, UINT64 value, int nat);
   23.13  /* application registers */
   23.14  extern IA64FAULT vcpu_set_ar(VCPU *vcpu, UINT64 reg, UINT64 val);
   23.15  /* psr */