- Upstream patches from Jan

23726-x86-intel-flexmigration.patch
  23706-fix-20892.patch
  23723-x86-CMOS-lock.patch
  23676-x86_64-image-map-bounds.patch
  23724-x86-smpboot-x2apic.patch 

- hotplug.losetup.patch
  correct dev:inode detection, stat returns major:minor without 
  leading zeros, while losetup -a includes trailing zeros

- fate#310635: xen npiv multipath support
  update block-npiv* scripts for testing

OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=133
This commit is contained in:
Charles Arnold 2011-08-05 20:04:48 +00:00 committed by Git OBS Bridge
parent 873847f0da
commit 98d3290ab8
17 changed files with 791 additions and 94 deletions

View File

@ -42,6 +42,23 @@ EFI_VENDOR.
Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Jan Beulich <jbeulich@novell.com>
# HG changeset patch
# User Jan Beulich <jbeulich@novell.com>
# Date 1310127785 -3600
# Node ID 88823213a4780ebced6d7adcb1ffd2dda6a339ca
# Parent d1a2861b9caa1a428a531c0d68b372df872d5b0d
x86-64/EFI: discard .comment.* sections
The SuSE version of gcc produces a non-standard section named
.comment.SUSE.OPTs, but the PE32+ handling in binutils can't really
deal with any section to be placed at virtual address zero (and not
needing to be loaded). Even if binutils did, at least the UEFI
implementation in EDK 1.06 doesn't look at the section characteristics
at all, and hence would attempt to load such a section, and fail or
corrupt other data.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- a/xen/Makefile --- a/xen/Makefile
+++ b/xen/Makefile +++ b/xen/Makefile
@@ -11,6 +11,8 @@ export XEN_DOMAIN ?= $(shell ([ -x /bin/ @@ -11,6 +11,8 @@ export XEN_DOMAIN ?= $(shell ([ -x /bin/
@ -2294,7 +2311,7 @@ Signed-off-by: Jan Beulich <jbeulich@novell.com>
PHDRS PHDRS
{ {
text PT_LOAD ; text PT_LOAD ;
@@ -122,12 +141,29 @@ SECTIONS @@ -122,12 +141,30 @@ SECTIONS
} :text } :text
_end = . ; _end = . ;
@ -2320,6 +2337,7 @@ Signed-off-by: Jan Beulich <jbeulich@novell.com>
*(.eh_frame) *(.eh_frame)
+#ifdef EFI +#ifdef EFI
+ *(.comment) + *(.comment)
+ *(.comment.*)
+#endif +#endif
} }

View File

@ -30,6 +30,20 @@ having established the normal page tables again afterwards).
Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Jan Beulich <jbeulich@novell.com>
# HG changeset patch
# User Jan Beulich <jbeulich@novell.com>
# Date 1311081015 -3600
# Node ID 7bc5825e471db5a3a989f47d21334ef63a6b5610
# Parent 0ccb94d533d6feaece5d48eb1bbfb9ae1b6174c1
x86-64/EFI: don't call EfiResetSystem() from machine_halt()
c/s 23615:d19e77844267 was a little too eager in adding calls to EFI
runtime services: machine_halt() doesn't really want to power off the
machine, but that's what EfiResetSystem(EfiResetShutdown, ...) (called
through efi_halt_system()) does.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- a/xen/arch/x86/efi/boot.c --- a/xen/arch/x86/efi/boot.c
+++ b/xen/arch/x86/efi/boot.c +++ b/xen/arch/x86/efi/boot.c
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
@ -636,15 +650,7 @@ Signed-off-by: Jan Beulich <jbeulich@novell.com>
#include <asm/msr.h> #include <asm/msr.h>
#include <asm/regs.h> #include <asm/regs.h>
#include <asm/mc146818rtc.h> #include <asm/mc146818rtc.h>
@@ -95,6 +96,7 @@ void machine_halt(void) @@ -337,6 +338,8 @@ void machine_restart(unsigned int delay_
watchdog_disable();
console_start_sync();
local_irq_enable();
+ efi_halt_system();
smp_call_function(__machine_halt, NULL, 0);
__machine_halt(NULL);
}
@@ -337,6 +339,8 @@ void machine_restart(unsigned int delay_
if ( tboot_in_measured_env() ) if ( tboot_in_measured_env() )
tboot_shutdown(TB_SHUTDOWN_REBOOT); tboot_shutdown(TB_SHUTDOWN_REBOOT);

View File

@ -0,0 +1,59 @@
# HG changeset patch
# User Jan Beulich <jbeulich@novell.com>
# Date 1310631973 -3600
# Node ID 80c9db90bba96e443a22d268c06948fdef9c6a75
# Parent 88823213a4780ebced6d7adcb1ffd2dda6a339ca
x86-64: properly handle alias mappings beyond _end
Changeset 19632:b0966b6f5180 wasn't really complete: The Xen image
mapping doesn't end at _end, but a full 16Mb gets mapped during boot
(and never got unmapped so far), hence all of this space was subject
to alias mappings when it comes to cache attribute changes. Unmap all
full large pages between _end and the 16Mb boundary, and include all
other pages beyond _end when checking for aliases.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -776,7 +776,7 @@ static int update_xen_mappings(unsigned
int err = 0;
#ifdef __x86_64__
bool_t alias = mfn >= PFN_DOWN(xen_phys_start) &&
- mfn < PFN_UP(xen_phys_start + (unsigned long)_end - XEN_VIRT_START);
+ mfn < PFN_UP(xen_phys_start + xen_virt_end - XEN_VIRT_START);
unsigned long xen_va =
XEN_VIRT_START + ((mfn - PFN_DOWN(xen_phys_start)) << PAGE_SHIFT);
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -99,6 +99,8 @@ unsigned long __read_mostly xen_phys_sta
/* Limits of Xen heap, used to initialise the allocator. */
unsigned long __initdata xenheap_initial_phys_start;
unsigned long __read_mostly xenheap_phys_end;
+#else
+unsigned long __read_mostly xen_virt_end;
#endif
DEFINE_PER_CPU(struct tss_struct, init_tss);
@@ -1098,6 +1100,9 @@ void __init __start_xen(unsigned long mb
map_pages_to_xen((unsigned long)__va(kexec_crash_area.start),
kexec_crash_area.start >> PAGE_SHIFT,
PFN_UP(kexec_crash_area.size), PAGE_HYPERVISOR);
+ xen_virt_end = ((unsigned long)_end + (1UL << L2_PAGETABLE_SHIFT) - 1) &
+ ~((1UL << L2_PAGETABLE_SHIFT) - 1);
+ destroy_xen_mappings(xen_virt_end, XEN_VIRT_START + BOOTSTRAP_MAP_BASE);
#endif
memguard_init();
--- a/xen/include/asm-x86/x86_64/page.h
+++ b/xen/include/asm-x86/x86_64/page.h
@@ -34,6 +34,8 @@
#include <xen/config.h>
#include <asm/types.h>
+extern unsigned long xen_virt_end;
+
extern unsigned long max_pdx;
extern unsigned long pfn_pdx_bottom_mask, ma_va_bottom_mask;
extern unsigned int pfn_pdx_hole_shift;

28
23706-fix-20892.patch Normal file
View File

@ -0,0 +1,28 @@
# HG changeset patch
# User Jan Beulich <jbeulich@novell.com>
# Date 1310804301 -3600
# Node ID 3dd399873c9ef7762f4353f3259e502394f56a34
# Parent 24e9ca968a2bc09d1aac927fcdbb7b769901d067
x86: fix guest migration after c/s 20892:d311d1efc25e
Guests would not manage to run successfully after being migrated to a
host having sufficiently much more memory than the host they were
originally started on.
Subsequently the plan is to re-enable the changes behavior under the
control of a guest kernel announced feature flag.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -4791,7 +4791,7 @@ long arch_memory_op(int op, XEN_GUEST_HA
.max_mfn = MACH2PHYS_NR_ENTRIES - 1
};
- if ( !mem_hotplug )
+ if ( !mem_hotplug && current->domain == dom0 )
mapping.max_mfn = max_page - 1;
if ( copy_to_guest(arg, &mapping, 1) )
return -EFAULT;

271
23723-x86-CMOS-lock.patch Normal file
View File

@ -0,0 +1,271 @@
# HG changeset patch
# User Jan Beulich <jbeulich@novell.com>
# Date 1311081053 -3600
# Node ID 18653a163b1e8e10b4353272bcb9e8302bfd2e19
# Parent 7bc5825e471db5a3a989f47d21334ef63a6b5610
x86: consistently serialize CMOS/RTC accesses on rtc_lock
Since RTC/CMOS accesses aren't atomic, there are possible races
between code paths setting the index register and subsequently
reading/writing the data register. This is supposed to be dealt with
by acquiring rtc_lock, but two places up to now lacked respective
synchronization: Accesses to the EFI time functions and
smpboot_{setup,restore}_warm_reset_vector().
This in turn requires no longer directly passing through guest writes
to the index register, but instead using a machanism similar to that
for PCI config space method 1 accesses.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- a/xen/arch/x86/efi/runtime.c
+++ b/xen/arch/x86/efi/runtime.c
@@ -3,6 +3,7 @@
#include <xen/errno.h>
#include <xen/guest_access.h>
#include <xen/time.h>
+#include <asm/mc146818rtc.h>
DEFINE_XEN_GUEST_HANDLE(CHAR16);
@@ -80,9 +81,11 @@ unsigned long efi_get_time(void)
{
EFI_TIME time;
EFI_STATUS status;
- unsigned long cr3 = efi_rs_enter();
+ unsigned long cr3 = efi_rs_enter(), flags;
+ spin_lock_irqsave(&rtc_lock, flags);
status = efi_rs->GetTime(&time, NULL);
+ spin_unlock_irqrestore(&rtc_lock, flags);
efi_rs_leave(cr3);
if ( EFI_ERROR(status) )
@@ -223,7 +226,7 @@ static inline EFI_GUID *cast_guid(struct
int efi_runtime_call(struct xenpf_efi_runtime_call *op)
{
- unsigned long cr3;
+ unsigned long cr3, flags;
EFI_STATUS status = EFI_NOT_STARTED;
int rc = 0;
@@ -237,7 +240,9 @@ int efi_runtime_call(struct xenpf_efi_ru
return -EINVAL;
cr3 = efi_rs_enter();
+ spin_lock_irqsave(&rtc_lock, flags);
status = efi_rs->GetTime(cast_time(&op->u.get_time.time), &caps);
+ spin_unlock_irqrestore(&rtc_lock, flags);
efi_rs_leave(cr3);
if ( !EFI_ERROR(status) )
@@ -255,7 +260,9 @@ int efi_runtime_call(struct xenpf_efi_ru
return -EINVAL;
cr3 = efi_rs_enter();
+ spin_lock_irqsave(&rtc_lock, flags);
status = efi_rs->SetTime(cast_time(&op->u.set_time));
+ spin_unlock_irqrestore(&rtc_lock, flags);
efi_rs_leave(cr3);
break;
@@ -267,8 +274,10 @@ int efi_runtime_call(struct xenpf_efi_ru
return -EINVAL;
cr3 = efi_rs_enter();
+ spin_lock_irqsave(&rtc_lock, flags);
status = efi_rs->GetWakeupTime(&enabled, &pending,
cast_time(&op->u.get_wakeup_time));
+ spin_unlock_irqrestore(&rtc_lock, flags);
efi_rs_leave(cr3);
if ( !EFI_ERROR(status) )
@@ -287,12 +296,14 @@ int efi_runtime_call(struct xenpf_efi_ru
return -EINVAL;
cr3 = efi_rs_enter();
+ spin_lock_irqsave(&rtc_lock, flags);
status = efi_rs->SetWakeupTime(!!(op->misc &
XEN_EFI_SET_WAKEUP_TIME_ENABLE),
(op->misc &
XEN_EFI_SET_WAKEUP_TIME_ENABLE_ONLY) ?
NULL :
cast_time(&op->u.set_wakeup_time));
+ spin_unlock_irqrestore(&rtc_lock, flags);
efi_rs_leave(cr3);
op->misc = 0;
--- a/xen/arch/x86/hpet.c
+++ b/xen/arch/x86/hpet.c
@@ -525,18 +525,10 @@ static void hpet_detach_channel(int cpu,
#include <asm/mc146818rtc.h>
-void (*pv_rtc_handler)(unsigned int port, uint8_t value);
+void (*__read_mostly pv_rtc_handler)(uint8_t index, uint8_t value);
-static void handle_rtc_once(unsigned int port, uint8_t value)
+static void handle_rtc_once(uint8_t index, uint8_t value)
{
- static int index;
-
- if ( port == 0x70 )
- {
- index = value;
- return;
- }
-
if ( index != RTC_REG_B )
return;
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -67,6 +67,8 @@
#include <asm/hypercall.h>
#include <asm/mce.h>
#include <asm/apic.h>
+#include <asm/mc146818rtc.h>
+#include <asm/hpet.h>
#include <public/arch-x86/cpuid.h>
/*
@@ -1620,6 +1622,10 @@ static int admin_io_okay(
if ( (port == 0xcf8) && (bytes == 4) )
return 0;
+ /* We also never permit direct access to the RTC/CMOS registers. */
+ if ( ((port & ~1) == RTC_PORT(0)) )
+ return 0;
+
return ioports_access_permitted(v->domain, port, port + bytes - 1);
}
@@ -1649,6 +1655,21 @@ static uint32_t guest_io_read(
{
sub_data = pv_pit_handler(port, 0, 0);
}
+ else if ( (port == RTC_PORT(0)) )
+ {
+ sub_data = v->domain->arch.cmos_idx;
+ }
+ else if ( (port == RTC_PORT(1)) &&
+ ioports_access_permitted(v->domain, RTC_PORT(0),
+ RTC_PORT(1)) )
+ {
+ unsigned long flags;
+
+ spin_lock_irqsave(&rtc_lock, flags);
+ outb(v->domain->arch.cmos_idx & 0x7f, RTC_PORT(0));
+ sub_data = inb(RTC_PORT(1));
+ spin_unlock_irqrestore(&rtc_lock, flags);
+ }
else if ( (port == 0xcf8) && (bytes == 4) )
{
size = 4;
@@ -1674,8 +1695,6 @@ static uint32_t guest_io_read(
return data;
}
-extern void (*pv_rtc_handler)(unsigned int port, uint8_t value);
-
static void guest_io_write(
unsigned int port, unsigned int bytes, uint32_t data,
struct vcpu *v, struct cpu_user_regs *regs)
@@ -1684,8 +1703,6 @@ static void guest_io_write(
{
switch ( bytes ) {
case 1:
- if ( ((port == 0x70) || (port == 0x71)) && pv_rtc_handler )
- pv_rtc_handler(port, (uint8_t)data);
outb((uint8_t)data, port);
if ( pv_post_outb_hook )
pv_post_outb_hook(port, (uint8_t)data);
@@ -1708,6 +1725,23 @@ static void guest_io_write(
{
pv_pit_handler(port, (uint8_t)data, 1);
}
+ else if ( (port == RTC_PORT(0)) )
+ {
+ v->domain->arch.cmos_idx = data;
+ }
+ else if ( (port == RTC_PORT(1)) &&
+ ioports_access_permitted(v->domain, RTC_PORT(0),
+ RTC_PORT(1)) )
+ {
+ unsigned long flags;
+
+ if ( pv_rtc_handler )
+ pv_rtc_handler(v->domain->arch.cmos_idx & 0x7f, data);
+ spin_lock_irqsave(&rtc_lock, flags);
+ outb(v->domain->arch.cmos_idx & 0x7f, RTC_PORT(0));
+ outb(data, RTC_PORT(1));
+ spin_unlock_irqrestore(&rtc_lock, flags);
+ }
else if ( (port == 0xcf8) && (bytes == 4) )
{
size = 4;
@@ -2073,10 +2107,6 @@ static int emulate_privileged_op(struct
goto fail;
if ( admin_io_okay(port, op_bytes, v, regs) )
{
- if ( (op_bytes == 1) &&
- ((port == 0x71) || (port == 0x70)) &&
- pv_rtc_handler )
- pv_rtc_handler(port, regs->eax);
io_emul(regs);
if ( (op_bytes == 1) && pv_post_outb_hook )
pv_post_outb_hook(port, regs->eax);
--- a/xen/include/asm-x86/domain.h
+++ b/xen/include/asm-x86/domain.h
@@ -251,6 +251,7 @@ struct arch_domain
/* I/O-port admin-specified access capabilities. */
struct rangeset *ioport_caps;
uint32_t pci_cf8;
+ uint8_t cmos_idx;
struct list_head pdev_list;
struct hvm_domain hvm_domain;
--- a/xen/include/asm-x86/hpet.h
+++ b/xen/include/asm-x86/hpet.h
@@ -52,6 +52,7 @@
#define HPET_TN_FSB_CAP 0x8000
#define HPET_TN_ROUTE_SHIFT 9
+extern void (*pv_rtc_handler)(uint8_t reg, uint8_t value);
#define hpet_read32(x) \
(*(volatile u32 *)(fix_to_virt(FIX_HPET_BASE) + (x)))
--- a/xen/include/asm-x86/mach-default/smpboot_hooks.h
+++ b/xen/include/asm-x86/mach-default/smpboot_hooks.h
@@ -3,7 +3,11 @@
static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip)
{
+ unsigned long flags;
+
+ spin_lock_irqsave(&rtc_lock, flags);
CMOS_WRITE(0xa, 0xf);
+ spin_unlock_irqrestore(&rtc_lock, flags);
flush_tlb_local();
Dprintk("1.\n");
*((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4;
@@ -14,6 +18,8 @@ static inline void smpboot_setup_warm_re
static inline void smpboot_restore_warm_reset_vector(void)
{
+ unsigned long flags;
+
/*
* Install writable page 0 entry to set BIOS data area.
*/
@@ -23,7 +29,9 @@ static inline void smpboot_restore_warm_
* Paranoid: Set warm reset code and vector here back
* to default values.
*/
+ spin_lock_irqsave(&rtc_lock, flags);
CMOS_WRITE(0, 0xf);
+ spin_unlock_irqrestore(&rtc_lock, flags);
*((volatile int *) maddr_to_virt(0x467)) = 0;
}

View File

@ -0,0 +1,102 @@
# HG changeset patch
# User Tim Deegan <Tim.Deegan@citrix.com>
# Date 1311081181 -3600
# Node ID b3434f24b0827c5ef34e4b4a72893288e2ffbe40
# Parent 18653a163b1e8e10b4353272bcb9e8302bfd2e19
x86: Remove timeouts from INIT-SIPI-SIPI sequence when using x2apic.
Some of the timeouts are pointless since they're waiting for the ICR
to ack the IPI delivery and that doesn't happen on x2apic.
The others should be benign (and are suggested in the SDM) but
removing them makes AP bringup much more reliable on some test boxes.
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -448,29 +448,30 @@ static int wakeup_secondary_cpu(int phys
apic_icr_write(APIC_INT_LEVELTRIG | APIC_INT_ASSERT | APIC_DM_INIT,
phys_apicid);
- Dprintk("Waiting for send to finish...\n");
- timeout = 0;
- do {
- Dprintk("+");
- udelay(100);
- if ( !x2apic_enabled )
+ if ( !x2apic_enabled )
+ {
+ Dprintk("Waiting for send to finish...\n");
+ timeout = 0;
+ do {
+ Dprintk("+");
+ udelay(100);
send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
- } while ( send_status && (timeout++ < 1000) );
+ } while ( send_status && (timeout++ < 1000) );
- mdelay(10);
+ mdelay(10);
- Dprintk("Deasserting INIT.\n");
+ Dprintk("Deasserting INIT.\n");
- apic_icr_write(APIC_INT_LEVELTRIG | APIC_DM_INIT, phys_apicid);
+ apic_icr_write(APIC_INT_LEVELTRIG | APIC_DM_INIT, phys_apicid);
- Dprintk("Waiting for send to finish...\n");
- timeout = 0;
- do {
- Dprintk("+");
- udelay(100);
- if ( !x2apic_enabled )
+ Dprintk("Waiting for send to finish...\n");
+ timeout = 0;
+ do {
+ Dprintk("+");
+ udelay(100);
send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
- } while ( send_status && (timeout++ < 1000) );
+ } while ( send_status && (timeout++ < 1000) );
+ }
/*
* Should we send STARTUP IPIs ?
@@ -499,22 +500,24 @@ static int wakeup_secondary_cpu(int phys
*/
apic_icr_write(APIC_DM_STARTUP | (start_eip >> 12), phys_apicid);
- /* Give the other CPU some time to accept the IPI. */
- udelay(300);
+ if ( !x2apic_enabled )
+ {
+ /* Give the other CPU some time to accept the IPI. */
+ udelay(300);
- Dprintk("Startup point 1.\n");
+ Dprintk("Startup point 1.\n");
- Dprintk("Waiting for send to finish...\n");
- timeout = 0;
- do {
- Dprintk("+");
- udelay(100);
- if ( !x2apic_enabled )
- send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
- } while ( send_status && (timeout++ < 1000) );
+ Dprintk("Waiting for send to finish...\n");
+ timeout = 0;
+ do {
+ Dprintk("+");
+ udelay(100);
+ send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
+ } while ( send_status && (timeout++ < 1000) );
- /* Give the other CPU some time to accept the IPI. */
- udelay(200);
+ /* Give the other CPU some time to accept the IPI. */
+ udelay(200);
+ }
/* Due to the Pentium erratum 3AP. */
if ( maxlvt > 3 )

View File

@ -0,0 +1,128 @@
# HG changeset patch
# User Jan Beulich <jbeulich@novell.com>
# Date 1311081291 -3600
# Node ID fd97ca086df6808bffc6ecf3f79cebca64c60bc3
# Parent 4dc6a9ba90d60fdf0cc0898fc9a8fe84ae9030fc
x86: update Intel CPUID masking code to latest spec
..., which adds masking of the xsave feature leaf.
Also add back (and fix to actually make it do what it was supposed to
do from the beginning) the printing of what specific masking couldn't
be done in case the user requested something the hardware doesn't
support.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
# HG changeset patch
# User Jan Beulich <jbeulich@novell.com>
# Date 1311255291 -3600
# Node ID 48f72b389b04cfa8d44924577a69ed59e48fbe77
# Parent dd5eecf739d152fb16bd44897875ea878d4c9d59
x86: add change missing in c/s 23726:fd97ca086df6
The early "do we need to do anything" check needs adjustment, too.
Thanks to Haitao Shan for pointing this out.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- a/xen/arch/x86/cpu/common.c
+++ b/xen/arch/x86/cpu/common.c
@@ -27,10 +27,15 @@ boolean_param("noserialnumber", disable_
static bool_t __cpuinitdata use_xsave;
boolean_param("xsave", use_xsave);
+
unsigned int __devinitdata opt_cpuid_mask_ecx = ~0u;
integer_param("cpuid_mask_ecx", opt_cpuid_mask_ecx);
unsigned int __devinitdata opt_cpuid_mask_edx = ~0u;
integer_param("cpuid_mask_edx", opt_cpuid_mask_edx);
+
+unsigned int __devinitdata opt_cpuid_mask_xsave_eax = ~0u;
+integer_param("cpuid_mask_xsave_eax", opt_cpuid_mask_xsave_eax);
+
unsigned int __devinitdata opt_cpuid_mask_ext_ecx = ~0u;
integer_param("cpuid_mask_ext_ecx", opt_cpuid_mask_ext_ecx);
unsigned int __devinitdata opt_cpuid_mask_ext_edx = ~0u;
--- a/xen/arch/x86/cpu/cpu.h
+++ b/xen/arch/x86/cpu/cpu.h
@@ -22,6 +22,7 @@ struct cpu_dev {
extern struct cpu_dev * cpu_devs [X86_VENDOR_NUM];
extern unsigned int opt_cpuid_mask_ecx, opt_cpuid_mask_edx;
+extern unsigned int opt_cpuid_mask_xsave_eax;
extern unsigned int opt_cpuid_mask_ext_ecx, opt_cpuid_mask_ext_edx;
extern int get_model_name(struct cpuinfo_x86 *c);
--- a/xen/arch/x86/cpu/intel.c
+++ b/xen/arch/x86/cpu/intel.c
@@ -35,10 +35,12 @@ struct movsl_mask movsl_mask __read_most
*/
static void __devinit set_cpuidmask(const struct cpuinfo_x86 *c)
{
+ u32 eax, edx;
const char *extra = "";
if (!~(opt_cpuid_mask_ecx & opt_cpuid_mask_edx &
- opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx))
+ opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx &
+ opt_cpuid_mask_xsave_eax))
return;
/* Only family 6 supports this feature */
@@ -51,9 +53,12 @@ static void __devinit set_cpuidmask(cons
wrmsr(MSR_INTEL_CPUID_FEATURE_MASK,
opt_cpuid_mask_ecx,
opt_cpuid_mask_edx);
- if (!~(opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx))
+ if (~(opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx))
+ extra = "extended ";
+ else if (~opt_cpuid_mask_xsave_eax)
+ extra = "xsave ";
+ else
return;
- extra = "extended ";
break;
/*
* CPU supports this feature if the processor signature meets the following:
@@ -73,11 +78,25 @@ static void __devinit set_cpuidmask(cons
wrmsr(MSR_INTEL_CPUID80000001_FEATURE_MASK,
opt_cpuid_mask_ext_ecx,
opt_cpuid_mask_ext_edx);
+ if (!~opt_cpuid_mask_xsave_eax)
+ return;
+ extra = "xsave ";
+ break;
+ case 0x2a:
+ wrmsr(MSR_INTEL_CPUID1_FEATURE_MASK_V2,
+ opt_cpuid_mask_ecx,
+ opt_cpuid_mask_edx);
+ rdmsr(MSR_INTEL_CPUIDD_01_FEATURE_MASK, eax, edx);
+ wrmsr(MSR_INTEL_CPUIDD_01_FEATURE_MASK,
+ opt_cpuid_mask_xsave_eax, edx);
+ wrmsr(MSR_INTEL_CPUID80000001_FEATURE_MASK_V2,
+ opt_cpuid_mask_ext_ecx,
+ opt_cpuid_mask_ext_edx);
return;
}
- printk(XENLOG_ERR "Cannot set CPU feature mask on CPU#%d\n",
- smp_processor_id());
+ printk(XENLOG_ERR "Cannot set CPU %sfeature mask on CPU#%d\n",
+ extra, smp_processor_id());
}
void __devinit early_intel_workaround(struct cpuinfo_x86 *c)
--- a/xen/include/asm-x86/msr-index.h
+++ b/xen/include/asm-x86/msr-index.h
@@ -161,6 +161,10 @@
#define MSR_INTEL_CPUID1_FEATURE_MASK 0x00000130
#define MSR_INTEL_CPUID80000001_FEATURE_MASK 0x00000131
+#define MSR_INTEL_CPUID1_FEATURE_MASK_V2 0x00000132
+#define MSR_INTEL_CPUID80000001_FEATURE_MASK_V2 0x00000133
+#define MSR_INTEL_CPUIDD_01_FEATURE_MASK 0x00000134
+
/* MSRs & bits used for VMX enabling */
#define MSR_IA32_VMX_BASIC 0x480
#define MSR_IA32_VMX_PINBASED_CTLS 0x481

View File

@ -12,7 +12,10 @@ dir=$(dirname "$0")
case "$command" in case "$command" in
add) add)
# Params is one big arg, with fields separated by hyphens: # Params is one big arg, with fields separated by hyphens:
# single path:
# FABRIC-VPWWPN-VPWWNN-TGTWWPN-LUN# # FABRIC-VPWWPN-VPWWNN-TGTWWPN-LUN#
# multipath:
# {FABRIC1,FABRIC2}-{VPWWPN1,VPWWPN2,VPWWPN3}-VPWWNN-TGTWWPN-LUN#
# arg 2 - Fabric Name # arg 2 - Fabric Name
# arg 3 - VPORT's WWPN # arg 3 - VPORT's WWPN
# arg 4 - VPORT's WWNN # arg 4 - VPORT's WWNN
@ -29,24 +32,27 @@ case "$command" in
if test $TGTWWPN = $NPIVARGS ; then exit 1; fi if test $TGTWWPN = $NPIVARGS ; then exit 1; fi
VPORTWWNN=${NPIVARGS##*-*-}; NPIVARGS=${NPIVARGS%-*} VPORTWWNN=${NPIVARGS##*-*-}; NPIVARGS=${NPIVARGS%-*}
if test $VPORTWWNN = $NPIVARGS ; then exit 1; fi if test $VPORTWWNN = $NPIVARGS ; then exit 1; fi
VPORTWWPN=${NPIVARGS##*-}; NPIVARGS=${NPIVARGS%-*} VPORTWWPNS=${NPIVARGS##*-}; NPIVARGS=${NPIVARGS%-*}
if test $VPORTWWPN = $NPIVARGS ; then exit 1; fi if test $VPORTWWPNS = $NPIVARGS ; then exit 1; fi
FABRICNM=$NPIVARGS FABRICNMS=$NPIVARGS
# Ensure we compare everything using lower-case hex characters # Ensure we compare everything using lower-case hex characters
TGTWWPN=`echo $TGTWWPN | tr A-Z a-z` TGTWWPN=`echo $TGTWWPN | tr A-Z a-z`
VPORTWWPN=`echo $VPORTWWPN | tr A-Z a-z` VPORTWWPNS=`echo $VPORTWWPNS | tr A-Z a-z |sed 's/[{,}]/ /g'`
VPORTWWNN=`echo $VPORTWWNN | tr A-Z a-z` VPORTWWNN=`echo $VPORTWWNN | tr A-Z a-z`
FABRICNM=`echo $FABRICNM | tr A-Z a-z` FABRICNMS=`echo $FABRICNMS | tr A-Z a-z |sed 's/[{,}]/ /g'`
claim_lock "npiv" claim_lock "npiv"
paths=0
find_vhost $VPORTWWPN for FABRICNM in $FABRICNMS; do
for VPORTWWPN in $VPORTWWPNS; do
find_vhost $VPORTWWPN $FABRICNM
if test -z "$vhost" ; then if test -z "$vhost" ; then
create_vport $FABRICNM $VPORTWWPN $VPORTWWNN create_vport $FABRICNM $VPORTWWPN $VPORTWWNN
if [ $? -ne 0 ] ; then exit 2; fi if [ $? -ne 0 ] ; then exit 2; fi
sleep 8 sleep 8
find_vhost $VPORTWWPN find_vhost $VPORTWWPN $FABRICNM
if test -z "$vhost" ; then exit 3; fi if test -z "$vhost" ; then exit 3; fi
fi fi
find_sdev $vhost $TGTWWPN $LUN find_sdev $vhost $TGTWWPN $LUN
@ -55,12 +61,27 @@ case "$command" in
sleep 2 sleep 2
find_sdev $vhost $TGTWWPN $LUN find_sdev $vhost $TGTWWPN $LUN
fi fi
if test -z "$dev"; then
exit 4
fi
paths=$(($paths+1))
done
done
release_lock "npiv" release_lock "npiv"
if test ! -z "$dev"; then if test $paths -gt 1; then
xenstore-write $XENBUS_PATH/node /dev/$dev xenstore-write $XENBUS_PATH/multipath 1
write_dev /dev/$dev /etc/init.d/multipathd start
if test $? -ne 0 ; then exit 4; fi
dm=`multipath -l /dev/$dev | grep dm | cut -f2 -d' '`
else
xenstore-write $XENBUS_PATH/multipath 0
dm=$dev
fi
if test ! -z "$dm"; then
xenstore-write $XENBUS_PATH/node /dev/$dm
write_dev /dev/$dm
exit 0 exit 0
fi fi
@ -69,14 +90,32 @@ case "$command" in
remove) remove)
node=`xenstore-read $XENBUS_PATH/node` || true node=`xenstore-read $XENBUS_PATH/node` || true
#node=$2 multipath=`xenstore-read $XENBUS_PATH/multipath` || true
dev=$node; dev=${dev#/dev/}
# this is really screwy. the first delete of a lun will # this is really screwy. the first delete of a lun will
# terminate the entire vport (all luns) # terminate the entire vport (all luns)
if test $multipath = 1; then
par=`xenstore-read $XENBUS_PATH/params` || true
NPIVARGS=$par;
FABRICNMS=${NPIVARGS%%-*}; NPIVARGS=${NPIVARGS#*-}
VPORTWWPNS=${NPIVARGS%%-*}
VPORTWWPNS=`echo $VPORTWWPNS | tr A-Z a-z |sed 's/[{,}]/ /g'`
FABRICNMS=`echo $FABRICNMS | tr A-Z a-z |sed 's/[{,}]/ /g'`
for FABRICNM in $FABRICNMS; do
for VPORTWWPN in $VPORTWWPNS; do
find_vhost $VPORTWWPN $FABRICNM
if test -z "$vhost" ; then exit 5; fi
flush_nodes_on_vhost $vhost
delete_vhost $vhost
done
done
else
dev=$node; dev=${dev#/dev/}
find_vhost_from_dev $dev find_vhost_from_dev $dev
if test -z "$vhost" ; then exit 5; fi if test -z "$vhost" ; then exit 5; fi
flush_nodes_on_vhost $vhost flush_nodes_on_vhost $vhost
delete_vhost $vhost delete_vhost $vhost
fi
exit 0 exit 0
;; ;;
esac esac

View File

@ -2,6 +2,7 @@
# Look for the NPIV vport with the WWPN # Look for the NPIV vport with the WWPN
# $1 contains the WWPN (assumes it does not contain a leading "0x") # $1 contains the WWPN (assumes it does not contain a leading "0x")
# $2 contains the FABRICNM (assumes it does not contain "0x")
find_vhost() find_vhost()
{ {
unset vhost unset vhost
@ -13,10 +14,13 @@ find_vhost()
if test $wwpn = $1 ; then if test $wwpn = $1 ; then
# Note: makes the assumption the vport will always have an scsi_host child # Note: makes the assumption the vport will always have an scsi_host child
vhost=`ls -d $fchost/device/host*` vhost=`ls -d $fchost/device/host*`
fname=`cat $fchost/fabric_name | sed -e s/^0x//`
if test $fname = $2 ; then
vhost=`basename $vhost` vhost=`basename $vhost`
return return
fi fi
fi fi
fi
done done
# look in vendor-specific locations # look in vendor-specific locations
@ -27,10 +31,13 @@ find_vhost()
wwpn=`cat $fchost/port_name | sed -e s/^0x//` wwpn=`cat $fchost/port_name | sed -e s/^0x//`
if test $wwpn = $1 ; then if test $wwpn = $1 ; then
# Note: makes the assumption the vport will always have an scsi_host child # Note: makes the assumption the vport will always have an scsi_host child
fname=`cat $fchost/fabric_name | sed -e s/^0x//`
if test $fname = $2 ; then
vhost=`basename $fchost` vhost=`basename $fchost`
return return
fi fi
fi fi
fi
done done
} }

View File

@ -37,12 +37,12 @@ case "$command" in
VPORTWWNN=`echo $VPORTWWNN | tr A-Z a-z` VPORTWWNN=`echo $VPORTWWNN | tr A-Z a-z`
FABRICNM=`echo $FABRICNM | tr A-Z a-z` FABRICNM=`echo $FABRICNM | tr A-Z a-z`
find_vhost $VPORTWWPN find_vhost $VPORTWWPN $FABRICNM
if test -z "$vhost" ; then if test -z "$vhost" ; then
create_vport $FABRICNM $VPORTWWPN $VPORTWWNN create_vport $FABRICNM $VPORTWWPN $VPORTWWNN
if [ $? -ne 0 ] ; then exit 2; fi if [ $? -ne 0 ] ; then exit 2; fi
sleep 8 sleep 8
find_vhost $VPORTWWPN find_vhost $VPORTWWPN $FABRICNM
if test -z "$vhost" ; then exit 3; fi if test -z "$vhost" ; then exit 3; fi
fi fi
@ -57,7 +57,7 @@ case "$command" in
# Ensure we compare everything using lower-case hex characters # Ensure we compare everything using lower-case hex characters
VPORTWWPN=`echo $VPORTWWPN | tr A-Z a-z` VPORTWWPN=`echo $VPORTWWPN | tr A-Z a-z`
find_vhost $VPORTWWPN find_vhost $VPORTWWPN $FABRICNM
if test -z "$vhost" ; then exit 4; fi if test -z "$vhost" ; then exit 4; fi
delete_vhost $vhost delete_vhost $vhost

View File

@ -27,7 +27,7 @@ Index: xen-4.1.1-testing/tools/hotplug/Linux/block
shared_list=$(losetup -a | shared_list=$(losetup -a |
- sed -n -e "s@^\([^:]\+\)\(:[[:blank:]]\[${dev}\]:${inode}[[:blank:]](${file})\)@\1@p" ) - sed -n -e "s@^\([^:]\+\)\(:[[:blank:]]\[${dev}\]:${inode}[[:blank:]](${file})\)@\1@p" )
- for dev in "$shared_list" - for dev in "$shared_list"
+ sed -n -e "s@^\([^:]\+\)\(:[[:blank:]]\[${dev}\]:${inode}[[:blank:]](.*)\)@\1@p" ) + sed -n -e "s@^\([^:]\+\)\(:[[:blank:]]\[0*${dev}\]:${inode}[[:blank:]](.*)\)@\1@p" )
+ for dev in $shared_list + for dev in $shared_list
do do
if [ -n "$dev" ] if [ -n "$dev" ]

View File

@ -1,18 +0,0 @@
The SuSE version of gcc produces a non-standard section named
.comment.SUSE.OPTs, but the PE32+ handling in binutils can't really
deal with any section to be placed at virtual address zero (and not
needing to be loaded). Even if binutils did, at least the UEFI
implementation in EDK 1.06 doesn't look at the section characteristics
at all, and hence would attempt to load such a section, and fail or
corrupt other data.
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -163,6 +163,7 @@ SECTIONS
*(.eh_frame)
#ifdef EFI
*(.comment)
+ *(.comment.*)
#endif
}

View File

@ -11,7 +11,7 @@
(rangeset_is_empty((d)->iomem_caps) && \ (rangeset_is_empty((d)->iomem_caps) && \
--- a/xen/arch/x86/traps.c --- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c
@@ -1419,6 +1419,7 @@ asmlinkage void __init do_early_page_fau @@ -1421,6 +1421,7 @@ asmlinkage void __init do_early_page_fau
unsigned long *stk = (unsigned long *)regs; unsigned long *stk = (unsigned long *)regs;
printk("Early fatal page fault at %04x:%p (cr2=%p, ec=%04x)\n", printk("Early fatal page fault at %04x:%p (cr2=%p, ec=%04x)\n",
regs->cs, _p(regs->eip), _p(cr2), regs->error_code); regs->cs, _p(regs->eip), _p(cr2), regs->error_code);

View File

@ -435,17 +435,6 @@
switch ( cx->entry_method ) switch ( cx->entry_method )
{ {
--- a/xen/arch/x86/cpu/intel.c
+++ b/xen/arch/x86/cpu/intel.c
@@ -35,7 +35,7 @@ struct movsl_mask movsl_mask __read_most
*/
static void __devinit set_cpuidmask(const struct cpuinfo_x86 *c)
{
- const char *extra = "";
+ const char __attribute__((__unused__)) *extra = "";
if (!~(opt_cpuid_mask_ecx & opt_cpuid_mask_edx &
opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx))
--- a/xen/arch/x86/cpu/intel_cacheinfo.c --- a/xen/arch/x86/cpu/intel_cacheinfo.c
+++ b/xen/arch/x86/cpu/intel_cacheinfo.c +++ b/xen/arch/x86/cpu/intel_cacheinfo.c
@@ -170,7 +170,8 @@ unsigned int __cpuinit init_intel_cachei @@ -170,7 +170,8 @@ unsigned int __cpuinit init_intel_cachei
@ -645,7 +634,7 @@
case 3: /* x86_32p */ case 3: /* x86_32p */
--- a/xen/arch/x86/traps.c --- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c
@@ -1784,7 +1784,11 @@ static int emulate_privileged_op(struct @@ -1818,7 +1818,11 @@ static int emulate_privileged_op(struct
struct vcpu *v = current; struct vcpu *v = current;
unsigned long *reg, eip = regs->eip; unsigned long *reg, eip = regs->eip;
u8 opcode, modrm_reg = 0, modrm_rm = 0, rep_prefix = 0, lock = 0, rex = 0; u8 opcode, modrm_reg = 0, modrm_rm = 0, rep_prefix = 0, lock = 0, rex = 0;

View File

@ -216,3 +216,45 @@ Index: xen-4.1.1-testing/tools/blktap2/include/blktaplib.h
#define WRITE 1 #define WRITE 1
/*Control Messages between manager and tapdev*/ /*Control Messages between manager and tapdev*/
--- xen-4.1.1-testing/tools/blktap/lib/Makefile.orig 2011-07-14 16:10:55.000000000 -0600
+++ xen-4.1.1-testing/tools/blktap/lib/Makefile 2011-07-14 16:11:00.000000000 -0600
@@ -28,6 +28,8 @@ OBJS_PIC = $(SRCS:.c=.opic)
IBINS :=
LIB = libblktap.a libblktap.so.$(MAJOR).$(MINOR)
+LIB_SO = libblktap.so.$(MAJOR).$(MINOR)
+LIB_AR = libblktap.a
.PHONY: all
all: $(LIB)
@@ -36,7 +38,8 @@ all: $(LIB)
install: all
$(INSTALL_DIR) $(DESTDIR)$(LIBDIR)
$(INSTALL_DIR) $(DESTDIR)$(INCLUDEDIR)
- $(INSTALL_PROG) $(LIB) $(DESTDIR)$(LIBDIR)
+ $(INSTALL_PROG) $(LIB_SO) $(DESTDIR)$(LIBDIR)
+ $(INSTALL_DATA) $(LIB_AR) $(DESTDIR)$(LIBDIR)
ln -sf libblktap.so.$(MAJOR).$(MINOR) $(DESTDIR)$(LIBDIR)/libblktap.so.$(MAJOR)
ln -sf libblktap.so.$(MAJOR) $(DESTDIR)$(LIBDIR)/libblktap.so
$(INSTALL_DATA) blktaplib.h $(DESTDIR)$(INCLUDEDIR)
--- xen-4.1.1-testing/tools/blktap2/vhd/lib/Makefile.orig 2011-07-14 16:26:42.000000000 -0600
+++ xen-4.1.1-testing/tools/blktap2/vhd/lib/Makefile 2011-07-14 16:29:10.000000000 -0600
@@ -49,6 +49,8 @@ LIB-OBJS = $(patsubst %.c,%.o,$(
LIB-OBJS += $(LVM-UTIL-OBJ)
LIBVHD = libvhd.a libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR)
+LIBVHD_SO = libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR)
+LIBVHD_AR = libvhd.a
all: build
@@ -63,7 +65,8 @@ libvhd.a: $(LIB-OBJS)
install: all
$(INSTALL_DIR) -p $(DESTDIR)$(INST-DIR)
- $(INSTALL_PROG) $(LIBVHD) $(DESTDIR)$(INST-DIR)
+ $(INSTALL_PROG) $(LIBVHD_SO) $(DESTDIR)$(INST-DIR)
+ $(INSTALL_DATA) $(LIBVHD_AR) $(DESTDIR)$(INST-DIR)
ln -sf libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR)
ln -sf libvhd.so.$(LIBVHD-MAJOR) $(DESTDIR)$(INST-DIR)/libvhd.so

View File

@ -1,3 +1,26 @@
-------------------------------------------------------------------
Fri Jul 22 09:34:34 MDT 2011 - carnold@novell.com
- Upstream patches from Jan
23726-x86-intel-flexmigration.patch
23706-fix-20892.patch
23723-x86-CMOS-lock.patch
23676-x86_64-image-map-bounds.patch
23724-x86-smpboot-x2apic.patch
-------------------------------------------------------------------
Mon Jul 11 17:19:53 CEST 2011 - ohering@suse.de
- hotplug.losetup.patch
correct dev:inode detection, stat returns major:minor without
leading zeros, while losetup -a includes trailing zeros
-------------------------------------------------------------------
Fri Jul 8 19:13:30 CST 2011 - cyliu@novell.com
- fate#310635: xen npiv multipath support
update block-npiv* scripts for testing
------------------------------------------------------------------- -------------------------------------------------------------------
Thu Jul 7 10:17:08 MDT 2011 - carnold@novell.com Thu Jul 7 10:17:08 MDT 2011 - carnold@novell.com

View File

@ -25,7 +25,7 @@ ExclusiveArch: %ix86 x86_64
%define changeset 23079 %define changeset 23079
%define xen_build_dir xen-4.1.1-testing %define xen_build_dir xen-4.1.1-testing
%define with_kmp 1 %define with_kmp 1
%define with_stubdom 0 %define with_stubdom 1
%ifarch x86_64 %ifarch x86_64
%define with_dom0_support 1 %define with_dom0_support 1
%else %else
@ -73,7 +73,8 @@ BuildRequires: tetex
%endif %endif
%ifarch x86_64 %ifarch x86_64
# EFI requires gcc45 or newer # EFI requires gcc45 or newer
BuildRequires: gcc45 BuildRequires: gcc46
BuildRequires: libgcc46 libgcc46-32bit
BuildRequires: glibc-32bit glibc-devel-32bit BuildRequires: glibc-32bit glibc-devel-32bit
BuildRequires: gcc-32bit BuildRequires: gcc-32bit
BuildRequires: gcc43-32bit BuildRequires: gcc43-32bit
@ -172,6 +173,11 @@ Patch39: 23613-EFI-headers.patch
Patch40: 23614-x86_64-EFI-boot.patch Patch40: 23614-x86_64-EFI-boot.patch
Patch41: 23615-x86_64-EFI-runtime.patch Patch41: 23615-x86_64-EFI-runtime.patch
Patch42: 23616-x86_64-EFI-MPS.patch Patch42: 23616-x86_64-EFI-MPS.patch
Patch43: 23676-x86_64-image-map-bounds.patch
Patch44: 23706-fix-20892.patch
Patch45: 23723-x86-CMOS-lock.patch
Patch46: 23724-x86-smpboot-x2apic.patch
Patch47: 23726-x86-intel-flexmigration.patch
# Upstream qemu patches # Upstream qemu patches
# Our patches # Our patches
Patch300: xen-config.diff Patch300: xen-config.diff
@ -288,7 +294,6 @@ Patch511: supported_module.diff
Patch512: magic_ioport_compat.patch Patch512: magic_ioport_compat.patch
Patch513: xen.sles11sp1.bug684297.xen_oldmem_pfn_is_ram.patch Patch513: xen.sles11sp1.bug684297.xen_oldmem_pfn_is_ram.patch
Patch514: xen.sles11sp1.fate311487.xen_platform_pci.dmistring.patch Patch514: xen.sles11sp1.fate311487.xen_platform_pci.dmistring.patch
Patch515: x86-EFI-discard-comment.patch
Patch650: disable_emulated_device.diff Patch650: disable_emulated_device.diff
Patch651: ioemu-disable-scsi.patch Patch651: ioemu-disable-scsi.patch
Patch652: ioemu-disable-emulated-ide-if-pv.patch Patch652: ioemu-disable-emulated-ide-if-pv.patch
@ -432,7 +437,6 @@ Authors:
Ian Pratt <ian.pratt@cl.cam.ac.uk> Ian Pratt <ian.pratt@cl.cam.ac.uk>
%if %{?with_dom0_support}0 %if %{?with_dom0_support}0
%package tools %package tools
License: GPLv2+ License: GPLv2+
Summary: Xen Virtualization: Control tools for domain 0 Summary: Xen Virtualization: Control tools for domain 0
@ -613,7 +617,6 @@ Xen, but is not available for release due to license restrictions.
%endif %endif
%if %{?with_dom0_support}0 %if %{?with_dom0_support}0
%package doc-html %package doc-html
License: GPLv2+ License: GPLv2+
Summary: Xen Virtualization: HTML documentation Summary: Xen Virtualization: HTML documentation
@ -700,6 +703,11 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
%patch40 -p1 %patch40 -p1
%patch41 -p1 %patch41 -p1
%patch42 -p1 %patch42 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%patch300 -p1 %patch300 -p1
%patch301 -p1 %patch301 -p1
%patch302 -p1 %patch302 -p1
@ -808,7 +816,6 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
%patch512 -p1 %patch512 -p1
%patch513 -p1 %patch513 -p1
%patch514 -p1 %patch514 -p1
%patch515 -p1
%patch650 -p1 %patch650 -p1
%patch651 -p1 %patch651 -p1
%patch652 -p1 %patch652 -p1
@ -879,7 +886,7 @@ export CFLAGS="$RPM_OPT_FLAGS"
%if %{?with_dom0_support}0 %if %{?with_dom0_support}0
# EFI # EFI
%ifarch x86_64 %ifarch x86_64
make -C xen install CC=gcc-4.5 max_phys_cpus=%{max_cpus} debug=n crash_debug=n DESTDIR=$RPM_BUILD_ROOT %{?_smp_mflags} make -C xen install CC=gcc-4.6 max_phys_cpus=%{max_cpus} debug=n crash_debug=n DESTDIR=$RPM_BUILD_ROOT %{?_smp_mflags}
make -C xen clean make -C xen clean
%endif %endif
install_xen() install_xen()
@ -940,7 +947,7 @@ install -m644 %SOURCE20 $RPM_BUILD_ROOT/etc/modprobe.d/xen_pvdrivers.conf
%if %{?with_dom0_support}0 %if %{?with_dom0_support}0
# Stubdom # Stubdom
%if %{?with_stubdom}0 %if %{?with_stubdom}0
make stubdom %{?_smp_mflags} make stubdom
make -C stubdom install \ make -C stubdom install \
DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} \ DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} \
DOCDIR=%{_defaultdocdir}/xen INCDIR=%{_includedir} DOCDIR=%{_defaultdocdir}/xen INCDIR=%{_includedir}
@ -1062,7 +1069,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
%endif %endif
%if %{?with_dom0_support}0 %if %{?with_dom0_support}0
%files %files
%defattr(-,root,root) %defattr(-,root,root)
/boot/xen-%{version}-%{release}.gz /boot/xen-%{version}-%{release}.gz
@ -1090,7 +1096,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
%{_libdir}/*.so.* %{_libdir}/*.so.*
%if %{?with_dom0_support}0 %if %{?with_dom0_support}0
%files tools %files tools
%defattr(-,root,root) %defattr(-,root,root)
/usr/bin/xenalyze /usr/bin/xenalyze
@ -1244,7 +1249,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
/usr/include/* /usr/include/*
%if %{?with_dom0_support}0 %if %{?with_dom0_support}0
%files doc-html %files doc-html
%defattr(-,root,root) %defattr(-,root,root)
%{_defaultdocdir}/xen/html %{_defaultdocdir}/xen/html
@ -1255,7 +1259,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
%endif %endif
%if %{?with_dom0_support}0 %if %{?with_dom0_support}0
%post tools %post tools
%if %{?with_xend}0 %if %{?with_xend}0
# with_xend # with_xend