# HG changeset patch
# User djm@xxxxxxxxxxxxxxx
# Node ID 60928c906666d4a0f158bc701aeac2871c0b1761
# Parent 109a27c1c00459e02678beabebbdec73376e736d
More getting xenlinux/ia64 to build with drivers from -sparse
diff -r 109a27c1c004 -r 60928c906666
linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre
--- a/linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre Fri Sep 23
14:12:28 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre Fri Sep 23
17:15:48 2005
@@ -1,7 +1,15 @@
#!/bin/bash
-if [ -e mm ]
+# restructure directories to match future drivers/xen plan
+# and move aside xen/x86 specific changes
+# WARNING!: This directory movement really confuses hg which makes
+# it difficult to do development in a directory which is being used
+# for building (as all files in mv'd directories are thought by hg
+# to have been deleted). I don't know how to avoid this right now,
+# but if someone has a better way, I'm all ears
+if [ ! -e mm.xen-x86 ]
then
mv mm mm.xen-x86
+ mkdir mm
mv net net.xen-x86
mv kernel kernel.xen-x86
mv drivers/acpi/tables.c drivers/acpi/tables.c.xen-x86
@@ -11,9 +19,32 @@
mv arch/xen.xen-x86/configs arch/xen
mv include/asm-generic include/asm-generic.xen-x86
mv include/linux include/linux.xen-x86
+ mkdir include/linux
fi
+
+# need to grab a couple of xen-modified files for generic_page_range and
+# typedef pte_fn_t which are used by driver/xen blkif
+cp mm.xen-x86/memory.c mm/memory.c
+cp include/linux.xen-x86/mm.h include/linux/mm.h
+
+#eventually asm-xsi-offsets needs to be part of hypervisor.h/hypercall.h
cp ../xen/include/asm-ia64/asm-xsi-offsets.h include/asm-ia64/xen/
+
+#ia64 drivers/xen isn't fully functional yet, workaround...
+#also ignore core/evtchn.c which uses a different irq mechanism than ia64
+#(warning: there be dragons here if these files diverge)
cp arch/ia64/xen/drivers/Makefile drivers/xen/Makefile
cp arch/ia64/xen/drivers/coreMakefile drivers/xen/core/Makefile
+
+#not sure where these ia64-specific files will end up in the future
cp arch/ia64/xen/drivers/xenia64_init.c drivers/xen/core
cp arch/ia64/xen/drivers/evtchn_ia64.c drivers/xen/core
+
+#still a few x86-ism's in various drivers/xen files, patch them
+cd drivers/xen
+if [ ! -e ia64.patch.semaphore ]
+then
+ cat ../../arch/ia64/xen/drivers/patches/* | patch -p1 -b
+fi
+touch ia64.patch.semaphore
+cd ../..
diff -r 109a27c1c004 -r 60928c906666
linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile
--- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile Fri Sep 23
14:12:28 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile Fri Sep 23
17:15:48 2005
@@ -1,4 +1,5 @@
+obj-y += util.o
obj-y += core/
obj-y += console/
diff -r 109a27c1c004 -r 60928c906666
linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/blkback.c.patch
--- /dev/null Fri Sep 23 14:12:28 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/blkback.c.patch
Fri Sep 23 17:15:48 2005
@@ -0,0 +1,57 @@
+diff -Naur xen/blkback/blkback.c xen.patched/blkback/blkback.c
+--- xen/blkback/blkback.c 2005-09-23 10:54:50.000000000 -0600
++++ xen.patched/blkback/blkback.c 2005-09-23 10:57:51.000000000 -0600
+@@ -30,10 +30,16 @@
+ static unsigned long mmap_vstart;
+ #define MMAP_PAGES \
+ (MAX_PENDING_REQS * BLKIF_MAX_SEGMENTS_PER_REQUEST)
++#ifdef __ia64__
++static void *pending_vaddrs[MMAP_PAGES];
++#define MMAP_VADDR(_idx, _i) \
++ (unsigned long)(pending_vaddrs[((_idx) *
BLKIF_MAX_SEGMENTS_PER_REQUEST) + (_i)])
++#else
+ #define MMAP_VADDR(_req,_seg) \
+ (mmap_vstart + \
+ ((_req) * BLKIF_MAX_SEGMENTS_PER_REQUEST * PAGE_SIZE) + \
+ ((_seg) * PAGE_SIZE))
++#endif
+
+ /*
+ * Each outstanding request that we've passed to the lower device layers has
a
+@@ -377,9 +383,13 @@
+ goto bad_descriptor;
+ }
+
++#ifdef __ia64__
++ MMAP_VADDR(pending_idx,i) = gnttab_map_vaddr(map[i]);
++#else
+ phys_to_machine_mapping[__pa(MMAP_VADDR(
+ pending_idx, i)) >> PAGE_SHIFT] =
+ FOREIGN_FRAME(map[i].dev_bus_addr >> PAGE_SHIFT);
++#endif
+
+ pending_handle(pending_idx, i) = map[i].handle;
+ }
+@@ -500,9 +510,22 @@
+
+ blkif_interface_init();
+
++#ifdef __ia64__
++ {
++ extern unsigned long alloc_empty_foreign_map_page_range(unsigned long
pages);
++ int i;
++
++ mmap_vstart = alloc_empty_foreign_map_page_range(MMAP_PAGES);
++ printk("Allocated mmap_vstart: 0x%lx\n", mmap_vstart);
++ for(i = 0; i < MMAP_PAGES; i++)
++ pending_vaddrs[i] = mmap_vstart + (i << PAGE_SHIFT);
++ BUG_ON(mmap_vstart == NULL);
++ }
++#else
+ page = balloon_alloc_empty_page_range(MMAP_PAGES);
+ BUG_ON(page == NULL);
+ mmap_vstart = (unsigned long)pfn_to_kaddr(page_to_pfn(page));
++#endif
+
+ pending_cons = 0;
+ pending_prod = MAX_PENDING_REQS;
diff -r 109a27c1c004 -r 60928c906666
linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/console.c.patch
--- /dev/null Fri Sep 23 14:12:28 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/console.c.patch
Fri Sep 23 17:15:48 2005
@@ -0,0 +1,20 @@
+diff -Naur xen/console/console.c xen.patched/console/console.c
+--- xen/console/console.c 2005-09-23 10:54:50.000000000 -0600
++++ xen.patched/console/console.c 2005-09-23 10:57:51.000000000 -0600
+@@ -768,9 +768,16 @@
+ #endif
+
+ if (xen_start_info->flags & SIF_INITDOMAIN) {
++#ifdef __ia64__
++ xencons_priv_irq = bind_virq_to_evtchn(VIRQ_CONSOLE);
++ bind_evtchn_to_irqhandler(xencons_priv_irq,
++ xencons_priv_interrupt, 0, "console", NULL);
++#else
++
+ xencons_priv_irq = bind_virq_to_irq(VIRQ_CONSOLE);
+ (void)request_irq(xencons_priv_irq,
+ xencons_priv_interrupt, 0, "console", NULL);
++#endif
+ } else {
+ xencons_ring_register_receiver(xencons_rx);
+ }
diff -r 109a27c1c004 -r 60928c906666
linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/devmem.c.patch
--- /dev/null Fri Sep 23 14:12:28 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/devmem.c.patch Fri Sep
23 17:15:48 2005
@@ -0,0 +1,13 @@
+diff -Naur xen/core/devmem.c xen.patched/core/devmem.c
+--- xen/core/devmem.c 2005-09-23 10:54:50.000000000 -0600
++++ xen.patched/core/devmem.c 2005-09-23 10:57:51.000000000 -0600
+@@ -93,6 +93,9 @@
+ if (uncached_access(file))
+ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+
++#ifdef __ia64__
++#define direct_remap_pfn_range(a,b,c,d,e,f)
remap_pfn_range(a,b,c,d,e)
++#endif
+ if (direct_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
+ vma->vm_end - vma->vm_start,
+ vma->vm_page_prot, DOMID_IO))
diff -r 109a27c1c004 -r 60928c906666
linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/gnttab.c.patch
--- /dev/null Fri Sep 23 14:12:28 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/gnttab.c.patch Fri Sep
23 17:15:48 2005
@@ -0,0 +1,68 @@
+diff -Naur xen/core/gnttab.c xen.patched/core/gnttab.c
+--- xen/core/gnttab.c 2005-09-23 10:54:50.000000000 -0600
++++ xen.patched/core/gnttab.c 2005-09-23 10:57:51.000000000 -0600
+@@ -22,6 +22,10 @@
+ #include <asm-xen/gnttab.h>
+ #include <asm/synch_bitops.h>
+
++#ifdef __ia64__
++#define synch_cmpxchg ia64_cmpxchg4_acq
++#endif
++
+ #if 1
+ #define ASSERT(_p) \
+ if ( !(_p) ) { printk(KERN_ALERT"Assertion '%s': line %d, file %s\n", \
+@@ -339,6 +343,10 @@
+ if ( hypercall.op != __HYPERVISOR_grant_table_op )
+ return -ENOSYS;
+
++
++#ifdef __ia64__
++ ret = HYPERVISOR_grant_table_op(hypercall.arg[0], (void
*)hypercall.arg[1], hypercall.arg[2]);
++#else
+ /* hypercall-invoking asm taken from privcmd.c */
+ __asm__ __volatile__ (
+ "pushl %%ebx; pushl %%ecx; pushl %%edx; pushl %%esi; pushl %%edi; "
+@@ -351,6 +359,7 @@
+ TRAP_INSTR "; "
+ "popl %%edi; popl %%esi; popl %%edx; popl %%ecx; popl %%ebx"
+ : "=a" (ret) : "0" (&hypercall) : "memory" );
++#endif
+
+ return ret;
+ }
+@@ -414,8 +423,13 @@
+ BUG_ON(HYPERVISOR_grant_table_op(GNTTABOP_setup_table, &setup, 1) != 0);
+ BUG_ON(setup.status != 0);
+
++#ifdef __ia64__
++ shared = __va(frames[0] << PAGE_SHIFT);
++ printk("grant table at %p\n", shared);
++#else
+ for ( i = 0; i < NR_GRANT_FRAMES; i++ )
+ set_fixmap(FIX_GNTTAB_END - i, frames[i] << PAGE_SHIFT);
++#endif
+
+ return 0;
+ }
+@@ -425,8 +439,10 @@
+ {
+ int i;
+
++#ifndef __ia64__
+ for ( i = 0; i < NR_GRANT_FRAMES; i++ )
+ clear_fixmap(FIX_GNTTAB_END - i);
++#endif
+
+ return 0;
+ }
+@@ -441,7 +457,9 @@
+
+ BUG_ON(gnttab_resume());
+
++#ifndef __ia64__
+ shared = (grant_entry_t *)fix_to_virt(FIX_GNTTAB_END);
++#endif
+
+ for ( i = 0; i < NR_GRANT_ENTRIES; i++ )
+ gnttab_list[i] = i + 1;
diff -r 109a27c1c004 -r 60928c906666
linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/privcmd.c.patch
--- /dev/null Fri Sep 23 14:12:28 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/privcmd.c.patch
Fri Sep 23 17:15:48 2005
@@ -0,0 +1,49 @@
+diff -Naur xen/privcmd/privcmd.c xen.patched/privcmd/privcmd.c
+--- xen/privcmd/privcmd.c 2005-09-23 10:54:50.000000000 -0600
++++ xen.patched/privcmd/privcmd.c 2005-09-23 10:57:51.000000000 -0600
+@@ -134,6 +134,9 @@
+ > vma->vm_end )
+ return -EINVAL;
+
++#ifdef __ia64__
++#define direct_remap_pfn_range(a,b,c,d,e,f) remap_pfn_range(a,b,c,d,e)
++#endif
+ if ((rc = direct_remap_pfn_range(
+ vma,
+ msg[j].va&PAGE_MASK,
+@@ -148,6 +151,7 @@
+ }
+ break;
+
++#ifndef __ia64__
+ case IOCTL_PRIVCMD_MMAPBATCH: {
+ mmu_update_t u;
+ privcmd_mmapbatch_t m;
+@@ -206,7 +210,9 @@
+ }
+ break;
+ #endif
++#endif
+
++#ifndef __ia64__
+ case IOCTL_PRIVCMD_GET_MACH2PHYS_START_MFN: {
+ unsigned long m2pv = (unsigned long)machine_to_phys_mapping;
+ pgd_t *pgd = pgd_offset_k(m2pv);
+@@ -218,6 +224,7 @@
+ -EFAULT: 0;
+ }
+ break;
++#endif
+
+ case IOCTL_PRIVCMD_INITDOMAIN_STORE: {
+ extern int do_xenbus_probe(void*);
+@@ -241,6 +248,9 @@
+
+ /* Initial connect. Setup channel and page. */
+ xen_start_info->store_evtchn = data;
++#ifdef __ia64__
++#define pfn_to_mfn(x) (x)
++#endif
+ xen_start_info->store_mfn =
+ pfn_to_mfn(virt_to_phys((void *)page) >>
+ PAGE_SHIFT);
diff -r 109a27c1c004 -r 60928c906666
linux-2.6-xen-sparse/include/asm-xen/asm-ia64/fixmap.h
--- /dev/null Fri Sep 23 14:12:28 2005
+++ b/linux-2.6-xen-sparse/include/asm-xen/asm-ia64/fixmap.h Fri Sep 23
17:15:48 2005
@@ -0,0 +1,1 @@
+/* empty */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|