From bff807c26af44d711ded0a3d3c2a4c9c1e809ef4a77ef50539cfa9480596b06a Mon Sep 17 00:00:00 2001 From: Charles Arnold Date: Thu, 23 Jan 2014 18:54:00 +0000 Subject: [PATCH] - BuildRequire libfdt1-devel on ARM - fate#311487: remove modprobe.conf files for autoloading of pv-on-hvm files. Rely on core kernel to skip initialization of emulated hardware Handle xen_emul_unplug= from xenlinux based core kernel-default OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=291 --- ioemu-disable-scsi.patch | 62 +++++++++++++++++-------------- ioemu-hvm-pv-support.patch | 31 +++++++++------- kmp_filelist | 1 - pvdrv_emulation_control.patch | 16 +++++--- xen.changes | 13 +++++++ xen.spec | 17 +++++---- xen_pvdrivers.conf | 8 ---- xen_pvonhvm.xen_emul_unplug.patch | 44 ++++++++++++++++++++++ 8 files changed, 129 insertions(+), 63 deletions(-) delete mode 100644 xen_pvdrivers.conf create mode 100644 xen_pvonhvm.xen_emul_unplug.patch diff --git a/ioemu-disable-scsi.patch b/ioemu-disable-scsi.patch index bfdc8ed..7657f5e 100644 --- a/ioemu-disable-scsi.patch +++ b/ioemu-disable-scsi.patch @@ -1,32 +1,13 @@ -Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c +--- + tools/qemu-xen-traditional-dir-remote/hw/pci.c | 44 ++++++++++++++++ + tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c | 2 + tools/qemu-xen-traditional-dir-remote/qemu-xen.h | 1 + 3 files changed, 47 insertions(+) + +Index: xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/pci.c =================================================================== ---- xen-4.2.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c -+++ xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c -@@ -359,6 +359,8 @@ static void platform_ioport_write(void * - case 4: - fprintf(logfile, "Disconnect IDE hard disk...\n"); - ide_unplug_harddisks(); -+ fprintf(logfile, "Disconnect SCSI hard disk...\n"); -+ pci_unplug_scsi(); - fprintf(logfile, "Disconnect netifs...\n"); - pci_unplug_netifs(); - fprintf(logfile, "Shutdown taps...\n"); -Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/qemu-xen.h -=================================================================== ---- xen-4.2.0-testing.orig/tools/qemu-xen-traditional-dir-remote/qemu-xen.h -+++ xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/qemu-xen.h -@@ -47,6 +47,7 @@ void unset_vram_mapping(void *opaque); - #endif - - void pci_unplug_netifs(void); -+void pci_unplug_scsi(void); - void destroy_hvm_domain(void); - void unregister_iomem(target_phys_addr_t start); - -Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/pci.c -=================================================================== ---- xen-4.2.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/pci.c -+++ xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/pci.c +--- xen-4.4.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/pci.c ++++ xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/pci.c @@ -871,6 +871,50 @@ void pci_unplug_netifs(void) } } @@ -78,3 +59,28 @@ Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/pci.c typedef struct { PCIDevice dev; PCIBus *bus; +Index: xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c +=================================================================== +--- xen-4.4.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c ++++ xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c +@@ -364,6 +364,8 @@ static void suse_platform_ioport_write(v + * If it controlled just disk or just LAN, it would use 8 below. */ + fprintf(logfile, "Disconnect IDE hard disk...\n"); + ide_unplug_harddisks(); ++ fprintf(logfile, "Disconnect SCSI hard disk...\n"); ++ pci_unplug_scsi(); + fprintf(logfile, "Disconnect netifs...\n"); + pci_unplug_netifs(); + fprintf(logfile, "Shutdown taps...\n"); +Index: xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/qemu-xen.h +=================================================================== +--- xen-4.4.0-testing.orig/tools/qemu-xen-traditional-dir-remote/qemu-xen.h ++++ xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/qemu-xen.h +@@ -47,6 +47,7 @@ void unset_vram_mapping(void *opaque); + #endif + + void pci_unplug_netifs(void); ++void pci_unplug_scsi(void); + void destroy_hvm_domain(void); + void unregister_iomem(target_phys_addr_t start); + diff --git a/ioemu-hvm-pv-support.patch b/ioemu-hvm-pv-support.patch index 4152667..2dbd52c 100644 --- a/ioemu-hvm-pv-support.patch +++ b/ioemu-hvm-pv-support.patch @@ -1,7 +1,11 @@ -Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c +--- + tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c | 46 ++++++++++++++++ + 1 file changed, 46 insertions(+) + +Index: xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c =================================================================== ---- xen-4.2.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c -+++ xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c +--- xen-4.4.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c ++++ xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c @@ -30,6 +30,8 @@ #include "qemu-xen.h" #include "net.h" @@ -11,13 +15,13 @@ Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c #include #include -@@ -335,11 +337,51 @@ static void xen_platform_ioport_writeb(v +@@ -335,8 +337,52 @@ static void xen_platform_ioport_writeb(v } } +static uint32_t ioport_base; + -+static void platform_ioport_write(void *opaque, uint32_t addr, uint32_t val) ++static void suse_platform_ioport_write(void *opaque, uint32_t addr, uint32_t val) +{ + DECLARE_DOMCTL; + int rc; @@ -27,6 +31,7 @@ Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c + + switch (addr - ioport_base) { + case 0: ++ /* FIXME Unknown who makes use of this code! */ + fprintf(logfile, "Init hypercall page %x, addr %x.\n", val, addr); + domctl.domain = (domid_t)domid; + domctl.u.hypercall_init.gmfn = val; @@ -35,6 +40,10 @@ Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c + fprintf(logfile, "result -> %d.\n", rc); + break; + case 4: ++ /* xen-kmp used this since xen-3.0.4, instead the official protocol from xen-3.3+ ++ * pre vmdp 1.7 made use of 4 and 8 depending on how vmdp was configured. ++ * If vmdp was to control both disk and LAN it would use 4. ++ * If it controlled just disk or just LAN, it would use 8 below. */ + fprintf(logfile, "Disconnect IDE hard disk...\n"); + ide_unplug_harddisks(); + fprintf(logfile, "Disconnect netifs...\n"); @@ -44,8 +53,8 @@ Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c + fprintf(logfile, "Done.\n"); + break; + default: -+ fprintf(logfile, "Write to bad port %x (base %x) on evtchn device.\n", -+ addr, ioport_base); ++ fprintf(logfile, "Write %x to bad port %x (base %x) on evtchn device.\n", ++ val, addr, ioport_base); + break; + } +} @@ -54,12 +63,8 @@ Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c { + ioport_base = addr; + -+ register_ioport_write(addr, 16, 4, platform_ioport_write, NULL); -+/* ++ register_ioport_write(addr, 16, 4, suse_platform_ioport_write, NULL); ++ PCIXenPlatformState *d = (PCIXenPlatformState *)pci_dev; register_ioport_write(addr, size, 1, xen_platform_ioport_writeb, d); register_ioport_read(addr, size, 1, xen_platform_ioport_readb, d); -+*/ - } - - static uint32_t platform_mmio_read(void *opaque, target_phys_addr_t addr) diff --git a/kmp_filelist b/kmp_filelist index ede3343..01cfbf2 100644 --- a/kmp_filelist +++ b/kmp_filelist @@ -1,3 +1,2 @@ %defattr (-,root,root) /lib/modules/%2-%1 -/etc/modprobe.d/xen_pvdrivers-%1.conf diff --git a/pvdrv_emulation_control.patch b/pvdrv_emulation_control.patch index 92044e0..9e43a66 100644 --- a/pvdrv_emulation_control.patch +++ b/pvdrv_emulation_control.patch @@ -1,8 +1,12 @@ -Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c +--- + tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +Index: xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c =================================================================== ---- xen-4.2.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c -+++ xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c -@@ -365,6 +365,19 @@ static void platform_ioport_write(void * +--- xen-4.4.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c ++++ xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c +@@ -370,6 +370,19 @@ static void suse_platform_ioport_write(v net_tap_shutdown_all(); fprintf(logfile, "Done.\n"); break; @@ -20,5 +24,5 @@ Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c + } + break; default: - fprintf(logfile, "Write to bad port %x (base %x) on evtchn device.\n", - addr, ioport_base); + fprintf(logfile, "Write %x to bad port %x (base %x) on evtchn device.\n", + val, addr, ioport_base); diff --git a/xen.changes b/xen.changes index 416414c..affd8b1 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Sun Jan 19 00:13:06 CET 2014 - ohering@suse.de + +- BuildRequire libfdt1-devel on ARM + +------------------------------------------------------------------- +Sat Jan 18 00:35:46 CET 2014 - ohering@suse.de + +- fate#311487: remove modprobe.conf files for autoloading of + pv-on-hvm files. + Rely on core kernel to skip initialization of emulated hardware + Handle xen_emul_unplug= from xenlinux based core kernel-default + ------------------------------------------------------------------- Wed Jan 16 13:11:32 MST 2014 - carnold@suse.com diff --git a/xen.spec b/xen.spec index 10725f9..b6abd9d 100644 --- a/xen.spec +++ b/xen.spec @@ -60,17 +60,20 @@ ExclusiveArch: %ix86 x86_64 %arm aarch64 %else %define with_systemd 0 %endif -%ifnarch %arm aarch64 +%ifarch %arm aarch64 +BuildRequires: libfdt1-devel +%endif +%ifarch %ix86 x86_64 BuildRequires: dev86 %endif BuildRequires: fdupes BuildRequires: glib2-devel BuildRequires: libaio-devel BuildRequires: libbz2-devel -BuildRequires: libpixman-1-0-devel BuildRequires: libuuid-devel BuildRequires: libxml2-devel BuildRequires: libyajl-devel +BuildRequires: libpixman-1-0-devel BuildRequires: ncurses-devel BuildRequires: openssl-devel BuildRequires: python-devel @@ -79,10 +82,10 @@ BuildRequires: transfig BuildRequires: texinfo BuildRequires: texlive %if %suse_version > 1220 +BuildRequires: texlive-latex BuildRequires: texlive-courier BuildRequires: texlive-dvips BuildRequires: texlive-helvetic -BuildRequires: texlive-latex BuildRequires: texlive-psnfss BuildRequires: texlive-times BuildRequires: tex(a4.sty) @@ -105,7 +108,7 @@ BuildRequires: xz-devel %if %suse_version <= 1110 BuildRequires: pmtools %else -%ifnarch %arm aarch64 +%ifarch %ix86 x86_64 BuildRequires: acpica %endif %endif @@ -157,7 +160,6 @@ Source23: block-npiv-vport Source24: xmclone.sh Source26: init.xen_loop %if %{?with_kmp}0 -Source27: xen_pvdrivers.conf Source28: kmp_filelist %endif Source29: block-dmmd @@ -252,6 +254,7 @@ Patch381: ioemu-disable-scsi.patch Patch382: ioemu-disable-emulated-ide-if-pv.patch Patch383: xenpaging.qemu.flush-cache.patch Patch384: qemu-xen-upstream-blkif-discard.patch +Patch385: xen_pvonhvm.xen_emul_unplug.patch # Xend Patch400: xen.migrate.tools_set_migration_constraints_from_cmdline.patch Patch401: xen.migrate.tools_add_xm_migrate_--log_progress_option.patch @@ -598,6 +601,7 @@ Authors: %patch382 -p1 %patch383 -p1 %patch384 -p1 +%patch385 -p1 # Xend %if %{?with_xend}0 %patch400 -p1 @@ -703,7 +707,7 @@ configure_flags="${configure_flags} --disable-xend" --enable-blktap1 ${configure_flags} %if %{?with_dom0_support}0 CFLAGS_SAVE=$CFLAGS -%ifnarch %arm aarch64 +%ifarch %ix86 x86_64 make -C xenalyze.hg CC="gcc -I../xen/include -DMAX_CPUS=%{max_cpus} ${RPM_OPT_FLAGS}" %{?_smp_mflags} -k %endif make -C tools/include/xen-foreign %{?_smp_mflags} @@ -802,7 +806,6 @@ mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d for flavor in %flavors_to_build; do make -C /usr/src/linux-obj/%_target_cpu/$flavor modules_install \ M=$PWD/obj/$flavor - install -m644 %SOURCE27 $RPM_BUILD_ROOT/etc/modprobe.d/xen_pvdrivers-$flavor.conf done %endif diff --git a/xen_pvdrivers.conf b/xen_pvdrivers.conf deleted file mode 100644 index 30489fa..0000000 --- a/xen_pvdrivers.conf +++ /dev/null @@ -1,8 +0,0 @@ -# Install the paravirtualized drivers -install libata /sbin/modprobe xen-vbd 2>&1 |:; /sbin/modprobe --ignore-install libata -install ata_piix /sbin/modprobe xen-vbd 2>&1 |:; /sbin/modprobe --ignore-install ata_piix - -install 8139cp /sbin/modprobe xen-vnif 2>&1 |:; /sbin/modprobe --ignore-install 8139cp - -install 8139too /sbin/modprobe xen-vnif 2>&1 |:; /sbin/modprobe --ignore-install 8139too - diff --git a/xen_pvonhvm.xen_emul_unplug.patch b/xen_pvonhvm.xen_emul_unplug.patch new file mode 100644 index 0000000..2827ea0 --- /dev/null +++ b/xen_pvonhvm.xen_emul_unplug.patch @@ -0,0 +1,44 @@ +fate#311487 + +Handle xen_emul_unplug from xenlinux based core kernel. + +If the kernel was booted with xen_emul_unplug=(never|ide-disks|nics) unplug only +what was requested. Kernel cmdline option is prefered over module option. + +--- + unmodified_drivers/linux-2.6/platform-pci/platform-pci.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +Index: xen-4.4.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +=================================================================== +--- xen-4.4.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c ++++ xen-4.4.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +@@ -39,6 +39,9 @@ + #include + #include + #include ++#ifdef HAVE_XEN_PVONHVM_UNPLUG ++#include ++#endif + #ifdef __ia64__ + #include + #endif +@@ -290,6 +293,18 @@ static int check_platform_magic(struct d + short magic, unplug = 0; + char protocol, *p, *q, *err; + ++#ifdef HAVE_XEN_PVONHVM_UNPLUG ++ if (xen_pvonhvm_unplug) { ++ /* Use kernel cmdline setting */ ++ if (dev_unplug) ++ printk(KERN_INFO DRV_NAME ": ignoring option dev_unplug=%s \n", dev_unplug); ++ dev_unplug = NULL; ++ if (xen_pvonhvm_unplugged_disks) ++ unplug |= UNPLUG_ALL_IDE_DISKS | UNPLUG_AUX_IDE_DISKS; ++ if (xen_pvonhvm_unplugged_nics) ++ unplug |= UNPLUG_ALL_NICS; ++ } else ++#endif + /* Unconditionally unplug everything */ + if (!dev_unplug) + unplug = UNPLUG_ALL;