This patch enables xen-ia64 support in the fedora kernel. It applies
to the cvs tree checked out according to the instructions at
http://people.redhat.com/davej/
This is *nearly* ready to be applied. AFAIK, the only nagging issue
is that it doesn't boot because of the hypervisor/kernel mismatch.
(Full description of the problem at
https://www.redhat.com/archives/fedora-ia64-list/2006-June/msg00026.html)
To fix this for the moment, I think all that needs to happen is for
Juan to generate a new linux-2.6-xen.patch from the linux-2.6.tip-xen
repository, and then take a new snapshot of the hypervisor from
xen-unstable. That should bring the two into near enough proximity
for ia64 to boot again.
Juan, could you do this ASAP? It would be a great help since I could
follow up with a version of this patch suitable for integration.
Regarding long-term solution, I think it would be best for Juan to
take maintainership of the linux-2.6.tip-xen repository. That would
allow him to sync it to xen-unstable at the same time that he takes
the hypervisor snapshot. The result should always be a matched pair.
I'd be interested to hear comments regarding this suggestion and this
patch.
b/devel/configs/config-xen-ia64 | 19 +++++++++
b/devel/linux-2.6-xen-ia64-fixes.patch | 63 +++++++++++++++++++++++++++++++++
b/devel/xen-ia64-fixes.patch | 13 ++++++
devel/Makefile.config | 18 +++++++--
devel/kernel-2.6.spec | 57 ++++++++++++++++++++---------
5 files changed, 149 insertions(+), 21 deletions(-)
diff -r 73280cc9332c -r ab31e6d960bb devel/Makefile.config
--- a/devel/Makefile.config Tue Jun 27 15:01:33 2006 -0400
+++ b/devel/Makefile.config Tue Jun 27 15:50:47 2006 -0400
@@ -13,7 +13,8 @@ CONFIGFILES = \
$(CFG)-ppc.config $(CFG)-ppc-smp.config \
$(CFG)-ppc64.config $(CFG)-ppc64-kdump.config $(CFG)-ia64.config \
$(CFG)-i686-xen-PAE.config \
- $(CFG)-i686-xen.config $(CFG)-x86_64-xen.config
+ $(CFG)-i686-xen.config $(CFG)-x86_64-xen.config \
+ $(CFG)-ia64-xen.config
PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390 ia64 # sparc
sparc64
TEMPFILES = $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
@@ -21,8 +22,10 @@ configs: $(CONFIGFILES)
configs: $(CONFIGFILES)
@rm -f kernel-*-config
@rm -f $(TEMPFILES)
- @rm -f temp-xen-generic temp-x86-xen-generic temp-x86_64-xen-generic \
- temp-generic temp-x86_64-xen-generic-tmp
+ @rm -f temp-generic temp-xen-generic \
+ temp-x86-xen-generic \
+ temp-x86_64-xen-generic temp-x86_64-xen-generic-tmp \
+ temp-ia64-xen-generic temp-ia64-xen-generic-tmp
# Augment the clean target to clean up our own cruft
clean ::
@@ -69,6 +72,12 @@ temp-x86_64-xen-generic-tmp: configs/con
perl scripts/merge.pl $^ > $@
temp-x86_64-xen-generic: configs/config-xen-x86_64 temp-x86_64-xen-generic-tmp
+ perl scripts/merge.pl $^ > $@
+
+temp-ia64-xen-generic-tmp: configs/config-xen-generic temp-ia64-generic
+ perl scripts/merge.pl $^ > $@
+
+temp-ia64-xen-generic: configs/config-xen-ia64 temp-ia64-xen-generic-tmp
perl scripts/merge.pl $^ > $@
kernel-$(VERSION)-i686.config: configs/config-i686 temp-x86-generic
@@ -134,3 +143,6 @@ kernel-$(VERSION)-x86_64-xen.config: con
kernel-$(VERSION)-x86_64-xen.config: configs/config-xen-xen
temp-x86_64-xen-generic
perl scripts/merge.pl $^ x86_64 > $@
+kernel-$(VERSION)-ia64-xen.config: configs/config-xen-xen temp-ia64-xen-generic
+ perl scripts/merge.pl $^ ia64 > $@
+
diff -r 73280cc9332c -r ab31e6d960bb devel/kernel-2.6.spec
--- a/devel/kernel-2.6.spec Tue Jun 27 15:01:33 2006 -0400
+++ b/devel/kernel-2.6.spec Tue Jun 27 15:50:47 2006 -0400
@@ -37,6 +37,9 @@ Summary: The Linux kernel (the core of t
%define xen_version 20060610
%define make_target bzImage
%define kernel_image x86
+%define xen_flags verbose=y debug=y crash_debug=y
+%define xen_target vmlinuz
+%define xen_image vmlinuz
%define KVERREL %{PACKAGE_VERSION}-%{PACKAGE_RELEASE}
@@ -55,10 +58,14 @@ Summary: The Linux kernel (the core of t
%define all_arch_configs $RPM_SOURCE_DIR/kernel-%{kversion}-*.config
%endif
-# Xen and kdump only build on i686 and x86_64 ...
+# kdump only builds on i686 and x86_64
%ifnarch i686 x86_64
+%define buildkdump 0
+%endif
+
+# Xen only builds on i686, x86_64 and ia64 ...
+%ifnarch i686 x86_64 ia64
%define buildxen 0
-%define buildkdump 0
%endif
%ifarch ppc64
@@ -140,11 +147,15 @@ Summary: The Linux kernel (the core of t
%endif
%ifarch ia64
-%define all_arch_configs $RPM_SOURCE_DIR/kernel-%{kversion}-ia64.config
+%define all_arch_configs $RPM_SOURCE_DIR/kernel-%{kversion}-ia64*.config
%define image_install_path boot/efi/EFI/redhat
%define signmodules 1
%define make_target compressed
%define kernel_image vmlinux.gz
+# ia64 doesn't building with debug=y at the moment
+%define xen_flags verbose=y crash_debug=y
+%define xen_target compressed
+%define xen_image vmlinux.gz
%endif
#
@@ -246,6 +257,8 @@ Source36: kernel-%{kversion}-i686-xen-PA
#Source67: kernel-%{kversion}-sparc64.config
#Source68: kernel-%{kversion}-sparc64-smp.config
+Source133: kernel-%{kversion}-ia64-xen.config
+
#
# Patches 0 through 100 are meant for core subsystem upgrades
#
@@ -288,6 +301,7 @@ Patch703: linux-2.6-xen-move-vdso-fixmap
Patch703: linux-2.6-xen-move-vdso-fixmap.patch
Patch704: linux-2.6-xen-vsyscall_base.patch
Patch706: linux-2.6-xen_remap_vma_flags.patch
+Patch707: linux-2.6-xen-ia64-fixes.patch
#
# Patches 800 through 899 are reserved for bugfixes to the core system
@@ -439,6 +453,7 @@ Patch10001: linux-2.6-random-patches.pat
# Xen hypervisor patches
Patch20000: xen-sched-sedf.patch
+Patch20001: xen-ia64-fixes.patch
# END OF PATCH DEFINITIONS
@@ -717,6 +732,7 @@ cp -rl xen-%{xen_version} xen
# Any necessary hypervisor patches go here
%patch20000 -p0
+%patch20001 -p0
%endif
cd linux-%{kversion}.%{_target_cpu}
@@ -784,11 +800,10 @@ cd linux-%{kversion}.%{_target_cpu}
#
%patch700 -p1 -b .p.xen
#
-# ... and back out all the ia64-specific sections, as they currently prevent
+# ... and back out all the tpm-specific sections, as they currently prevent
# non-xen builds from working.
-# Now also with tpm
-#
-for f in `find drivers/char/tpm arch/ia64/ include/asm-ia64/
include/xen/interface/arch-ia64.h* -type f -name "*.p.xen"` ; do \
+#
+for f in `find drivers/char/tpm -type f -name "*.p.xen"` ; do \
g=`dirname $f`/`basename $f .p.xen`; \
mv "$f" "$g"; \
if [ ! -s "$g" ] ; then rm -f "$g" ; fi; \
@@ -796,6 +811,11 @@ done
# Delete the rest of the backup files, they just confuse the build later
find -name "*.p.xen" | xargs rm -f
+# These are fixed in xen-ia64-unstable, can go away when that
+# propagates to Juan's patch
+ln -sf ../../../../xen/include/asm-ia64/asm-xsi-offsets.h include/asm-ia64/xen/
+ln -sf ../../../arch/ia64/xen/drivers/xenia64_init.c drivers/xen/core/
+
#
# Xen includes a patch which moves the vsyscall fixmap into a user-space VA,
# freeing user-space from reliance on an absolute fixmap area and so allowing
@@ -811,6 +831,7 @@ find -name "*.p.xen" | xargs rm -f
%patch702 -p1
%patch704 -p1
%patch706 -p1
+%patch707 -p1
%endif
@@ -1266,15 +1287,15 @@ mkdir -p $RPM_BUILD_ROOT/boot
%if %{includexen}
%if %{buildxen}
cd xen
- mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
+ mkdir -p $RPM_BUILD_ROOT/%{image_install_path} $RPM_BUILD_ROOT/boot
%if %{buildxenPAE}
- make debug=y verbose=y crash_debug=y pae=y
- install -m 644 xen.gz $RPM_BUILD_ROOT/boot/xen.gz-%{KVERREL}-PAE
+ make %{?_smp_mflags} %{xen_flags} pae=y
+ install -m 644 xen.gz
$RPM_BUILD_ROOT/%{image_install_path}/xen.gz-%{KVERREL}-PAE
install -m 755 xen-syms $RPM_BUILD_ROOT/boot/xen-syms-%{KVERREL}-PAE
make clean
%endif
- make debug=y verbose=y crash_debug=y
- install -m 644 xen.gz $RPM_BUILD_ROOT/boot/xen.gz-%{KVERREL}
+ make %{?_smp_mflags} %{xen_flags}
+ install -m 644 xen.gz $RPM_BUILD_ROOT/%{image_install_path}/xen.gz-%{KVERREL}
install -m 755 xen-syms $RPM_BUILD_ROOT/boot/xen-syms-%{KVERREL}
cd ..
%endif
@@ -1296,11 +1317,11 @@ BuildKernel %make_target %kernel_image s
%if %{includexen}
%if %{buildxenPAE}
-BuildKernel vmlinuz vmlinuz xen-PAE
+BuildKernel %xen_target %xen_image xen-PAE
%endif
%if %{buildxen}
-BuildKernel vmlinuz vmlinuz xen
+BuildKernel %xen_target %xen_image xen
%endif
%endif
@@ -1405,7 +1426,7 @@ fi
%post xen
[ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade
%{rpmversion}-%{release}-xen
if [ -e /proc/xen/xsd_kva -o ! -d /proc/xen ]; then
- /sbin/new-kernel-pkg --package kernel-xen --mkinitrd --depmod --install
--multiboot=/boot/xen.gz-%{KVERREL} %{KVERREL}xen
+ /sbin/new-kernel-pkg --package kernel-xen --mkinitrd --depmod --install
--multiboot=/%{image_install_path}/xen.gz-%{KVERREL} %{KVERREL}xen
else
/sbin/new-kernel-pkg --package kernel-xen --mkinitrd --depmod --install
%{KVERREL}xen
fi
@@ -1422,7 +1443,7 @@ fi
%post xen-PAE
[ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade
%{rpmversion}-%{release}-xen-PAE
if [ -e /proc/xen/xsd_kva ]; then
- /sbin/new-kernel-pkg --package kernel-xen-PAE --mkinitrd --depmod
--install --multiboot=/boot/xen.gz-%{KVERREL}-PAE %{KVERREL}xen-PAE
+ /sbin/new-kernel-pkg --package kernel-xen-PAE --mkinitrd --depmod
--install --multiboot=/%{image_install_path}/xen.gz-%{KVERREL}-PAE
%{KVERREL}xen-PAE
else
/sbin/new-kernel-pkg --package kernel-xen-PAE --mkinitrd --depmod
--install %{KVERREL}xen-PAE
fi
@@ -1551,7 +1572,7 @@ fi
/boot/symvers-%{KVERREL}xen.gz
/boot/symsets-%{KVERREL}xen.tar.gz
/boot/config-%{KVERREL}xen
-/boot/xen.gz-%{KVERREL}
+/%{image_install_path}/xen.gz-%{KVERREL}
/boot/xen-syms-%{KVERREL}
%dir /lib/modules/%{KVERREL}xen
/lib/modules/%{KVERREL}xen/kernel
@@ -1576,7 +1597,7 @@ fi
/boot/symvers-%{KVERREL}xen-PAE.gz
/boot/symsets-%{KVERREL}xen-PAE.tar.gz
/boot/config-%{KVERREL}xen-PAE
-/boot/xen.gz-%{KVERREL}-PAE
+/%{image_install_path}/xen.gz-%{KVERREL}-PAE
/boot/xen-syms-%{KVERREL}-PAE
%dir /lib/modules/%{KVERREL}xen-PAE
/lib/modules/%{KVERREL}xen-PAE/kernel
diff -r 73280cc9332c -r ab31e6d960bb devel/configs/config-xen-ia64
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/configs/config-xen-ia64 Tue Jun 27 15:50:47 2006 -0400
@@ -0,0 +1,19 @@
+# override i686 xen
+
+# CONFIG_X86 is not set
+# CONFIG_X86_XEN is not set
+CONFIG_IA64=y
+CONFIG_XEN=y
+CONFIG_XEN_IA64_DOM0_VP=y
+CONFIG_XEN_DISABLE_SERIAL=y
+
+# override ia64 generic
+
+# CONFIG_IA64_GENERIC is not set
+CONFIG_IA64_DIG=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+CONFIG_FLATMEM_MANUAL=y
+CONFIG_FORCE_MAX_ZONEORDER=11
+
+# internal #defines conflict with xen-ia64
+# CONFIG_FB_NEOMAGIC is not set
diff -r 73280cc9332c -r ab31e6d960bb devel/linux-2.6-xen-ia64-fixes.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/linux-2.6-xen-ia64-fixes.patch Tue Jun 27 15:50:47 2006 -0400
@@ -0,0 +1,63 @@
+--- linux-2.6.17.ia64.orig/arch/ia64/xen/xenentry.S 2006-06-21
16:56:36.000000000 -0400
++++ linux-2.6.17.ia64/arch/ia64/xen/xenentry.S 2006-06-21 20:59:47.000000000
-0400
+@@ -819,9 +819,6 @@ skip_rbs_switch:
+ st8 [r2]=r8
+ st8 [r3]=r10
+ .work_pending:
+- tbit.nz p6,p0=r31,TIF_SIGDELAYED // signal delayed from
MCA/INIT/NMI/PMI context?
+-(p6) br.cond.sptk.few .sigdelayed
+- ;;
+ tbit.z p6,p0=r31,TIF_NEED_RESCHED //
current_thread_info()->need_resched==0?
+ (p6) br.cond.sptk.few .notify
+ #ifdef CONFIG_PREEMPT
+@@ -857,17 +854,6 @@ skip_rbs_switch:
+ (pLvSys)br.cond.sptk.few .work_pending_syscall_end
+ br.cond.sptk.many .work_processed_kernel // don't re-check
+
+-// There is a delayed signal that was detected in MCA/INIT/NMI/PMI context
where
+-// it could not be delivered. Deliver it now. The signal might be for us and
+-// may set TIF_SIGPENDING, so redrive ia64_leave_* after processing the
delayed
+-// signal.
+-
+-.sigdelayed:
+- br.call.sptk.many rp=do_sigdelayed
+- cmp.eq p6,p0=r0,r0 // p6 <- 1, always
re-check
+-(pLvSys)br.cond.sptk.few .work_pending_syscall_end
+- br.cond.sptk.many .work_processed_kernel // re-check
+-
+ .work_pending_syscall_end:
+ adds r2=PT(R8)+16,r12
+ adds r3=PT(R10)+16,r12
+--- linux-2.6.17.ia64.orig/include/asm-ia64/io.h 2006-06-21
16:56:36.000000000 -0400
++++ linux-2.6.17.ia64/include/asm-ia64/io.h 2006-06-21 18:11:00.000000000
-0400
+@@ -450,28 +450,14 @@ __writeq (unsigned long val, volatile vo
+ # define outl_p outl
+ #endif
+
+-/*
+- * An "address" in IO memory space is not clearly either an integer or a
pointer. We will
+- * accept both, thus the casts.
+- *
+- * On ia-64, we access the physical I/O memory space through the uncached
kernel region.
+- */
+-static inline void __iomem *
+-ioremap (unsigned long offset, unsigned long size)
+-{
+-#ifdef CONFIG_XEN
+- offset = HYPERVISOR_ioremap(offset, size);
+-#endif
+- return (void __iomem *) (__IA64_UNCACHED_OFFSET | (offset));
+-}
++extern void __iomem * ioremap(unsigned long offset, unsigned long size);
++extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long
size);
+
+ static inline void
+ iounmap (volatile void __iomem *addr)
+ {
+ }
+
+-#define ioremap_nocache(o,s) ioremap(o,s)
+-
+ /* Use normal IO mappings for DMI */
+ #define dmi_ioremap ioremap
+ #define dmi_iounmap(x,l) iounmap(x)
diff -r 73280cc9332c -r ab31e6d960bb devel/xen-ia64-fixes.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/xen-ia64-fixes.patch Tue Jun 27 15:50:47 2006 -0400
@@ -0,0 +1,13 @@
+--- xen.orig/include/asm-ia64/xenpage.h 2006-05-03 15:05:40.000000000
-0400
++++ xen/include/asm-ia64/xenpage.h 2006-06-22 12:15:40.000000000 -0400
+@@ -28,6 +28,10 @@
+ #define page_to_virt(_page) maddr_to_virt(page_to_maddr(_page))
+ #define maddr_to_page(kaddr) mfn_to_page(((kaddr) >> PAGE_SHIFT))
+
++/* Convert between Xen-heap virtual addresses and machine frame numbers. */
++#define virt_to_mfn(va) (virt_to_maddr(va) >> PAGE_SHIFT)
++#define mfn_to_virt(mfn) maddr_to_virt(mfn << PAGE_SHIFT)
++
+ #ifndef __ASSEMBLY__
+ typedef union xen_va {
+ struct {
pgpIobkm8lo7H.pgp
Description: PGP signature
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|