- 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>
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
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
|
67
block-npiv
67
block-npiv
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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" ]
|
||||||
|
@ -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) && \
|
(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);
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
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
|
Thu Jul 7 10:17:08 MDT 2011 - carnold@novell.com
|
||||||
|
|
||||||
|
27
xen.spec
27
xen.spec
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user