Accepting request 38078 from Virtualization

checked in (request 38078)

OBS-URL: https://build.opensuse.org/request/show/38078
OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=41
This commit is contained in:
OBS User autobuild 2010-04-18 22:21:05 +00:00 committed by Git OBS Bridge
parent f46075e596
commit ce2ee9452b
17 changed files with 160 additions and 573 deletions

View File

@ -1,106 +0,0 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# 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 <jbeulich@novell.com>
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1271090214 -3600
# Node ID 7eeb131880b20a33e7675cc1726ae312a489be2d
# Parent b65a41dc6c6a2e2341ae778d8386a08d502bbfa4
Fix bug in 21089:4f796e29987c
Signed-off-by: Jan Beulich <jbeulich@novell.com>
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# 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 <jbeulich@novell.com>
--- 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

View File

@ -1,154 +0,0 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# 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 <keir.fraser@citrix.com>
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# 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 <yunhong.jiang@intel.com>
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# 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 <gang.wei@intel.com>
--- 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)

View File

@ -1,31 +0,0 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# 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 <daniel.stodden@citrix.com>
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;

View File

@ -1,68 +0,0 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# 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 <george.dunlap@eu.citrix.com>
--- 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 */

View File

@ -1,27 +0,0 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1271162458 -3600
# Node ID 859a372efa66e6bcba8e1fd968e521cb16da12ea
# Parent da90dd1a09b93ae41ab451d223ff87dca04356f5
sysctl: Fix XEN_SYSCTL_debug_keys error path.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
--- 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;

View File

@ -1,16 +0,0 @@
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

View File

