- 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:
parent
873847f0da
commit
98d3290ab8
@ -42,6 +42,23 @@ EFI_VENDOR.
|
||||
|
||||
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
|
||||
+++ b/xen/Makefile
|
||||
@@ -11,6 +11,8 @@ export XEN_DOMAIN ?= $(shell ([ -x /bin/
|
||||
@ -2294,7 +2311,7 @@ Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
||||
PHDRS
|
||||
{
|
||||
text PT_LOAD ;
|
||||
@@ -122,12 +141,29 @@ SECTIONS
|
||||
@@ -122,12 +141,30 @@ SECTIONS
|
||||
} :text
|
||||
_end = . ;
|
||||
|
||||
@ -2320,6 +2337,7 @@ Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
||||
*(.eh_frame)
|
||||
+#ifdef EFI
|
||||
+ *(.comment)
|
||||
+ *(.comment.*)
|
||||
+#endif
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,20 @@ having established the normal page tables again afterwards).
|
||||
|
||||
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
|
||||
+++ b/xen/arch/x86/efi/boot.c
|
||||
@@ -16,6 +16,7 @@
|
||||
@ -636,15 +650,7 @@ Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
||||
#include <asm/msr.h>
|
||||
#include <asm/regs.h>
|
||||
#include <asm/mc146818rtc.h>
|
||||
@@ -95,6 +96,7 @@ void machine_halt(void)
|
||||
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_
|
||||
@@ -337,6 +338,8 @@ void machine_restart(unsigned int delay_
|
||||
if ( tboot_in_measured_env() )
|
||||
tboot_shutdown(TB_SHUTDOWN_REBOOT);
|
||||
|
||||
|
59
23676-x86_64-image-map-bounds.patch
Normal file
59
23676-x86_64-image-map-bounds.patch
Normal 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
28
23706-fix-20892.patch
Normal 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
271
23723-x86-CMOS-lock.patch
Normal 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;
|
||||
}
|
102
23724-x86-smpboot-x2apic.patch
Normal file
102
23724-x86-smpboot-x2apic.patch
Normal 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 )
|
128
23726-x86-intel-flexmigration.patch
Normal file
128
23726-x86-intel-flexmigration.patch
Normal 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
|
103
block-npiv
103
block-npiv
@ -12,7 +12,10 @@ dir=$(dirname "$0")
|
||||
case "$command" in
|
||||
add)
|
||||
# Params is one big arg, with fields separated by hyphens:
|
||||
# FABRIC-VPWWPN-VPWWNN-TGTWWPN-LUN#
|
||||
# single path:
|
||||
# FABRIC-VPWWPN-VPWWNN-TGTWWPN-LUN#
|
||||
# multipath:
|
||||
# {FABRIC1,FABRIC2}-{VPWWPN1,VPWWPN2,VPWWPN3}-VPWWNN-TGTWWPN-LUN#
|
||||
# arg 2 - Fabric Name
|
||||
# arg 3 - VPORT's WWPN
|
||||
# arg 4 - VPORT's WWNN
|
||||
@ -29,38 +32,56 @@ case "$command" in
|
||||
if test $TGTWWPN = $NPIVARGS ; then exit 1; fi
|
||||
VPORTWWNN=${NPIVARGS##*-*-}; NPIVARGS=${NPIVARGS%-*}
|
||||
if test $VPORTWWNN = $NPIVARGS ; then exit 1; fi
|
||||
VPORTWWPN=${NPIVARGS##*-}; NPIVARGS=${NPIVARGS%-*}
|
||||
if test $VPORTWWPN = $NPIVARGS ; then exit 1; fi
|
||||
FABRICNM=$NPIVARGS
|
||||
VPORTWWPNS=${NPIVARGS##*-}; NPIVARGS=${NPIVARGS%-*}
|
||||
if test $VPORTWWPNS = $NPIVARGS ; then exit 1; fi
|
||||
FABRICNMS=$NPIVARGS
|
||||
|
||||
# Ensure we compare everything using lower-case hex characters
|
||||
TGTWWPN=`echo $TGTWWPN | tr A-Z a-z`
|
||||
VPORTWWPN=`echo $VPORTWWPN | tr A-Z a-z`
|
||||
VPORTWWNN=`echo $VPORTWWNN | tr A-Z a-z`
|
||||
FABRICNM=`echo $FABRICNM | tr A-Z a-z`
|
||||
VPORTWWPNS=`echo $VPORTWWPNS | tr A-Z a-z |sed 's/[{,}]/ /g'`
|
||||
VPORTWWNN=`echo $VPORTWWNN | tr A-Z a-z`
|
||||
FABRICNMS=`echo $FABRICNMS | tr A-Z a-z |sed 's/[{,}]/ /g'`
|
||||
|
||||
|
||||
claim_lock "npiv"
|
||||
|
||||
find_vhost $VPORTWWPN
|
||||
if test -z "$vhost" ; then
|
||||
create_vport $FABRICNM $VPORTWWPN $VPORTWWNN
|
||||
if [ $? -ne 0 ] ; then exit 2; fi
|
||||
sleep 8
|
||||
find_vhost $VPORTWWPN
|
||||
if test -z "$vhost" ; then exit 3; fi
|
||||
fi
|
||||
find_sdev $vhost $TGTWWPN $LUN
|
||||
if test -z "$dev"; then
|
||||
echo "- - -" > /sys/class/scsi_host/$vhost/scan
|
||||
sleep 2
|
||||
find_sdev $vhost $TGTWWPN $LUN
|
||||
fi
|
||||
|
||||
paths=0
|
||||
for FABRICNM in $FABRICNMS; do
|
||||
for VPORTWWPN in $VPORTWWPNS; do
|
||||
find_vhost $VPORTWWPN $FABRICNM
|
||||
if test -z "$vhost" ; then
|
||||
create_vport $FABRICNM $VPORTWWPN $VPORTWWNN
|
||||
if [ $? -ne 0 ] ; then exit 2; fi
|
||||
sleep 8
|
||||
find_vhost $VPORTWWPN $FABRICNM
|
||||
if test -z "$vhost" ; then exit 3; fi
|
||||
fi
|
||||
find_sdev $vhost $TGTWWPN $LUN
|
||||
if test -z "$dev"; then
|
||||
echo "- - -" > /sys/class/scsi_host/$vhost/scan
|
||||
sleep 2
|
||||
find_sdev $vhost $TGTWWPN $LUN
|
||||
fi
|
||||
if test -z "$dev"; then
|
||||
exit 4
|
||||
fi
|
||||
paths=$(($paths+1))
|
||||
done
|
||||
done
|
||||
release_lock "npiv"
|
||||
|
||||
if test ! -z "$dev"; then
|
||||
xenstore-write $XENBUS_PATH/node /dev/$dev
|
||||
write_dev /dev/$dev
|
||||
if test $paths -gt 1; then
|
||||
xenstore-write $XENBUS_PATH/multipath 1
|
||||
/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
|
||||
fi
|
||||
|
||||
@ -69,14 +90,32 @@ case "$command" in
|
||||
|
||||
remove)
|
||||
node=`xenstore-read $XENBUS_PATH/node` || true
|
||||
#node=$2
|
||||
dev=$node; dev=${dev#/dev/}
|
||||
multipath=`xenstore-read $XENBUS_PATH/multipath` || true
|
||||
# this is really screwy. the first delete of a lun will
|
||||
# terminate the entire vport (all luns)
|
||||
find_vhost_from_dev $dev
|
||||
if test -z "$vhost" ; then exit 5; fi
|
||||
flush_nodes_on_vhost $vhost
|
||||
delete_vhost $vhost
|
||||
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
|
||||
if test -z "$vhost" ; then exit 5; fi
|
||||
flush_nodes_on_vhost $vhost
|
||||
delete_vhost $vhost
|
||||
fi
|
||||
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
# Look for the NPIV vport with the WWPN
|
||||
# $1 contains the WWPN (assumes it does not contain a leading "0x")
|
||||
# $2 contains the FABRICNM (assumes it does not contain "0x")
|
||||
find_vhost()
|
||||
{
|
||||
unset vhost
|
||||
@ -13,8 +14,11 @@ find_vhost()
|
||||
if test $wwpn = $1 ; then
|
||||
# Note: makes the assumption the vport will always have an scsi_host child
|
||||
vhost=`ls -d $fchost/device/host*`
|
||||
vhost=`basename $vhost`
|
||||
return
|
||||
fname=`cat $fchost/fabric_name | sed -e s/^0x//`
|
||||
if test $fname = $2 ; then
|
||||
vhost=`basename $vhost`
|
||||
return
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
@ -27,8 +31,11 @@ find_vhost()
|
||||
wwpn=`cat $fchost/port_name | sed -e s/^0x//`
|
||||
if test $wwpn = $1 ; then
|
||||
# Note: makes the assumption the vport will always have an scsi_host child
|
||||
vhost=`basename $fchost`
|
||||
return
|
||||
fname=`cat $fchost/fabric_name | sed -e s/^0x//`
|
||||
if test $fname = $2 ; then
|
||||
vhost=`basename $fchost`
|
||||
return
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
@ -37,12 +37,12 @@ case "$command" in
|
||||
VPORTWWNN=`echo $VPORTWWNN | 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
|
||||
create_vport $FABRICNM $VPORTWWPN $VPORTWWNN
|
||||
if [ $? -ne 0 ] ; then exit 2; fi
|
||||
sleep 8
|
||||
find_vhost $VPORTWWPN
|
||||
find_vhost $VPORTWWPN $FABRICNM
|
||||
if test -z "$vhost" ; then exit 3; fi
|
||||
fi
|
||||
|
||||
@ -57,7 +57,7 @@ case "$command" in
|
||||
# Ensure we compare everything using lower-case hex characters
|
||||
VPORTWWPN=`echo $VPORTWWPN | tr A-Z a-z`
|
||||
|
||||
find_vhost $VPORTWWPN
|
||||
find_vhost $VPORTWWPN $FABRICNM
|
||||
if test -z "$vhost" ; then exit 4; fi
|
||||
delete_vhost $vhost
|
||||
|
||||
|
@ -27,7 +27,7 @@ Index: xen-4.1.1-testing/tools/hotplug/Linux/block
|
||||
shared_list=$(losetup -a |
|
||||
- sed -n -e "s@^\([^:]\+\)\(:[[:blank:]]\[${dev}\]:${inode}[[:blank:]](${file})\)@\1@p" )
|
||||
- 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
|
||||
do
|
||||
if [ -n "$dev" ]
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
(rangeset_is_empty((d)->iomem_caps) && \
|
||||
--- a/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;
|
||||
printk("Early fatal page fault at %04x:%p (cr2=%p, ec=%04x)\n",
|
||||
regs->cs, _p(regs->eip), _p(cr2), regs->error_code);
|
||||
|
@ -435,17 +435,6 @@
|
||||
|
||||
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
|
||||
+++ b/xen/arch/x86/cpu/intel_cacheinfo.c
|
||||
@@ -170,7 +170,8 @@ unsigned int __cpuinit init_intel_cachei
|
||||
@ -645,7 +634,7 @@
|
||||
case 3: /* x86_32p */
|
||||
--- a/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;
|
||||
unsigned long *reg, eip = regs->eip;
|
||||
u8 opcode, modrm_reg = 0, modrm_rm = 0, rep_prefix = 0, lock = 0, rex = 0;
|
||||
|
@ -216,3 +216,45 @@ Index: xen-4.1.1-testing/tools/blktap2/include/blktaplib.h
|
||||
#define WRITE 1
|
||||
|
||||
/*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
|
||||
|
||||
|
23
xen.changes
23
xen.changes
@ -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
|
||||
|
||||
|
29
xen.spec
29
xen.spec
@ -25,7 +25,7 @@ ExclusiveArch: %ix86 x86_64
|
||||
%define changeset 23079
|
||||
%define xen_build_dir xen-4.1.1-testing
|
||||
%define with_kmp 1
|
||||
%define with_stubdom 0
|
||||
%define with_stubdom 1
|
||||
%ifarch x86_64
|
||||
%define with_dom0_support 1
|
||||
%else
|
||||
@ -73,7 +73,8 @@ BuildRequires: tetex
|
||||
%endif
|
||||
%ifarch x86_64
|
||||
# EFI requires gcc45 or newer
|
||||
BuildRequires: gcc45
|
||||
BuildRequires: gcc46
|
||||
BuildRequires: libgcc46 libgcc46-32bit
|
||||
BuildRequires: glibc-32bit glibc-devel-32bit
|
||||
BuildRequires: gcc-32bit
|
||||
BuildRequires: gcc43-32bit
|
||||
@ -172,6 +173,11 @@ Patch39: 23613-EFI-headers.patch
|
||||
Patch40: 23614-x86_64-EFI-boot.patch
|
||||
Patch41: 23615-x86_64-EFI-runtime.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
|
||||
# Our patches
|
||||
Patch300: xen-config.diff
|
||||
@ -226,7 +232,7 @@ Patch371: domu-usb-controller.patch
|
||||
Patch372: usb-list.patch
|
||||
Patch373: xend-devid-or-name.patch
|
||||
Patch374: suspend_evtchn_lock.patch
|
||||
Patch375: log-guest-console.patch
|
||||
Patch375: log-guest-console.patch
|
||||
# Patches for snapshot support
|
||||
Patch400: snapshot-ioemu-save.patch
|
||||
Patch401: snapshot-ioemu-restore.patch
|
||||
@ -288,7 +294,6 @@ Patch511: supported_module.diff
|
||||
Patch512: magic_ioport_compat.patch
|
||||
Patch513: xen.sles11sp1.bug684297.xen_oldmem_pfn_is_ram.patch
|
||||
Patch514: xen.sles11sp1.fate311487.xen_platform_pci.dmistring.patch
|
||||
Patch515: x86-EFI-discard-comment.patch
|
||||
Patch650: disable_emulated_device.diff
|
||||
Patch651: ioemu-disable-scsi.patch
|
||||
Patch652: ioemu-disable-emulated-ide-if-pv.patch
|
||||
@ -432,7 +437,6 @@ Authors:
|
||||
Ian Pratt <ian.pratt@cl.cam.ac.uk>
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
%package tools
|
||||
License: GPLv2+
|
||||
Summary: Xen Virtualization: Control tools for domain 0
|
||||
@ -613,7 +617,6 @@ Xen, but is not available for release due to license restrictions.
|
||||
%endif
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
%package doc-html
|
||||
License: GPLv2+
|
||||
Summary: Xen Virtualization: HTML documentation
|
||||
@ -700,6 +703,11 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
|
||||
%patch40 -p1
|
||||
%patch41 -p1
|
||||
%patch42 -p1
|
||||
%patch43 -p1
|
||||
%patch44 -p1
|
||||
%patch45 -p1
|
||||
%patch46 -p1
|
||||
%patch47 -p1
|
||||
%patch300 -p1
|
||||
%patch301 -p1
|
||||
%patch302 -p1
|
||||
@ -808,7 +816,6 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
|
||||
%patch512 -p1
|
||||
%patch513 -p1
|
||||
%patch514 -p1
|
||||
%patch515 -p1
|
||||
%patch650 -p1
|
||||
%patch651 -p1
|
||||
%patch652 -p1
|
||||
@ -879,7 +886,7 @@ export CFLAGS="$RPM_OPT_FLAGS"
|
||||
%if %{?with_dom0_support}0
|
||||
# EFI
|
||||
%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
|
||||
%endif
|
||||
install_xen()
|
||||
@ -940,7 +947,7 @@ install -m644 %SOURCE20 $RPM_BUILD_ROOT/etc/modprobe.d/xen_pvdrivers.conf
|
||||
%if %{?with_dom0_support}0
|
||||
# Stubdom
|
||||
%if %{?with_stubdom}0
|
||||
make stubdom %{?_smp_mflags}
|
||||
make stubdom
|
||||
make -C stubdom install \
|
||||
DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} \
|
||||
DOCDIR=%{_defaultdocdir}/xen INCDIR=%{_includedir}
|
||||
@ -1062,7 +1069,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
%endif
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
/boot/xen-%{version}-%{release}.gz
|
||||
@ -1090,7 +1096,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
%{_libdir}/*.so.*
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
%files tools
|
||||
%defattr(-,root,root)
|
||||
/usr/bin/xenalyze
|
||||
@ -1244,7 +1249,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
/usr/include/*
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
%files doc-html
|
||||
%defattr(-,root,root)
|
||||
%{_defaultdocdir}/xen/html
|
||||
@ -1255,7 +1259,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
%endif
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
%post tools
|
||||
%if %{?with_xend}0
|
||||
# with_xend
|
||||
|
Loading…
Reference in New Issue
Block a user