- bnc#556939 - Improve device map cleanup code in domUloader
- bnc# 578910 - xm block-detach does not cleanup xenstore hotplug-cleanup-fix.patch - bnc#579361 - Windows Server 2003 cannot wake up from stand by in sp1 hibernate.patch - fate#308852: XEN CPU Pools cpupools-core.patch cpupools-core-fixup.patch keyhandler-alternative.patch cpu-pools-libxc.patch cpu-pools-python.patch cpu-pools-libxen.patch cpu-pools-xmtest.patch cpu-pools-docs.patch - bnc#558760: Disable scsi devices when PV drivers are loaded. - Update to changeset 20951 Xen 4.0.0 RC4 for sle11-sp1 beta5. - bnc#572146 - SLES11 SP1 beta 2 Xen - BUG: soft lockup - CPU#31 stuck for 61s! [kstop/31:4512] cpuidle-hint-v3.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=31
This commit is contained in:
parent
6c7e8be7db
commit
514b8cf8ec
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||||
@@ -2883,7 +2883,7 @@ class XendDomainInfo:
|
@@ -2902,7 +2902,7 @@ class XendDomainInfo:
|
||||||
|
|
||||||
self.guest_bitsize = self.image.getBitSize()
|
self.guest_bitsize = self.image.getBitSize()
|
||||||
# Make sure there's enough RAM available for the domain
|
# Make sure there's enough RAM available for the domain
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
--- a/tools/ioemu-remote/hw/xen_blktap.c
|
Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
+++ b/tools/ioemu-remote/hw/xen_blktap.c
|
===================================================================
|
||||||
@@ -225,6 +225,7 @@ static int open_disk(struct td_state *s,
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
|
@@ -227,6 +227,7 @@ static int open_disk(struct td_state *s,
|
||||||
BlockDriver* drv;
|
BlockDriver* drv;
|
||||||
char* devname;
|
char* devname;
|
||||||
static int devnumber = 0;
|
static int devnumber = 0;
|
||||||
@ -8,7 +10,7 @@
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
DPRINTF("Opening %s as blktap%d\n", path, devnumber);
|
DPRINTF("Opening %s as blktap%d\n", path, devnumber);
|
||||||
@@ -247,7 +248,7 @@ static int open_disk(struct td_state *s,
|
@@ -249,7 +250,7 @@ static int open_disk(struct td_state *s,
|
||||||
DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
||||||
|
|
||||||
/* Open the image */
|
/* Open the image */
|
||||||
@ -17,9 +19,11 @@
|
|||||||
fprintf(stderr, "Could not open image file %s\n", path);
|
fprintf(stderr, "Could not open image file %s\n", path);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
--- a/tools/ioemu-remote/xenstore.c
|
Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
+++ b/tools/ioemu-remote/xenstore.c
|
===================================================================
|
||||||
@@ -134,7 +134,8 @@ static void insert_media(void *opaque)
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
|
@@ -136,7 +136,8 @@ static void insert_media(void *opaque)
|
||||||
else
|
else
|
||||||
format = &bdrv_raw;
|
format = &bdrv_raw;
|
||||||
|
|
||||||
@ -29,7 +33,7 @@
|
|||||||
#ifdef CONFIG_STUBDOM
|
#ifdef CONFIG_STUBDOM
|
||||||
{
|
{
|
||||||
char *buf, *backend, *params_path, *params;
|
char *buf, *backend, *params_path, *params;
|
||||||
@@ -398,9 +399,9 @@ void xenstore_parse_domain_config(int hv
|
@@ -400,9 +401,9 @@ void xenstore_parse_domain_config(int hv
|
||||||
{
|
{
|
||||||
char **e_danger = NULL;
|
char **e_danger = NULL;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
@ -41,7 +45,7 @@
|
|||||||
unsigned int len, num, hd_index, pci_devid = 0;
|
unsigned int len, num, hd_index, pci_devid = 0;
|
||||||
BlockDriverState *bs;
|
BlockDriverState *bs;
|
||||||
BlockDriver *format;
|
BlockDriver *format;
|
||||||
@@ -462,7 +463,8 @@ void xenstore_parse_domain_config(int hv
|
@@ -464,7 +465,8 @@ void xenstore_parse_domain_config(int hv
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
@ -51,7 +55,7 @@
|
|||||||
/* read the backend path */
|
/* read the backend path */
|
||||||
xenstore_get_backend_path(&bpath, "vbd", danger_path, hvm_domid, e_danger[i]);
|
xenstore_get_backend_path(&bpath, "vbd", danger_path, hvm_domid, e_danger[i]);
|
||||||
if (bpath == NULL)
|
if (bpath == NULL)
|
||||||
@@ -548,6 +550,17 @@ void xenstore_parse_domain_config(int hv
|
@@ -550,6 +552,17 @@ void xenstore_parse_domain_config(int hv
|
||||||
format = &bdrv_raw;
|
format = &bdrv_raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +73,7 @@
|
|||||||
#if 0
|
#if 0
|
||||||
/* Phantom VBDs are disabled because the use of paths
|
/* Phantom VBDs are disabled because the use of paths
|
||||||
* from guest-controlled areas in xenstore is unsafe.
|
* from guest-controlled areas in xenstore is unsafe.
|
||||||
@@ -615,7 +628,7 @@ void xenstore_parse_domain_config(int hv
|
@@ -617,7 +630,7 @@ void xenstore_parse_domain_config(int hv
|
||||||
#ifdef CONFIG_STUBDOM
|
#ifdef CONFIG_STUBDOM
|
||||||
if (pasprintf(&danger_buf, "%s/device/vbd/%s", danger_path, e_danger[i]) == -1)
|
if (pasprintf(&danger_buf, "%s/device/vbd/%s", danger_path, e_danger[i]) == -1)
|
||||||
continue;
|
continue;
|
||||||
@ -78,12 +82,12 @@
|
|||||||
pstrcpy(bs->filename, sizeof(bs->filename), params);
|
pstrcpy(bs->filename, sizeof(bs->filename), params);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -644,7 +657,7 @@ void xenstore_parse_domain_config(int hv
|
@@ -646,7 +659,7 @@ void xenstore_parse_domain_config(int hv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pstrcpy(bs->filename, sizeof(bs->filename), params);
|
pstrcpy(bs->filename, sizeof(bs->filename), params);
|
||||||
- if (bdrv_open2(bs, params, BDRV_O_CACHE_WB /* snapshot and write-back */, format) < 0)
|
- if (bdrv_open2(bs, params, BDRV_O_CACHE_WB /* snapshot and write-back */, format) < 0) {
|
||||||
+ if (bdrv_open2(bs, params, flags|BDRV_O_CACHE_WB /* snapshot and write-back */, format) < 0)
|
+ if (bdrv_open2(bs, params, flags|BDRV_O_CACHE_WB /* snapshot and write-back */, format) < 0) {
|
||||||
fprintf(stderr, "qemu: could not open vbd '%s' or hard disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?", format ? format->format_name : "0");
|
fprintf(stderr, "qemu: could not open vbd '%s' or hard disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?", format ? format->format_name : "0");
|
||||||
}
|
} else {
|
||||||
|
char* snapshot = get_snapshot_name(atoi(e_danger[i]));
|
||||||
|
@ -741,7 +741,7 @@ Index: xen-4.0.0-testing/tools/blktap/lib/blktaplib.h
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/blktap/lib/blktaplib.h
|
--- xen-4.0.0-testing.orig/tools/blktap/lib/blktaplib.h
|
||||||
+++ xen-4.0.0-testing/tools/blktap/lib/blktaplib.h
|
+++ xen-4.0.0-testing/tools/blktap/lib/blktaplib.h
|
||||||
@@ -219,6 +219,7 @@ typedef struct msg_pid {
|
@@ -220,6 +220,7 @@ typedef struct msg_pid {
|
||||||
#define DISK_TYPE_RAM 3
|
#define DISK_TYPE_RAM 3
|
||||||
#define DISK_TYPE_QCOW 4
|
#define DISK_TYPE_QCOW 4
|
||||||
#define DISK_TYPE_QCOW2 5
|
#define DISK_TYPE_QCOW2 5
|
||||||
|
14
blktap.patch
14
blktap.patch
@ -1,9 +1,11 @@
|
|||||||
bug #239173
|
bug #239173
|
||||||
bug #242953
|
bug #242953
|
||||||
|
|
||||||
--- a/tools/python/xen/xend/XendDomainInfo.py
|
Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ b/tools/python/xen/xend/XendDomainInfo.py
|
===================================================================
|
||||||
@@ -3282,7 +3282,7 @@ class XendDomainInfo:
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
|
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||||
|
@@ -3286,7 +3286,7 @@ class XendDomainInfo:
|
||||||
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
||||||
|
|
||||||
vbd = {
|
vbd = {
|
||||||
@ -12,8 +14,10 @@ bug #242953
|
|||||||
'device': BOOTLOADER_LOOPBACK_DEVICE,
|
'device': BOOTLOADER_LOOPBACK_DEVICE,
|
||||||
}
|
}
|
||||||
|
|
||||||
--- a/tools/ioemu-remote/xenstore.c
|
Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
+++ b/tools/ioemu-remote/xenstore.c
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
@@ -397,9 +397,9 @@ void xenstore_parse_domain_config(int hv
|
@@ -397,9 +397,9 @@ void xenstore_parse_domain_config(int hv
|
||||||
{
|
{
|
||||||
char **e_danger = NULL;
|
char **e_danger = NULL;
|
||||||
|
1484
cpu-pools-docs.patch
Normal file
1484
cpu-pools-docs.patch
Normal file
File diff suppressed because it is too large
Load Diff
360
cpu-pools-libxc.patch
Normal file
360
cpu-pools-libxc.patch
Normal file
@ -0,0 +1,360 @@
|
|||||||
|
Index: xen-4.0.0-testing/tools/libxc/Makefile
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/libxc/Makefile
|
||||||
|
+++ xen-4.0.0-testing/tools/libxc/Makefile
|
||||||
|
@@ -8,6 +8,7 @@ CTRL_SRCS-y :=
|
||||||
|
CTRL_SRCS-y += xc_core.c
|
||||||
|
CTRL_SRCS-$(CONFIG_X86) += xc_core_x86.c
|
||||||
|
CTRL_SRCS-$(CONFIG_IA64) += xc_core_ia64.c
|
||||||
|
+CTRL_SRCS-y += xc_cpupool.c
|
||||||
|
CTRL_SRCS-y += xc_domain.c
|
||||||
|
CTRL_SRCS-y += xc_evtchn.c
|
||||||
|
CTRL_SRCS-y += xc_misc.c
|
||||||
|
Index: xen-4.0.0-testing/tools/libxc/xc_cpupool.c
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/libxc/xc_cpupool.c
|
||||||
|
@@ -0,0 +1,154 @@
|
||||||
|
+/******************************************************************************
|
||||||
|
+ * xc_cpupool.c
|
||||||
|
+ *
|
||||||
|
+ * API for manipulating and obtaining information on cpupools.
|
||||||
|
+ *
|
||||||
|
+ * Copyright (c) 2009, J Gross.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <stdarg.h>
|
||||||
|
+#include "xc_private.h"
|
||||||
|
+
|
||||||
|
+int xc_cpupool_create(int xc_handle,
|
||||||
|
+ uint32_t *ppoolid,
|
||||||
|
+ uint32_t sched_id)
|
||||||
|
+{
|
||||||
|
+ int err;
|
||||||
|
+ DECLARE_DOMCTL;
|
||||||
|
+
|
||||||
|
+ domctl.cmd = XEN_DOMCTL_cpupool_op;
|
||||||
|
+ domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_CREATE;
|
||||||
|
+ domctl.u.cpupool_op.cpupool_id = (*ppoolid == 0) ?
|
||||||
|
+ XEN_DOMCTL_CPUPOOL_PAR_ANY : *ppoolid;
|
||||||
|
+ domctl.u.cpupool_op.sched_id = sched_id;
|
||||||
|
+ if ( (err = do_domctl_save(xc_handle, &domctl)) != 0 )
|
||||||
|
+ return err;
|
||||||
|
+
|
||||||
|
+ *ppoolid = domctl.u.cpupool_op.cpupool_id;
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int xc_cpupool_destroy(int xc_handle,
|
||||||
|
+ uint32_t poolid)
|
||||||
|
+{
|
||||||
|
+ DECLARE_DOMCTL;
|
||||||
|
+
|
||||||
|
+ domctl.cmd = XEN_DOMCTL_cpupool_op;
|
||||||
|
+ domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_DESTROY;
|
||||||
|
+ domctl.u.cpupool_op.cpupool_id = poolid;
|
||||||
|
+ return do_domctl_save(xc_handle, &domctl);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int xc_cpupool_getinfo(int xc_handle,
|
||||||
|
+ uint32_t first_poolid,
|
||||||
|
+ uint32_t n_max,
|
||||||
|
+ xc_cpupoolinfo_t *info)
|
||||||
|
+{
|
||||||
|
+ int err = 0;
|
||||||
|
+ int p;
|
||||||
|
+ uint32_t poolid = first_poolid;
|
||||||
|
+ uint8_t local[sizeof (info->cpumap)];
|
||||||
|
+ DECLARE_DOMCTL;
|
||||||
|
+
|
||||||
|
+ memset(info, 0, n_max * sizeof(xc_cpupoolinfo_t));
|
||||||
|
+
|
||||||
|
+ for (p = 0; p < n_max; p++)
|
||||||
|
+ {
|
||||||
|
+ domctl.cmd = XEN_DOMCTL_cpupool_op;
|
||||||
|
+ domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_INFO;
|
||||||
|
+ domctl.u.cpupool_op.cpupool_id = poolid;
|
||||||
|
+ set_xen_guest_handle(domctl.u.cpupool_op.cpumap.bitmap, local);
|
||||||
|
+ domctl.u.cpupool_op.cpumap.nr_cpus = sizeof(info->cpumap) * 8;
|
||||||
|
+
|
||||||
|
+ if ( (err = lock_pages(local, sizeof(local))) != 0 )
|
||||||
|
+ {
|
||||||
|
+ PERROR("Could not lock memory for Xen hypercall");
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ err = do_domctl_save(xc_handle, &domctl);
|
||||||
|
+ unlock_pages(local, sizeof (local));
|
||||||
|
+
|
||||||
|
+ if ( err < 0 )
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ info->cpupool_id = domctl.u.cpupool_op.cpupool_id;
|
||||||
|
+ info->sched_id = domctl.u.cpupool_op.sched_id;
|
||||||
|
+ info->n_dom = domctl.u.cpupool_op.n_dom;
|
||||||
|
+ bitmap_byte_to_64(&(info->cpumap), local, sizeof(local) * 8);
|
||||||
|
+ poolid = domctl.u.cpupool_op.cpupool_id + 1;
|
||||||
|
+ info++;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ( p == 0 )
|
||||||
|
+ return err;
|
||||||
|
+
|
||||||
|
+ return p;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int xc_cpupool_addcpu(int xc_handle,
|
||||||
|
+ uint32_t poolid,
|
||||||
|
+ int cpu)
|
||||||
|
+{
|
||||||
|
+ DECLARE_DOMCTL;
|
||||||
|
+
|
||||||
|
+ domctl.cmd = XEN_DOMCTL_cpupool_op;
|
||||||
|
+ domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_ADDCPU;
|
||||||
|
+ domctl.u.cpupool_op.cpupool_id = poolid;
|
||||||
|
+ domctl.u.cpupool_op.cpu = (cpu < 0) ? XEN_DOMCTL_CPUPOOL_PAR_ANY : cpu;
|
||||||
|
+ return do_domctl_save(xc_handle, &domctl);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int xc_cpupool_removecpu(int xc_handle,
|
||||||
|
+ uint32_t poolid,
|
||||||
|
+ int cpu)
|
||||||
|
+{
|
||||||
|
+ DECLARE_DOMCTL;
|
||||||
|
+
|
||||||
|
+ domctl.cmd = XEN_DOMCTL_cpupool_op;
|
||||||
|
+ domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_RMCPU;
|
||||||
|
+ domctl.u.cpupool_op.cpupool_id = poolid;
|
||||||
|
+ domctl.u.cpupool_op.cpu = (cpu < 0) ? XEN_DOMCTL_CPUPOOL_PAR_ANY : cpu;
|
||||||
|
+ return do_domctl_save(xc_handle, &domctl);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int xc_cpupool_movedomain(int xc_handle,
|
||||||
|
+ uint32_t poolid,
|
||||||
|
+ uint32_t domid)
|
||||||
|
+{
|
||||||
|
+ DECLARE_DOMCTL;
|
||||||
|
+
|
||||||
|
+ domctl.cmd = XEN_DOMCTL_cpupool_op;
|
||||||
|
+ domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_MOVEDOMAIN;
|
||||||
|
+ domctl.u.cpupool_op.cpupool_id = poolid;
|
||||||
|
+ domctl.u.cpupool_op.domid = domid;
|
||||||
|
+ return do_domctl_save(xc_handle, &domctl);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int xc_cpupool_freeinfo(int xc_handle,
|
||||||
|
+ uint64_t *cpumap)
|
||||||
|
+{
|
||||||
|
+ int err;
|
||||||
|
+ uint8_t local[sizeof (*cpumap)];
|
||||||
|
+ DECLARE_DOMCTL;
|
||||||
|
+
|
||||||
|
+ domctl.cmd = XEN_DOMCTL_cpupool_op;
|
||||||
|
+ domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_FREEINFO;
|
||||||
|
+ set_xen_guest_handle(domctl.u.cpupool_op.cpumap.bitmap, local);
|
||||||
|
+ domctl.u.cpupool_op.cpumap.nr_cpus = sizeof(*cpumap) * 8;
|
||||||
|
+
|
||||||
|
+ if ( (err = lock_pages(local, sizeof(local))) != 0 )
|
||||||
|
+ {
|
||||||
|
+ PERROR("Could not lock memory for Xen hypercall");
|
||||||
|
+ return err;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ err = do_domctl_save(xc_handle, &domctl);
|
||||||
|
+ unlock_pages(local, sizeof (local));
|
||||||
|
+
|
||||||
|
+ if (err < 0)
|
||||||
|
+ return err;
|
||||||
|
+
|
||||||
|
+ bitmap_byte_to_64(cpumap, local, sizeof(local) * 8);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
Index: xen-4.0.0-testing/tools/libxc/xc_domain.c
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/libxc/xc_domain.c
|
||||||
|
+++ xen-4.0.0-testing/tools/libxc/xc_domain.c
|
||||||
|
@@ -6,6 +6,7 @@
|
||||||
|
* Copyright (c) 2003, K A Fraser.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+#include <stdarg.h>
|
||||||
|
#include "xc_private.h"
|
||||||
|
#include "xg_save_restore.h"
|
||||||
|
#include <xen/memory.h>
|
||||||
|
@@ -15,15 +16,21 @@ int xc_domain_create(int xc_handle,
|
||||||
|
uint32_t ssidref,
|
||||||
|
xen_domain_handle_t handle,
|
||||||
|
uint32_t flags,
|
||||||
|
- uint32_t *pdomid)
|
||||||
|
+ uint32_t *pdomid, ...)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
+ va_list ap;
|
||||||
|
DECLARE_DOMCTL;
|
||||||
|
|
||||||
|
domctl.cmd = XEN_DOMCTL_createdomain;
|
||||||
|
domctl.domain = (domid_t)*pdomid;
|
||||||
|
domctl.u.createdomain.ssidref = ssidref;
|
||||||
|
domctl.u.createdomain.flags = flags;
|
||||||
|
+ if ( flags & XEN_DOMCTL_CDF_pool ) {
|
||||||
|
+ va_start(ap, pdomid);
|
||||||
|
+ domctl.u.createdomain.cpupool = va_arg(ap, uint32_t);
|
||||||
|
+ va_end(ap);
|
||||||
|
+ }
|
||||||
|
memcpy(domctl.u.createdomain.handle, handle, sizeof(xen_domain_handle_t));
|
||||||
|
if ( (err = do_domctl(xc_handle, &domctl)) != 0 )
|
||||||
|
return err;
|
||||||
|
@@ -206,6 +213,7 @@ int xc_domain_getinfo(int xc_handle,
|
||||||
|
info->cpu_time = domctl.u.getdomaininfo.cpu_time;
|
||||||
|
info->nr_online_vcpus = domctl.u.getdomaininfo.nr_online_vcpus;
|
||||||
|
info->max_vcpu_id = domctl.u.getdomaininfo.max_vcpu_id;
|
||||||
|
+ info->cpupool = domctl.u.getdomaininfo.cpupool;
|
||||||
|
|
||||||
|
memcpy(info->handle, domctl.u.getdomaininfo.handle,
|
||||||
|
sizeof(xen_domain_handle_t));
|
||||||
|
Index: xen-4.0.0-testing/tools/libxc/xc_private.h
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/libxc/xc_private.h
|
||||||
|
+++ xen-4.0.0-testing/tools/libxc/xc_private.h
|
||||||
|
@@ -164,6 +164,19 @@ static inline int do_domctl(int xc_handl
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static inline int do_domctl_save(int xc_handle, struct xen_domctl *domctl)
|
||||||
|
+{
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ do
|
||||||
|
+ {
|
||||||
|
+ ret = do_domctl(xc_handle, domctl);
|
||||||
|
+ }
|
||||||
|
+ while ( (ret < 0 ) && (errno == EAGAIN) );
|
||||||
|
+
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static inline int do_sysctl(int xc_handle, struct xen_sysctl *sysctl)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
Index: xen-4.0.0-testing/tools/libxc/xenctrl.h
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/libxc/xenctrl.h
|
||||||
|
+++ xen-4.0.0-testing/tools/libxc/xenctrl.h
|
||||||
|
@@ -171,6 +171,7 @@ typedef struct xc_dominfo {
|
||||||
|
unsigned int nr_online_vcpus;
|
||||||
|
unsigned int max_vcpu_id;
|
||||||
|
xen_domain_handle_t handle;
|
||||||
|
+ unsigned int cpupool;
|
||||||
|
} xc_dominfo_t;
|
||||||
|
|
||||||
|
typedef xen_domctl_getdomaininfo_t xc_domaininfo_t;
|
||||||
|
@@ -207,7 +208,7 @@ int xc_domain_create(int xc_handle,
|
||||||
|
uint32_t ssidref,
|
||||||
|
xen_domain_handle_t handle,
|
||||||
|
uint32_t flags,
|
||||||
|
- uint32_t *pdomid);
|
||||||
|
+ uint32_t *pdomid, ...);
|
||||||
|
|
||||||
|
|
||||||
|
/* Functions to produce a dump of a given domain
|
||||||
|
@@ -500,6 +501,100 @@ int xc_domain_setdebugging(int xc_handle
|
||||||
|
unsigned int enable);
|
||||||
|
|
||||||
|
/*
|
||||||
|
+ * CPUPOOL MANAGEMENT FUNCTIONS
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+typedef struct xc_cpupoolinfo {
|
||||||
|
+ uint32_t cpupool_id;
|
||||||
|
+ uint32_t sched_id;
|
||||||
|
+ uint32_t n_dom;
|
||||||
|
+ uint64_t cpumap;
|
||||||
|
+} xc_cpupoolinfo_t;
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Create a new cpupool.
|
||||||
|
+ *
|
||||||
|
+ * @parm xc_handle a handle to an open hypervisor interface
|
||||||
|
+ * @parm ppoolid pointer to the new cpupool id (in/out)
|
||||||
|
+ * @parm sched_id id of scheduler to use for pool
|
||||||
|
+ * return 0 on success, -1 on failure
|
||||||
|
+ */
|
||||||
|
+int xc_cpupool_create(int xc_handle,
|
||||||
|
+ uint32_t *ppoolid,
|
||||||
|
+ uint32_t sched_id);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Destroy a cpupool. Pool must be unused and have no cpu assigned.
|
||||||
|
+ *
|
||||||
|
+ * @parm xc_handle a handle to an open hypervisor interface
|
||||||
|
+ * @parm poolid id of the cpupool to destroy
|
||||||
|
+ * return 0 on success, -1 on failure
|
||||||
|
+ */
|
||||||
|
+int xc_cpupool_destroy(int xc_handle,
|
||||||
|
+ uint32_t poolid);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Get cpupool info. Returns info for up to the specified number of cpupools
|
||||||
|
+ * starting at the given id.
|
||||||
|
+ * @parm xc_handle a handle to an open hypervisor interface
|
||||||
|
+ * @parm first_poolid lowest id for which info is returned
|
||||||
|
+ * @parm n_max maximum number of cpupools to return info
|
||||||
|
+ * @parm info pointer to xc_cpupoolinfo_t array
|
||||||
|
+ * return number of cpupool infos
|
||||||
|
+ */
|
||||||
|
+int xc_cpupool_getinfo(int xc_handle,
|
||||||
|
+ uint32_t first_poolid,
|
||||||
|
+ uint32_t n_max,
|
||||||
|
+ xc_cpupoolinfo_t *info);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Add cpu to a cpupool. cpu may be -1 indicating the first unassigned.
|
||||||
|
+ *
|
||||||
|
+ * @parm xc_handle a handle to an open hypervisor interface
|
||||||
|
+ * @parm poolid id of the cpupool
|
||||||
|
+ * @parm cpu cpu number to add
|
||||||
|
+ * return 0 on success, -1 on failure
|
||||||
|
+ */
|
||||||
|
+int xc_cpupool_addcpu(int xc_handle,
|
||||||
|
+ uint32_t poolid,
|
||||||
|
+ int cpu);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Remove cpu from cpupool. cpu may be -1 indicating the last cpu of the pool.
|
||||||
|
+ *
|
||||||
|
+ * @parm xc_handle a handle to an open hypervisor interface
|
||||||
|
+ * @parm poolid id of the cpupool
|
||||||
|
+ * @parm cpu cpu number to remove
|
||||||
|
+ * return 0 on success, -1 on failure
|
||||||
|
+ */
|
||||||
|
+int xc_cpupool_removecpu(int xc_handle,
|
||||||
|
+ uint32_t poolid,
|
||||||
|
+ int cpu);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Move domain to another cpupool.
|
||||||
|
+ *
|
||||||
|
+ * @parm xc_handle a handle to an open hypervisor interface
|
||||||
|
+ * @parm poolid id of the destination cpupool
|
||||||
|
+ * @parm domid id of the domain to move
|
||||||
|
+ * return 0 on success, -1 on failure
|
||||||
|
+ */
|
||||||
|
+int xc_cpupool_movedomain(int xc_handle,
|
||||||
|
+ uint32_t poolid,
|
||||||
|
+ uint32_t domid);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Return map of cpus not in any cpupool.
|
||||||
|
+ *
|
||||||
|
+ * @parm xc_handle a handle to an open hypervisor interface
|
||||||
|
+ * @parm cpumap pointer where to store the cpumap
|
||||||
|
+ * return 0 on success, -1 on failure
|
||||||
|
+ */
|
||||||
|
+int xc_cpupool_freeinfo(int xc_handle,
|
||||||
|
+ uint64_t *cpumap);
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
* EVENT CHANNEL FUNCTIONS
|
||||||
|
*/
|
||||||
|
|
2180
cpu-pools-libxen.patch
Normal file
2180
cpu-pools-libxen.patch
Normal file
File diff suppressed because it is too large
Load Diff
2543
cpu-pools-python.patch
Normal file
2543
cpu-pools-python.patch
Normal file
File diff suppressed because it is too large
Load Diff
838
cpu-pools-xmtest.patch
Normal file
838
cpu-pools-xmtest.patch
Normal file
@ -0,0 +1,838 @@
|
|||||||
|
Index: xen-4.0.0-testing/tools/xm-test/configure.ac
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/xm-test/configure.ac
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/configure.ac
|
||||||
|
@@ -161,6 +161,7 @@ AC_CONFIG_FILES([
|
||||||
|
tests/vtpm/Makefile
|
||||||
|
tests/xapi/Makefile
|
||||||
|
tests/enforce_dom0_cpus/Makefile
|
||||||
|
+ tests/cpupool/Makefile
|
||||||
|
lib/XmTestReport/xmtest.py
|
||||||
|
lib/XmTestLib/config.py
|
||||||
|
])
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/grouptest/cpupool
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/grouptest/cpupool
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+cpupool
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/lib/XmTestLib/NetConfig.py
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/xm-test/lib/XmTestLib/NetConfig.py
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/lib/XmTestLib/NetConfig.py
|
||||||
|
@@ -56,17 +56,21 @@ def getXendNetConfig():
|
||||||
|
val = pin.get_val()
|
||||||
|
while val[0] != 'network-script':
|
||||||
|
val = pin.get_val()
|
||||||
|
-
|
||||||
|
- # split network command into script name and its parameters
|
||||||
|
- sub_val = val[1].split()
|
||||||
|
- if sub_val[0] == "network-bridge":
|
||||||
|
+
|
||||||
|
+ if val[0] != 'network-script' or len(val) < 2:
|
||||||
|
+ # entry network-script not found or no type specified
|
||||||
|
netenv = "bridge"
|
||||||
|
- elif sub_val[0] == "network-route":
|
||||||
|
- netenv = "route"
|
||||||
|
- elif sub_val[0] == "network-nat":
|
||||||
|
- netenv = "nat"
|
||||||
|
else:
|
||||||
|
- raise NetworkError("Failed to get network env from xend config")
|
||||||
|
+ # split network command into script name and its parameters
|
||||||
|
+ sub_val = val[1].split()
|
||||||
|
+ if sub_val[0] == "network-bridge":
|
||||||
|
+ netenv = "bridge"
|
||||||
|
+ elif sub_val[0] == "network-route":
|
||||||
|
+ netenv = "route"
|
||||||
|
+ elif sub_val[0] == "network-nat":
|
||||||
|
+ netenv = "nat"
|
||||||
|
+ else:
|
||||||
|
+ raise NetworkError("Failed to get network env from xend config")
|
||||||
|
|
||||||
|
configfile.close()
|
||||||
|
return netenv
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/lib/XmTestLib/XenDomain.py
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/xm-test/lib/XmTestLib/XenDomain.py
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/lib/XmTestLib/XenDomain.py
|
||||||
|
@@ -181,6 +181,7 @@ class XenDomain:
|
||||||
|
|
||||||
|
if not self.isManaged:
|
||||||
|
ret, output = traceCommand("xm create %s" % self.config)
|
||||||
|
+ print self.config
|
||||||
|
else:
|
||||||
|
ret, output = traceCommand("xm new %s" % self.config)
|
||||||
|
if ret != 0:
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/runtest.sh
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/xm-test/runtest.sh
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/runtest.sh
|
||||||
|
@@ -91,7 +91,7 @@ runnable_tests() {
|
||||||
|
echo "Error: ramdisk/initrd.img is from an old version, or is not for this "
|
||||||
|
echo "architecture ($ARCH)."
|
||||||
|
echo "You need to build a ramdisk from at least ${XM_TEST_MAJ}.${XM_TEST_MIN}"
|
||||||
|
- exit 1
|
||||||
|
+ #exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# See if xend is running
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/Makefile.am
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/xm-test/tests/Makefile.am
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/Makefile.am
|
||||||
|
@@ -28,7 +28,8 @@ SUBDIRS = \
|
||||||
|
vcpu-pin \
|
||||||
|
vtpm \
|
||||||
|
enforce_dom0_cpus \
|
||||||
|
- save restore migrate
|
||||||
|
+ save restore migrate \
|
||||||
|
+ cpupool
|
||||||
|
|
||||||
|
EXTRA_DIST = $(SUBDIRS) Makefile.am.template
|
||||||
|
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/cpupool/01_cpupool_basic_pos.py
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/cpupool/01_cpupool_basic_pos.py
|
||||||
|
@@ -0,0 +1,72 @@
|
||||||
|
+#!/usr/bin/python
|
||||||
|
+
|
||||||
|
+import sys
|
||||||
|
+import re
|
||||||
|
+import time
|
||||||
|
+
|
||||||
|
+from XmTestLib import *
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Check output of xm info. It must include field 'free_cpus'
|
||||||
|
+# The value must be between 0 - nr_cpus
|
||||||
|
+#
|
||||||
|
+free_cpus = getInfo("free_cpus")
|
||||||
|
+if free_cpus == "":
|
||||||
|
+ FAIL("Missing 'free_cpus' entry in xm info output")
|
||||||
|
+if int(free_cpus) not in range(int(getInfo("nr_cpus")) + 1):
|
||||||
|
+ FAIL("Wrong value of 'free_cpus' (%s)" % int(free_cpus))
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Check output of xm list -l. It must contain the key 'pool_name'
|
||||||
|
+# If XM_USES_API is set, output must also contain 'cpu_pool'.
|
||||||
|
+#
|
||||||
|
+status, output = traceCommand("xm list -l Domain-0")
|
||||||
|
+if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+if not re.search("pool_name Pool-0", output):
|
||||||
|
+ FAIL("Missing or wrong attribute 'pool_name' in output of 'xm list -l'")
|
||||||
|
+if os.getenv("XM_USES_API"):
|
||||||
|
+ if not re.search("cpu_pool (.+)", output):
|
||||||
|
+ FAIL("Missing or wrong attribute 'cpu_pool' in output of 'xm list -l'")
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Test pool selection option of xm list.
|
||||||
|
+#
|
||||||
|
+status, output = traceCommand("xm list --pool=Pool-0")
|
||||||
|
+if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+if not re.search("Domain-0 +0 +", output):
|
||||||
|
+ FAIL("Missing 'Domain-0' in Pool-0")
|
||||||
|
+
|
||||||
|
+status, output = traceCommand("xm list --pool=Dummy-Pool")
|
||||||
|
+if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+if len(output.splitlines()) != 1:
|
||||||
|
+ FAIL("Wrong pool selection; output must be empty")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Create a Domain without pool specification.
|
||||||
|
+# Default pool is Pool-0
|
||||||
|
+#
|
||||||
|
+name = "TestDomPool-1"
|
||||||
|
+domain = XmTestDomain(name=name)
|
||||||
|
+try:
|
||||||
|
+ domain.start(noConsole=True)
|
||||||
|
+except DomainError, ex:
|
||||||
|
+ FAIL(str(e))
|
||||||
|
+
|
||||||
|
+if not isDomainRunning(name):
|
||||||
|
+ FAIL("Couldn't start domain without pool specification")
|
||||||
|
+
|
||||||
|
+status, output = traceCommand("xm list -l %s" % name)
|
||||||
|
+if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+if not re.search("pool_name Pool-0", output):
|
||||||
|
+ FAIL("Missing or wrong attribute 'pool_name' in output of 'xm list -l %s'" % name)
|
||||||
|
+
|
||||||
|
+destroyAllDomUs()
|
||||||
|
+
|
||||||
|
+
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/cpupool/02_cpupool_manage_pos.py
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/cpupool/02_cpupool_manage_pos.py
|
||||||
|
@@ -0,0 +1,152 @@
|
||||||
|
+#!/usr/bin/python
|
||||||
|
+
|
||||||
|
+# Description:
|
||||||
|
+# Verify commands pool-new and pool-delete.
|
||||||
|
+#
|
||||||
|
+import sys
|
||||||
|
+import re
|
||||||
|
+import time
|
||||||
|
+
|
||||||
|
+from XmTestLib import *
|
||||||
|
+from pools import *
|
||||||
|
+
|
||||||
|
+checkRequirements()
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Check output of xm pool-list (of Pool-0)
|
||||||
|
+#
|
||||||
|
+status, output = traceCommand("xm pool-list Pool-0")
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("xm pool-list failed, rc %s" % status)
|
||||||
|
+lines = output.splitlines()
|
||||||
|
+if len(lines) != 2:
|
||||||
|
+ FAIL("Wrong output of xm pool-list Pool-0 (%s)" % lines)
|
||||||
|
+if not re.search("Pool-0 +[0-9]+ +credit +y +[0-9]", lines[1]):
|
||||||
|
+ FAIL("Wrong output of xm pool-list Pool-0 (%s)" % lines)
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Check output of xm pool-list -l (of Pool-0)
|
||||||
|
+#
|
||||||
|
+status, output = traceCommand("xm pool-list Pool-0 -l")
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("xm pool-list failed, rc %s" % status)
|
||||||
|
+if not re.search("name_label Pool-0", output):
|
||||||
|
+ FAIL("Wrong output of xm pool-list Pool-0 -l; missing 'name_label'")
|
||||||
|
+if not re.search("started_VMs 00000000-0000-0000-0000-000000000000", output):
|
||||||
|
+ FAIL("Wrong output of xm pool-list Pool-0 -l; missing 'started_VMs'")
|
||||||
|
+if not re.search("started_VM_names Domain-0", output):
|
||||||
|
+ FAIL("Wrong output of xm pool-list Pool-0 -l; missing 'started_VMi_names'")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Create a pool from pool1.cfg
|
||||||
|
+#
|
||||||
|
+cmd = "xm pool-new pool1.cfg name=Pool-1"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+
|
||||||
|
+status, output = traceCommand("xm pool-list")
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("xm pool-list failed, rc %s" % status)
|
||||||
|
+if not re.search("Pool-1 +1 +credit", output):
|
||||||
|
+ FAIL("Missing or wrong pool definition for 'Pool-1'")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# check persistence of pool; restart xend
|
||||||
|
+#
|
||||||
|
+restartXend()
|
||||||
|
+
|
||||||
|
+status, output = traceCommand("xm pool-list")
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("xm pool-list failed, rc %s" % status)
|
||||||
|
+if not re.search("Pool-1 +1 +credit", output):
|
||||||
|
+ FAIL("Missing or wrong pool definition for 'Pool-1'")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Delete pool
|
||||||
|
+#
|
||||||
|
+deletePool("Pool-1")
|
||||||
|
+status, output = traceCommand("xm pool-list")
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("xm pool-list failed, rc %s" % status)
|
||||||
|
+if re.search("Pool-1 +1 +credit", output):
|
||||||
|
+ FAIL("'Pool-1' not deleted")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# create / start / check / destroy / delete a managed pool
|
||||||
|
+#
|
||||||
|
+cmd = "xm pool-new pool1.cfg"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-start Pool-1"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-list -l Pool-1"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+if not re.search("host_CPU_numbers +[0-9]", output):
|
||||||
|
+ FAIL("'Pool-1' not activated")
|
||||||
|
+
|
||||||
|
+restartXend()
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-list -l Pool-1"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+if not re.search("host_CPU_numbers +[0-9]", output):
|
||||||
|
+ FAIL("'Pool-1' not activated")
|
||||||
|
+
|
||||||
|
+destroyPool("Pool-1")
|
||||||
|
+deletePool("Pool-1")
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-list Pool-1"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+if re.search("Pool-1 +1 +credit", output):
|
||||||
|
+ FAIL("'Pool-1' not deleted")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# create / check / destroy a unmanaged pool
|
||||||
|
+#
|
||||||
|
+cmd = "xm pool-create pool1.cfg"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-list -l Pool-1"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+if not re.search("host_CPU_numbers +[0-9]", output):
|
||||||
|
+ FAIL("'Pool-1' not activated")
|
||||||
|
+
|
||||||
|
+restartXend()
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-list -l Pool-1"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+if not re.search("host_CPU_numbers +[0-9]", output):
|
||||||
|
+ FAIL("'Pool-1' not activated")
|
||||||
|
+
|
||||||
|
+destroyPool("Pool-1", True)
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-list"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+if re.search("Pool-1", output):
|
||||||
|
+ FAIL("'Pool-1' not deleted")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/cpupool/03_cpupool_domain.py
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/cpupool/03_cpupool_domain.py
|
||||||
|
@@ -0,0 +1,126 @@
|
||||||
|
+#!/usr/bin/python
|
||||||
|
+
|
||||||
|
+import sys
|
||||||
|
+import re
|
||||||
|
+import time
|
||||||
|
+
|
||||||
|
+from XmTestLib import *
|
||||||
|
+from pools import *
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+checkRequirements()
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# create Pool-1 with 1 CPU and start a VM
|
||||||
|
+#
|
||||||
|
+createStdPool()
|
||||||
|
+name = "TestDomPool-1"
|
||||||
|
+domain = XmTestDomain(extraConfig={'pool' : 'Pool-1'}, name=name)
|
||||||
|
+try:
|
||||||
|
+ domain.start(noConsole=True)
|
||||||
|
+except DomainError, ex:
|
||||||
|
+ FAIL(str(e))
|
||||||
|
+
|
||||||
|
+cmd = "xm list --pool=Pool-1"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+if not re.search(name, output):
|
||||||
|
+ FAIL("%s; missing '%s' in Pool-1" % (cmd,name))
|
||||||
|
+
|
||||||
|
+domain.stop()
|
||||||
|
+waitForDomain(name)
|
||||||
|
+destroyPool("Pool-1", True)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# create Pool-1 with 1 CPU, add a second CPU
|
||||||
|
+# start a VM (with vpcu=3) add a third CPU
|
||||||
|
+# remove 2 CPUs from pool
|
||||||
|
+# create Pool-1 with 1 CPU and start a VM
|
||||||
|
+#
|
||||||
|
+pool_names = ['Pool-1', 'Pool-2']
|
||||||
|
+createStdPool({'name' : pool_names[0], 'cpus' : '"1"'})
|
||||||
|
+name = "TestDomPool-1"
|
||||||
|
+cmd = "xm pool-cpu-add Pool-1 2"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+
|
||||||
|
+domain = XmTestDomain(extraConfig={ 'pool' : 'Pool-1'}, name=name)
|
||||||
|
+try:
|
||||||
|
+ domain.start(noConsole=True)
|
||||||
|
+except DomainError, ex:
|
||||||
|
+ FAIL(str(e))
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-cpu-add Pool-1 3"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+
|
||||||
|
+cmd = "xm pool-cpu-remove Pool-1 2"
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+cmd = "xm pool-cpu-remove Pool-1 3"
|
||||||
|
+
|
||||||
|
+status, output = traceCommand(cmd)
|
||||||
|
+if status != 0:
|
||||||
|
+ FAIL("%s failed, rc %s" % (cmd,status))
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+createStdPool({'name' : pool_names[1]})
|
||||||
|
+name2 = "TestDomPool-2"
|
||||||
|
+domain2 = XmTestDomain(extraConfig={ 'pool' : 'Pool-2'}, name=name2)
|
||||||
|
+try:
|
||||||
|
+ domain2.start(noConsole=True)
|
||||||
|
+except DomainError, ex:
|
||||||
|
+ FAIL(str(e))
|
||||||
|
+
|
||||||
|
+domain2.stop()
|
||||||
|
+domain.stop()
|
||||||
|
+
|
||||||
|
+waitForDomain(name)
|
||||||
|
+waitForDomain(name2)
|
||||||
|
+
|
||||||
|
+for pool in pool_names:
|
||||||
|
+ destroyPool(pool, True)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Create 2 pools with 1 cpu per pool.
|
||||||
|
+# Create three domains in each pool, with 1,2,3 VCPUs
|
||||||
|
+# Switch a thrid cpu between the pools.
|
||||||
|
+#
|
||||||
|
+pool_names = ['Pool-1', 'Pool-2']
|
||||||
|
+domains = {}
|
||||||
|
+cpu=3
|
||||||
|
+
|
||||||
|
+for pool in pool_names:
|
||||||
|
+ createStdPool({'name' : pool})
|
||||||
|
+ for dom_nr in range(3):
|
||||||
|
+ name = "TestDom%s-%s" % (pool, dom_nr)
|
||||||
|
+ domains[name] = XmTestDomain(extraConfig={'pool' : pool},
|
||||||
|
+ name=name)
|
||||||
|
+ try:
|
||||||
|
+ domains[name].start(noConsole=True)
|
||||||
|
+ except DomainError, ex:
|
||||||
|
+ FAIL(str(ex))
|
||||||
|
+
|
||||||
|
+cmd_add_1 = "xm pool-cpu-add Pool-1 %s" % cpu
|
||||||
|
+cmd_rem_1 = "xm pool-cpu-remove Pool-1 %s" % cpu
|
||||||
|
+cmd_add_2 = "xm pool-cpu-add Pool-2 %s" % cpu
|
||||||
|
+cmd_rem_2 = "xm pool-cpu-remove Pool-2 %s" % cpu
|
||||||
|
+
|
||||||
|
+for i in range(25):
|
||||||
|
+ traceCommand(cmd_add_1)
|
||||||
|
+ traceCommand(cmd_rem_1)
|
||||||
|
+ traceCommand(cmd_add_2)
|
||||||
|
+ traceCommand(cmd_rem_2)
|
||||||
|
+
|
||||||
|
+destroyAllDomUs()
|
||||||
|
+for pool in pool_names:
|
||||||
|
+ destroyPool(pool, True)
|
||||||
|
+
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/cpupool/04_cpupool_migrate.py
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/cpupool/04_cpupool_migrate.py
|
||||||
|
@@ -0,0 +1,84 @@
|
||||||
|
+#!/usr/bin/python
|
||||||
|
+
|
||||||
|
+import sys
|
||||||
|
+import re
|
||||||
|
+import time
|
||||||
|
+
|
||||||
|
+from XmTestLib import *
|
||||||
|
+from pools import *
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Check requirements of test case
|
||||||
|
+# - min 2 free cpus (not assigned to a pool)
|
||||||
|
+#
|
||||||
|
+if int(getInfo("free_cpus")) < 2:
|
||||||
|
+ SKIP("Need at least 2 free cpus")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Create 2 pools with one cpu per pool.
|
||||||
|
+#
|
||||||
|
+createStdPool({'name' : 'Pool-1'})
|
||||||
|
+createStdPool({'name' : 'Pool-2'})
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Create a domain with vcpus=1 in Pool-0.
|
||||||
|
+# Migrate it to one of the created pools afterwards to the other pool
|
||||||
|
+#
|
||||||
|
+name = "TestDomPool-1"
|
||||||
|
+domain = XmTestDomain(extraConfig={'pool' : 'Pool-0'}, name=name)
|
||||||
|
+try:
|
||||||
|
+ domain.start(noConsole=True)
|
||||||
|
+except DomainError, ex:
|
||||||
|
+ FAIL(str(e))
|
||||||
|
+if not domInPool(name, 'Pool-0'):
|
||||||
|
+ FAIL("missing '%s' in Pool-0" % name)
|
||||||
|
+
|
||||||
|
+if not migrateToPool(name, 'Pool-1'):
|
||||||
|
+ FAIL("missing '%s' in Pool-1" % name)
|
||||||
|
+if not migrateToPool(name, 'Pool-2'):
|
||||||
|
+ FAIL("missing '%s' in Pool-2" % name)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Create a domain in Pool-0.
|
||||||
|
+# Migrate it to one of the created pools afterwards to the other pool
|
||||||
|
+#
|
||||||
|
+name = "TestDomPool-2"
|
||||||
|
+domain = XmTestDomain(extraConfig={'pool' : 'Pool-0'}, name=name)
|
||||||
|
+try:
|
||||||
|
+ domain.start(noConsole=True)
|
||||||
|
+except DomainError, ex:
|
||||||
|
+ FAIL(str(e))
|
||||||
|
+if not domInPool(name, 'Pool-0'):
|
||||||
|
+ FAIL("missing '%s' in Pool-0" % name)
|
||||||
|
+
|
||||||
|
+if not migrateToPool(name, 'Pool-1'):
|
||||||
|
+ FAIL("missing '%s' in Pool-1" % name)
|
||||||
|
+if not migrateToPool(name, 'Pool-2'):
|
||||||
|
+ FAIL("missing '%s' in Pool-2" % name)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Migrate other domains between pools
|
||||||
|
+#
|
||||||
|
+for cnt in range(10):
|
||||||
|
+ for pool in ['Pool-0', 'Pool-1', 'Pool-2']:
|
||||||
|
+ for domain in getRunningDomains():
|
||||||
|
+ if domain != 'Domain-0':
|
||||||
|
+ if not migrateToPool(domain, pool):
|
||||||
|
+ FAIL("missing '%s' in %s" % (domain, pool))
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Cleanup
|
||||||
|
+#
|
||||||
|
+cleanupPoolsDomains()
|
||||||
|
+
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/cpupool/Makefile.am
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/cpupool/Makefile.am
|
||||||
|
@@ -0,0 +1,22 @@
|
||||||
|
+SUBDIRS =
|
||||||
|
+
|
||||||
|
+TESTS = 01_cpupool_basic_pos.test \
|
||||||
|
+ 02_cpupool_manage_pos.test \
|
||||||
|
+ 03_cpupool_domain.test \
|
||||||
|
+ 04_cpupool_migrate.test
|
||||||
|
+
|
||||||
|
+EXTRA_DIST = $(TESTS)
|
||||||
|
+
|
||||||
|
+TESTS_ENVIRONMENT=@TENV@
|
||||||
|
+
|
||||||
|
+%.test: %.py
|
||||||
|
+ cp $< $@
|
||||||
|
+ chmod +x $@
|
||||||
|
+
|
||||||
|
+clean-local: am_config_clean-local
|
||||||
|
+
|
||||||
|
+am_config_clean-local:
|
||||||
|
+ rm -f *test
|
||||||
|
+ rm -f *log
|
||||||
|
+ rm -f *~
|
||||||
|
+
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/cpupool/pool1.cfg
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/cpupool/pool1.cfg
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+name="Pool-1"
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/cpupool/pools.py
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/cpupool/pools.py
|
||||||
|
@@ -0,0 +1,78 @@
|
||||||
|
+#!/usr/bin/python
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+from XmTestLib import *
|
||||||
|
+
|
||||||
|
+def checkRequirements():
|
||||||
|
+ # - min 4 cpus
|
||||||
|
+ # - only Pool-0 defined
|
||||||
|
+ nr_cpus = int(getInfo("nr_cpus"))
|
||||||
|
+ if nr_cpus < 4:
|
||||||
|
+ SKIP("Need at least 4 cpus for pool tests")
|
||||||
|
+ if len(getPoolList()) > 1:
|
||||||
|
+ SKIP("More than one pool already defined")
|
||||||
|
+
|
||||||
|
+ # reduce Pool-0 to CPU-0
|
||||||
|
+ traceCommand("xm pool-cpu-add Pool-0 0")
|
||||||
|
+ for i in range(1, nr_cpus):
|
||||||
|
+ traceCommand("xm pool-cpu-remove Pool-0 %s" % i)
|
||||||
|
+
|
||||||
|
+def createStdPool(add_param=None):
|
||||||
|
+ cmd = "xm pool-create pool1.cfg "
|
||||||
|
+ if add_param:
|
||||||
|
+ for k,v in add_param.items():
|
||||||
|
+ cmd += "%s=%s " % (k,v)
|
||||||
|
+ status, output = traceCommand(cmd)
|
||||||
|
+ if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+
|
||||||
|
+def deletePool(name):
|
||||||
|
+ cmd = "xm pool-delete %s" % name
|
||||||
|
+ status, output = traceCommand(cmd)
|
||||||
|
+ if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+
|
||||||
|
+def destroyPool(name, delete_on_xenapi=False):
|
||||||
|
+ cmd = "xm pool-destroy %s" % name
|
||||||
|
+ status, output = traceCommand(cmd)
|
||||||
|
+ if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+ if os.getenv("XM_USES_API") and delete_on_xenapi:
|
||||||
|
+ deletePool(name)
|
||||||
|
+
|
||||||
|
+def getPoolList():
|
||||||
|
+ status, output = traceCommand("xm pool-list")
|
||||||
|
+ if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+ lines = output.splitlines()
|
||||||
|
+ pools = []
|
||||||
|
+ for l in lines[1:]:
|
||||||
|
+ elms = l.split(" ", 1)
|
||||||
|
+ pools.append(elms[0]);
|
||||||
|
+ return pools
|
||||||
|
+
|
||||||
|
+def domInPool(dom, pool):
|
||||||
|
+ cmd = "xm list --pool=%s" % pool
|
||||||
|
+ status, output = traceCommand(cmd)
|
||||||
|
+ if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+ return re.search(dom, output) != None
|
||||||
|
+
|
||||||
|
+def migrateToPool(dom, pool):
|
||||||
|
+ status, output = traceCommand("xm pool-migrate %s %s" % (dom, pool))
|
||||||
|
+ if status != 0 or "Traceback" in output:
|
||||||
|
+ raise XmError("xm failed", trace=output, status=status)
|
||||||
|
+ return domInPool(dom, pool)
|
||||||
|
+
|
||||||
|
+def cleanupPoolsDomains():
|
||||||
|
+ destroyAllDomUs()
|
||||||
|
+ for pool in getPoolList():
|
||||||
|
+ if pool != 'Pool-0':
|
||||||
|
+ destroyPool(pool, True)
|
||||||
|
+
|
||||||
|
+def waitForDomain(name):
|
||||||
|
+ for i in range(10):
|
||||||
|
+ if not isDomainRunning(name):
|
||||||
|
+ break
|
||||||
|
+ time.sleep(1)
|
||||||
|
+
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/xapi/20_xapi-cpu_pool_basic.py
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/xapi/20_xapi-cpu_pool_basic.py
|
||||||
|
@@ -0,0 +1,157 @@
|
||||||
|
+#!/usr/bin/python
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# Basic Pool creation tests
|
||||||
|
+
|
||||||
|
+from XmTestLib import xapi
|
||||||
|
+from XmTestLib import *
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+session = xapi.connect()
|
||||||
|
+host_ref = session.xenapi.host.get_all()[0]
|
||||||
|
+pools = session.xenapi.host.get_resident_cpu_pools(host_ref)
|
||||||
|
+if len(pools) != 1:
|
||||||
|
+ SKIP("Only Pool-0 have to be created for this test")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# check extension of host object
|
||||||
|
+host_recs = session.xenapi.host.get_all_records()
|
||||||
|
+host_rec = host_recs[host_recs.keys()[0]]
|
||||||
|
+if len(host_recs.keys()) != 1 or not host_rec.has_key("resident_cpu_pools") or \
|
||||||
|
+ len(host_rec["resident_cpu_pools"]) != 1:
|
||||||
|
+ FAIL("Missing or wrong field 'resident_cpu_pools' in host record")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# check extension of host_cpu object
|
||||||
|
+host_cpu_recs = session.xenapi.host_cpu.get_all_records()
|
||||||
|
+assigned_cpus = [ cpu for cpu in host_cpu_recs.values() if len(cpu["cpu_pool"]) > 0 ]
|
||||||
|
+unassigned_cpus = session.xenapi.host_cpu.get_unassigned_cpus()
|
||||||
|
+if len(host_cpu_recs) - len(assigned_cpus) != len(unassigned_cpus):
|
||||||
|
+ FAIL("Wrong host_cpu count values; CPUS total: %d, CPUS ass: %d, CPUS unass: %d" % (
|
||||||
|
+ len(host_cpu_recs), len(assigned_cpus), len(unassigned_cpus)))
|
||||||
|
+
|
||||||
|
+for cpu_rec in host_cpu_recs.values():
|
||||||
|
+ cpu_pool = session.xenapi.host_cpu.get_cpu_pool(cpu_rec['uuid'])
|
||||||
|
+ if cpu_pool != cpu_rec['cpu_pool']:
|
||||||
|
+ FAIL("Inconsistency of cpu_pool ref between host_cpu record (%s) "
|
||||||
|
+ "and get_cpu_pool (%s)" % (cpu_rec['cpu_pool'], cpu_pool))
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# create / modify / remove managed cpu pools
|
||||||
|
+pool1_cfg = { 'name_label' : 'Pool-1',
|
||||||
|
+ 'name_description' : 'new pool',
|
||||||
|
+ 'auto_power_on' : False,
|
||||||
|
+ 'ncpu' : '3',
|
||||||
|
+ 'sched_policy' : 'credit',
|
||||||
|
+ 'proposed_CPUs' : ['1','2'],
|
||||||
|
+ 'other_config' : { 'xmtest' : True },
|
||||||
|
+ }
|
||||||
|
+pool1 = session.xenapi.cpu_pool.create(pool1_cfg)
|
||||||
|
+pool1_rec = session.xenapi.cpu_pool.get_record(pool1)
|
||||||
|
+for k in pool1_cfg.keys():
|
||||||
|
+ if pool1_rec[k] != pool1_cfg[k]:
|
||||||
|
+ FAIL("Create error Pool-1 (create config %s, current config: %s, key: %s)" % (
|
||||||
|
+ pool1_cfg, pool1_rec, k))
|
||||||
|
+
|
||||||
|
+pool_all = session.xenapi.cpu_pool.get_all()
|
||||||
|
+if len(pool_all) != 2:
|
||||||
|
+ FAIL("cpu_pool.get_all() returns '%d', expected '2'" % len(pool_all))
|
||||||
|
+
|
||||||
|
+pool_all = session.xenapi.cpu_pool.get_all_records()
|
||||||
|
+if len(pool_all) != 2:
|
||||||
|
+ FAIL("cpu_pool.get_all_records() returns '%d', expected '2'" % len(pool_all))
|
||||||
|
+
|
||||||
|
+if pool1 != session.xenapi.cpu_pool.get_by_name_label(pool1_cfg['name_label'])[0]:
|
||||||
|
+ FAIL("cpu_pool.get_by_name_label() returns wrong value")
|
||||||
|
+
|
||||||
|
+if pool1 != session.xenapi.cpu_pool.get_by_uuid(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_by_uuid() returns wrong value")
|
||||||
|
+
|
||||||
|
+if session.xenapi.cpu_pool.get_activated(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_activated() returns 'true' instead of 'false'")
|
||||||
|
+
|
||||||
|
+if pool1_cfg['auto_power_on'] != session.xenapi.cpu_pool.get_auto_power_on(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_auto_power_on() returns wrong value")
|
||||||
|
+
|
||||||
|
+if len(session.xenapi.cpu_pool.get_host_CPUs(pool1)) != 0:
|
||||||
|
+ FAIL("cpu_pool.get_host_CPUs has to return an empty list")
|
||||||
|
+
|
||||||
|
+if pool1_cfg['name_label'] != session.xenapi.cpu_pool.get_name_label(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_name_label() returns wrong value")
|
||||||
|
+
|
||||||
|
+if pool1_cfg['name_description'] != session.xenapi.cpu_pool.get_name_description(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_name_description() returns wrong value")
|
||||||
|
+
|
||||||
|
+if pool1_cfg['ncpu'] != session.xenapi.cpu_pool.get_ncpu(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_ncpu() returns wrong value")
|
||||||
|
+
|
||||||
|
+cfg_len = len(pool1_cfg['proposed_CPUs'])
|
||||||
|
+api_len = len(session.xenapi.cpu_pool.get_proposed_CPUs(pool1))
|
||||||
|
+if cfg_len != api_len:
|
||||||
|
+ FAIL("cpu_pool.get_proposed_CPUs() returns wrong value; cfg_cnt: %s, api_cnt:%s" % (cfg_len, api_len))
|
||||||
|
+
|
||||||
|
+other_config = session.xenapi.cpu_pool.get_other_config(pool1)
|
||||||
|
+if pool1_cfg['other_config']['xmtest'] != other_config.get('xmtest'):
|
||||||
|
+ FAIL("cpu_pool.get_other_config() returns wrong value")
|
||||||
|
+
|
||||||
|
+if session.xenapi.cpu_pool.get_resident_on(pool1) != session.xenapi.host.get_all()[0]:
|
||||||
|
+ FAIL("cpu_pool.get_resident_on() returns wrong value")
|
||||||
|
+
|
||||||
|
+if pool1_cfg['sched_policy'] != session.xenapi.cpu_pool.get_sched_policy(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_sched_policy() returns wrong value")
|
||||||
|
+
|
||||||
|
+if len(session.xenapi.cpu_pool.get_started_VMs(pool1)) != 0:
|
||||||
|
+ FAIL("cpu_pool.get_started_VMs() returns wrong value")
|
||||||
|
+
|
||||||
|
+if pool1 != session.xenapi.cpu_pool.get_uuid(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_uuid() returns wrong value")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.set_auto_power_on(pool1, True)
|
||||||
|
+if not session.xenapi.cpu_pool.get_auto_power_on(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_auto_power_on() returns wrong value")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.set_proposed_CPUs(pool1, [4])
|
||||||
|
+if '4' not in session.xenapi.cpu_pool.get_proposed_CPUs(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_proposed_CPUs() returns wrong value; (set_proposed_CPUs)")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.add_to_proposed_CPUs(pool1, 5)
|
||||||
|
+val = session.xenapi.cpu_pool.get_proposed_CPUs(pool1)
|
||||||
|
+if '5' not in val:
|
||||||
|
+ FAIL("cpu_pool.get_proposed_CPUs() returns wrong value; %s not in %s" % ('5',val))
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.remove_from_proposed_CPUs(pool1, 5)
|
||||||
|
+val = session.xenapi.cpu_pool.get_proposed_CPUs(pool1)
|
||||||
|
+if '5' in val:
|
||||||
|
+ FAIL("cpu_pool.get_proposed_CPUs() returns wrong value; %s in %s" % ('5',val))
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.set_name_label(pool1, 'New-Pool-1')
|
||||||
|
+if 'New-Pool-1' != session.xenapi.cpu_pool.get_name_label(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_name_label() returns wrong value")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.set_ncpu(pool1, 4)
|
||||||
|
+if '4' != session.xenapi.cpu_pool.get_ncpu(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_ncpu() returns wrong value")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.set_other_config(pool1, {'test' : 'ok'})
|
||||||
|
+other_config = session.xenapi.cpu_pool.get_other_config(pool1)
|
||||||
|
+if other_config.get('test') != 'ok':
|
||||||
|
+ FAIL("cpu_pool.get_other_config() returns wrong value")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.add_to_other_config(pool1, 'new_entry', 'added')
|
||||||
|
+other_config = session.xenapi.cpu_pool.get_other_config(pool1)
|
||||||
|
+if other_config.get('new_entry') != 'added':
|
||||||
|
+ FAIL("cpu_pool.get_other_config() returns wrong value")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.remove_from_other_config(pool1, 'new_entry')
|
||||||
|
+other_config = session.xenapi.cpu_pool.get_other_config(pool1)
|
||||||
|
+if other_config.get('new_entry') != None:
|
||||||
|
+ FAIL("cpu_pool.get_other_config() returns wrong value")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.set_sched_policy(pool1, 'credit')
|
||||||
|
+if 'credit' != session.xenapi.cpu_pool.get_sched_policy(pool1):
|
||||||
|
+ FAIL("cpu_pool.get_sched_policy() returns wrong value")
|
||||||
|
+
|
||||||
|
+session.xenapi.cpu_pool.destroy(pool1)
|
||||||
|
+if pool1 in session.xenapi.cpu_pool.get_all():
|
||||||
|
+ FAIL("cpu_pool.destroy() has not removed pool")
|
||||||
|
+
|
||||||
|
Index: xen-4.0.0-testing/tools/xm-test/tests/xapi/Makefile.am
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/xm-test/tests/xapi/Makefile.am
|
||||||
|
+++ xen-4.0.0-testing/tools/xm-test/tests/xapi/Makefile.am
|
||||||
|
@@ -3,7 +3,8 @@ SUBDIRS =
|
||||||
|
TESTS = 01_xapi-vm_basic.test \
|
||||||
|
02_xapi-vbd_basic.test \
|
||||||
|
03_xapi-network_pos.test \
|
||||||
|
- 04_xapi-data_uri_handling.test
|
||||||
|
+ 04_xapi-data_uri_handling.test \
|
||||||
|
+ 20_xapi-cpu_pool_basic.test
|
||||||
|
|
||||||
|
XFAIL_TESTS =
|
||||||
|
|
127
cpupools-core-fixup.patch
Normal file
127
cpupools-core-fixup.patch
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
- fix tasklet_schedule_cpu() when invoked from the tasklet's handler
|
||||||
|
- properly balance (un-)pausing in continue_hypercall_on_cpu() code
|
||||||
|
paths
|
||||||
|
- bump domctl interface version (due to the addition of the "cpupool"
|
||||||
|
member to struct xen_domctl_getdomaininfo)
|
||||||
|
- move and rename csched_priv to make sure eventual backported
|
||||||
|
upstream patches using the variable get correctly adjusted (i.e.
|
||||||
|
missing adjustments get detected at build time)
|
||||||
|
|
||||||
|
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
|
||||||
|
@@ -1573,6 +1573,7 @@ int continue_hypercall_on_cpu(int cpu, v
|
||||||
|
|
||||||
|
v->arch.schedule_tail = continue_hypercall_on_cpu_helper;
|
||||||
|
v->arch.continue_info = info;
|
||||||
|
+ vcpu_pause_nosync(v);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -1583,7 +1584,6 @@ int continue_hypercall_on_cpu(int cpu, v
|
||||||
|
info->func = func;
|
||||||
|
info->data = data;
|
||||||
|
|
||||||
|
- vcpu_pause_nosync(v);
|
||||||
|
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
|
||||||
|
@@ -176,7 +176,6 @@ struct csched_private {
|
||||||
|
/*
|
||||||
|
* Global variables
|
||||||
|
*/
|
||||||
|
-static struct csched_private csched_priv;
|
||||||
|
static struct csched_private *csched_priv0 = NULL;
|
||||||
|
|
||||||
|
static void csched_tick(void *_cpu);
|
||||||
|
@@ -1524,11 +1523,13 @@ static void csched_tick_resume(struct sc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static struct csched_private _csched_priv;
|
||||||
|
+
|
||||||
|
struct scheduler sched_credit_def = {
|
||||||
|
.name = "SMP Credit Scheduler",
|
||||||
|
.opt_name = "credit",
|
||||||
|
.sched_id = XEN_SCHEDULER_CREDIT,
|
||||||
|
- .sched_data = &csched_priv,
|
||||||
|
+ .sched_data = &_csched_priv,
|
||||||
|
|
||||||
|
.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
|
||||||
|
@@ -104,12 +104,15 @@ static void tasklet_schedule_list(struct
|
||||||
|
{
|
||||||
|
BUG_ON(!list_empty(&t->list));
|
||||||
|
list_add_tail(&t->list, tlist);
|
||||||
|
+ t->scheduled_on = NR_CPUS;
|
||||||
|
}
|
||||||
|
t->is_scheduled = 1;
|
||||||
|
if ( cpu == smp_processor_id() )
|
||||||
|
raise_softirq(TASKLET_SOFTIRQ);
|
||||||
|
- else
|
||||||
|
+ else if ( !t->is_running )
|
||||||
|
cpu_raise_softirq(cpu, TASKLET_SOFTIRQ);
|
||||||
|
+ else
|
||||||
|
+ t->scheduled_on = cpu;
|
||||||
|
}
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&tasklet_lock, flags);
|
||||||
|
@@ -156,7 +159,15 @@ static void tasklet_action(void)
|
||||||
|
if ( t->is_scheduled )
|
||||||
|
{
|
||||||
|
BUG_ON(t->is_dead || !list_empty(&t->list));
|
||||||
|
- list_add_tail(&t->list, tlist);
|
||||||
|
+ if ( t->scheduled_on >= NR_CPUS )
|
||||||
|
+ list_add_tail(&t->list, tlist);
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ unsigned int cpu = t->scheduled_on;
|
||||||
|
+
|
||||||
|
+ list_add_tail(&t->list, &per_cpu(tasklet_list_pcpu, cpu));
|
||||||
|
+ cpu_raise_softirq(cpu, TASKLET_SOFTIRQ);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
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
|
||||||
|
@@ -35,7 +35,7 @@
|
||||||
|
#include "xen.h"
|
||||||
|
#include "grant_table.h"
|
||||||
|
|
||||||
|
-#define XEN_DOMCTL_INTERFACE_VERSION 0x00000006
|
||||||
|
+#define XEN_DOMCTL_INTERFACE_VERSION 0x00000007
|
||||||
|
|
||||||
|
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
|
||||||
|
@@ -50,12 +50,14 @@ struct tasklet
|
||||||
|
bool_t is_scheduled;
|
||||||
|
bool_t is_running;
|
||||||
|
bool_t is_dead;
|
||||||
|
+ unsigned int scheduled_on;
|
||||||
|
void (*func)(unsigned long);
|
||||||
|
unsigned long data;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DECLARE_TASKLET(name, func, data) \
|
||||||
|
- struct tasklet name = { LIST_HEAD_INIT(name.list), 0, 0, 0, func, data }
|
||||||
|
+ struct tasklet name = { LIST_HEAD_INIT(name.list), 0, 0, 0, NR_CPUS, \
|
||||||
|
+ func, data }
|
||||||
|
|
||||||
|
void tasklet_schedule(struct tasklet *t);
|
||||||
|
void tasklet_schedule_cpu(struct tasklet *t, int cpu);
|
3267
cpupools-core.patch
Normal file
3267
cpupools-core.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -235,6 +235,13 @@ class Wholedisk:
|
|||||||
os.system("lvchange -ay '%s' > /dev/null 2>&1" % (self.vdev))
|
os.system("lvchange -ay '%s' > /dev/null 2>&1" % (self.vdev))
|
||||||
self.mapped += 1
|
self.mapped += 1
|
||||||
|
|
||||||
|
def partitionsdeactivated(self):
|
||||||
|
"Return True if partition mappings have been removed, False otherwise"
|
||||||
|
for part in self.partitions:
|
||||||
|
if os.access(part.pdev, os.F_OK):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def deactivatepartitions(self):
|
def deactivatepartitions(self):
|
||||||
"""Remove device-mapper mappings and loop mapping.
|
"""Remove device-mapper mappings and loop mapping.
|
||||||
|
|
||||||
@ -246,9 +253,14 @@ class Wholedisk:
|
|||||||
self.mapped -= 1
|
self.mapped -= 1
|
||||||
if not self.mapped:
|
if not self.mapped:
|
||||||
if self.pcount:
|
if self.pcount:
|
||||||
verbose_print("kpartx %s -d '%s'" % (kpartx_args, self.physdev()))
|
retries = 10
|
||||||
fd = os.popen("kpartx %s -d '%s'" % (kpartx_args, self.physdev()))
|
while retries and not self.partitionsdeactivated():
|
||||||
fd.close()
|
verbose_print("kpartx %s -d '%s'" % (kpartx_args, self.physdev()))
|
||||||
|
os.system("kpartx %s -d '%s'" % (kpartx_args, self.physdev()))
|
||||||
|
time.sleep(0.1)
|
||||||
|
retries -= 1
|
||||||
|
if retries == 0:
|
||||||
|
error("unable to remove partition mappings with kpartx -d")
|
||||||
if self.pcount and self.lvm:
|
if self.pcount and self.lvm:
|
||||||
verbose_print("lvchange -an '%s'" % (self.vdev))
|
verbose_print("lvchange -an '%s'" % (self.vdev))
|
||||||
ret = os.system("lvchange -an '%s' > /dev/null 2>&1" % (self.vdev)) >> 8
|
ret = os.system("lvchange -an '%s' > /dev/null 2>&1" % (self.vdev)) >> 8
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
--- 2010-01-06.orig/xen/arch/ia64/linux-xen/smp.c 2009-05-27 13:54:05.000000000 +0200
|
Index: xen-4.0.0-testing/xen/arch/ia64/linux-xen/smp.c
|
||||||
+++ 2010-01-06/xen/arch/ia64/linux-xen/smp.c 2010-01-06 11:22:12.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/arch/ia64/linux-xen/smp.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/ia64/linux-xen/smp.c
|
||||||
@@ -189,7 +189,7 @@ handle_IPI (int irq, void *dev_id, struc
|
@@ -189,7 +189,7 @@ handle_IPI (int irq, void *dev_id, struc
|
||||||
* At this point the structure may be gone unless
|
* At this point the structure may be gone unless
|
||||||
* wait is true.
|
* wait is true.
|
||||||
@ -9,8 +11,10 @@
|
|||||||
|
|
||||||
/* Notify the sending CPU that the task is done. */
|
/* Notify the sending CPU that the task is done. */
|
||||||
mb();
|
mb();
|
||||||
--- 2010-01-06.orig/xen/arch/x86/smp.c 2009-08-19 17:01:49.000000000 +0200
|
Index: xen-4.0.0-testing/xen/arch/x86/smp.c
|
||||||
+++ 2010-01-06/xen/arch/x86/smp.c 2010-01-06 11:22:12.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/arch/x86/smp.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/x86/smp.c
|
||||||
@@ -394,7 +394,7 @@ static void __smp_call_function_interrup
|
@@ -394,7 +394,7 @@ static void __smp_call_function_interrup
|
||||||
|
|
||||||
if ( call_data.wait )
|
if ( call_data.wait )
|
||||||
@ -29,9 +33,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
irq_exit();
|
irq_exit();
|
||||||
--- 2010-01-06.orig/xen/common/keyhandler.c 2009-12-16 09:14:13.000000000 +0100
|
Index: xen-4.0.0-testing/xen/common/keyhandler.c
|
||||||
+++ 2010-01-06/xen/common/keyhandler.c 2010-01-06 11:22:12.000000000 +0100
|
===================================================================
|
||||||
@@ -72,14 +72,25 @@ static struct keyhandler show_handlers_k
|
--- xen-4.0.0-testing.orig/xen/common/keyhandler.c
|
||||||
|
+++ xen-4.0.0-testing/xen/common/keyhandler.c
|
||||||
|
@@ -71,14 +71,25 @@ static struct keyhandler show_handlers_k
|
||||||
.desc = "show this message"
|
.desc = "show this message"
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -61,7 +67,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void dump_registers(unsigned char key, struct cpu_user_regs *regs)
|
static void dump_registers(unsigned char key, struct cpu_user_regs *regs)
|
||||||
@@ -93,14 +104,12 @@ static void dump_registers(unsigned char
|
@@ -92,14 +103,12 @@ static void dump_registers(unsigned char
|
||||||
printk("'%c' pressed -> dumping registers\n", key);
|
printk("'%c' pressed -> dumping registers\n", key);
|
||||||
|
|
||||||
/* Get local execution state out immediately, in case we get stuck. */
|
/* Get local execution state out immediately, in case we get stuck. */
|
||||||
@ -77,8 +83,10 @@
|
|||||||
on_selected_cpus(cpumask_of(cpu), __dump_execstate, NULL, 1);
|
on_selected_cpus(cpumask_of(cpu), __dump_execstate, NULL, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
--- 2010-01-06.orig/xen/include/asm-ia64/linux-xen/asm/ptrace.h 2009-05-20 08:46:00.000000000 +0200
|
Index: xen-4.0.0-testing/xen/include/asm-ia64/linux-xen/asm/ptrace.h
|
||||||
+++ 2010-01-06/xen/include/asm-ia64/linux-xen/asm/ptrace.h 2010-01-06 11:22:12.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/include/asm-ia64/linux-xen/asm/ptrace.h
|
||||||
|
+++ xen-4.0.0-testing/xen/include/asm-ia64/linux-xen/asm/ptrace.h
|
||||||
@@ -278,7 +278,7 @@ struct switch_stack {
|
@@ -278,7 +278,7 @@ struct switch_stack {
|
||||||
# define ia64_task_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
|
# define ia64_task_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
|
||||||
# define ia64_psr(regs) ((struct ia64_psr *) &(regs)->cr_ipsr)
|
# define ia64_psr(regs) ((struct ia64_psr *) &(regs)->cr_ipsr)
|
||||||
|
28
hibernate.patch
Normal file
28
hibernate.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
Index: xen-4.0.0-testing/tools/firmware/hvmloader/acpi/dsdt.asl
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/firmware/hvmloader/acpi/dsdt.asl
|
||||||
|
+++ xen-4.0.0-testing/tools/firmware/hvmloader/acpi/dsdt.asl
|
||||||
|
@@ -30,21 +30,9 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2,
|
||||||
|
/*
|
||||||
|
* S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off) type codes:
|
||||||
|
* must match piix4 emulation.
|
||||||
|
+ * Turn off support for s3 and s4 sleep states to deal with SVVP tests.
|
||||||
|
+ * This is what MSFT does on HyperV.
|
||||||
|
*/
|
||||||
|
- Name (\_S3, Package (0x04)
|
||||||
|
- {
|
||||||
|
- 0x05, /* PM1a_CNT.SLP_TYP */
|
||||||
|
- 0x05, /* PM1b_CNT.SLP_TYP */
|
||||||
|
- 0x0, /* reserved */
|
||||||
|
- 0x0 /* reserved */
|
||||||
|
- })
|
||||||
|
- Name (\_S4, Package (0x04)
|
||||||
|
- {
|
||||||
|
- 0x06, /* PM1a_CNT.SLP_TYP */
|
||||||
|
- 0x06, /* PM1b_CNT.SLP_TYP */
|
||||||
|
- 0x00, /* reserved */
|
||||||
|
- 0x00 /* reserved */
|
||||||
|
- })
|
||||||
|
Name (\_S5, Package (0x04)
|
||||||
|
{
|
||||||
|
0x07, /* PM1a_CNT.SLP_TYP */
|
@ -2,14 +2,14 @@ Index: xen-4.0.0-testing/tools/python/xen/lowlevel/xc/xc.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/lowlevel/xc/xc.c
|
--- xen-4.0.0-testing.orig/tools/python/xen/lowlevel/xc/xc.c
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/lowlevel/xc/xc.c
|
+++ xen-4.0.0-testing/tools/python/xen/lowlevel/xc/xc.c
|
||||||
@@ -914,16 +914,16 @@ static PyObject *pyxc_hvm_build(XcObject
|
@@ -917,16 +917,16 @@ static PyObject *pyxc_hvm_build(XcObject
|
||||||
#endif
|
#endif
|
||||||
int i;
|
int i;
|
||||||
char *image;
|
char *image;
|
||||||
- int memsize, target=-1, vcpus = 1, acpi = 0, apic = 1;
|
- int memsize, target=-1, vcpus = 1, acpi = 0, apic = 1;
|
||||||
+ int memsize, target=-1, vcpus = 1, acpi = 0, apic = 1, extid = 0;
|
+ int memsize, target=-1, vcpus = 1, acpi = 0, apic = 1, extid = 0;
|
||||||
PyObject *vcpu_avail_handle = NULL;
|
PyObject *vcpu_avail_handle = NULL;
|
||||||
uint8_t vcpu_avail[HVM_MAX_VCPUS/8];
|
uint8_t vcpu_avail[(HVM_MAX_VCPUS + 7)/8];
|
||||||
|
|
||||||
static char *kwd_list[] = { "domid",
|
static char *kwd_list[] = { "domid",
|
||||||
- "memsize", "image", "target", "vcpus",
|
- "memsize", "image", "target", "vcpus",
|
||||||
@ -24,7 +24,7 @@ Index: xen-4.0.0-testing/tools/python/xen/lowlevel/xc/xc.c
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
memset(vcpu_avail, 0, sizeof(vcpu_avail));
|
memset(vcpu_avail, 0, sizeof(vcpu_avail));
|
||||||
@@ -975,6 +975,7 @@ static PyObject *pyxc_hvm_build(XcObject
|
@@ -978,6 +978,7 @@ static PyObject *pyxc_hvm_build(XcObject
|
||||||
va_hvm->checksum -= sum;
|
va_hvm->checksum -= sum;
|
||||||
munmap(va_map, XC_PAGE_SIZE);
|
munmap(va_map, XC_PAGE_SIZE);
|
||||||
#endif
|
#endif
|
||||||
@ -36,7 +36,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||||
@@ -150,6 +150,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
@@ -151,6 +151,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
||||||
'nographic': int,
|
'nographic': int,
|
||||||
'nomigrate': int,
|
'nomigrate': int,
|
||||||
'pae' : int,
|
'pae' : int,
|
||||||
@ -87,7 +87,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/create.py
|
|||||||
gopts.var('acpi', val='ACPI',
|
gopts.var('acpi', val='ACPI',
|
||||||
fn=set_int, default=1,
|
fn=set_int, default=1,
|
||||||
use="Disable or enable ACPI of HVM domain.")
|
use="Disable or enable ACPI of HVM domain.")
|
||||||
@@ -1077,7 +1081,7 @@ def configure_hvm(config_image, vals):
|
@@ -1081,7 +1085,7 @@ def configure_hvm(config_image, vals):
|
||||||
'timer_mode',
|
'timer_mode',
|
||||||
'usb', 'usbdevice',
|
'usb', 'usbdevice',
|
||||||
'vcpus', 'vnc', 'vncconsole', 'vncdisplay', 'vnclisten',
|
'vcpus', 'vnc', 'vncconsole', 'vncdisplay', 'vnclisten',
|
||||||
|
@ -151,14 +151,14 @@ Index: xen-4.0.0-testing/xen/include/public/arch-x86/hvm/save.h
|
|||||||
+ uint32_t long_mode;
|
+ uint32_t long_mode;
|
||||||
+ uint32_t ext_id;
|
+ uint32_t ext_id;
|
||||||
+};
|
+};
|
||||||
+DECLARE_HVM_SAVE_TYPE(HYPERV_DOM, 15, struct hvm_hyperv_dom);
|
+DECLARE_HVM_SAVE_TYPE(HYPERV_DOM, 16, struct hvm_hyperv_dom);
|
||||||
+
|
+
|
||||||
+struct hvm_hyperv_cpu {
|
+struct hvm_hyperv_cpu {
|
||||||
+ uint64_t control_msr;
|
+ uint64_t control_msr;
|
||||||
+ uint64_t version_msr;
|
+ uint64_t version_msr;
|
||||||
+ uint64_t pad[27]; //KYS: sles10 sp2 compatibility
|
+ uint64_t pad[27]; //KYS: sles10 sp2 compatibility
|
||||||
+};
|
+};
|
||||||
+DECLARE_HVM_SAVE_TYPE(HYPERV_CPU, 16, struct hvm_hyperv_cpu);
|
+DECLARE_HVM_SAVE_TYPE(HYPERV_CPU, 17, struct hvm_hyperv_cpu);
|
||||||
+
|
+
|
||||||
/*
|
/*
|
||||||
* Largest type-code in use
|
* Largest type-code in use
|
||||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
@@ -247,8 +247,11 @@ static int open_disk(struct td_state *s,
|
@@ -249,8 +249,11 @@ static int open_disk(struct td_state *s,
|
||||||
drv = blktap_drivers[i].drv;
|
drv = blktap_drivers[i].drv;
|
||||||
DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
@@ -360,6 +360,15 @@ static void qemu_send_responses(void* op
|
@@ -362,6 +362,15 @@ static void qemu_send_responses(void* op
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,7 +18,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
* Callback function for the IO message pipe. Reads requests from the ring
|
* Callback function for the IO message pipe. Reads requests from the ring
|
||||||
* and processes them (call qemu read/write functions).
|
* and processes them (call qemu read/write functions).
|
||||||
*
|
*
|
||||||
@@ -378,6 +387,7 @@ static void handle_blktap_iomsg(void* pr
|
@@ -380,6 +389,7 @@ static void handle_blktap_iomsg(void* pr
|
||||||
blkif_t *blkif = s->blkif;
|
blkif_t *blkif = s->blkif;
|
||||||
tapdev_info_t *info = s->ring_info;
|
tapdev_info_t *info = s->ring_info;
|
||||||
int page_size = getpagesize();
|
int page_size = getpagesize();
|
||||||
@ -26,7 +26,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
|
|
||||||
struct aiocb_info *aiocb_info;
|
struct aiocb_info *aiocb_info;
|
||||||
|
|
||||||
@@ -410,7 +420,7 @@ static void handle_blktap_iomsg(void* pr
|
@@ -412,7 +422,7 @@ static void handle_blktap_iomsg(void* pr
|
||||||
|
|
||||||
/* Don't allow writes on readonly devices */
|
/* Don't allow writes on readonly devices */
|
||||||
if ((s->flags & TD_RDONLY) &&
|
if ((s->flags & TD_RDONLY) &&
|
||||||
@ -35,7 +35,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
blkif->pending_list[idx].status = BLKIF_RSP_ERROR;
|
blkif->pending_list[idx].status = BLKIF_RSP_ERROR;
|
||||||
goto send_response;
|
goto send_response;
|
||||||
}
|
}
|
||||||
@@ -431,7 +441,7 @@ static void handle_blktap_iomsg(void* pr
|
@@ -433,7 +443,7 @@ static void handle_blktap_iomsg(void* pr
|
||||||
DPRINTF("Sector request failed:\n");
|
DPRINTF("Sector request failed:\n");
|
||||||
DPRINTF("%s request, idx [%d,%d] size [%llu], "
|
DPRINTF("%s request, idx [%d,%d] size [%llu], "
|
||||||
"sector [%llu,%llu]\n",
|
"sector [%llu,%llu]\n",
|
||||||
@ -44,7 +44,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
"WRITE" : "READ"),
|
"WRITE" : "READ"),
|
||||||
idx,i,
|
idx,i,
|
||||||
(long long unsigned)
|
(long long unsigned)
|
||||||
@@ -444,8 +454,14 @@ static void handle_blktap_iomsg(void* pr
|
@@ -446,8 +456,14 @@ static void handle_blktap_iomsg(void* pr
|
||||||
|
|
||||||
blkif->pending_list[idx].secs_pending += nsects;
|
blkif->pending_list[idx].secs_pending += nsects;
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
case BLKIF_OP_WRITE:
|
case BLKIF_OP_WRITE:
|
||||||
aiocb_info = malloc(sizeof(*aiocb_info));
|
aiocb_info = malloc(sizeof(*aiocb_info));
|
||||||
|
|
||||||
@@ -465,6 +481,10 @@ static void handle_blktap_iomsg(void* pr
|
@@ -467,6 +483,10 @@ static void handle_blktap_iomsg(void* pr
|
||||||
DPRINTF("ERROR: bdrv_write() == NULL\n");
|
DPRINTF("ERROR: bdrv_write() == NULL\n");
|
||||||
goto send_response;
|
goto send_response;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
@@ -218,9 +218,10 @@ static int map_new_dev(struct td_state *
|
@@ -220,9 +220,10 @@ static int map_new_dev(struct td_state *
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
char* devname;
|
char* devname;
|
||||||
static int devnumber = 0;
|
static int devnumber = 0;
|
||||||
int i;
|
int i;
|
||||||
@@ -230,7 +231,22 @@ static int open_disk(struct td_state *s,
|
@@ -232,7 +233,22 @@ static int open_disk(struct td_state *s,
|
||||||
bs = bdrv_new(devname);
|
bs = bdrv_new(devname);
|
||||||
free(devname);
|
free(devname);
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
fprintf(stderr, "Could not open image file %s\n", path);
|
fprintf(stderr, "Could not open image file %s\n", path);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
@@ -521,7 +537,7 @@ static void handle_blktap_ctrlmsg(void*
|
@@ -527,7 +543,7 @@ static void handle_blktap_ctrlmsg(void*
|
||||||
s = state_init();
|
s = state_init();
|
||||||
|
|
||||||
/*Open file*/
|
/*Open file*/
|
||||||
|
@ -16,7 +16,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
||||||
@@ -256,6 +256,12 @@ static int open_disk(struct td_state *s,
|
@@ -258,6 +258,12 @@ static int open_disk(struct td_state *s,
|
||||||
s->size = bs->total_sectors;
|
s->size = bs->total_sectors;
|
||||||
s->sector_size = 512;
|
s->sector_size = 512;
|
||||||
|
|
||||||
|
80
ioemu-disable-scsi.patch
Normal file
80
ioemu-disable-scsi.patch
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_platform.c
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_platform.c 2010-02-18 14:08:08.000000000 -0700
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_platform.c 2010-02-18 14:28:59.000000000 -0700
|
||||||
|
@@ -359,6 +359,8 @@ static void platform_ioport_write(void *
|
||||||
|
case 4:
|
||||||
|
fprintf(logfile, "Disconnect IDE hard disk...\n");
|
||||||
|
ide_unplug_harddisks();
|
||||||
|
+ fprintf(logfile, "Disconnect SCSI hard disk...\n");
|
||||||
|
+ pci_unplug_scsi();
|
||||||
|
fprintf(logfile, "Disconnect netifs...\n");
|
||||||
|
pci_unplug_netifs();
|
||||||
|
fprintf(logfile, "Shutdown taps...\n");
|
||||||
|
Index: xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/qemu-xen.h 2010-02-18 14:08:08.000000000 -0700
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h 2010-02-18 14:44:28.000000000 -0700
|
||||||
|
@@ -57,6 +57,7 @@ void unset_vram_mapping(void *opaque);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void pci_unplug_netifs(void);
|
||||||
|
+void pci_unplug_scsi(void);
|
||||||
|
void destroy_hvm_domain(void);
|
||||||
|
void unregister_iomem(target_phys_addr_t start);
|
||||||
|
|
||||||
|
Index: xen-4.0.0-testing/tools/ioemu-remote/hw/pci.c
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/pci.c 2010-02-18 14:49:36.000000000 -0700
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/pci.c 2010-02-18 14:53:47.000000000 -0700
|
||||||
|
@@ -892,6 +892,50 @@ void pci_unplug_netifs(void)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+void pci_unplug_scsi(void)
|
||||||
|
+{
|
||||||
|
+ PCIBus *bus;
|
||||||
|
+ PCIDevice *dev;
|
||||||
|
+ PCIIORegion *region;
|
||||||
|
+ int x;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ /* We only support one PCI bus */
|
||||||
|
+ for (bus = first_bus; bus; bus = NULL) {
|
||||||
|
+ for (x = 0; x < 256; x++) {
|
||||||
|
+ dev = bus->devices[x];
|
||||||
|
+ if (dev &&
|
||||||
|
+ dev->config[0xa] == 0 &&
|
||||||
|
+ dev->config[0xb] == 1
|
||||||
|
+#ifdef CONFIG_PASSTHROUGH
|
||||||
|
+ && test_pci_devfn(x) != 1
|
||||||
|
+#endif
|
||||||
|
+ ) {
|
||||||
|
+ /* Found a scsi disk. Remove it from the bus. Note that
|
||||||
|
+ we don't free it here, since there could still be
|
||||||
|
+ references to it floating around. There are only
|
||||||
|
+ ever one or two structures leaked, and it's not
|
||||||
|
+ worth finding them all. */
|
||||||
|
+ bus->devices[x] = NULL;
|
||||||
|
+ for (i = 0; i < PCI_NUM_REGIONS; i++) {
|
||||||
|
+ region = &dev->io_regions[i];
|
||||||
|
+ if (region->addr == (uint32_t)-1 ||
|
||||||
|
+ region->size == 0)
|
||||||
|
+ continue;
|
||||||
|
+ fprintf(logfile, "region type %d at [%x,%x).\n",
|
||||||
|
+ region->type, region->addr,
|
||||||
|
+ region->addr+region->size);
|
||||||
|
+ if (region->type == PCI_ADDRESS_SPACE_IO) {
|
||||||
|
+ isa_unassign_ioport(region->addr, region->size);
|
||||||
|
+ } else if (region->type == PCI_ADDRESS_SPACE_MEM) {
|
||||||
|
+ unregister_iomem(region->addr);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
typedef struct {
|
||||||
|
PCIDevice dev;
|
||||||
|
PCIBus *bus;
|
86
keyhandler-alternative.patch
Normal file
86
keyhandler-alternative.patch
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
Index: xen-4.0.0-testing/xen/common/keyhandler.c
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/common/keyhandler.c
|
||||||
|
+++ xen-4.0.0-testing/xen/common/keyhandler.c
|
||||||
|
@@ -19,6 +19,7 @@
|
||||||
|
|
||||||
|
static struct keyhandler *key_table[256];
|
||||||
|
static unsigned char keypress_key;
|
||||||
|
+static bool_t alt_key_handling;
|
||||||
|
|
||||||
|
char keyhandler_scratch[1024];
|
||||||
|
|
||||||
|
@@ -115,6 +116,26 @@ static struct keyhandler dump_registers_
|
||||||
|
.desc = "dump registers"
|
||||||
|
};
|
||||||
|
|
||||||
|
+static DECLARE_TASKLET(dump_dom0_tasklet, NULL, 0);
|
||||||
|
+
|
||||||
|
+static void dump_dom0_action(unsigned long arg)
|
||||||
|
+{
|
||||||
|
+ struct vcpu *v = (void *)arg;
|
||||||
|
+
|
||||||
|
+ for ( ; ; ) {
|
||||||
|
+ vcpu_show_execution_state(v);
|
||||||
|
+ v = v->next_in_list;
|
||||||
|
+ if ( !v )
|
||||||
|
+ break;
|
||||||
|
+ if ( softirq_pending(smp_processor_id()) )
|
||||||
|
+ {
|
||||||
|
+ dump_dom0_tasklet.data = (unsigned long)v;
|
||||||
|
+ tasklet_schedule_cpu(&dump_dom0_tasklet, v->processor);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void dump_dom0_registers(unsigned char key)
|
||||||
|
{
|
||||||
|
struct vcpu *v;
|
||||||
|
@@ -125,7 +146,17 @@ static void dump_dom0_registers(unsigned
|
||||||
|
printk("'%c' pressed -> dumping Dom0's registers\n", key);
|
||||||
|
|
||||||
|
for_each_vcpu ( dom0, v )
|
||||||
|
+ {
|
||||||
|
+ if ( alt_key_handling && softirq_pending(smp_processor_id()) )
|
||||||
|
+ {
|
||||||
|
+ tasklet_kill(&dump_dom0_tasklet);
|
||||||
|
+ tasklet_init(&dump_dom0_tasklet, dump_dom0_action,
|
||||||
|
+ (unsigned long)v);
|
||||||
|
+ tasklet_schedule_cpu(&dump_dom0_tasklet, v->processor);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
vcpu_show_execution_state(v);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct keyhandler dump_dom0_registers_keyhandler = {
|
||||||
|
@@ -425,8 +456,28 @@ static struct keyhandler do_debug_key_ke
|
||||||
|
.desc = "trap to xendbg"
|
||||||
|
};
|
||||||
|
|
||||||
|
+static void do_toggle_alt_key(unsigned char key, struct cpu_user_regs *regs)
|
||||||
|
+{
|
||||||
|
+ alt_key_handling = !alt_key_handling;
|
||||||
|
+ printk("'%c' pressed -> using %s key handling\n", key,
|
||||||
|
+ alt_key_handling ? "alternative" : "normal");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static struct keyhandler toggle_alt_keyhandler = {
|
||||||
|
+ .irq_callback = 1,
|
||||||
|
+ .u.irq_fn = do_toggle_alt_key,
|
||||||
|
+ .desc = "toggle alternative key handling"
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
void __init initialize_keytable(void)
|
||||||
|
{
|
||||||
|
+ if ( num_present_cpus() > 16 )
|
||||||
|
+ {
|
||||||
|
+ alt_key_handling = 1;
|
||||||
|
+ printk(XENLOG_INFO "Defaulting to alternative key handling; "
|
||||||
|
+ "send 'A' to switch to normal mode.\n");
|
||||||
|
+ }
|
||||||
|
+ register_keyhandler('A', &toggle_alt_keyhandler);
|
||||||
|
register_keyhandler('d', &dump_registers_keyhandler);
|
||||||
|
register_keyhandler('h', &show_handlers_keyhandler);
|
||||||
|
register_keyhandler('q', &dump_domains_keyhandler);
|
@ -55,7 +55,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/mm/shadow/common.c
|
|||||||
v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode, 3);
|
v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3100,7 +3109,7 @@ int shadow_enable(struct domain *d, u32
|
@@ -3102,7 +3111,7 @@ int shadow_enable(struct domain *d, u32
|
||||||
{
|
{
|
||||||
unsigned int r;
|
unsigned int r;
|
||||||
shadow_lock(d);
|
shadow_lock(d);
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
--- a/tools/ioemu-remote/xenstore.c
|
Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
+++ b/tools/ioemu-remote/xenstore.c
|
===================================================================
|
||||||
@@ -868,6 +868,18 @@ static void xenstore_process_dm_command_
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
|
@@ -912,6 +912,18 @@ static void xenstore_process_dm_command_
|
||||||
}
|
}
|
||||||
|
|
||||||
snapshot_name = xs_read(xsh, XBT_NULL, path, &len);
|
snapshot_name = xs_read(xsh, XBT_NULL, path, &len);
|
||||||
@ -19,8 +21,10 @@
|
|||||||
} else if (!strncmp(command, "continue", len)) {
|
} else if (!strncmp(command, "continue", len)) {
|
||||||
fprintf(logfile, "dm-command: continue after state save\n");
|
fprintf(logfile, "dm-command: continue after state save\n");
|
||||||
xen_pause_requested = 0;
|
xen_pause_requested = 0;
|
||||||
--- a/tools/ioemu-remote/savevm.c
|
Index: xen-4.0.0-testing/tools/ioemu-remote/savevm.c
|
||||||
+++ b/tools/ioemu-remote/savevm.c
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/savevm.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/savevm.c
|
||||||
@@ -1096,6 +1096,35 @@ the_end:
|
@@ -1096,6 +1096,35 @@ the_end:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -57,8 +61,10 @@
|
|||||||
#ifndef CONFIG_DM
|
#ifndef CONFIG_DM
|
||||||
|
|
||||||
void do_savevm(const char *name)
|
void do_savevm(const char *name)
|
||||||
--- a/tools/ioemu-remote/qemu-xen.h
|
Index: xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h
|
||||||
+++ b/tools/ioemu-remote/qemu-xen.h
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/qemu-xen.h
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h
|
||||||
@@ -42,6 +42,7 @@ enum {
|
@@ -42,6 +42,7 @@ enum {
|
||||||
|
|
||||||
/* xen-vl-extra.c */
|
/* xen-vl-extra.c */
|
||||||
|
@ -40,7 +40,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
char buf[MSG_SIZE];
|
char buf[MSG_SIZE];
|
||||||
|
|
||||||
+#ifndef QEMU_TOOL
|
+#ifndef QEMU_TOOL
|
||||||
+ char *snapshot;
|
+ char *snapshot;
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
length = read(read_fd, buf, MSG_SIZE);
|
length = read(read_fd, buf, MSG_SIZE);
|
||||||
@ -91,7 +91,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
|
||||||
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
@@ -102,6 +102,8 @@ int xenstore_watch_new_callback(const ch
|
@@ -103,6 +103,8 @@ int xenstore_watch_new_callback(const ch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
static int pasprintf(char **buf, const char *fmt, ...)
|
static int pasprintf(char **buf, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@@ -641,8 +643,33 @@ void xenstore_parse_domain_config(int hv
|
@@ -644,8 +646,33 @@ void xenstore_parse_domain_config(int hv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pstrcpy(bs->filename, sizeof(bs->filename), params);
|
pstrcpy(bs->filename, sizeof(bs->filename), params);
|
||||||
@ -135,7 +135,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -776,6 +803,23 @@ int xenstore_parse_disable_pf_config ()
|
@@ -779,6 +806,23 @@ int xenstore_parse_disable_pf_config ()
|
||||||
return disable_pf;
|
return disable_pf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
--- a/tools/ioemu-remote/savevm.c
|
Index: xen-4.0.0-testing/tools/ioemu-remote/savevm.c
|
||||||
+++ b/tools/ioemu-remote/savevm.c
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/savevm.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/savevm.c
|
||||||
@@ -28,6 +28,7 @@
|
@@ -28,6 +28,7 @@
|
||||||
#include "sysemu.h"
|
#include "sysemu.h"
|
||||||
#include "qemu-timer.h"
|
#include "qemu-timer.h"
|
||||||
@ -95,8 +97,10 @@
|
|||||||
#ifndef CONFIG_DM
|
#ifndef CONFIG_DM
|
||||||
|
|
||||||
void do_savevm(const char *name)
|
void do_savevm(const char *name)
|
||||||
--- a/tools/ioemu-remote/i386-dm/helper2.c
|
Index: xen-4.0.0-testing/tools/ioemu-remote/i386-dm/helper2.c
|
||||||
+++ b/tools/ioemu-remote/i386-dm/helper2.c
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/i386-dm/helper2.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/i386-dm/helper2.c
|
||||||
@@ -109,6 +109,9 @@ int send_vcpu = 0;
|
@@ -109,6 +109,9 @@ int send_vcpu = 0;
|
||||||
//the evtchn port for polling the notification,
|
//the evtchn port for polling the notification,
|
||||||
evtchn_port_t *ioreq_local_port;
|
evtchn_port_t *ioreq_local_port;
|
||||||
@ -163,8 +167,10 @@
|
|||||||
|
|
||||||
/* Wait to be allowed to continue */
|
/* Wait to be allowed to continue */
|
||||||
while (xen_pause_requested) {
|
while (xen_pause_requested) {
|
||||||
--- a/tools/ioemu-remote/qemu-xen.h
|
Index: xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h
|
||||||
+++ b/tools/ioemu-remote/qemu-xen.h
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/qemu-xen.h
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h
|
||||||
@@ -34,6 +34,15 @@ void qemu_invalidate_map_cache(void)
|
@@ -34,6 +34,15 @@ void qemu_invalidate_map_cache(void)
|
||||||
#define mapcache_lock() ((void)0)
|
#define mapcache_lock() ((void)0)
|
||||||
#define mapcache_unlock() ((void)0)
|
#define mapcache_unlock() ((void)0)
|
||||||
@ -189,8 +195,10 @@
|
|||||||
void xenstore_check_new_media_present(int timeout);
|
void xenstore_check_new_media_present(int timeout);
|
||||||
void xenstore_write_vncport(int vnc_display);
|
void xenstore_write_vncport(int vnc_display);
|
||||||
void xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen);
|
void xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen);
|
||||||
--- a/tools/ioemu-remote/xenstore.c
|
Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
+++ b/tools/ioemu-remote/xenstore.c
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
||||||
@@ -17,6 +17,7 @@
|
@@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "exec-all.h"
|
#include "exec-all.h"
|
||||||
|
@ -325,10 +325,10 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||||
@@ -233,6 +233,7 @@ XENAPI_CFG_TYPES = {
|
@@ -235,6 +235,7 @@ XENAPI_CFG_TYPES = {
|
||||||
's3_integrity' : int,
|
|
||||||
'superpages' : int,
|
'superpages' : int,
|
||||||
'memory_sharing': int,
|
'memory_sharing': int,
|
||||||
|
'pool_name' : str,
|
||||||
+ 'snapshotname': str,
|
+ 'snapshotname': str,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -537,7 +537,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/main.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xm/main.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xm/main.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xm/main.py
|
+++ xen-4.0.0-testing/tools/python/xen/xm/main.py
|
||||||
@@ -122,6 +122,14 @@ SUBCOMMAND_HELP = {
|
@@ -123,6 +123,14 @@ SUBCOMMAND_HELP = {
|
||||||
'Restore a domain from a saved state.'),
|
'Restore a domain from a saved state.'),
|
||||||
'save' : ('[-c|-f] <Domain> <CheckpointFile>',
|
'save' : ('[-c|-f] <Domain> <CheckpointFile>',
|
||||||
'Save a domain state to restore later.'),
|
'Save a domain state to restore later.'),
|
||||||
@ -552,7 +552,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/main.py
|
|||||||
'shutdown' : ('<Domain> [-waRH]', 'Shutdown a domain.'),
|
'shutdown' : ('<Domain> [-waRH]', 'Shutdown a domain.'),
|
||||||
'top' : ('', 'Monitor a host and the domains in real time.'),
|
'top' : ('', 'Monitor a host and the domains in real time.'),
|
||||||
'unpause' : ('<Domain>', 'Unpause a paused domain.'),
|
'unpause' : ('<Domain>', 'Unpause a paused domain.'),
|
||||||
@@ -316,6 +324,9 @@ SUBCOMMAND_OPTIONS = {
|
@@ -335,6 +343,9 @@ SUBCOMMAND_OPTIONS = {
|
||||||
('-c', '--checkpoint', 'Leave domain running after creating snapshot'),
|
('-c', '--checkpoint', 'Leave domain running after creating snapshot'),
|
||||||
('-f', '--force', 'Force to overwrite exist file'),
|
('-f', '--force', 'Force to overwrite exist file'),
|
||||||
),
|
),
|
||||||
@ -562,7 +562,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/main.py
|
|||||||
'restore': (
|
'restore': (
|
||||||
('-p', '--paused', 'Do not unpause domain after restoring it'),
|
('-p', '--paused', 'Do not unpause domain after restoring it'),
|
||||||
),
|
),
|
||||||
@@ -362,6 +373,10 @@ common_commands = [
|
@@ -385,6 +396,10 @@ common_commands = [
|
||||||
"restore",
|
"restore",
|
||||||
"resume",
|
"resume",
|
||||||
"save",
|
"save",
|
||||||
@ -573,7 +573,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/main.py
|
|||||||
"shell",
|
"shell",
|
||||||
"shutdown",
|
"shutdown",
|
||||||
"start",
|
"start",
|
||||||
@@ -395,6 +410,10 @@ domain_commands = [
|
@@ -418,6 +433,10 @@ domain_commands = [
|
||||||
"restore",
|
"restore",
|
||||||
"resume",
|
"resume",
|
||||||
"save",
|
"save",
|
||||||
@ -584,7 +584,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/main.py
|
|||||||
"shutdown",
|
"shutdown",
|
||||||
"start",
|
"start",
|
||||||
"suspend",
|
"suspend",
|
||||||
@@ -815,6 +834,62 @@ def xm_event_monitor(args):
|
@@ -850,6 +869,62 @@ def xm_event_monitor(args):
|
||||||
#
|
#
|
||||||
#########################################################################
|
#########################################################################
|
||||||
|
|
||||||
@ -647,7 +647,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/main.py
|
|||||||
def xm_save(args):
|
def xm_save(args):
|
||||||
|
|
||||||
arg_check(args, "save", 2, 4)
|
arg_check(args, "save", 2, 4)
|
||||||
@@ -3467,6 +3542,10 @@ commands = {
|
@@ -3694,6 +3769,10 @@ commands = {
|
||||||
"restore": xm_restore,
|
"restore": xm_restore,
|
||||||
"resume": xm_resume,
|
"resume": xm_resume,
|
||||||
"save": xm_save,
|
"save": xm_save,
|
||||||
|
@ -27,8 +27,8 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
+int connected_disks = 0;
|
+int connected_disks = 0;
|
||||||
fd_list_entry_t *fd_start = NULL;
|
fd_list_entry_t *fd_start = NULL;
|
||||||
|
|
||||||
static void handle_blktap_iomsg(void* private);
|
extern char* get_snapshot_name(int devid);
|
||||||
@@ -541,6 +542,7 @@ static void handle_blktap_ctrlmsg(void*
|
@@ -547,6 +548,7 @@ static void handle_blktap_ctrlmsg(void*
|
||||||
|
|
||||||
/* Allocate the disk structs */
|
/* Allocate the disk structs */
|
||||||
s = state_init();
|
s = state_init();
|
||||||
@ -36,7 +36,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
|
|
||||||
/*Open file*/
|
/*Open file*/
|
||||||
if (s == NULL || open_disk(s, path, msg->drivertype, msg->readonly)) {
|
if (s == NULL || open_disk(s, path, msg->drivertype, msg->readonly)) {
|
||||||
@@ -591,7 +593,8 @@ static void handle_blktap_ctrlmsg(void*
|
@@ -629,7 +631,8 @@ static void handle_blktap_ctrlmsg(void*
|
||||||
case CTLMSG_CLOSE:
|
case CTLMSG_CLOSE:
|
||||||
s = get_state(msg->cookie);
|
s = get_state(msg->cookie);
|
||||||
if (s) unmap_disk(s);
|
if (s) unmap_disk(s);
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
--- 2010-01-06.orig/xen/arch/x86/platform_hypercall.c 2009-12-14 08:34:19.000000000 +0100
|
Index: xen-4.0.0-testing/xen/arch/x86/platform_hypercall.c
|
||||||
+++ 2010-01-06/xen/arch/x86/platform_hypercall.c 2010-01-06 11:19:05.000000000 +0100
|
===================================================================
|
||||||
@@ -21,7 +21,7 @@
|
--- xen-4.0.0-testing.orig/xen/arch/x86/platform_hypercall.c
|
||||||
#include <xen/acpi.h>
|
+++ xen-4.0.0-testing/xen/arch/x86/platform_hypercall.c
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
#include <xen/sched-if.h>
|
||||||
#include <asm/current.h>
|
#include <asm/current.h>
|
||||||
#include <public/platform.h>
|
#include <public/platform.h>
|
||||||
-#include <acpi/cpufreq/processor_perf.h>
|
-#include <acpi/cpufreq/processor_perf.h>
|
||||||
@ -9,7 +11,7 @@
|
|||||||
#include <asm/edd.h>
|
#include <asm/edd.h>
|
||||||
#include <asm/mtrr.h>
|
#include <asm/mtrr.h>
|
||||||
#include "cpu/mtrr/mtrr.h"
|
#include "cpu/mtrr/mtrr.h"
|
||||||
@@ -62,6 +62,7 @@ static long cpu_down_helper(void *data)
|
@@ -63,6 +63,7 @@ static long cpu_down_helper(void *hdl, v
|
||||||
ret_t do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op)
|
ret_t do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op)
|
||||||
{
|
{
|
||||||
ret_t ret = 0;
|
ret_t ret = 0;
|
||||||
@ -17,7 +19,7 @@
|
|||||||
struct xen_platform_op curop, *op = &curop;
|
struct xen_platform_op curop, *op = &curop;
|
||||||
|
|
||||||
if ( !IS_PRIV(current->domain) )
|
if ( !IS_PRIV(current->domain) )
|
||||||
@@ -474,6 +475,24 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
|
@@ -475,6 +476,24 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
|
||||||
op->u.mem_add.epfn,
|
op->u.mem_add.epfn,
|
||||||
op->u.mem_add.pxm);
|
op->u.mem_add.pxm);
|
||||||
break;
|
break;
|
||||||
@ -42,8 +44,10 @@
|
|||||||
default:
|
default:
|
||||||
ret = -ENOSYS;
|
ret = -ENOSYS;
|
||||||
break;
|
break;
|
||||||
--- 2010-01-06.orig/xen/include/public/platform.h 2009-12-14 08:34:19.000000000 +0100
|
Index: xen-4.0.0-testing/xen/include/public/platform.h
|
||||||
+++ 2010-01-06/xen/include/public/platform.h 2010-01-06 11:22:06.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/include/public/platform.h
|
||||||
|
+++ xen-4.0.0-testing/xen/include/public/platform.h
|
||||||
@@ -355,6 +355,14 @@ struct xenpf_mem_hotadd
|
@@ -355,6 +355,14 @@ struct xenpf_mem_hotadd
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
--- 2010-01-06.orig/xen/arch/x86/mm.c 2010-01-05 13:29:13.000000000 +0100
|
Index: xen-4.0.0-testing/xen/arch/x86/mm.c
|
||||||
+++ 2010-01-06/xen/arch/x86/mm.c 2010-01-06 11:22:26.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/arch/x86/mm.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/x86/mm.c
|
||||||
@@ -154,6 +154,8 @@ unsigned long __read_mostly pdx_group_va
|
@@ -154,6 +154,8 @@ unsigned long __read_mostly pdx_group_va
|
||||||
int opt_allow_hugepage;
|
int opt_allow_hugepage;
|
||||||
boolean_param("allowhugepage", opt_allow_hugepage);
|
boolean_param("allowhugepage", opt_allow_hugepage);
|
||||||
@ -9,9 +11,11 @@
|
|||||||
#define l1_disallow_mask(d) \
|
#define l1_disallow_mask(d) \
|
||||||
((d != dom_io) && \
|
((d != dom_io) && \
|
||||||
(rangeset_is_empty((d)->iomem_caps) && \
|
(rangeset_is_empty((d)->iomem_caps) && \
|
||||||
--- 2010-01-06.orig/xen/arch/x86/traps.c 2009-12-17 12:20:22.000000000 +0100
|
Index: xen-4.0.0-testing/xen/arch/x86/traps.c
|
||||||
+++ 2010-01-06/xen/arch/x86/traps.c 2010-01-06 11:22:26.000000000 +0100
|
===================================================================
|
||||||
@@ -1349,6 +1349,7 @@ asmlinkage void do_early_page_fault(stru
|
--- xen-4.0.0-testing.orig/xen/arch/x86/traps.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/x86/traps.c
|
||||||
|
@@ -1352,6 +1352,7 @@ asmlinkage void do_early_page_fault(stru
|
||||||
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);
|
||||||
@ -19,8 +23,10 @@
|
|||||||
printk("Stack dump: ");
|
printk("Stack dump: ");
|
||||||
while ( ((long)stk & ((PAGE_SIZE - 1) & ~(BYTES_PER_LONG - 1))) != 0 )
|
while ( ((long)stk & ((PAGE_SIZE - 1) & ~(BYTES_PER_LONG - 1))) != 0 )
|
||||||
printk("%p ", _p(*stk++));
|
printk("%p ", _p(*stk++));
|
||||||
--- 2010-01-06.orig/xen/arch/x86/x86_32/mm.c 2009-10-29 12:24:48.000000000 +0100
|
Index: xen-4.0.0-testing/xen/arch/x86/x86_32/mm.c
|
||||||
+++ 2010-01-06/xen/arch/x86/x86_32/mm.c 2010-01-06 11:22:26.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/arch/x86/x86_32/mm.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/x86/x86_32/mm.c
|
||||||
@@ -122,6 +122,8 @@ void __init paging_init(void)
|
@@ -122,6 +122,8 @@ void __init paging_init(void)
|
||||||
#undef CNT
|
#undef CNT
|
||||||
#undef MFN
|
#undef MFN
|
||||||
@ -30,8 +36,10 @@
|
|||||||
/* Create page tables for ioremap()/map_domain_page_global(). */
|
/* Create page tables for ioremap()/map_domain_page_global(). */
|
||||||
for ( i = 0; i < (IOREMAP_MBYTES >> (L2_PAGETABLE_SHIFT - 20)); i++ )
|
for ( i = 0; i < (IOREMAP_MBYTES >> (L2_PAGETABLE_SHIFT - 20)); i++ )
|
||||||
{
|
{
|
||||||
--- 2010-01-06.orig/xen/arch/x86/x86_32/traps.c 2009-12-02 10:02:49.000000000 +0100
|
Index: xen-4.0.0-testing/xen/arch/x86/x86_32/traps.c
|
||||||
+++ 2010-01-06/xen/arch/x86/x86_32/traps.c 2010-01-06 11:22:26.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/arch/x86/x86_32/traps.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/x86/x86_32/traps.c
|
||||||
@@ -161,7 +161,8 @@ void show_page_walk(unsigned long addr)
|
@@ -161,7 +161,8 @@ void show_page_walk(unsigned long addr)
|
||||||
l3t += (cr3 & 0xFE0UL) >> 3;
|
l3t += (cr3 & 0xFE0UL) >> 3;
|
||||||
l3e = l3t[l3_table_offset(addr)];
|
l3e = l3t[l3_table_offset(addr)];
|
||||||
@ -62,8 +70,10 @@
|
|||||||
printk(" L1[0x%03lx] = %"PRIpte" %08lx\n",
|
printk(" L1[0x%03lx] = %"PRIpte" %08lx\n",
|
||||||
l1_table_offset(addr), l1e_get_intpte(l1e), pfn);
|
l1_table_offset(addr), l1e_get_intpte(l1e), pfn);
|
||||||
unmap_domain_page(l1t);
|
unmap_domain_page(l1t);
|
||||||
--- 2010-01-06.orig/xen/arch/x86/x86_64/mm.c 2010-01-05 13:29:13.000000000 +0100
|
Index: xen-4.0.0-testing/xen/arch/x86/x86_64/mm.c
|
||||||
+++ 2010-01-06/xen/arch/x86/x86_64/mm.c 2010-01-06 11:22:26.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/arch/x86/x86_64/mm.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/x86/x86_64/mm.c
|
||||||
@@ -725,6 +725,8 @@ void __init paging_init(void)
|
@@ -725,6 +725,8 @@ void __init paging_init(void)
|
||||||
#undef CNT
|
#undef CNT
|
||||||
#undef MFN
|
#undef MFN
|
||||||
@ -73,8 +83,10 @@
|
|||||||
/* Create user-accessible L2 directory to map the MPT for compat guests. */
|
/* Create user-accessible L2 directory to map the MPT for compat guests. */
|
||||||
BUILD_BUG_ON(l4_table_offset(RDWR_MPT_VIRT_START) !=
|
BUILD_BUG_ON(l4_table_offset(RDWR_MPT_VIRT_START) !=
|
||||||
l4_table_offset(HIRO_COMPAT_MPT_VIRT_START));
|
l4_table_offset(HIRO_COMPAT_MPT_VIRT_START));
|
||||||
--- 2010-01-06.orig/xen/arch/x86/x86_64/traps.c 2009-12-02 10:02:49.000000000 +0100
|
Index: xen-4.0.0-testing/xen/arch/x86/x86_64/traps.c
|
||||||
+++ 2010-01-06/xen/arch/x86/x86_64/traps.c 2010-01-06 11:22:26.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/arch/x86/x86_64/traps.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/x86/x86_64/traps.c
|
||||||
@@ -176,7 +176,8 @@ void show_page_walk(unsigned long addr)
|
@@ -176,7 +176,8 @@ void show_page_walk(unsigned long addr)
|
||||||
l4t = mfn_to_virt(mfn);
|
l4t = mfn_to_virt(mfn);
|
||||||
l4e = l4t[l4_table_offset(addr)];
|
l4e = l4t[l4_table_offset(addr)];
|
||||||
@ -115,8 +127,10 @@
|
|||||||
printk(" L1[0x%03lx] = %"PRIpte" %016lx\n",
|
printk(" L1[0x%03lx] = %"PRIpte" %016lx\n",
|
||||||
l1_table_offset(addr), l1e_get_intpte(l1e), pfn);
|
l1_table_offset(addr), l1e_get_intpte(l1e), pfn);
|
||||||
}
|
}
|
||||||
--- 2010-01-06.orig/xen/include/asm-x86/mm.h 2009-12-17 12:20:22.000000000 +0100
|
Index: xen-4.0.0-testing/xen/include/asm-x86/mm.h
|
||||||
+++ 2010-01-06/xen/include/asm-x86/mm.h 2010-01-06 11:23:39.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/include/asm-x86/mm.h
|
||||||
|
+++ xen-4.0.0-testing/xen/include/asm-x86/mm.h
|
||||||
@@ -443,6 +443,8 @@ TYPE_SAFE(unsigned long,mfn);
|
@@ -443,6 +443,8 @@ TYPE_SAFE(unsigned long,mfn);
|
||||||
#define SHARED_M2P_ENTRY (~0UL - 1UL)
|
#define SHARED_M2P_ENTRY (~0UL - 1UL)
|
||||||
#define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY)
|
#define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY)
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:fadb3f78dfaf163464c6fcfed57a1f76a6d7cc2f65771bc9886800afdbb528bb
|
oid sha256:88c2cad04e93a909e405bee6f4c3dff2c6b12ea2485b6e7f1db4813cb74f2f38
|
||||||
size 23224505
|
size 23155997
|
||||||
|
@ -9,8 +9,8 @@ Index: xen-4.0.0-testing/Config.mk
|
|||||||
-CONFIG_QEMU ?= $(QEMU_REMOTE)
|
-CONFIG_QEMU ?= $(QEMU_REMOTE)
|
||||||
+CONFIG_QEMU ?= ioemu-remote
|
+CONFIG_QEMU ?= ioemu-remote
|
||||||
|
|
||||||
QEMU_TAG ?= 575ed1016f6fba1c6a6cd32a828cb468bdee96bb
|
QEMU_TAG ?= e5d14857cd67490bf956d97c8888c0be95ed3f78
|
||||||
# Mon Feb 1 16:33:52 2010 +0000
|
# Thu Feb 18 15:36:29 2010 +0000
|
||||||
@@ -163,9 +163,9 @@ CONFIG_OCAML_XENSTORED ?= n
|
@@ -163,9 +163,9 @@ CONFIG_OCAML_XENSTORED ?= n
|
||||||
# Optional components
|
# Optional components
|
||||||
XENSTAT_XENTOP ?= y
|
XENSTAT_XENTOP ?= y
|
||||||
|
@ -62,7 +62,7 @@ Index: xen-4.0.0-testing/tools/python/Makefile
|
|||||||
+ --prefix="/usr" --root="$(DESTDIR)" --force
|
+ --prefix="/usr" --root="$(DESTDIR)" --force
|
||||||
|
|
||||||
install-dtd: all
|
install-dtd: all
|
||||||
$(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)
|
$(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/xen
|
||||||
Index: xen-4.0.0-testing/tools/xenstore/Makefile
|
Index: xen-4.0.0-testing/tools/xenstore/Makefile
|
||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/xenstore/Makefile
|
--- xen-4.0.0-testing.orig/tools/xenstore/Makefile
|
||||||
|
@ -123,7 +123,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
import xen.util.xsm.xsm as security
|
import xen.util.xsm.xsm as security
|
||||||
from xen.util import xsconstants
|
from xen.util import xsconstants
|
||||||
from xen.util import mkdir
|
from xen.util import mkdir
|
||||||
@@ -2337,6 +2337,10 @@ class XendDomainInfo:
|
@@ -2342,6 +2342,10 @@ class XendDomainInfo:
|
||||||
deviceClass, config = self.info['devices'].get(dev_uuid)
|
deviceClass, config = self.info['devices'].get(dev_uuid)
|
||||||
self._waitForDevice(deviceClass, config['devid'])
|
self._waitForDevice(deviceClass, config['devid'])
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
def _waitForDevice_destroy(self, deviceClass, devid, backpath):
|
def _waitForDevice_destroy(self, deviceClass, devid, backpath):
|
||||||
return self.getDeviceController(deviceClass).waitForDevice_destroy(
|
return self.getDeviceController(deviceClass).waitForDevice_destroy(
|
||||||
devid, backpath)
|
devid, backpath)
|
||||||
@@ -3226,7 +3230,7 @@ class XendDomainInfo:
|
@@ -3230,7 +3234,7 @@ class XendDomainInfo:
|
||||||
devtype = devinfo[0]
|
devtype = devinfo[0]
|
||||||
disk = devinfo[1]['uname']
|
disk = devinfo[1]['uname']
|
||||||
|
|
||||||
@ -143,7 +143,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
|
|
||||||
# If this is a drbd volume, check if we need to activate it
|
# If this is a drbd volume, check if we need to activate it
|
||||||
if disk.find(":") != -1:
|
if disk.find(":") != -1:
|
||||||
@@ -3237,8 +3241,17 @@ class XendDomainInfo:
|
@@ -3241,8 +3245,17 @@ class XendDomainInfo:
|
||||||
if state == 'Secondary':
|
if state == 'Secondary':
|
||||||
os.system('/sbin/drbdadm primary ' + diskname)
|
os.system('/sbin/drbdadm primary ' + diskname)
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
if mounted:
|
if mounted:
|
||||||
# This is a file, not a device. pygrub can cope with a
|
# This is a file, not a device. pygrub can cope with a
|
||||||
# file if it's raw, but if it's QCOW or other such formats
|
# file if it's raw, but if it's QCOW or other such formats
|
||||||
@@ -3254,7 +3267,8 @@ class XendDomainInfo:
|
@@ -3258,7 +3271,8 @@ class XendDomainInfo:
|
||||||
|
|
||||||
from xen.xend import XendDomain
|
from xen.xend import XendDomain
|
||||||
dom0 = XendDomain.instance().privilegedDomain()
|
dom0 = XendDomain.instance().privilegedDomain()
|
||||||
@ -173,7 +173,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
fn = BOOTLOADER_LOOPBACK_DEVICE
|
fn = BOOTLOADER_LOOPBACK_DEVICE
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -3264,8 +3278,10 @@ class XendDomainInfo:
|
@@ -3268,8 +3282,10 @@ class XendDomainInfo:
|
||||||
if mounted:
|
if mounted:
|
||||||
log.info("Unmounting %s from %s." %
|
log.info("Unmounting %s from %s." %
|
||||||
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
||||||
|
48
xen.changes
48
xen.changes
@ -1,3 +1,51 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 22 08:26:01 MST 2010 - jfehlig@novell.com
|
||||||
|
|
||||||
|
- bnc#556939 - Improve device map cleanup code in domUloader
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Feb 21 21:34:23 MST 2010 - jfehlig@novell.com
|
||||||
|
|
||||||
|
- bnc# 578910 - xm block-detach does not cleanup xenstore
|
||||||
|
hotplug-cleanup-fix.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 19 11:56:57 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#579361 - Windows Server 2003 cannot wake up from stand by in
|
||||||
|
sp1
|
||||||
|
hibernate.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 19 09:49:56 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- fate#308852: XEN CPU Pools
|
||||||
|
cpupools-core.patch
|
||||||
|
cpupools-core-fixup.patch
|
||||||
|
keyhandler-alternative.patch
|
||||||
|
cpu-pools-libxc.patch
|
||||||
|
cpu-pools-python.patch
|
||||||
|
cpu-pools-libxen.patch
|
||||||
|
cpu-pools-xmtest.patch
|
||||||
|
cpu-pools-docs.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Feb 18 15:18:59 - ksrinivasan@novell.com
|
||||||
|
|
||||||
|
- bnc#558760: Disable scsi devices when PV drivers are loaded.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Feb 16 08:35:08 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- Update to changeset 20951 Xen 4.0.0 RC4 for sle11-sp1 beta5.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 8 08:08:01 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#572146 - SLES11 SP1 beta 2 Xen - BUG: soft lockup - CPU#31
|
||||||
|
stuck for 61s! [kstop/31:4512]
|
||||||
|
cpuidle-hint-v3.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Feb 5 08:16:39 MST 2010 - carnold@novell.com
|
Fri Feb 5 08:16:39 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
65
xen.spec
65
xen.spec
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package xen (Version 4.0.0_20900_01)
|
# spec file for package xen (Version 4.0.0_20978_01)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -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 20900
|
%define changeset 20978
|
||||||
%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 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 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
|
||||||
@ -37,7 +37,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_20900_01
|
Version: 4.0.0_20978_01
|
||||||
Release: 1
|
Release: 1
|
||||||
License: GPL v2 only
|
License: GPL v2 only
|
||||||
Group: System/Kernel
|
Group: System/Kernel
|
||||||
@ -90,7 +90,6 @@ Patch312: serial-split.patch
|
|||||||
Patch313: xen-xm-top-needs-root.diff
|
Patch313: xen-xm-top-needs-root.diff
|
||||||
Patch314: xen-max-free-mem.diff
|
Patch314: xen-max-free-mem.diff
|
||||||
Patch315: xen-disable-libxl.diff
|
Patch315: xen-disable-libxl.diff
|
||||||
Patch316: xen-disable-xenpaging.diff
|
|
||||||
Patch320: block-losetup-retry.diff
|
Patch320: block-losetup-retry.diff
|
||||||
Patch321: block-flags.diff
|
Patch321: block-flags.diff
|
||||||
Patch322: bridge-opensuse.patch
|
Patch322: bridge-opensuse.patch
|
||||||
@ -125,6 +124,14 @@ Patch359: qemu-console-retry.patch
|
|||||||
Patch360: checkpoint-rename.patch
|
Patch360: checkpoint-rename.patch
|
||||||
Patch361: xm-save-check-file.patch
|
Patch361: xm-save-check-file.patch
|
||||||
Patch362: xm-create-xflag.patch
|
Patch362: xm-create-xflag.patch
|
||||||
|
Patch363: cpupools-core.patch
|
||||||
|
Patch364: cpupools-core-fixup.patch
|
||||||
|
Patch365: keyhandler-alternative.patch
|
||||||
|
Patch366: cpu-pools-libxc.patch
|
||||||
|
Patch367: cpu-pools-python.patch
|
||||||
|
Patch368: cpu-pools-libxen.patch
|
||||||
|
Patch369: cpu-pools-xmtest.patch
|
||||||
|
Patch370: cpu-pools-docs.patch
|
||||||
# Patches for snapshot support
|
# Patches for snapshot support
|
||||||
Patch400: snapshot-ioemu-save.patch
|
Patch400: snapshot-ioemu-save.patch
|
||||||
Patch401: snapshot-ioemu-restore.patch
|
Patch401: snapshot-ioemu-restore.patch
|
||||||
@ -147,6 +154,7 @@ Patch425: ioemu-bdrv-open-CACHE_WB.patch
|
|||||||
Patch426: xen-ioemu-hvm-pv-support.diff
|
Patch426: xen-ioemu-hvm-pv-support.diff
|
||||||
Patch427: qemu-dm-segfault.patch
|
Patch427: qemu-dm-segfault.patch
|
||||||
Patch428: shadow.patch
|
Patch428: shadow.patch
|
||||||
|
Patch429: hibernate.patch
|
||||||
# Jim's domain lock patch
|
# Jim's domain lock patch
|
||||||
Patch450: xend-domain-lock.patch
|
Patch450: xend-domain-lock.patch
|
||||||
# Hypervisor and PV driver Patches
|
# Hypervisor and PV driver Patches
|
||||||
@ -165,6 +173,7 @@ Patch511: pv-driver-build.patch
|
|||||||
Patch512: supported_module.diff
|
Patch512: supported_module.diff
|
||||||
Patch513: magic_ioport_compat.patch
|
Patch513: magic_ioport_compat.patch
|
||||||
Patch650: disable_emulated_device.diff
|
Patch650: disable_emulated_device.diff
|
||||||
|
Patch651: ioemu-disable-scsi.patch
|
||||||
# novell_shim patches
|
# novell_shim patches
|
||||||
Patch700: hv_tools.patch
|
Patch700: hv_tools.patch
|
||||||
Patch701: hv_xen_base.patch
|
Patch701: hv_xen_base.patch
|
||||||
@ -520,7 +529,6 @@ Authors:
|
|||||||
%patch313 -p1
|
%patch313 -p1
|
||||||
%patch314 -p1
|
%patch314 -p1
|
||||||
%patch315 -p1
|
%patch315 -p1
|
||||||
%patch316 -p1
|
|
||||||
#%patch320 -p1
|
#%patch320 -p1
|
||||||
#%patch321 -p1
|
#%patch321 -p1
|
||||||
%patch322 -p1
|
%patch322 -p1
|
||||||
@ -554,8 +562,16 @@ Authors:
|
|||||||
%patch360 -p1
|
%patch360 -p1
|
||||||
%patch361 -p1
|
%patch361 -p1
|
||||||
%patch362 -p1
|
%patch362 -p1
|
||||||
|
%patch363 -p1
|
||||||
|
%patch364 -p1
|
||||||
|
%patch365 -p1
|
||||||
|
%patch366 -p1
|
||||||
|
%patch367 -p1
|
||||||
|
%patch368 -p1
|
||||||
|
%patch369 -p1
|
||||||
|
%patch370 -p1
|
||||||
%patch400 -p1
|
%patch400 -p1
|
||||||
#%patch401 -p1
|
%patch401 -p1
|
||||||
%patch402 -p1
|
%patch402 -p1
|
||||||
%patch403 -p1
|
%patch403 -p1
|
||||||
%patch410 -p1
|
%patch410 -p1
|
||||||
@ -573,6 +589,7 @@ Authors:
|
|||||||
%patch426 -p1
|
%patch426 -p1
|
||||||
%patch427 -p1
|
%patch427 -p1
|
||||||
%patch428 -p1
|
%patch428 -p1
|
||||||
|
%patch429 -p1
|
||||||
%patch450 -p1
|
%patch450 -p1
|
||||||
%patch500 -p1
|
%patch500 -p1
|
||||||
%patch501 -p1
|
%patch501 -p1
|
||||||
@ -589,6 +606,7 @@ Authors:
|
|||||||
%patch512 -p1
|
%patch512 -p1
|
||||||
%patch513 -p1
|
%patch513 -p1
|
||||||
%patch650 -p1
|
%patch650 -p1
|
||||||
|
%patch651 -p1
|
||||||
%patch700 -p1
|
%patch700 -p1
|
||||||
%patch701 -p1
|
%patch701 -p1
|
||||||
%patch702 -p1
|
%patch702 -p1
|
||||||
@ -762,8 +780,13 @@ rm -f $RPM_BUILD_ROOT/usr/sbin/netfix
|
|||||||
rm -f $RPM_BUILD_ROOT/%{_libdir}/python%{pyver}/site-packages/*.egg-info
|
rm -f $RPM_BUILD_ROOT/%{_libdir}/python%{pyver}/site-packages/*.egg-info
|
||||||
rm -rf $RPM_BUILD_ROOT/html
|
rm -rf $RPM_BUILD_ROOT/html
|
||||||
rm -rf $RPM_BUILD_ROOT/usr/share/doc/xen/README.*
|
rm -rf $RPM_BUILD_ROOT/usr/share/doc/xen/README.*
|
||||||
rm -f $RPM_BUILD_ROOT/usr/share/create.dtd
|
rm -f $RPM_BUILD_ROOT/usr/share/xen/create.dtd
|
||||||
rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
|
rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
|
||||||
|
rm -f $RPM_BUILD_ROOT/%{_bindir}/qemu-img-xen
|
||||||
|
rm -f $RPM_BUILD_ROOT/%{_bindir}/qemu-nbd-xen
|
||||||
|
# FATE feature for remus rejected
|
||||||
|
rm -f $RPM_BUILD_ROOT/%{_bindir}/remus
|
||||||
|
rm -rf $RPM_BUILD_ROOT/%{_libdir}/python%{pyver}/site-packages/xen/remus
|
||||||
# This is necessary because of the build of libconfig for libxl
|
# This is necessary because of the build of libconfig for libxl
|
||||||
#rm -rf $RPM_BUILD_ROOT/$RPM_BUILD_ROOT
|
#rm -rf $RPM_BUILD_ROOT/$RPM_BUILD_ROOT
|
||||||
|
|
||||||
@ -798,11 +821,11 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
|
|||||||
/usr/bin/xenstore*
|
/usr/bin/xenstore*
|
||||||
/usr/bin/xentrace*
|
/usr/bin/xentrace*
|
||||||
/usr/bin/pygrub
|
/usr/bin/pygrub
|
||||||
/usr/bin/qemu-img-xen
|
#/usr/bin/qemu-img-xen
|
||||||
/usr/bin/qemu-nbd-xen
|
#/usr/bin/qemu-nbd-xen
|
||||||
/usr/bin/tapdisk-ioemu
|
/usr/bin/tapdisk-ioemu
|
||||||
/usr/bin/gdbserver-xen
|
/usr/bin/gdbserver-xen
|
||||||
/usr/bin/remus
|
#/usr/bin/remus
|
||||||
/usr/sbin/blktapctrl
|
/usr/sbin/blktapctrl
|
||||||
/usr/sbin/flask-loadpolicy
|
/usr/sbin/flask-loadpolicy
|
||||||
/usr/sbin/flask-getenforce
|
/usr/sbin/flask-getenforce
|
||||||
@ -954,6 +977,18 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
|
|||||||
%post tools
|
%post tools
|
||||||
%{fillup_and_insserv -y -n xend xend}
|
%{fillup_and_insserv -y -n xend xend}
|
||||||
%{fillup_and_insserv -y -n xendomains xendomains}
|
%{fillup_and_insserv -y -n xendomains xendomains}
|
||||||
|
if [ -f /usr/bin/qemu-img ]; then
|
||||||
|
if [ -f /usr/bin/qemu-img-xen ]; then
|
||||||
|
rm /usr/bin/qemu-img-xen
|
||||||
|
fi
|
||||||
|
ln -s /usr/bin/qemu-img /usr/bin/qemu-img-xen
|
||||||
|
fi
|
||||||
|
if [ -f /usr/bin/qemu-nbd ]; then
|
||||||
|
if [ -f /usr/bin/qemu-nbd-xen ]; then
|
||||||
|
rm /usr/bin/qemu-nbd-xen
|
||||||
|
fi
|
||||||
|
ln -s /usr/bin/qemu-nbd /usr/bin/qemu-nbd-xen
|
||||||
|
fi
|
||||||
|
|
||||||
%preun tools
|
%preun tools
|
||||||
%{stop_on_removal xendomains xend}
|
%{stop_on_removal xendomains xend}
|
||||||
@ -961,6 +996,12 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
|
|||||||
%postun tools
|
%postun tools
|
||||||
%{restart_on_update xend}
|
%{restart_on_update xend}
|
||||||
%{insserv_cleanup}
|
%{insserv_cleanup}
|
||||||
|
if [ -f /usr/bin/qemu-img-xen ]; then
|
||||||
|
rm /usr/bin/qemu-img-xen
|
||||||
|
fi
|
||||||
|
if [ -f /usr/bin/qemu-nbd-xen ]; then
|
||||||
|
rm /usr/bin/qemu-nbd-xen
|
||||||
|
fi
|
||||||
|
|
||||||
%post libs
|
%post libs
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||||
@@ -3916,6 +3916,14 @@ class XendDomainInfo:
|
@@ -3920,6 +3920,14 @@ class XendDomainInfo:
|
||||||
if not config.has_key('backend'):
|
if not config.has_key('backend'):
|
||||||
config['backend'] = "00000000-0000-0000-0000-000000000000"
|
config['backend'] = "00000000-0000-0000-0000-000000000000"
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||||
@@ -2308,7 +2308,7 @@ class XendDomainInfo:
|
@@ -2313,7 +2313,7 @@ class XendDomainInfo:
|
||||||
# To prohibit directory traversal
|
# To prohibit directory traversal
|
||||||
based_name = os.path.basename(self.info['name_label'])
|
based_name = os.path.basename(self.info['name_label'])
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
from xen.util.blkif import parse_uname
|
from xen.util.blkif import parse_uname
|
||||||
import xen.util.xsm.xsm as security
|
import xen.util.xsm.xsm as security
|
||||||
from xen.util import xsconstants
|
from xen.util import xsconstants
|
||||||
@@ -465,6 +466,7 @@ class XendDomainInfo:
|
@@ -466,6 +467,7 @@ class XendDomainInfo:
|
||||||
|
|
||||||
if self._stateGet() in (XEN_API_VM_POWER_STATE_HALTED, XEN_API_VM_POWER_STATE_SUSPENDED, XEN_API_VM_POWER_STATE_CRASHED):
|
if self._stateGet() in (XEN_API_VM_POWER_STATE_HALTED, XEN_API_VM_POWER_STATE_SUSPENDED, XEN_API_VM_POWER_STATE_CRASHED):
|
||||||
try:
|
try:
|
||||||
@ -91,7 +91,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
XendTask.log_progress(0, 30, self._constructDomain)
|
XendTask.log_progress(0, 30, self._constructDomain)
|
||||||
XendTask.log_progress(31, 60, self._initDomain)
|
XendTask.log_progress(31, 60, self._initDomain)
|
||||||
|
|
||||||
@@ -2953,6 +2955,11 @@ class XendDomainInfo:
|
@@ -2972,6 +2974,11 @@ class XendDomainInfo:
|
||||||
|
|
||||||
self._stateSet(DOM_STATE_HALTED)
|
self._stateSet(DOM_STATE_HALTED)
|
||||||
self.domid = None # Do not push into _stateSet()!
|
self.domid = None # Do not push into _stateSet()!
|
||||||
@ -103,7 +103,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
finally:
|
finally:
|
||||||
self.refresh_shutdown_lock.release()
|
self.refresh_shutdown_lock.release()
|
||||||
|
|
||||||
@@ -4454,6 +4461,74 @@ class XendDomainInfo:
|
@@ -4478,6 +4485,74 @@ class XendDomainInfo:
|
||||||
def has_device(self, dev_class, dev_uuid):
|
def has_device(self, dev_class, dev_uuid):
|
||||||
return (dev_uuid in self.info['%s_refs' % dev_class.lower()])
|
return (dev_uuid in self.info['%s_refs' % dev_class.lower()])
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user