diff --git a/21089-x86-startup-irq-from-setup-gsi.patch b/21089-x86-startup-irq-from-setup-gsi.patch new file mode 100644 index 0000000..4cf20f0 --- /dev/null +++ b/21089-x86-startup-irq-from-setup-gsi.patch @@ -0,0 +1,106 @@ +# HG changeset patch +# User Keir Fraser +# Date 1270026749 -3600 +# Node ID 4f796e29987c0db1579787fe0b7d3d5af00963ea +# Parent 589d075ba2953123c1b39ecdbc190689ac6f443c +x86: start PCI IRQs Xen uses from Dom0-invoked io_apic_set_pci_routing() + +When using a serial port from an add-in PCI card, and that IRQ is (as +usual) outside of the legacy range (0...15), Xen would never really +enable the IRQ, as at the time setup_irq() runs the handler for the +IRQ still is &no_irq_type. Consequently, once the trigger mode and +polarity of the interrupt become known to Xen, it should start such +IRQ(s) it uses for itself. + +The question is whether the same should also be done in +ioapic_guest_write(): Legacy kernels don't use PHYSDEVOP_setup_gsi +(and hence don't trigger the code path modified). + +Note however that even when a kernel is using PHYSDEVOP_setup_gsi in +the way the pv-ops kernel currently does, there's still no guarantee +that the call would ever be issued for IRQs Xen may be using, since +this happens only when devices get enabled. For Xen's purposes, this +function should be called for *all* device IRQs, regardless of +whether those would actually be (attempted to be) used by the kernel, +i.e. in a subsys_initcall() from drivers/acpi/pci_irq.c iterating +over all PCI devices and doing mostly what acpi_pci_irq_enable() does +except for calling this function in place of acpi_register_gsi(). The +downside of this approach is that without extra filtering in Xen +(based on a hint from Dom0), vectors will then get up even for IRQs +that are unused by both hypervisor and kernel. + +Signed-off-by: Jan Beulich + +# HG changeset patch +# User Keir Fraser +# Date 1271090214 -3600 +# Node ID 7eeb131880b20a33e7675cc1726ae312a489be2d +# Parent b65a41dc6c6a2e2341ae778d8386a08d502bbfa4 +Fix bug in 21089:4f796e29987c + +Signed-off-by: Jan Beulich + +# HG changeset patch +# User Keir Fraser +# Date 1271169507 -3600 +# Node ID 0bebb5fa4f051df9b4fed4d11a723fae91bc7523 +# Parent 859a372efa66e6bcba8e1fd968e521cb16da12ea +Make c/s 21089 work again with c/s 21092 + +Unfortunately the latter c/s' change to mpparse.c yielded the former +patch non-functional - Xen's serial port IRQ is not in IQR_DISABLED +state, yet must be allowed to get its trigger mode and polarity set +up in order for it to be usable. + +Signed-off-by: Jan Beulich + +--- a/xen/arch/x86/io_apic.c ++++ b/xen/arch/x86/io_apic.c +@@ -2111,6 +2111,7 @@ int __init io_apic_get_redir_entries (in + + int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low) + { ++ struct irq_desc *desc = irq_to_desc(irq); + struct IO_APIC_route_entry entry; + unsigned long flags; + int vector; +@@ -2162,7 +2163,12 @@ int io_apic_set_pci_routing (int ioapic, + io_apic_write(ioapic, 0x11+2*pin, *(((int *)&entry)+1)); + io_apic_write(ioapic, 0x10+2*pin, *(((int *)&entry)+0)); + set_native_irq_info(irq, TARGET_CPUS); +- spin_unlock_irqrestore(&ioapic_lock, flags); ++ spin_unlock(&ioapic_lock); ++ ++ spin_lock(&desc->lock); ++ if (!(desc->status & (IRQ_DISABLED | IRQ_GUEST))) ++ desc->handler->startup(irq); ++ spin_unlock_irqrestore(&desc->lock, flags); + + return 0; + } +--- a/xen/arch/x86/mpparse.c ++++ b/xen/arch/x86/mpparse.c +@@ -1103,6 +1103,8 @@ int mp_register_gsi (u32 gsi, int trigge + int ioapic = -1; + int ioapic_pin = 0; + int idx, bit = 0; ++ struct irq_desc * desc; ++ unsigned long flags; + + /* + * Mapping between Global System Interrups, which +@@ -1127,8 +1129,13 @@ int mp_register_gsi (u32 gsi, int trigge + if (ioapic_renumber_irq) + gsi = ioapic_renumber_irq(ioapic, gsi); + +- if (!(irq_to_desc(gsi)->status & IRQ_DISABLED)) ++ desc = irq_to_desc(gsi); ++ spin_lock_irqsave(&desc->lock, flags); ++ if (!(desc->status & IRQ_DISABLED) && desc->handler != &no_irq_type) { ++ spin_unlock_irqrestore(&desc->lock, flags); + return -EEXIST; ++ } ++ spin_unlock_irqrestore(&desc->lock, flags); + + /* + * Avoid pin reprogramming. PRTs typically include entries diff --git a/21109-x86-cpu-hotplug.patch b/21109-x86-cpu-hotplug.patch new file mode 100644 index 0000000..747a683 --- /dev/null +++ b/21109-x86-cpu-hotplug.patch @@ -0,0 +1,154 @@ +# HG changeset patch +# User Keir Fraser +# Date 1270624140 -3600 +# Node ID 7794f61c61f3b0c90e367a87b287850b31645742 +# Parent adce8bc43fcccf8730b1da962be60c457c51fa1b +x86, cpu hotplug: Synchronise vcpu state earlier during cpu offline. + +Needs to happen before non-idle VCPU is fully descheduled after CPU is +removed from cpu_online_map. Else sync_vcpu_execstate() doesn't work +properly. + +Signed-off-by: Keir Fraser + +# HG changeset patch +# User Keir Fraser +# Date 1270737112 -3600 +# Node ID c9e8369e49be7396eca444cfce27e6782e4aa248 +# Parent a33909be109cefb0aef251c7c7e48168ed05512a +Fix two issues for CPU online/offline. + +Firstly, we should return if we fail to get spin lock in cpu_down. +Secondly, in credit scheduler, the idlers need be limited only to +online map. + +Signed-off-by: Jiang, Yunhong + +# HG changeset patch +# User Keir Fraser +# Date 1271090027 -3600 +# Node ID 5d4038d41fd894f9fc71e64043d559d7c465bd15 +# Parent 1d3bec66528900b1b442b6d36f24cd35ca076506 +cpufreq: fix racing issue for cpu hotplug + +To eliminate racing between dbs timer handler and cpufreq_del_cpu, +using kill_timer instead of stop_timer to make sure timer handler +execution finished before other stuff in cpufreq_del_cpu. + +BTW, fix a lost point of cpufreq_statistic_lock taking sequence. + +Signed-off-by: Wei Gang + +--- a/xen/arch/x86/domain.c ++++ b/xen/arch/x86/domain.c +@@ -1442,7 +1442,8 @@ void context_switch(struct vcpu *prev, s + + set_current(next); + +- if ( (per_cpu(curr_vcpu, cpu) == next) || is_idle_vcpu(next) ) ++ if ( (per_cpu(curr_vcpu, cpu) == next) || ++ (is_idle_vcpu(next) && cpu_online(cpu)) ) + { + local_irq_enable(); + } +--- a/xen/arch/x86/smpboot.c ++++ b/xen/arch/x86/smpboot.c +@@ -997,17 +997,13 @@ static int __devinit do_boot_cpu(int api + return boot_error; + } + +-static void idle_task_exit(void) +-{ +- /* Give up lazy state borrowed by this idle vcpu */ +- __sync_lazy_execstate(); +-} +- + void cpu_exit_clear(void) + { + int cpu = raw_smp_processor_id(); + +- idle_task_exit(); ++ /* Previous non-idle state should be synchronised already. */ ++ if (__sync_lazy_execstate()) ++ BUG(); + + cpucount --; + cpu_uninit(); +@@ -1302,6 +1298,13 @@ int __cpu_disable(void) + + remove_siblinginfo(cpu); + ++ /* ++ * If we are running the idle vcpu, sync last non-idle vcpu's state ++ * before changing cpu_online_map. If we are running non-idle vcpu, ++ * we will synchronously sync the state in context_switch() later. ++ */ ++ __sync_lazy_execstate(); ++ + /* It's now safe to remove this processor from the online map */ + cpu_clear(cpu, cpu_online_map); + fixup_irqs(); +@@ -1340,10 +1343,8 @@ int cpu_down(unsigned int cpu) + int err = 0; + + /* spin_trylock() avoids deadlock with stop_machine_run(). */ +- if (!spin_trylock(&cpu_add_remove_lock)) { +- err = -EBUSY; +- goto out; +- } ++ if (!spin_trylock(&cpu_add_remove_lock)) ++ return -EBUSY; + + if (num_online_cpus() == 1) { + err = -EBUSY; +--- a/xen/common/sched_credit.c ++++ b/xen/common/sched_credit.c +@@ -410,7 +410,7 @@ _csched_cpu_pick(struct vcpu *vc, bool_t + * like run two VCPUs on co-hyperthreads while there are idle cores + * or sockets. + */ +- idlers = csched_priv.idlers; ++ cpus_and(idlers, cpu_online_map, csched_priv.idlers); + cpu_set(cpu, idlers); + cpus_and(cpus, cpus, idlers); + cpu_clear(cpu, cpus); +--- a/xen/drivers/acpi/pmstat.c ++++ b/xen/drivers/acpi/pmstat.c +@@ -86,12 +86,13 @@ int do_get_pm_info(struct xen_sysctl_get + case PMSTAT_get_pxstat: + { + uint32_t ct; +- struct pm_px *pxpt = cpufreq_statistic_data[op->cpuid]; ++ struct pm_px *pxpt; + spinlock_t *cpufreq_statistic_lock = + &per_cpu(cpufreq_statistic_lock, op->cpuid); + + spin_lock(cpufreq_statistic_lock); + ++ pxpt = cpufreq_statistic_data[op->cpuid]; + if ( !pxpt || !pxpt->u.pt || !pxpt->u.trans_pt ) + { + spin_unlock(cpufreq_statistic_lock); +--- a/xen/drivers/cpufreq/cpufreq_ondemand.c ++++ b/xen/drivers/cpufreq/cpufreq_ondemand.c +@@ -196,9 +196,8 @@ static void dbs_timer_init(struct cpu_db + { + dbs_info->enable = 1; + +- if ( !dbs_timer[dbs_info->cpu].function ) +- init_timer(&dbs_timer[dbs_info->cpu], do_dbs_timer, +- (void *)dbs_info, dbs_info->cpu); ++ init_timer(&dbs_timer[dbs_info->cpu], do_dbs_timer, ++ (void *)dbs_info, dbs_info->cpu); + + set_timer(&dbs_timer[dbs_info->cpu], NOW()+dbs_tuners_ins.sampling_rate); + +@@ -213,7 +212,7 @@ static void dbs_timer_exit(struct cpu_db + { + dbs_info->enable = 0; + dbs_info->stoppable = 0; +- stop_timer(&dbs_timer[dbs_info->cpu]); ++ kill_timer(&dbs_timer[dbs_info->cpu]); + } + + int cpufreq_governor_dbs(struct cpufreq_policy *policy, unsigned int event) diff --git a/21128-domain-save-flush.patch b/21128-domain-save-flush.patch new file mode 100644 index 0000000..98ae883 --- /dev/null +++ b/21128-domain-save-flush.patch @@ -0,0 +1,31 @@ +# HG changeset patch +# User Keir Fraser +# Date 1271053336 -3600 +# Node ID b5f9c6274d917db5bbe6cb9cc0d59910cc07a8a6 +# Parent 5bc70100b514d98bd3938cdeca1e182726c26df2 +libxc: Flush I/O before xc_domain_save completion + +The final, flushing call to discard_file_cache also discards any +errors from fsync. Call fsync explicitly before leaving, to check if +all VM memory actually made it to the disk. + +Signed-off-by: Daniel Stodden + +Index: xen-4.0.0-testing/tools/libxc/xc_domain_save.c +=================================================================== +--- xen-4.0.0-testing.orig/tools/libxc/xc_domain_save.c ++++ xen-4.0.0-testing/tools/libxc/xc_domain_save.c +@@ -1764,6 +1764,13 @@ int xc_domain_save(int xc_handle, int io + goto out; + } + ++ /* Flush last write and check for errors. */ ++ if ( fsync(io_fd) && errno != EINVAL ) ++ { ++ PERROR("Error when flushing state file"); ++ goto out; ++ } ++ + /* Success! */ + rc = 0; + diff --git a/21150-shadow-race.patch b/21150-shadow-race.patch new file mode 100644 index 0000000..75d6b62 --- /dev/null +++ b/21150-shadow-race.patch @@ -0,0 +1,68 @@ +# HG changeset patch +# User Keir Fraser +# Date 1271091116 -3600 +# Node ID 78488a63bbc200095413824cc146134b54635da9 +# Parent b010b792c0f814de725f669d8a6bee738df68963 +x86, shadow: Fix read-to-use race condition + +If OOS mode is enabled, after last possible resync, read the guest l1e +one last time. If it's different than the original read, start over +again. + +This fixes a race which can result in inconsistent in-sync shadow +tables, leading to corruption: + +v1: take page fault, read gl1e from an out-of-sync PT. +v2: modify gl1e, lowering permissions +[v1,v3]: resync l1 which was just read. +v1: propagate change to l1 shadow using stale gl1e + +Now we have an in-sync shadow with more permissions than the guest. + +The resync can happen either as a result of a 3rd vcpu doing a cr3 +update, or under certain conditions by v1 itself. + +Signed-off-by: George Dunlap + +--- a/xen/arch/x86/mm/shadow/multi.c ++++ b/xen/arch/x86/mm/shadow/multi.c +@@ -240,6 +240,23 @@ shadow_check_gwalk(struct vcpu *v, unsig + return !mismatch; + } + ++static int ++shadow_check_gl1e(struct vcpu *v, walk_t *gw) ++{ ++ guest_l1e_t *l1p, nl1e; ++ ++ if ( !mfn_valid(gw->l1mfn) ) ++ return 0; ++ ++ /* Can't just pull-through because mfn may have changed */ ++ l1p = map_domain_page(mfn_x(gw->l1mfn)); ++ nl1e.l1 = l1p[guest_l1_table_offset(gw->va)].l1; ++ unmap_domain_page(l1p); ++ ++ return gw->l1e.l1 != nl1e.l1; ++} ++ ++ + /* Remove write access permissions from a gwalk_t in a batch, and + * return OR-ed result for TLB flush hint and need to rewalk the guest + * pages. +@@ -3235,6 +3252,15 @@ static int sh_page_fault(struct vcpu *v, + shadow_unlock(d); + return 0; + } ++ ++ /* Final check: if someone has synced a page, it's possible that ++ * our l1e is stale. Compare the entries, and rewalk if necessary. */ ++ if ( shadow_check_gl1e(v, &gw) ) ++ { ++ perfc_incr(shadow_inconsistent_gwalk); ++ shadow_unlock(d); ++ goto rewalk; ++ } + #endif /* OOS */ + + /* Calculate the shadow entry and write it */ diff --git a/21160-sysctl-debug-keys.patch b/21160-sysctl-debug-keys.patch new file mode 100644 index 0000000..6839cdb --- /dev/null +++ b/21160-sysctl-debug-keys.patch @@ -0,0 +1,27 @@ +# HG changeset patch +# User Keir Fraser +# Date 1271162458 -3600 +# Node ID 859a372efa66e6bcba8e1fd968e521cb16da12ea +# Parent da90dd1a09b93ae41ab451d223ff87dca04356f5 +sysctl: Fix XEN_SYSCTL_debug_keys error path. + +Signed-off-by: Keir Fraser + +--- a/xen/common/sysctl.c ++++ b/xen/common/sysctl.c +@@ -169,12 +169,14 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysc + if ( ret ) + break; + ++ ret = -EFAULT; + for ( i = 0; i < op->u.debug_keys.nr_keys; i++ ) + { + if ( copy_from_guest_offset(&c, op->u.debug_keys.keys, i, 1) ) +- return -EFAULT; ++ goto out; + handle_keypress(c, guest_cpu_user_regs()); + } ++ ret = 0; + } + break; + diff --git a/blktap-script.patch b/blktap-script.patch new file mode 100644 index 0000000..c7368cc --- /dev/null +++ b/blktap-script.patch @@ -0,0 +1,16 @@ +diff -r c02cc832cb2d tools/hotplug/Linux/blktap +--- a/tools/hotplug/Linux/blktap Tue Apr 13 18:19:33 2010 +0100 ++++ b/tools/hotplug/Linux/blktap Fri Apr 16 14:48:00 2010 -0600 +@@ -59,10 +59,10 @@ + if [ -n "$t" ] + then + p=$(xenstore_read "$XENBUS_PATH/params") +- # if we have a ':', chew from head including : ++ # if we have a ':', remove everything up to leading '/' + if echo $p | grep -q \: + then +- p=${p#*:} ++ p="/${p#*/}" + fi + fi + # some versions of readlink cannot be passed a regular file diff --git a/cpupools-core-fixup.patch b/cpupools-core-fixup.patch index 165f135..5cc48e1 100644 --- a/cpupools-core-fixup.patch +++ b/cpupools-core-fixup.patch @@ -8,11 +8,9 @@ missing adjustments get detected at build time) - remove boot time per-CPU pool assignment messages (bnc#572146) -Index: xen-4.0.0-testing/xen/arch/x86/domain.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/domain.c -+++ xen-4.0.0-testing/xen/arch/x86/domain.c -@@ -1580,6 +1580,7 @@ int continue_hypercall_on_cpu(int cpu, v +--- a/xen/arch/x86/domain.c ++++ b/xen/arch/x86/domain.c +@@ -1581,6 +1581,7 @@ int continue_hypercall_on_cpu(int cpu, v v->arch.schedule_tail = continue_hypercall_on_cpu_helper; v->arch.continue_info = info; @@ -20,7 +18,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/domain.c } else { -@@ -1590,7 +1591,6 @@ int continue_hypercall_on_cpu(int cpu, v +@@ -1591,7 +1592,6 @@ int continue_hypercall_on_cpu(int cpu, v info->func = func; info->data = data; @@ -28,10 +26,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/domain.c tasklet_schedule_cpu(&info->tasklet, cpu); raise_softirq(SCHEDULE_SOFTIRQ); -Index: xen-4.0.0-testing/xen/common/sched_credit.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/sched_credit.c -+++ xen-4.0.0-testing/xen/common/sched_credit.c +--- a/xen/common/sched_credit.c ++++ b/xen/common/sched_credit.c @@ -176,7 +176,6 @@ struct csched_private { /* * Global variables @@ -55,10 +51,8 @@ Index: xen-4.0.0-testing/xen/common/sched_credit.c .init_domain = csched_dom_init, .destroy_domain = csched_dom_destroy, -Index: xen-4.0.0-testing/xen/common/softirq.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/softirq.c -+++ xen-4.0.0-testing/xen/common/softirq.c +--- a/xen/common/softirq.c ++++ b/xen/common/softirq.c @@ -104,12 +104,15 @@ static void tasklet_schedule_list(struct { BUG_ON(!list_empty(&t->list)); @@ -93,10 +87,8 @@ Index: xen-4.0.0-testing/xen/common/softirq.c } /* -Index: xen-4.0.0-testing/xen/include/public/domctl.h -=================================================================== ---- xen-4.0.0-testing.orig/xen/include/public/domctl.h -+++ xen-4.0.0-testing/xen/include/public/domctl.h +--- a/xen/include/public/domctl.h ++++ b/xen/include/public/domctl.h @@ -35,7 +35,7 @@ #include "xen.h" #include "grant_table.h" @@ -106,10 +98,8 @@ Index: xen-4.0.0-testing/xen/include/public/domctl.h struct xenctl_cpumap { XEN_GUEST_HANDLE_64(uint8) bitmap; -Index: xen-4.0.0-testing/xen/include/xen/softirq.h -=================================================================== ---- xen-4.0.0-testing.orig/xen/include/xen/softirq.h -+++ xen-4.0.0-testing/xen/include/xen/softirq.h +--- a/xen/include/xen/softirq.h ++++ b/xen/include/xen/softirq.h @@ -50,12 +50,14 @@ struct tasklet bool_t is_scheduled; bool_t is_running; diff --git a/cpupools-core.patch b/cpupools-core.patch index 4374bb9..8ee7b80 100644 --- a/cpupools-core.patch +++ b/cpupools-core.patch @@ -1,9 +1,7 @@ From: Juergen Gross -Index: xen-4.0.0-testing/xen/arch/x86/acpi/power.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/acpi/power.c -+++ xen-4.0.0-testing/xen/arch/x86/acpi/power.c +--- a/xen/arch/x86/acpi/power.c ++++ b/xen/arch/x86/acpi/power.c @@ -234,7 +234,7 @@ static int enter_state(u32 state) return error; } @@ -22,11 +20,9 @@ Index: xen-4.0.0-testing/xen/arch/x86/acpi/power.c } static int acpi_get_wake_status(void) -Index: xen-4.0.0-testing/xen/arch/x86/domain.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/domain.c -+++ xen-4.0.0-testing/xen/arch/x86/domain.c -@@ -1517,42 +1517,52 @@ void sync_vcpu_execstate(struct vcpu *v) +--- a/xen/arch/x86/domain.c ++++ b/xen/arch/x86/domain.c +@@ -1518,42 +1518,52 @@ void sync_vcpu_execstate(struct vcpu *v) } struct migrate_info { @@ -96,7 +92,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/domain.c info = v->arch.continue_info; if ( info == NULL ) -@@ -1561,16 +1571,12 @@ int continue_hypercall_on_cpu(int cpu, l +@@ -1562,16 +1572,12 @@ int continue_hypercall_on_cpu(int cpu, l if ( info == NULL ) return -ENOMEM; @@ -117,7 +113,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/domain.c v->arch.schedule_tail = continue_hypercall_on_cpu_helper; v->arch.continue_info = info; -@@ -1578,17 +1584,17 @@ int continue_hypercall_on_cpu(int cpu, l +@@ -1579,17 +1585,17 @@ int continue_hypercall_on_cpu(int cpu, l else { BUG_ON(info->nest != 0); @@ -139,10 +135,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/domain.c return 0; } -Index: xen-4.0.0-testing/xen/arch/x86/domain_build.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/domain_build.c -+++ xen-4.0.0-testing/xen/arch/x86/domain_build.c +--- a/xen/arch/x86/domain_build.c ++++ b/xen/arch/x86/domain_build.c @@ -9,6 +9,7 @@ #include #include @@ -183,10 +177,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/domain_build.c /* Set up CR3 value for write_ptbase */ if ( paging_mode_enabled(d) ) -Index: xen-4.0.0-testing/xen/arch/x86/microcode.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/microcode.c -+++ xen-4.0.0-testing/xen/arch/x86/microcode.c +--- a/xen/arch/x86/microcode.c ++++ b/xen/arch/x86/microcode.c @@ -116,7 +116,7 @@ static int microcode_update_cpu(const vo return err; } @@ -214,10 +206,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/microcode.c + return continue_hypercall_on_cpu(info->cpu, NULL, + do_microcode_update, info); } -Index: xen-4.0.0-testing/xen/arch/x86/mm.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/mm.c -+++ xen-4.0.0-testing/xen/arch/x86/mm.c +--- a/xen/arch/x86/mm.c ++++ b/xen/arch/x86/mm.c @@ -242,7 +242,7 @@ void __init arch_init_memory(void) * Any Xen-heap pages that we will allow to be mapped will have * their domain field set to dom_xen. @@ -244,10 +234,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/mm.c BUG_ON(dom_cow == NULL); /* First 1MB of RAM is historically marked as I/O. */ -Index: xen-4.0.0-testing/xen/arch/x86/platform_hypercall.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/platform_hypercall.c -+++ xen-4.0.0-testing/xen/arch/x86/platform_hypercall.c +--- a/xen/arch/x86/platform_hypercall.c ++++ b/xen/arch/x86/platform_hypercall.c @@ -19,6 +19,7 @@ #include #include @@ -307,10 +295,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/platform_hypercall.c break; } break; -Index: xen-4.0.0-testing/xen/arch/x86/setup.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/setup.c -+++ xen-4.0.0-testing/xen/arch/x86/setup.c +--- a/xen/arch/x86/setup.c ++++ b/xen/arch/x86/setup.c @@ -2,6 +2,7 @@ #include #include @@ -343,10 +329,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/setup.c if ( (dom0 == NULL) || (alloc_dom0_vcpu0() == NULL) ) panic("Error creating domain 0\n"); -Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/smpboot.c -+++ xen-4.0.0-testing/xen/arch/x86/smpboot.c +--- a/xen/arch/x86/smpboot.c ++++ b/xen/arch/x86/smpboot.c @@ -39,6 +39,7 @@ #include #include @@ -372,8 +356,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c */ int alloc_cpu_id(void) { -@@ -1303,10 +1303,11 @@ int __cpu_disable(void) - remove_siblinginfo(cpu); +@@ -1306,10 +1306,11 @@ int __cpu_disable(void) + __sync_lazy_execstate(); /* It's now safe to remove this processor from the online map */ + cpu_clear(cpu, cpupool0->cpu_valid); @@ -385,22 +369,20 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c return 0; } -@@ -1340,12 +1341,12 @@ int cpu_down(unsigned int cpu) +@@ -1343,10 +1344,10 @@ int cpu_down(unsigned int cpu) int err = 0; /* spin_trylock() avoids deadlock with stop_machine_run(). */ -- if (!spin_trylock(&cpu_add_remove_lock)) { -+ if (!spin_trylock(&cpupool_lock)) { - err = -EBUSY; - goto out; - } +- if (!spin_trylock(&cpu_add_remove_lock)) ++ if (!spin_trylock(&cpupool_lock)) + return -EBUSY; - if (num_online_cpus() == 1) { + if ((!cpu_isset(cpu, cpupool0->cpu_valid)) || (cpus_weight(cpupool0->cpu_valid) == 1)) { err = -EBUSY; goto out; } -@@ -1378,7 +1379,7 @@ int cpu_down(unsigned int cpu) +@@ -1379,7 +1380,7 @@ int cpu_down(unsigned int cpu) out: if (!err) send_guest_global_virq(dom0, VIRQ_PCPU_STATE); @@ -409,7 +391,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c return err; } -@@ -1387,7 +1388,7 @@ int cpu_up(unsigned int cpu) +@@ -1388,7 +1389,7 @@ int cpu_up(unsigned int cpu) int err = 0; /* spin_trylock() avoids deadlock with stop_machine_run(). */ @@ -418,7 +400,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c return -EBUSY; if (cpu_online(cpu)) { -@@ -1405,7 +1406,7 @@ int cpu_up(unsigned int cpu) +@@ -1406,7 +1407,7 @@ int cpu_up(unsigned int cpu) out: if (!err) send_guest_global_virq(dom0, VIRQ_PCPU_STATE); @@ -427,7 +409,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c return err; } -@@ -1491,14 +1492,14 @@ int cpu_add(uint32_t apic_id, uint32_t a +@@ -1492,14 +1493,14 @@ int cpu_add(uint32_t apic_id, uint32_t a return -EEXIST; /* spin_trylock() avoids deadlock with stop_machine_run(). */ @@ -444,7 +426,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c return cpu; } -@@ -1515,7 +1516,7 @@ int cpu_add(uint32_t apic_id, uint32_t a +@@ -1516,7 +1517,7 @@ int cpu_add(uint32_t apic_id, uint32_t a "Setup node failed for pxm %x\n", pxm); x86_acpiid_to_apicid[acpi_id] = 0xff; mp_unregister_lapic(apic_id, cpu); @@ -453,7 +435,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c return node; } apicid_to_node[apic_id] = node; -@@ -1523,7 +1524,7 @@ int cpu_add(uint32_t apic_id, uint32_t a +@@ -1524,7 +1525,7 @@ int cpu_add(uint32_t apic_id, uint32_t a srat_detect_node(cpu); numa_add_cpu(cpu); @@ -462,7 +444,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c dprintk(XENLOG_INFO, "Add CPU %x with index %x\n", apic_id, cpu); return cpu; } -@@ -1567,6 +1568,7 @@ int __devinit __cpu_up(unsigned int cpu) +@@ -1568,6 +1569,7 @@ int __devinit __cpu_up(unsigned int cpu) process_pending_softirqs(); } @@ -470,10 +452,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c cpufreq_add_cpu(cpu); return 0; } -Index: xen-4.0.0-testing/xen/arch/x86/sysctl.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/sysctl.c -+++ xen-4.0.0-testing/xen/arch/x86/sysctl.c +--- a/xen/arch/x86/sysctl.c ++++ b/xen/arch/x86/sysctl.c @@ -29,7 +29,7 @@ #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0) @@ -492,10 +472,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/sysctl.c break; case XEN_SYSCTL_CPU_HOTPLUG_STATUS: ret = 0; -Index: xen-4.0.0-testing/xen/common/Makefile -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/Makefile -+++ xen-4.0.0-testing/xen/common/Makefile +--- a/xen/common/Makefile ++++ b/xen/common/Makefile @@ -1,5 +1,6 @@ obj-y += bitmap.o obj-y += cpu.o @@ -503,10 +481,8 @@ Index: xen-4.0.0-testing/xen/common/Makefile obj-y += domctl.o obj-y += domain.o obj-y += event_channel.o -Index: xen-4.0.0-testing/xen/common/cpupool.c -=================================================================== --- /dev/null -+++ xen-4.0.0-testing/xen/common/cpupool.c ++++ b/xen/common/cpupool.c @@ -0,0 +1,570 @@ +/****************************************************************************** + * cpupool.c @@ -1078,10 +1054,8 @@ Index: xen-4.0.0-testing/xen/common/cpupool.c + * indent-tabs-mode: nil + * End: + */ -Index: xen-4.0.0-testing/xen/common/domain.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/domain.c -+++ xen-4.0.0-testing/xen/common/domain.c +--- a/xen/common/domain.c ++++ b/xen/common/domain.c @@ -209,7 +209,7 @@ static void __init parse_extra_guest_irq custom_param("extra_guest_irqs", parse_extra_guest_irqs); @@ -1110,10 +1084,8 @@ Index: xen-4.0.0-testing/xen/common/domain.c sched_destroy_domain(d); /* Free page used by xen oprofile buffer. */ -Index: xen-4.0.0-testing/xen/common/domctl.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/domctl.c -+++ xen-4.0.0-testing/xen/common/domctl.c +--- a/xen/common/domctl.c ++++ b/xen/common/domctl.c @@ -11,6 +11,7 @@ #include #include @@ -1220,10 +1192,8 @@ Index: xen-4.0.0-testing/xen/common/domctl.c default: ret = arch_do_domctl(op, u_domctl); break; -Index: xen-4.0.0-testing/xen/common/sched_credit.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/sched_credit.c -+++ xen-4.0.0-testing/xen/common/sched_credit.c +--- a/xen/common/sched_credit.c ++++ b/xen/common/sched_credit.c @@ -70,11 +70,15 @@ /* * Useful macros @@ -1410,8 +1380,8 @@ Index: xen-4.0.0-testing/xen/common/sched_credit.c * like run two VCPUs on co-hyperthreads while there are idle cores * or sockets. */ -- idlers = csched_priv.idlers; -+ idlers = CSCHED_PRIV(ops)->idlers; +- cpus_and(idlers, cpu_online_map, csched_priv.idlers); ++ cpus_and(idlers, cpu_online_map, CSCHED_PRIV(ops)->idlers); cpu_set(cpu, idlers); cpus_and(cpus, cpus, idlers); cpu_clear(cpu, cpus); @@ -2090,7 +2060,7 @@ Index: xen-4.0.0-testing/xen/common/sched_credit.c .destroy_vcpu = csched_vcpu_destroy, .sleep = csched_vcpu_sleep, -@@ -1411,6 +1547,11 @@ const struct scheduler sched_credit_def +@@ -1411,6 +1547,11 @@ const struct scheduler sched_credit_def .dump_cpu_state = csched_dump_pcpu, .dump_settings = csched_dump, .init = csched_init, @@ -2102,10 +2072,8 @@ Index: xen-4.0.0-testing/xen/common/sched_credit.c .tick_suspend = csched_tick_suspend, .tick_resume = csched_tick_resume, -Index: xen-4.0.0-testing/xen/common/sched_sedf.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/sched_sedf.c -+++ xen-4.0.0-testing/xen/common/sched_sedf.c +--- a/xen/common/sched_sedf.c ++++ b/xen/common/sched_sedf.c @@ -21,6 +21,9 @@ printk(_a ); \ } while ( 0 ) @@ -2347,7 +2315,7 @@ Index: xen-4.0.0-testing/xen/common/sched_sedf.c .name = "Simple EDF Scheduler", .opt_name = "sedf", .sched_id = XEN_SCHEDULER_SEDF, -@@ -1464,9 +1492,13 @@ const struct scheduler sched_sedf_def = +@@ -1464,9 +1492,13 @@ const struct scheduler sched_sedf_def = .init_domain = sedf_init_domain, .destroy_domain = sedf_destroy_domain, @@ -2362,10 +2330,8 @@ Index: xen-4.0.0-testing/xen/common/sched_sedf.c .do_schedule = sedf_do_schedule, .pick_cpu = sedf_pick_cpu, .dump_cpu_state = sedf_dump_cpu_state, -Index: xen-4.0.0-testing/xen/common/schedule.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/schedule.c -+++ xen-4.0.0-testing/xen/common/schedule.c +--- a/xen/common/schedule.c ++++ b/xen/common/schedule.c @@ -53,10 +53,11 @@ static void poll_timer_fn(void *data); /* This is global for now so that private implementations can reach it */ @@ -2872,10 +2838,8 @@ Index: xen-4.0.0-testing/xen/common/schedule.c } #ifdef CONFIG_COMPAT -Index: xen-4.0.0-testing/xen/common/softirq.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/common/softirq.c -+++ xen-4.0.0-testing/xen/common/softirq.c +--- a/xen/common/softirq.c ++++ b/xen/common/softirq.c @@ -88,9 +88,11 @@ void raise_softirq(unsigned int nr) } @@ -2969,10 +2933,8 @@ Index: xen-4.0.0-testing/xen/common/softirq.c open_softirq(TASKLET_SOFTIRQ, tasklet_action); } -Index: xen-4.0.0-testing/xen/include/asm-x86/domain.h -=================================================================== ---- xen-4.0.0-testing.orig/xen/include/asm-x86/domain.h -+++ xen-4.0.0-testing/xen/include/asm-x86/domain.h +--- a/xen/include/asm-x86/domain.h ++++ b/xen/include/asm-x86/domain.h @@ -451,7 +451,8 @@ struct arch_vcpu #define hvm_svm hvm_vcpu.u.svm @@ -2983,10 +2945,8 @@ Index: xen-4.0.0-testing/xen/include/asm-x86/domain.h void vcpu_show_execution_state(struct vcpu *); void vcpu_show_registers(const struct vcpu *); -Index: xen-4.0.0-testing/xen/include/asm-x86/smp.h -=================================================================== ---- xen-4.0.0-testing.orig/xen/include/asm-x86/smp.h -+++ xen-4.0.0-testing/xen/include/asm-x86/smp.h +--- a/xen/include/asm-x86/smp.h ++++ b/xen/include/asm-x86/smp.h @@ -56,7 +56,6 @@ extern u32 cpu_2_logical_apicid[]; #define CPU_ONLINE 0x0002 /* CPU is up */ #define CPU_DEAD 0x0004 /* CPU is dead */ @@ -2995,10 +2955,8 @@ Index: xen-4.0.0-testing/xen/include/asm-x86/smp.h #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) extern int cpu_down(unsigned int cpu); -Index: xen-4.0.0-testing/xen/include/public/domctl.h -=================================================================== ---- xen-4.0.0-testing.orig/xen/include/public/domctl.h -+++ xen-4.0.0-testing/xen/include/public/domctl.h +--- a/xen/include/public/domctl.h ++++ b/xen/include/public/domctl.h @@ -60,10 +60,14 @@ struct xen_domctl_createdomain { /* Should domain memory integrity be verifed by tboot during Sx? */ #define _XEN_DOMCTL_CDF_s3_integrity 2 @@ -3070,10 +3028,8 @@ Index: xen-4.0.0-testing/xen/include/public/domctl.h #if defined(__i386__) || defined(__x86_64__) struct xen_domctl_cpuid cpuid; #endif -Index: xen-4.0.0-testing/xen/include/xen/sched-if.h -=================================================================== ---- xen-4.0.0-testing.orig/xen/include/xen/sched-if.h -+++ xen-4.0.0-testing/xen/include/xen/sched-if.h +--- a/xen/include/xen/sched-if.h ++++ b/xen/include/xen/sched-if.h @@ -10,16 +10,29 @@ #include @@ -3166,11 +3122,9 @@ Index: xen-4.0.0-testing/xen/include/xen/sched-if.h +struct scheduler *scheduler_get_by_id(unsigned int id); + #endif /* __XEN_SCHED_IF_H__ */ -Index: xen-4.0.0-testing/xen/include/xen/sched.h -=================================================================== ---- xen-4.0.0-testing.orig/xen/include/xen/sched.h -+++ xen-4.0.0-testing/xen/include/xen/sched.h -@@ -132,8 +132,6 @@ struct vcpu +--- a/xen/include/xen/sched.h ++++ b/xen/include/xen/sched.h +@@ -132,8 +132,6 @@ struct vcpu bool_t defer_shutdown; /* VCPU is paused following shutdown request (d->is_shutting_down)? */ bool_t paused_for_shutdown; @@ -3242,10 +3196,8 @@ Index: xen-4.0.0-testing/xen/include/xen/sched.h #endif /* __SCHED_H__ */ /* -Index: xen-4.0.0-testing/xen/include/xen/softirq.h -=================================================================== ---- xen-4.0.0-testing.orig/xen/include/xen/softirq.h -+++ xen-4.0.0-testing/xen/include/xen/softirq.h +--- a/xen/include/xen/softirq.h ++++ b/xen/include/xen/softirq.h @@ -58,6 +58,7 @@ struct tasklet struct tasklet name = { LIST_HEAD_INIT(name.list), 0, 0, 0, func, data } diff --git a/dom-print.patch b/dom-print.patch index dfc3b02..73e7cc7 100644 --- a/dom-print.patch +++ b/dom-print.patch @@ -1,8 +1,6 @@ -Index: xen-4.0.0-testing/xen/arch/x86/domain.c -=================================================================== ---- xen-4.0.0-testing.orig/xen/arch/x86/domain.c -+++ xen-4.0.0-testing/xen/arch/x86/domain.c -@@ -144,7 +144,7 @@ void dump_pageframe_info(struct domain * +--- a/xen/arch/x86/domain.c ++++ b/xen/arch/x86/domain.c +@@ -144,14 +144,29 @@ void dump_pageframe_info(struct domain * printk("Memory pages belonging to domain %u:\n", d->domain_id); @@ -11,11 +9,17 @@ Index: xen-4.0.0-testing/xen/arch/x86/domain.c { printk(" DomPage list too long to display\n"); } -@@ -152,6 +152,15 @@ void dump_pageframe_info(struct domain * + else { ++ unsigned long total[PGT_type_mask ++ / (PGT_type_mask & -PGT_type_mask) + 1] = {}; ++ page_list_for_each ( page, &d->page_list ) { -+ if ( d->tot_pages > 16 ) ++ unsigned int index = (page->u.inuse.type_info & PGT_type_mask) ++ / (PGT_type_mask & -PGT_type_mask); ++ ++ if ( ++total[index] > 16 ) + { + switch ( page->u.inuse.type_info & PGT_type_mask ) + { diff --git a/init.xendomains b/init.xendomains index 836149e..144e8dc 100644 --- a/init.xendomains +++ b/init.xendomains @@ -8,7 +8,7 @@ ### BEGIN INIT INFO # Provides: xendomains # Required-Start: $syslog $remote_fs xend -# Should-Start: iscsi o2cb ocfs2 +# Should-Start: iscsi o2cb ocfs2 openais # Required-Stop: $syslog $remote_fs xend # Should-Stop: iscsi # Default-Start: 3 5 @@ -89,7 +89,11 @@ dir_contains_something() get_name_from_cfg() { - NM=`grep '^name[ ]*=' "$1" | sed -e 's/^name[ ]*=[ ]*['\''"]\([^'\''"]*\)['\''"].*$/\1/'` + if grep -q "^name" "$1";then + NM=`grep '^name[ ]*=' "$1" | sed -e 's/^name[ ]*=[ ]*['\''"]\([^'\''"]*\)['\''"].*$/\1/'` + elif grep -q "(name " "$1";then + NM=`grep '(name ' "$1" | sed -e 's/^ *//' | cut -d " " -f 2 | sed -e 's/)//'` + fi } running_auto_names() @@ -179,12 +183,16 @@ start() if is_cfg_running "$dom"; then rc_status -s else - xm create --quiet --defconfig "$dom" + if grep -q "^name" "$dom";then + xm create --quiet --defconfig "$dom" + elif grep -q "(name .*" "$dom";then + xm create --quiet --config "$dom" + fi if [ $? -ne 0 ]; then - rc_failed + rc_failed else - usleep $XENDOMAINS_CREATE_USLEEP - rc_reset + usleep $XENDOMAINS_CREATE_USLEEP + rc_reset fi rc_status -v fi diff --git a/ioemu-subtype.patch b/ioemu-subtype.patch new file mode 100644 index 0000000..71f2b30 --- /dev/null +++ b/ioemu-subtype.patch @@ -0,0 +1,12 @@ +diff -r c02cc832cb2d tools/python/xen/xend/server/BlktapController.py +--- a/tools/python/xen/xend/server/BlktapController.py Tue Apr 13 18:19:33 2010 +0100 ++++ b/tools/python/xen/xend/server/BlktapController.py Fri Apr 16 12:05:39 2010 -0600 +@@ -189,7 +189,7 @@ + blktap2_installed=1; + + if typ in ('tap'): +- if subtyp in ('tapdisk'): ++ if subtyp in ('tapdisk', 'ioemu'): + if params not in blktap2_disk_types or not blktap2_installed: + # pass this device off to BlktapController + log.warn('WARNING: using deprecated blktap module') diff --git a/xen-4.0.0-testing-src.tar.bz2 b/xen-4.0.0-testing-src.tar.bz2 index a963c6b..2736a64 100644 --- a/xen-4.0.0-testing-src.tar.bz2 +++ b/xen-4.0.0-testing-src.tar.bz2 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8696f3d4de6d66bce133e78e990c409053ba057fe13c708e763d32b3b4deb2cc -size 23204532 +oid sha256:dae429f07e7c09ed55f941d3ad7cbfe39f9e29d93da70df13594acaa2ee9f34b +size 23205463 diff --git a/xen-config.diff b/xen-config.diff index 987d887..9616a4c 100644 --- a/xen-config.diff +++ b/xen-config.diff @@ -7,9 +7,9 @@ Index: xen-4.0.0-testing/Config.mk # Mercurial in-tree version, or a local directory, or a git URL. # CONFIG_QEMU ?= ../qemu-xen.git -CONFIG_QEMU ?= $(QEMU_REMOTE) -+CONFIG_QEMU ?= ioemu-remote ++CONFIG_QEMU ?= ioemu-remote - QEMU_TAG := xen-4.0.0-rc9 + QEMU_TAG := xen-4.0.0 #QEMU_TAG ?= f1d909f0f854194f5a40d850886d1413fb8b63c2 @@ -167,9 +167,9 @@ CONFIG_OCAML_XENSTORED ?= n # Optional components diff --git a/xen-domUloader.diff b/xen-domUloader.diff index e7922d4..b72419c 100644 --- a/xen-domUloader.diff +++ b/xen-domUloader.diff @@ -13,11 +13,13 @@ Index: xen-4.0.0-testing/tools/python/xen/util/blkif.py if uname.find(":") != -1: (typ, fn) = uname.split(":", 1) -@@ -88,15 +88,16 @@ def _parse_uname(uname): +@@ -88,15 +88,18 @@ def _parse_uname(uname): if typ == "tap": (taptype, fn) = fn.split(":", 1) - return (fn, taptype) ++ if taptype in ("tapdisk", "ioemu"): ++ (taptype, fn) = fn.split(":", 1) + return (fn, (typ, taptype)) + return (fn, (typ,taptype)) diff --git a/xen.changes b/xen.changes index 9670eea..4f94c79 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,32 @@ +------------------------------------------------------------------- +Fri Apr 16 15:00:52 MDT 2010 - jfehlig@novell.com + +- bnc#569194 - Tools-side fixes for tapdisk protocol specification + blktap-script.patch + ioemu-subtype.patch + Modified xen-domUloader.diff + +------------------------------------------------------------------- +Wed Apr 14 08:14:31 MDT 2010 - carnold@novell.com + +- Upstream bug fixes from Jan + 21089-x86-startup-irq-from-setup-gsi.patch + 21109-x86-cpu-hotplug.patch + 21150-shadow-race.patch + 21160-sysctl-debug-keys.patch + +------------------------------------------------------------------- +Fri Apr 9 12:38:47 MDT 2010 - jfehlig@novell.com + +- Updated to Xen 4.0.0 FCS, changeset 21091 + +------------------------------------------------------------------- +Tue Apr 6 18:18:36 MDT 2010 - jfehlig@novell.com + +- Change default lock dir (when domain locking is enabled) to + /var/lib/xen/images/vm_locks +- Support SXP config files in xendomains script + ------------------------------------------------------------------- Tue Mar 31 08:09:49 MDT 2010 - carnold@novell.com diff --git a/xen.spec b/xen.spec index 18f4d79..d80ce34 100644 --- a/xen.spec +++ b/xen.spec @@ -1,5 +1,5 @@ # -# spec file for package xen (Version 4.0.0_21087_01) +# spec file for package xen (Version 4.0.0_21091_01) # # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -22,9 +22,9 @@ Name: xen ExclusiveArch: %ix86 x86_64 %define xvers 4.0 %define xvermaj 4 -%define changeset 21087 +%define changeset 21091 %define xen_build_dir xen-4.0.0-testing -%define with_kmp 0 +%define with_kmp 1 BuildRequires: LibVNCServer-devel SDL-devel acpica automake bin86 curl-devel dev86 graphviz latex2html libjpeg-devel libxml2-devel ncurses-devel openssl openssl-devel pciutils-devel python-devel texinfo transfig %if %suse_version >= 1030 BuildRequires: texlive texlive-latex @@ -42,9 +42,9 @@ BuildRequires: glibc-32bit glibc-devel-32bit %if %{?with_kmp}0 BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11 %endif -Version: 4.0.0_21087_01 +Version: 4.0.0_21091_01 Release: 1 -License: GPLv2 +License: GPLv2+ Group: System/Kernel AutoReqProv: on PreReq: %insserv_prereq %fillup_prereq @@ -78,6 +78,13 @@ Source24: xenapiusers # sysconfig hook script for Xen Source25: xen-updown.sh # Upstream patches +Patch0: 21089-x86-startup-irq-from-setup-gsi.patch +Patch1: 21109-x86-cpu-hotplug.patch +Patch2: 21128-domain-save-flush.patch +Patch3: 21150-shadow-race.patch +Patch4: 21160-sysctl-debug-keys.patch +Patch5: blktap-script.patch +Patch6: ioemu-subtype.patch # Our patches Patch300: xen-config.diff Patch301: xend-config.diff @@ -520,6 +527,13 @@ Authors: %prep %setup -q -n %xen_build_dir +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 %patch300 -p1 %patch301 -p1 %patch302 -p1 diff --git a/xend-domain-lock.patch b/xend-domain-lock.patch index e1aae2e..609d8a3 100644 --- a/xend-domain-lock.patch +++ b/xend-domain-lock.patch @@ -21,7 +21,7 @@ Index: xen-4.0.0-testing/tools/examples/xend-config.sxp +# Note: This path must be accessible to all VM Servers participating +# in domain locking, e.g. by specifying a shared mount point. +# Lock is placed in //. -+# Default is /var/lib/xend/domains/ ++# Default is /var/lib/xen/images/vm_locks/ +# +#(xend-domain-lock-path /var/lib/xend/domains) + @@ -191,7 +191,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendOptions.py + xend_domain_lock = 'no' + + """Default domain lock storage path.""" -+ xend_domain_lock_path_default = '/var/lib/xend/domains' ++ xend_domain_lock_path_default = '/var/lib/xen/images/vm_locks' + + """Default script to acquire/release domain lock""" + xend_domain_lock_utility = auxbin.scripts_dir() + "/domain-lock"