@ -8,9 +8,11 @@
missing adjustments get detected at build time) missing adjustments get detected at build time)
- remove boot time per-CPU pool assignment messages (bnc#572146) - remove boot time per-CPU pool assignment messages (bnc#572146)
--- a/xen/arch/x86/domain.c Index: xen-4.0.0-testing/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c ===================================================================
@@ -1581,6 +1581,7 @@ int continue_hypercall_on_cpu(int cpu, v --- 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
v->arch.schedule_tail = continue_hypercall_on_cpu_helper; v->arch.schedule_tail = continue_hypercall_on_cpu_helper;
v->arch.continue_info = info; v->arch.continue_info = info;
@ -18,7 +20,7 @@
} }
else else
{ {
@@ -1591,7 +1592,6 @@ int continue_hypercall_on_cpu(int cpu, v @@ -1590,7 +1591,6 @@ int continue_hypercall_on_cpu(int cpu, v
info->func = func; info->func = func;
info->data = data; info->data = data;
@ -26,8 +28,10 @@
tasklet_schedule_cpu(&info->tasklet, cpu); tasklet_schedule_cpu(&info->tasklet, cpu);
raise_softirq(SCHEDULE_SOFTIRQ); raise_softirq(SCHEDULE_SOFTIRQ);
--- a/xen/common/sched_credit.c Index: xen-4.0.0-testing/xen/common/sched_credit.c
+++ b/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
@@ -176,7 +176,6 @@ struct csched_private { @@ -176,7 +176,6 @@ struct csched_private {
/* /*
* Global variables * Global variables
@ -51,8 +55,10 @@
.init_domain = csched_dom_init, .init_domain = csched_dom_init,
.destroy_domain = csched_dom_destroy, .destroy_domain = csched_dom_destroy,
--- a/xen/common/softirq.c Index: xen-4.0.0-testing/xen/common/softirq.c
+++ b/xen/common/softirq.c ===================================================================
--- xen-4.0.0-testing.orig/xen/common/softirq.c
+++ xen-4.0.0-testing/xen/common/softirq.c
@@ -104,12 +104,15 @@ static void tasklet_schedule_list(struct @@ -104,12 +104,15 @@ static void tasklet_schedule_list(struct
{ {
BUG_ON(!list_empty(&t->list)); BUG_ON(!list_empty(&t->list));
@ -87,8 +93,10 @@
} }
/* /*
--- a/xen/include/public/domctl.h Index: xen-4.0.0-testing/xen/include/public/domctl.h
+++ b/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
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
#include "xen.h" #include "xen.h"
#include "grant_table.h" #include "grant_table.h"
@ -98,8 +106,10 @@
struct xenctl_cpumap { struct xenctl_cpumap {
XEN_GUEST_HANDLE_64(uint8) bitmap; XEN_GUEST_HANDLE_64(uint8) bitmap;
--- a/xen/include/xen/softirq.h Index: xen-4.0.0-testing/xen/include/xen/softirq.h
+++ b/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
@@ -50,12 +50,14 @@ struct tasklet @@ -50,12 +50,14 @@ struct tasklet
bool_t is_scheduled; bool_t is_scheduled;
bool_t is_running; bool_t is_running;

View File

@ -1,7 +1,9 @@
From: Juergen Gross <juergen.gross@ts.fujitsu.com> From: Juergen Gross <juergen.gross@ts.fujitsu.com>
--- a/xen/arch/x86/acpi/power.c Index: xen-4.0.0-testing/xen/arch/x86/acpi/power.c
+++ b/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
@@ -234,7 +234,7 @@ static int enter_state(u32 state) @@ -234,7 +234,7 @@ static int enter_state(u32 state)
return error; return error;
} }
@ -20,9 +22,11 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
} }
static int acpi_get_wake_status(void) static int acpi_get_wake_status(void)
--- a/xen/arch/x86/domain.c Index: xen-4.0.0-testing/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c ===================================================================
@@ -1518,42 +1518,52 @@ void sync_vcpu_execstate(struct vcpu *v) --- 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)
} }
struct migrate_info { struct migrate_info {
@ -92,7 +96,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
info = v->arch.continue_info; info = v->arch.continue_info;
if ( info == NULL ) if ( info == NULL )
@@ -1562,16 +1572,12 @@ int continue_hypercall_on_cpu(int cpu, l @@ -1561,16 +1571,12 @@ int continue_hypercall_on_cpu(int cpu, l
if ( info == NULL ) if ( info == NULL )
return -ENOMEM; return -ENOMEM;
@ -113,7 +117,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
v->arch.schedule_tail = continue_hypercall_on_cpu_helper; v->arch.schedule_tail = continue_hypercall_on_cpu_helper;
v->arch.continue_info = info; v->arch.continue_info = info;
@@ -1579,17 +1585,17 @@ int continue_hypercall_on_cpu(int cpu, l @@ -1578,17 +1584,17 @@ int continue_hypercall_on_cpu(int cpu, l
else else
{ {
BUG_ON(info->nest != 0); BUG_ON(info->nest != 0);
@ -135,8 +139,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
return 0; return 0;
} }
--- a/xen/arch/x86/domain_build.c Index: xen-4.0.0-testing/xen/arch/x86/domain_build.c
+++ b/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
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
#include <xen/lib.h> #include <xen/lib.h>
#include <xen/ctype.h> #include <xen/ctype.h>
@ -177,8 +183,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
/* Set up CR3 value for write_ptbase */ /* Set up CR3 value for write_ptbase */
if ( paging_mode_enabled(d) ) if ( paging_mode_enabled(d) )
--- a/xen/arch/x86/microcode.c Index: xen-4.0.0-testing/xen/arch/x86/microcode.c
+++ b/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
@@ -116,7 +116,7 @@ static int microcode_update_cpu(const vo @@ -116,7 +116,7 @@ static int microcode_update_cpu(const vo
return err; return err;
} }
@ -206,8 +214,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
+ return continue_hypercall_on_cpu(info->cpu, NULL, + return continue_hypercall_on_cpu(info->cpu, NULL,
+ do_microcode_update, info); + do_microcode_update, info);
} }
--- a/xen/arch/x86/mm.c Index: xen-4.0.0-testing/xen/arch/x86/mm.c
+++ b/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
@@ -242,7 +242,7 @@ void __init arch_init_memory(void) @@ -242,7 +242,7 @@ void __init arch_init_memory(void)
* Any Xen-heap pages that we will allow to be mapped will have * Any Xen-heap pages that we will allow to be mapped will have
* their domain field set to dom_xen. * their domain field set to dom_xen.
@ -234,8 +244,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
BUG_ON(dom_cow == NULL); BUG_ON(dom_cow == NULL);
/* First 1MB of RAM is historically marked as I/O. */ /* First 1MB of RAM is historically marked as I/O. */
--- a/xen/arch/x86/platform_hypercall.c Index: xen-4.0.0-testing/xen/arch/x86/platform_hypercall.c
+++ b/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
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
#include <xen/iocap.h> #include <xen/iocap.h>
#include <xen/guest_access.h> #include <xen/guest_access.h>
@ -295,8 +307,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
break; break;
} }
break; break;
--- a/xen/arch/x86/setup.c Index: xen-4.0.0-testing/xen/arch/x86/setup.c
+++ b/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
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
#include <xen/init.h> #include <xen/init.h>
#include <xen/lib.h> #include <xen/lib.h>
@ -329,8 +343,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
if ( (dom0 == NULL) || (alloc_dom0_vcpu0() == NULL) ) if ( (dom0 == NULL) || (alloc_dom0_vcpu0() == NULL) )
panic("Error creating domain 0\n"); panic("Error creating domain 0\n");
--- a/xen/arch/x86/smpboot.c Index: xen-4.0.0-testing/xen/arch/x86/smpboot.c
+++ b/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
@@ -39,6 +39,7 @@ @@ -39,6 +39,7 @@
#include <xen/mm.h> #include <xen/mm.h>
#include <xen/domain.h> #include <xen/domain.h>
@ -356,8 +372,8 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
*/ */
int alloc_cpu_id(void) int alloc_cpu_id(void)
{ {
@@ -1306,10 +1306,11 @@ int __cpu_disable(void) @@ -1303,10 +1303,11 @@ int __cpu_disable(void)
__sync_lazy_execstate(); remove_siblinginfo(cpu);
/* It's now safe to remove this processor from the online map */ /* It's now safe to remove this processor from the online map */
+ cpu_clear(cpu, cpupool0->cpu_valid); + cpu_clear(cpu, cpupool0->cpu_valid);
@ -369,20 +385,22 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
return 0; return 0;
} }
@@ -1343,10 +1344,10 @@ int cpu_down(unsigned int cpu) @@ -1340,12 +1341,12 @@ int cpu_down(unsigned int cpu)
int err = 0; int err = 0;
/* spin_trylock() avoids deadlock with stop_machine_run(). */ /* spin_trylock() avoids deadlock with stop_machine_run(). */
- if (!spin_trylock(&cpu_add_remove_lock)) - if (!spin_trylock(&cpu_add_remove_lock)) {
+ if (!spin_trylock(&cpupool_lock)) + if (!spin_trylock(&cpupool_lock)) {
return -EBUSY; err = -EBUSY;
goto out;
}
- if (num_online_cpus() == 1) { - if (num_online_cpus() == 1) {
+ if ((!cpu_isset(cpu, cpupool0->cpu_valid)) || (cpus_weight(cpupool0->cpu_valid) == 1)) { + if ((!cpu_isset(cpu, cpupool0->cpu_valid)) || (cpus_weight(cpupool0->cpu_valid) == 1)) {
err = -EBUSY; err = -EBUSY;
goto out; goto out;
} }
@@ -1379,7 +1380,7 @@ int cpu_down(unsigned int cpu) @@ -1378,7 +1379,7 @@ int cpu_down(unsigned int cpu)
out: out:
if (!err) if (!err)
send_guest_global_virq(dom0, VIRQ_PCPU_STATE); send_guest_global_virq(dom0, VIRQ_PCPU_STATE);
@ -391,7 +409,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
return err; return err;
} }
@@ -1388,7 +1389,7 @@ int cpu_up(unsigned int cpu) @@ -1387,7 +1388,7 @@ int cpu_up(unsigned int cpu)
int err = 0; int err = 0;
/* spin_trylock() avoids deadlock with stop_machine_run(). */ /* spin_trylock() avoids deadlock with stop_machine_run(). */
@ -400,7 +418,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
return -EBUSY; return -EBUSY;
if (cpu_online(cpu)) { if (cpu_online(cpu)) {
@@ -1406,7 +1407,7 @@ int cpu_up(unsigned int cpu) @@ -1405,7 +1406,7 @@ int cpu_up(unsigned int cpu)
out: out:
if (!err) if (!err)
send_guest_global_virq(dom0, VIRQ_PCPU_STATE); send_guest_global_virq(dom0, VIRQ_PCPU_STATE);
@ -409,7 +427,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
return err; return err;
} }
@@ -1492,14 +1493,14 @@ int cpu_add(uint32_t apic_id, uint32_t a @@ -1491,14 +1492,14 @@ int cpu_add(uint32_t apic_id, uint32_t a
return -EEXIST; return -EEXIST;
/* spin_trylock() avoids deadlock with stop_machine_run(). */ /* spin_trylock() avoids deadlock with stop_machine_run(). */
@ -426,7 +444,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
return cpu; return cpu;
} }
@@ -1516,7 +1517,7 @@ int cpu_add(uint32_t apic_id, uint32_t a @@ -1515,7 +1516,7 @@ int cpu_add(uint32_t apic_id, uint32_t a
"Setup node failed for pxm %x\n", pxm); "Setup node failed for pxm %x\n", pxm);
x86_acpiid_to_apicid[acpi_id] = 0xff; x86_acpiid_to_apicid[acpi_id] = 0xff;
mp_unregister_lapic(apic_id, cpu); mp_unregister_lapic(apic_id, cpu);
@ -435,7 +453,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
return node; return node;
} }
apicid_to_node[apic_id] = node; apicid_to_node[apic_id] = node;
@@ -1524,7 +1525,7 @@ int cpu_add(uint32_t apic_id, uint32_t a @@ -1523,7 +1524,7 @@ int cpu_add(uint32_t apic_id, uint32_t a
srat_detect_node(cpu); srat_detect_node(cpu);
numa_add_cpu(cpu); numa_add_cpu(cpu);
@ -444,7 +462,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
dprintk(XENLOG_INFO, "Add CPU %x with index %x\n", apic_id, cpu); dprintk(XENLOG_INFO, "Add CPU %x with index %x\n", apic_id, cpu);
return cpu; return cpu;
} }
@@ -1568,6 +1569,7 @@ int __devinit __cpu_up(unsigned int cpu) @@ -1567,6 +1568,7 @@ int __devinit __cpu_up(unsigned int cpu)
process_pending_softirqs(); process_pending_softirqs();
} }
@ -452,8 +470,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
cpufreq_add_cpu(cpu); cpufreq_add_cpu(cpu);
return 0; return 0;
} }
--- a/xen/arch/x86/sysctl.c Index: xen-4.0.0-testing/xen/arch/x86/sysctl.c
+++ b/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
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
#define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0) #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
@ -472,8 +492,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
break; break;
case XEN_SYSCTL_CPU_HOTPLUG_STATUS: case XEN_SYSCTL_CPU_HOTPLUG_STATUS:
ret = 0; ret = 0;
--- a/xen/common/Makefile Index: xen-4.0.0-testing/xen/common/Makefile
+++ b/xen/common/Makefile ===================================================================
--- xen-4.0.0-testing.orig/xen/common/Makefile
+++ xen-4.0.0-testing/xen/common/Makefile
@@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
obj-y += bitmap.o obj-y += bitmap.o
obj-y += cpu.o obj-y += cpu.o
@ -481,8 +503,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
obj-y += domctl.o obj-y += domctl.o
obj-y += domain.o obj-y += domain.o
obj-y += event_channel.o obj-y += event_channel.o
Index: xen-4.0.0-testing/xen/common/cpupool.c
===================================================================
--- /dev/null --- /dev/null
+++ b/xen/common/cpupool.c +++ xen-4.0.0-testing/xen/common/cpupool.c
@@ -0,0 +1,570 @@ @@ -0,0 +1,570 @@
+/****************************************************************************** +/******************************************************************************
+ * cpupool.c + * cpupool.c
@ -1054,8 +1078,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
+ * indent-tabs-mode: nil + * indent-tabs-mode: nil
+ * End: + * End:
+ */ + */
--- a/xen/common/domain.c Index: xen-4.0.0-testing/xen/common/domain.c
+++ b/xen/common/domain.c ===================================================================
--- xen-4.0.0-testing.orig/xen/common/domain.c
+++ xen-4.0.0-testing/xen/common/domain.c
@@ -209,7 +209,7 @@ static void __init parse_extra_guest_irq @@ -209,7 +209,7 @@ static void __init parse_extra_guest_irq
custom_param("extra_guest_irqs", parse_extra_guest_irqs); custom_param("extra_guest_irqs", parse_extra_guest_irqs);
@ -1084,8 +1110,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
sched_destroy_domain(d); sched_destroy_domain(d);
/* Free page used by xen oprofile buffer. */ /* Free page used by xen oprofile buffer. */
--- a/xen/common/domctl.c Index: xen-4.0.0-testing/xen/common/domctl.c
+++ b/xen/common/domctl.c ===================================================================
--- xen-4.0.0-testing.orig/xen/common/domctl.c
+++ xen-4.0.0-testing/xen/common/domctl.c
@@ -11,6 +11,7 @@ @@ -11,6 +11,7 @@
#include <xen/lib.h> #include <xen/lib.h>
#include <xen/mm.h> #include <xen/mm.h>
@ -1192,8 +1220,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
default: default:
ret = arch_do_domctl(op, u_domctl); ret = arch_do_domctl(op, u_domctl);
break; break;
--- a/xen/common/sched_credit.c Index: xen-4.0.0-testing/xen/common/sched_credit.c
+++ b/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
@@ -70,11 +70,15 @@ @@ -70,11 +70,15 @@
/* /*
* Useful macros * Useful macros
@ -1380,8 +1410,8 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
* like run two VCPUs on co-hyperthreads while there are idle cores * like run two VCPUs on co-hyperthreads while there are idle cores
* or sockets. * or sockets.
*/ */
- cpus_and(idlers, cpu_online_map, csched_priv.idlers); - idlers = csched_priv.idlers;
+ cpus_and(idlers, cpu_online_map, CSCHED_PRIV(ops)->idlers); + idlers = CSCHED_PRIV(ops)->idlers;
cpu_set(cpu, idlers); cpu_set(cpu, idlers);
cpus_and(cpus, cpus, idlers); cpus_and(cpus, cpus, idlers);
cpu_clear(cpu, cpus); cpu_clear(cpu, cpus);
@ -2072,8 +2102,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
.tick_suspend = csched_tick_suspend, .tick_suspend = csched_tick_suspend,
.tick_resume = csched_tick_resume, .tick_resume = csched_tick_resume,
--- a/xen/common/sched_sedf.c Index: xen-4.0.0-testing/xen/common/sched_sedf.c
+++ b/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
@@ -21,6 +21,9 @@ @@ -21,6 +21,9 @@
printk(_a ); \ printk(_a ); \
} while ( 0 ) } while ( 0 )
@ -2330,8 +2362,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
.do_schedule = sedf_do_schedule, .do_schedule = sedf_do_schedule,
.pick_cpu = sedf_pick_cpu, .pick_cpu = sedf_pick_cpu,
.dump_cpu_state = sedf_dump_cpu_state, .dump_cpu_state = sedf_dump_cpu_state,
--- a/xen/common/schedule.c Index: xen-4.0.0-testing/xen/common/schedule.c
+++ b/xen/common/schedule.c ===================================================================
--- xen-4.0.0-testing.orig/xen/common/schedule.c
+++ xen-4.0.0-testing/xen/common/schedule.c
@@ -53,10 +53,11 @@ static void poll_timer_fn(void *data); @@ -53,10 +53,11 @@ static void poll_timer_fn(void *data);
/* This is global for now so that private implementations can reach it */ /* This is global for now so that private implementations can reach it */
@ -2838,8 +2872,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
} }
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
--- a/xen/common/softirq.c Index: xen-4.0.0-testing/xen/common/softirq.c
+++ b/xen/common/softirq.c ===================================================================
--- xen-4.0.0-testing.orig/xen/common/softirq.c
+++ xen-4.0.0-testing/xen/common/softirq.c
@@ -88,9 +88,11 @@ void raise_softirq(unsigned int nr) @@ -88,9 +88,11 @@ void raise_softirq(unsigned int nr)
} }
@ -2933,8 +2969,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
open_softirq(TASKLET_SOFTIRQ, tasklet_action); open_softirq(TASKLET_SOFTIRQ, tasklet_action);
} }
--- a/xen/include/asm-x86/domain.h Index: xen-4.0.0-testing/xen/include/asm-x86/domain.h
+++ b/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
@@ -451,7 +451,8 @@ struct arch_vcpu @@ -451,7 +451,8 @@ struct arch_vcpu
#define hvm_svm hvm_vcpu.u.svm #define hvm_svm hvm_vcpu.u.svm
@ -2945,8 +2983,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
void vcpu_show_execution_state(struct vcpu *); void vcpu_show_execution_state(struct vcpu *);
void vcpu_show_registers(const struct vcpu *); void vcpu_show_registers(const struct vcpu *);
--- a/xen/include/asm-x86/smp.h Index: xen-4.0.0-testing/xen/include/asm-x86/smp.h
+++ b/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
@@ -56,7 +56,6 @@ extern u32 cpu_2_logical_apicid[]; @@ -56,7 +56,6 @@ extern u32 cpu_2_logical_apicid[];
#define CPU_ONLINE 0x0002 /* CPU is up */ #define CPU_ONLINE 0x0002 /* CPU is up */
#define CPU_DEAD 0x0004 /* CPU is dead */ #define CPU_DEAD 0x0004 /* CPU is dead */
@ -2955,8 +2995,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
#define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu))
extern int cpu_down(unsigned int cpu); extern int cpu_down(unsigned int cpu);
--- a/xen/include/public/domctl.h Index: xen-4.0.0-testing/xen/include/public/domctl.h
+++ b/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
@@ -60,10 +60,14 @@ struct xen_domctl_createdomain { @@ -60,10 +60,14 @@ struct xen_domctl_createdomain {
/* Should domain memory integrity be verifed by tboot during Sx? */ /* Should domain memory integrity be verifed by tboot during Sx? */
#define _XEN_DOMCTL_CDF_s3_integrity 2 #define _XEN_DOMCTL_CDF_s3_integrity 2
@ -3028,8 +3070,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)
struct xen_domctl_cpuid cpuid; struct xen_domctl_cpuid cpuid;
#endif #endif
--- a/xen/include/xen/sched-if.h Index: xen-4.0.0-testing/xen/include/xen/sched-if.h
+++ b/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
@@ -10,16 +10,29 @@ @@ -10,16 +10,29 @@
#include <xen/percpu.h> #include <xen/percpu.h>
@ -3122,8 +3166,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
+struct scheduler *scheduler_get_by_id(unsigned int id); +struct scheduler *scheduler_get_by_id(unsigned int id);
+ +
#endif /* __XEN_SCHED_IF_H__ */ #endif /* __XEN_SCHED_IF_H__ */
--- a/xen/include/xen/sched.h Index: xen-4.0.0-testing/xen/include/xen/sched.h
+++ b/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 @@ -132,8 +132,6 @@ struct vcpu
bool_t defer_shutdown; bool_t defer_shutdown;
/* VCPU is paused following shutdown request (d->is_shutting_down)? */ /* VCPU is paused following shutdown request (d->is_shutting_down)? */
@ -3196,8 +3242,10 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
#endif /* __SCHED_H__ */ #endif /* __SCHED_H__ */
/* /*
--- a/xen/include/xen/softirq.h Index: xen-4.0.0-testing/xen/include/xen/softirq.h
+++ b/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
@@ -58,6 +58,7 @@ struct tasklet @@ -58,6 +58,7 @@ struct tasklet
struct tasklet name = { LIST_HEAD_INIT(name.list), 0, 0, 0, func, data } struct tasklet name = { LIST_HEAD_INIT(name.list), 0, 0, 0, func, data }

View File

@ -1,6 +1,8 @@
--- a/xen/arch/x86/domain.c Index: xen-4.0.0-testing/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c ===================================================================
@@ -144,14 +144,29 @@ void dump_pageframe_info(struct domain * --- 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 *
printk("Memory pages belonging to domain %u:\n", d->domain_id); printk("Memory pages belonging to domain %u:\n", d->domain_id);
@ -9,17 +11,11 @@
{ {
printk(" DomPage list too long to display\n"); printk(" DomPage list too long to display\n");
} }
else @@ -152,6 +152,15 @@ void dump_pageframe_info(struct domain *
{ {
+ unsigned long total[PGT_type_mask
+ / (PGT_type_mask & -PGT_type_mask) + 1] = {};
+
page_list_for_each ( page, &d->page_list ) page_list_for_each ( page, &d->page_list )
{ {
+ unsigned int index = (page->u.inuse.type_info & PGT_type_mask) + if ( d->tot_pages > 16 )
+ / (PGT_type_mask & -PGT_type_mask);
+
+ if ( ++total[index] > 16 )
+ { + {
+ switch ( page->u.inuse.type_info & PGT_type_mask ) + switch ( page->u.inuse.type_info & PGT_type_mask )
+ { + {

View File

@ -8,7 +8,7 @@
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: xendomains # Provides: xendomains
# Required-Start: $syslog $remote_fs xend # Required-Start: $syslog $remote_fs xend
# Should-Start: iscsi o2cb ocfs2 openais # Should-Start: iscsi o2cb ocfs2
# Required-Stop: $syslog $remote_fs xend # Required-Stop: $syslog $remote_fs xend
# Should-Stop: iscsi # Should-Stop: iscsi
# Default-Start: 3 5 # Default-Start: 3 5
@ -89,11 +89,7 @@ dir_contains_something()
get_name_from_cfg() get_name_from_cfg()
{ {
if grep -q "^name" "$1";then NM=`grep '^name[ ]*=' "$1" | sed -e 's/^name[ ]*=[ ]*['\''"]\([^'\''"]*\)['\''"].*$/\1/'`
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() running_auto_names()
@ -183,16 +179,12 @@ start()
if is_cfg_running "$dom"; then if is_cfg_running "$dom"; then
rc_status -s rc_status -s
else else
if grep -q "^name" "$dom";then xm create --quiet --defconfig "$dom"
xm create --quiet --defconfig "$dom"
elif grep -q "(name .*" "$dom";then
xm create --quiet --config "$dom"
fi
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
rc_failed rc_failed
else else
usleep $XENDOMAINS_CREATE_USLEEP usleep $XENDOMAINS_CREATE_USLEEP
rc_reset rc_reset
fi fi
rc_status -v rc_status -v
fi fi

View File

@ -1,12 +0,0 @@
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')

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:dae429f07e7c09ed55f941d3ad7cbfe39f9e29d93da70df13594acaa2ee9f34b oid sha256:8696f3d4de6d66bce133e78e990c409053ba057fe13c708e763d32b3b4deb2cc
size 23205463 size 23204532

View File

@ -7,9 +7,9 @@ Index: xen-4.0.0-testing/Config.mk
# Mercurial in-tree version, or a local directory, or a git URL. # Mercurial in-tree version, or a local directory, or a git URL.
# CONFIG_QEMU ?= ../qemu-xen.git # CONFIG_QEMU ?= ../qemu-xen.git
-CONFIG_QEMU ?= $(QEMU_REMOTE) -CONFIG_QEMU ?= $(QEMU_REMOTE)
+CONFIG_QEMU ?= ioemu-remote +CONFIG_QEMU ?= ioemu-remote
QEMU_TAG := xen-4.0.0 QEMU_TAG := xen-4.0.0-rc9
#QEMU_TAG ?= f1d909f0f854194f5a40d850886d1413fb8b63c2 #QEMU_TAG ?= f1d909f0f854194f5a40d850886d1413fb8b63c2
@@ -167,9 +167,9 @@ CONFIG_OCAML_XENSTORED ?= n @@ -167,9 +167,9 @@ CONFIG_OCAML_XENSTORED ?= n
# Optional components # Optional components

View File

@ -13,13 +13,11 @@ Index: xen-4.0.0-testing/tools/python/xen/util/blkif.py
if uname.find(":") != -1: if uname.find(":") != -1:
(typ, fn) = uname.split(":", 1) (typ, fn) = uname.split(":", 1)
@@ -88,15 +88,18 @@ def _parse_uname(uname): @@ -88,15 +88,16 @@ def _parse_uname(uname):
if typ == "tap": if typ == "tap":
(taptype, fn) = fn.split(":", 1) (taptype, fn) = fn.split(":", 1)
- return (fn, taptype) - return (fn, taptype)
+ if taptype in ("tapdisk", "ioemu"):
+ (taptype, fn) = fn.split(":", 1)
+ return (fn, (typ, taptype)) + return (fn, (typ, taptype))
+ return (fn, (typ,taptype)) + return (fn, (typ,taptype))

View File

@ -1,32 +1,3 @@
-------------------------------------------------------------------
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 Tue Mar 31 08:09:49 MDT 2010 - carnold@novell.com

View File

@ -1,5 +1,5 @@
# #
# spec file for package xen (Version 4.0.0_21091_01) # spec file for package xen (Version 4.0.0_21087_01)
# #
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
# #
@ -22,9 +22,9 @@ Name: xen
ExclusiveArch: %ix86 x86_64 ExclusiveArch: %ix86 x86_64
%define xvers 4.0 %define xvers 4.0
%define xvermaj 4 %define xvermaj 4
%define changeset 21091 %define changeset 21087
%define xen_build_dir xen-4.0.0-testing %define xen_build_dir xen-4.0.0-testing
%define with_kmp 1 %define with_kmp 0
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 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 %if %suse_version >= 1030
BuildRequires: texlive texlive-latex BuildRequires: texlive texlive-latex
@ -42,7 +42,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit
%if %{?with_kmp}0 %if %{?with_kmp}0
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11 BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
%endif %endif
Version: 4.0.0_21091_01 Version: 4.0.0_21087_01
Release: 1 Release: 1
License: GPLv2 License: GPLv2
Group: System/Kernel Group: System/Kernel
@ -78,13 +78,6 @@ Source24: xenapiusers
# sysconfig hook script for Xen # sysconfig hook script for Xen
Source25: xen-updown.sh Source25: xen-updown.sh
# Upstream patches # 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 # Our patches
Patch300: xen-config.diff Patch300: xen-config.diff
Patch301: xend-config.diff Patch301: xend-config.diff
@ -527,13 +520,6 @@ Authors:
%prep %prep
%setup -q -n %xen_build_dir %setup -q -n %xen_build_dir
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch300 -p1 %patch300 -p1
%patch301 -p1 %patch301 -p1
%patch302 -p1 %patch302 -p1

View File

@ -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 +# Note: This path must be accessible to all VM Servers participating
+# in domain locking, e.g. by specifying a shared mount point. +# in domain locking, e.g. by specifying a shared mount point.
+# Lock is placed in /<xend-domain-lock-path>/<domain-uuid>. +# Lock is placed in /<xend-domain-lock-path>/<domain-uuid>.
+# Default is /var/lib/xen/images/vm_locks/ +# Default is /var/lib/xend/domains/
+# +#
+#(xend-domain-lock-path /var/lib/xend/domains) +#(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' + xend_domain_lock = 'no'
+ +
+ """Default domain lock storage path.""" + """Default domain lock storage path."""
+ xend_domain_lock_path_default = '/var/lib/xen/images/vm_locks' + xend_domain_lock_path_default = '/var/lib/xend/domains'
+ +
+ """Default script to acquire/release domain lock""" + """Default script to acquire/release domain lock"""
+ xend_domain_lock_utility = auxbin.scripts_dir() + "/domain-lock" + xend_domain_lock_utility = auxbin.scripts_dir() + "/domain-lock"