Accepting request 33724 from Virtualization
Copy from Virtualization/xen based on submit request 33724 from user charlesa OBS-URL: https://build.opensuse.org/request/show/33724 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/xen?expand=0&rev=84
This commit is contained in:
commit
7418cbbf9e
@ -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
|
||||||
@@ -2863,7 +2863,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
|
||||||
|
@ -31,6 +31,7 @@ optional packages are also installed:
|
|||||||
vm-install (Optional, to install VMs)
|
vm-install (Optional, to install VMs)
|
||||||
python-gtk (Optional, to install VMs graphically)
|
python-gtk (Optional, to install VMs graphically)
|
||||||
virt-manager (Optional, to manage VMs graphically)
|
virt-manager (Optional, to manage VMs graphically)
|
||||||
|
virt-viewer (Optional, to view VMs outside virt-manager)
|
||||||
tightvnc (Optional, to view VMs outside virt-manager)
|
tightvnc (Optional, to view VMs outside virt-manager)
|
||||||
|
|
||||||
Additional packages:
|
Additional packages:
|
||||||
@ -328,7 +329,7 @@ documentation for workarounds.
|
|||||||
|
|
||||||
Networking
|
Networking
|
||||||
----------
|
----------
|
||||||
Your virtual machines become much more useful if your can reach them via the
|
Your virtual machines become much more useful if you can reach them via the
|
||||||
network. Starting with openSUSE11.1 and SLE11, networking in domain 0 is
|
network. Starting with openSUSE11.1 and SLE11, networking in domain 0 is
|
||||||
configured and managed via YaST. The yast2-networking module can be used
|
configured and managed via YaST. The yast2-networking module can be used
|
||||||
to create and manage bridged networks. During initial installation, a bridged
|
to create and manage bridged networks. During initial installation, a bridged
|
||||||
|
@ -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
|
||||||
@@ -225,6 +225,7 @@ static int open_disk(struct td_state *s,
|
@@ -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;
|
||||||
@ -10,7 +10,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_blktap.c
|
|||||||
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 */
|
||||||
@ -23,7 +23,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
|
||||||
@@ -133,7 +133,8 @@ static void insert_media(void *opaque)
|
@@ -136,7 +136,8 @@ static void insert_media(void *opaque)
|
||||||
else
|
else
|
||||||
format = &bdrv_raw;
|
format = &bdrv_raw;
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
#ifdef CONFIG_STUBDOM
|
#ifdef CONFIG_STUBDOM
|
||||||
{
|
{
|
||||||
char *buf, *backend, *params_path, *params;
|
char *buf, *backend, *params_path, *params;
|
||||||
@@ -397,9 +398,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;
|
||||||
@ -45,7 +45,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
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;
|
||||||
@@ -461,7 +462,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++) {
|
||||||
@ -55,8 +55,8 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
/* 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)
|
||||||
@@ -560,6 +562,17 @@ void xenstore_parse_domain_config(int hv
|
@@ -550,6 +552,17 @@ void xenstore_parse_domain_config(int hv
|
||||||
}
|
format = &bdrv_raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ /* read the mode of the device */
|
+ /* read the mode of the device */
|
||||||
@ -73,7 +73,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
#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.
|
||||||
@@ -612,7 +625,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;
|
||||||
@ -82,12 +82,12 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
pstrcpy(bs->filename, sizeof(bs->filename), params);
|
pstrcpy(bs->filename, sizeof(bs->filename), params);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -641,7 +654,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
|
||||||
|
@ -5,7 +5,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
|
||||||
@@ -3262,7 +3262,7 @@ class XendDomainInfo:
|
@@ -3286,7 +3286,7 @@ class XendDomainInfo:
|
||||||
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
||||||
|
|
||||||
vbd = {
|
vbd = {
|
||||||
@ -18,7 +18,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
|
||||||
@@ -396,9 +396,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;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
@ -30,7 +30,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
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;
|
||||||
@@ -438,6 +438,14 @@ void xenstore_parse_domain_config(int hv
|
@@ -439,6 +439,14 @@ void xenstore_parse_domain_config(int hv
|
||||||
e_danger[i]);
|
e_danger[i]);
|
||||||
if (bpath == NULL)
|
if (bpath == NULL)
|
||||||
continue;
|
continue;
|
||||||
@ -45,7 +45,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
/* read the name of the device */
|
/* read the name of the device */
|
||||||
if (pasprintf(&buf, "%s/dev", bpath) == -1)
|
if (pasprintf(&buf, "%s/dev", bpath) == -1)
|
||||||
continue;
|
continue;
|
||||||
@@ -712,6 +720,7 @@ void xenstore_parse_domain_config(int hv
|
@@ -715,6 +723,7 @@ void xenstore_parse_domain_config(int hv
|
||||||
free(danger_type);
|
free(danger_type);
|
||||||
free(params);
|
free(params);
|
||||||
free(dev);
|
free(dev);
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
Index: xen-4.0.0-testing/tools/python/xen/xend/server/HalDaemon.py
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/server/HalDaemon.py
|
+++ b/tools/python/xen/xend/server/HalDaemon.py
|
||||||
@@ -0,0 +1,243 @@
|
@@ -0,0 +1,243 @@
|
||||||
+#!/usr/bin/env python
|
+#!/usr/bin/env python
|
||||||
+# -*- mode: python; -*-
|
+# -*- mode: python; -*-
|
||||||
@ -246,10 +244,8 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/server/HalDaemon.py
|
|||||||
+ print 'Falling off end'
|
+ print 'Falling off end'
|
||||||
+
|
+
|
||||||
+
|
+
|
||||||
Index: xen-4.0.0-testing/tools/python/xen/xend/server/Hald.py
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/server/Hald.py
|
+++ b/tools/python/xen/xend/server/Hald.py
|
||||||
@@ -0,0 +1,125 @@
|
@@ -0,0 +1,125 @@
|
||||||
+#============================================================================
|
+#============================================================================
|
||||||
+# This library is free software; you can redistribute it and/or
|
+# This library is free software; you can redistribute it and/or
|
||||||
@ -376,10 +372,8 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/server/Hald.py
|
|||||||
+ watcher.run()
|
+ watcher.run()
|
||||||
+ time.sleep(10)
|
+ time.sleep(10)
|
||||||
+ watcher.shutdown()
|
+ watcher.shutdown()
|
||||||
Index: xen-4.0.0-testing/tools/python/xen/xend/server/SrvServer.py
|
--- a/tools/python/xen/xend/server/SrvServer.py
|
||||||
===================================================================
|
+++ b/tools/python/xen/xend/server/SrvServer.py
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/server/SrvServer.py
|
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/server/SrvServer.py
|
|
||||||
@@ -56,6 +56,7 @@ from xen.web.SrvDir import SrvDir
|
@@ -56,6 +56,7 @@ from xen.web.SrvDir import SrvDir
|
||||||
|
|
||||||
from SrvRoot import SrvRoot
|
from SrvRoot import SrvRoot
|
||||||
@ -397,15 +391,22 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/server/SrvServer.py
|
|||||||
|
|
||||||
def create():
|
def create():
|
||||||
root = SrvDir()
|
root = SrvDir()
|
||||||
Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
--- a/tools/ioemu-remote/xenstore.c
|
||||||
===================================================================
|
+++ b/tools/ioemu-remote/xenstore.c
|
||||||
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
|
@@ -18,6 +18,7 @@
|
||||||
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
#include "exec-all.h"
|
||||||
@@ -513,6 +513,19 @@ void xenstore_parse_domain_config(int hv
|
#include "sysemu.h"
|
||||||
params = newparams;
|
|
||||||
format = &bdrv_raw;
|
+#include "console.h"
|
||||||
}
|
#include "hw.h"
|
||||||
+ /* if cdrom pyhsical put a watch on media-present */
|
#include "pci.h"
|
||||||
|
#include "qemu-timer.h"
|
||||||
|
@@ -548,6 +549,21 @@ void xenstore_parse_domain_config(int hv
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bs = bdrv_new(dev);
|
||||||
|
+
|
||||||
|
+ /* if cdrom physical put a watch on media-present */
|
||||||
+ if (bdrv_get_type_hint(bs) == BDRV_TYPE_CDROM) {
|
+ if (bdrv_get_type_hint(bs) == BDRV_TYPE_CDROM) {
|
||||||
+ if (drv && !strcmp(drv, "phy")) {
|
+ if (drv && !strcmp(drv, "phy")) {
|
||||||
+ if (pasprintf(&buf, "%s/media-present", bpath) != -1) {
|
+ if (pasprintf(&buf, "%s/media-present", bpath) != -1) {
|
||||||
@ -418,14 +419,15 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
#if 0
|
/* check if it is a cdrom */
|
||||||
/* Phantom VBDs are disabled because the use of paths
|
if (danger_type && !strcmp(danger_type, "cdrom")) {
|
||||||
@@ -938,6 +951,50 @@ void xenstore_record_dm_state(const char
|
bdrv_set_type_hint(bs, BDRV_TYPE_CDROM);
|
||||||
|
@@ -938,6 +954,50 @@ void xenstore_record_dm_state(const char
|
||||||
xenstore_record_dm("state", state);
|
xenstore_record_dm("state", state);
|
||||||
}
|
}
|
||||||
|
|
||||||
+void xenstore_process_media_change_event(char **vec)
|
+static void xenstore_process_media_change_event(char **vec)
|
||||||
+{
|
+{
|
||||||
+ char *media_present = NULL;
|
+ char *media_present = NULL;
|
||||||
+ unsigned int len;
|
+ unsigned int len;
|
||||||
@ -472,7 +474,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
void xenstore_process_event(void *opaque)
|
void xenstore_process_event(void *opaque)
|
||||||
{
|
{
|
||||||
char **vec, *offset, *bpath = NULL, *buf = NULL, *drv = NULL, *image = NULL;
|
char **vec, *offset, *bpath = NULL, *buf = NULL, *drv = NULL, *image = NULL;
|
||||||
@@ -968,6 +1025,11 @@ void xenstore_process_event(void *opaque
|
@@ -968,6 +1028,11 @@ void xenstore_process_event(void *opaque
|
||||||
xenstore_watch_callbacks[i].cb(vec[XS_WATCH_TOKEN],
|
xenstore_watch_callbacks[i].cb(vec[XS_WATCH_TOKEN],
|
||||||
xenstore_watch_callbacks[i].opaque);
|
xenstore_watch_callbacks[i].opaque);
|
||||||
|
|
||||||
|
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
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||||
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||||
@@ -363,6 +363,11 @@ static int __devinit platform_pci_init(s
|
@@ -401,6 +401,11 @@ static int __devinit platform_pci_init(s
|
||||||
platform_mmio = mmio_addr;
|
platform_mmio = mmio_addr;
|
||||||
platform_mmiolen = mmio_len;
|
platform_mmiolen = mmio_len;
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
retries = 10
|
||||||
|
while retries and not self.partitionsdeactivated():
|
||||||
verbose_print("kpartx %s -d '%s'" % (kpartx_args, self.physdev()))
|
verbose_print("kpartx %s -d '%s'" % (kpartx_args, self.physdev()))
|
||||||
fd = os.popen("kpartx %s -d '%s'" % (kpartx_args, self.physdev()))
|
os.system("kpartx %s -d '%s'" % (kpartx_args, self.physdev()))
|
||||||
fd.close()
|
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,28 +2,29 @@ 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,15 +914,15 @@ static PyObject *pyxc_hvm_build(XcObject
|
@@ -917,16 +917,16 @@ static PyObject *pyxc_hvm_build(XcObject
|
||||||
int i;
|
|
||||||
#endif
|
#endif
|
||||||
|
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;
|
||||||
uint64_t vcpu_avail = 1;
|
PyObject *vcpu_avail_handle = NULL;
|
||||||
|
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",
|
||||||
- "vcpu_avail", "acpi", "apic", NULL };
|
- "vcpu_avail", "acpi", "apic", NULL };
|
||||||
- if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iis|iilii", kwd_list,
|
- if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iis|iiOii", kwd_list,
|
||||||
+ "memsize", "image", "target", "vcpus",
|
+ "memsize", "image", "target", "vcpus",
|
||||||
+ "vcpu_avail", "extid", "acpi", "apic", NULL };
|
+ "vcpu_avail", "extid", "acpi", "apic", NULL };
|
||||||
+ if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iis|iiliii", kwd_list,
|
+ if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iis|iiOiii", kwd_list,
|
||||||
&dom, &memsize, &image, &target, &vcpus,
|
&dom, &memsize, &image, &target, &vcpus,
|
||||||
- &vcpu_avail, &acpi, &apic) )
|
- &vcpu_avail_handle, &acpi, &apic) )
|
||||||
+ &vcpu_avail, &extid, &acpi, &apic) )
|
+ &vcpu_avail_handle, &extid, &acpi, &apic) )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if ( target == -1 )
|
memset(vcpu_avail, 0, sizeof(vcpu_avail));
|
||||||
@@ -950,6 +950,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
|
||||||
@ -35,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,
|
||||||
@ -47,7 +48,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
||||||
@@ -841,6 +841,7 @@ class HVMImageHandler(ImageHandler):
|
@@ -839,6 +839,7 @@ class HVMImageHandler(ImageHandler):
|
||||||
|
|
||||||
self.apic = int(vmConfig['platform'].get('apic', 0))
|
self.apic = int(vmConfig['platform'].get('apic', 0))
|
||||||
self.acpi = int(vmConfig['platform'].get('acpi', 0))
|
self.acpi = int(vmConfig['platform'].get('acpi', 0))
|
||||||
@ -55,7 +56,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
|||||||
self.guest_os_type = vmConfig['platform'].get('guest_os_type')
|
self.guest_os_type = vmConfig['platform'].get('guest_os_type')
|
||||||
self.memory_sharing = int(vmConfig['memory_sharing'])
|
self.memory_sharing = int(vmConfig['memory_sharing'])
|
||||||
xc.dom_set_memshr(self.vm.getDomid(), self.memory_sharing)
|
xc.dom_set_memshr(self.vm.getDomid(), self.memory_sharing)
|
||||||
@@ -966,6 +967,7 @@ class HVMImageHandler(ImageHandler):
|
@@ -964,6 +965,7 @@ class HVMImageHandler(ImageHandler):
|
||||||
log.debug("target = %d", mem_mb)
|
log.debug("target = %d", mem_mb)
|
||||||
log.debug("vcpus = %d", self.vm.getVCpuCount())
|
log.debug("vcpus = %d", self.vm.getVCpuCount())
|
||||||
log.debug("vcpu_avail = %li", self.vm.getVCpuAvail())
|
log.debug("vcpu_avail = %li", self.vm.getVCpuAvail())
|
||||||
@ -63,7 +64,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
|||||||
log.debug("acpi = %d", self.acpi)
|
log.debug("acpi = %d", self.acpi)
|
||||||
log.debug("apic = %d", self.apic)
|
log.debug("apic = %d", self.apic)
|
||||||
|
|
||||||
@@ -975,6 +977,7 @@ class HVMImageHandler(ImageHandler):
|
@@ -973,6 +975,7 @@ class HVMImageHandler(ImageHandler):
|
||||||
target = mem_mb,
|
target = mem_mb,
|
||||||
vcpus = self.vm.getVCpuCount(),
|
vcpus = self.vm.getVCpuCount(),
|
||||||
vcpu_avail = self.vm.getVCpuAvail(),
|
vcpu_avail = self.vm.getVCpuAvail(),
|
||||||
@ -86,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
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
%patch
|
|
||||||
Index: xen-4.0.0-testing/xen/include/asm-x86/hvm/hvm_extensions.h
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/xen/include/asm-x86/hvm/hvm_extensions.h
|
+++ b/xen/include/asm-x86/hvm/hvm_extensions.h
|
||||||
@@ -0,0 +1,183 @@
|
@@ -0,0 +1,183 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
@ -187,17 +184,13 @@ Index: xen-4.0.0-testing/xen/include/asm-x86/hvm/hvm_extensions.h
|
|||||||
+int hyperx_initialize(struct domain *d);
|
+int hyperx_initialize(struct domain *d);
|
||||||
+
|
+
|
||||||
+#endif
|
+#endif
|
||||||
Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/Makefile
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/Makefile
|
+++ b/xen/arch/x86/hvm/hyperv/Makefile
|
||||||
@@ -0,0 +1,2 @@
|
@@ -0,0 +1,2 @@
|
||||||
+obj-y += hv_intercept.o
|
+obj-y += hv_intercept.o
|
||||||
+obj-y += hv_hypercall.o
|
+obj-y += hv_hypercall.o
|
||||||
Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_errno.h
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_errno.h
|
+++ b/xen/arch/x86/hvm/hyperv/hv_errno.h
|
||||||
@@ -0,0 +1,62 @@
|
@@ -0,0 +1,62 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
@ -261,10 +254,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_errno.h
|
|||||||
+#define HV_STATUS_NO_MEMORY_256PAGES 0x0103
|
+#define HV_STATUS_NO_MEMORY_256PAGES 0x0103
|
||||||
+#define HV_STATUS_NO_MEMORY_1024PAGES 0x0104
|
+#define HV_STATUS_NO_MEMORY_1024PAGES 0x0104
|
||||||
+#endif
|
+#endif
|
||||||
Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
|
+++ b/xen/arch/x86/hvm/hyperv/hv_hypercall.c
|
||||||
@@ -0,0 +1,153 @@
|
@@ -0,0 +1,153 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
@ -419,10 +410,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
|
|||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h
|
+++ b/xen/arch/x86/hvm/hyperv/hv_hypercall.h
|
||||||
@@ -0,0 +1,46 @@
|
@@ -0,0 +1,46 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
@ -470,10 +459,8 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h
|
|||||||
+#define HV_NOTIFY_LONG_SPIN_WAIT 0x0008
|
+#define HV_NOTIFY_LONG_SPIN_WAIT 0x0008
|
||||||
+
|
+
|
||||||
+#endif /* HV_HYPERCALL_H */
|
+#endif /* HV_HYPERCALL_H */
|
||||||
Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
|
+++ b/xen/arch/x86/hvm/hyperv/hv_intercept.c
|
||||||
@@ -0,0 +1,1009 @@
|
@@ -0,0 +1,1009 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
@ -647,7 +634,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
|
|||||||
+ printk("Hyperv dom create failed\n");
|
+ printk("Hyperv dom create failed\n");
|
||||||
+ return (1);
|
+ return (1);
|
||||||
+ }
|
+ }
|
||||||
+ for (i=0; i < MAX_VIRT_CPUS; i++)
|
+ for (i = 0; i < d->max_vcpus; i++)
|
||||||
+ {
|
+ {
|
||||||
+ if (d->vcpu[i] != NULL)
|
+ if (d->vcpu[i] != NULL)
|
||||||
+ {
|
+ {
|
||||||
@ -723,7 +710,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
|
|||||||
+static inline u32
|
+static inline u32
|
||||||
+hv_get_max_vcpus_supported(void)
|
+hv_get_max_vcpus_supported(void)
|
||||||
+{
|
+{
|
||||||
+ return (MAX_VIRT_CPUS);
|
+ return HVM_MAX_VCPUS;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+
|
+
|
||||||
@ -929,7 +916,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
|
|||||||
+ ASSERT(curp != NULL);
|
+ ASSERT(curp != NULL);
|
||||||
+#ifdef HV_STATS
|
+#ifdef HV_STATS
|
||||||
+ printk("DUMP STATS\n");
|
+ printk("DUMP STATS\n");
|
||||||
+ for (i=0; i < MAX_VIRT_CPUS; i++)
|
+ for (i = 0; i < d->max_vcpus; i++)
|
||||||
+ if (d->vcpu[i] != NULL)
|
+ if (d->vcpu[i] != NULL)
|
||||||
+ hv_print_stats(curp, i);
|
+ hv_print_stats(curp, i);
|
||||||
+#endif
|
+#endif
|
||||||
@ -1484,11 +1471,9 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
|
|||||||
+ hvm_inject_exception(TRAP_gp_fault, 0, 0);
|
+ hvm_inject_exception(TRAP_gp_fault, 0, 0);
|
||||||
+ return (1);
|
+ return (1);
|
||||||
+}
|
+}
|
||||||
Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_shim.h
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_shim.h
|
+++ b/xen/arch/x86/hvm/hyperv/hv_shim.h
|
||||||
@@ -0,0 +1,285 @@
|
@@ -0,0 +1,286 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
+ | Copyright (c) [2007, 2008] Novell, Inc.
|
+ | Copyright (c) [2007, 2008] Novell, Inc.
|
||||||
@ -1528,6 +1513,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_shim.h
|
|||||||
+#include <asm/domain.h>
|
+#include <asm/domain.h>
|
||||||
+#include <asm/shadow.h>
|
+#include <asm/shadow.h>
|
||||||
+#include <public/xen.h>
|
+#include <public/xen.h>
|
||||||
|
+#include <public/hvm/hvm_info_table.h>
|
||||||
+
|
+
|
||||||
+#include "hv_hypercall.h"
|
+#include "hv_hypercall.h"
|
||||||
+
|
+
|
||||||
@ -1704,7 +1690,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hyperv/hv_shim.h
|
|||||||
+ * Each VCPU here corresponds to the vcpu in the underlying hypervisor;
|
+ * Each VCPU here corresponds to the vcpu in the underlying hypervisor;
|
||||||
+ * they share the same ID.
|
+ * they share the same ID.
|
||||||
+ */
|
+ */
|
||||||
+ hv_vcpu_t vcpu_state[MAX_VIRT_CPUS];
|
+ hv_vcpu_t vcpu_state[HVM_MAX_VCPUS];
|
||||||
+} hv_partition_t;
|
+} hv_partition_t;
|
||||||
+
|
+
|
||||||
+
|
+
|
||||||
|
@ -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);
|
@ -1,3 +1,3 @@
|
|||||||
%defattr (-,root,root)
|
%defattr (-,root,root)
|
||||||
/lib/modules/%2-%1
|
/lib/modules/%2-%1
|
||||||
/etc/modprobe.d/xen_pvdrivers
|
/etc/modprobe.d/xen_pvdrivers.conf
|
||||||
|
@ -6,11 +6,11 @@ Index: xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||||
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||||
@@ -289,7 +289,10 @@ static int check_platform_magic(struct d
|
@@ -320,7 +320,10 @@ static int check_platform_magic(struct d
|
||||||
|
|
||||||
if (magic != XEN_IOPORT_MAGIC_VAL) {
|
if (magic != XEN_IOPORT_MAGIC_VAL) {
|
||||||
dev_err(dev, "invalid magic %#x", magic);
|
err = "unrecognised magic value";
|
||||||
- return -ENODEV;
|
- goto no_dev;
|
||||||
+ /*
|
+ /*
|
||||||
+ * Older backend; just return 0 to be compatible.
|
+ * Older backend; just return 0 to be compatible.
|
||||||
+ */
|
+ */
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
--- 2009-11-09.orig/unmodified_drivers/linux-2.6/platform-pci/evtchn.c 2008-10-14 19:44:11.000000000 +0200
|
Index: xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/evtchn.c
|
||||||
+++ 2009-11-09/unmodified_drivers/linux-2.6/platform-pci/evtchn.c 2009-11-24 17:38:08.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/evtchn.c
|
||||||
|
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/evtchn.c
|
||||||
@@ -40,7 +40,9 @@
|
@@ -40,7 +40,9 @@
|
||||||
#include <xen/platform-compat.h>
|
#include <xen/platform-compat.h>
|
||||||
#endif
|
#endif
|
||||||
@ -10,9 +12,11 @@
|
|||||||
|
|
||||||
#define is_valid_evtchn(x) ((x) != 0)
|
#define is_valid_evtchn(x) ((x) != 0)
|
||||||
#define evtchn_from_irq(x) (irq_evtchn[irq].evtchn)
|
#define evtchn_from_irq(x) (irq_evtchn[irq].evtchn)
|
||||||
--- 2009-11-09.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c 2009-02-24 20:09:53.000000000 +0100
|
Index: xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||||
+++ 2009-11-09/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c 2009-11-24 17:45:02.000000000 +0100
|
===================================================================
|
||||||
@@ -70,7 +70,6 @@ static uint64_t callback_via;
|
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||||
|
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||||
|
@@ -77,7 +77,6 @@ static uint64_t callback_via;
|
||||||
static int __devinit init_xen_info(void)
|
static int __devinit init_xen_info(void)
|
||||||
{
|
{
|
||||||
struct xen_add_to_physmap xatp;
|
struct xen_add_to_physmap xatp;
|
||||||
@ -20,7 +24,7 @@
|
|||||||
|
|
||||||
#ifdef __ia64__
|
#ifdef __ia64__
|
||||||
xencomm_initialize();
|
xencomm_initialize();
|
||||||
@@ -78,6 +77,7 @@ static int __devinit init_xen_info(void)
|
@@ -85,6 +84,7 @@ static int __devinit init_xen_info(void)
|
||||||
|
|
||||||
setup_xen_features();
|
setup_xen_features();
|
||||||
|
|
||||||
@ -28,7 +32,7 @@
|
|||||||
shared_info_frame = alloc_xen_mmio(PAGE_SIZE) >> PAGE_SHIFT;
|
shared_info_frame = alloc_xen_mmio(PAGE_SIZE) >> PAGE_SHIFT;
|
||||||
xatp.domid = DOMID_SELF;
|
xatp.domid = DOMID_SELF;
|
||||||
xatp.idx = 0;
|
xatp.idx = 0;
|
||||||
@@ -90,6 +90,11 @@ static int __devinit init_xen_info(void)
|
@@ -97,6 +97,11 @@ static int __devinit init_xen_info(void)
|
||||||
ioremap(shared_info_frame << PAGE_SHIFT, PAGE_SIZE);
|
ioremap(shared_info_frame << PAGE_SHIFT, PAGE_SIZE);
|
||||||
if (shared_info_area == NULL)
|
if (shared_info_area == NULL)
|
||||||
panic("can't map shared info\n");
|
panic("can't map shared info\n");
|
||||||
@ -40,8 +44,10 @@
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
--- 2009-11-09.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h 2008-10-14 19:44:11.000000000 +0200
|
Index: xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h
|
||||||
+++ 2009-11-09/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h 2009-11-24 17:40:08.000000000 +0100
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h
|
||||||
|
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h
|
||||||
@@ -27,6 +27,11 @@
|
@@ -27,6 +27,11 @@
|
||||||
unsigned long alloc_xen_mmio(unsigned long len);
|
unsigned long alloc_xen_mmio(unsigned long len);
|
||||||
void platform_pci_resume(void);
|
void platform_pci_resume(void);
|
||||||
|
25
qemu-console-retry.patch
Normal file
25
qemu-console-retry.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
Index: xen-4.0.0-testing/tools/ioemu-remote/hw/xen_console.c
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/ioemu-remote/hw/xen_console.c
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/hw/xen_console.c
|
||||||
|
@@ -182,6 +182,7 @@ static int con_init(struct XenDevice *xe
|
||||||
|
{
|
||||||
|
struct XenConsole *con = container_of(xendev, struct XenConsole, xendev);
|
||||||
|
char *type, *dom;
|
||||||
|
+ int retries = 0;
|
||||||
|
|
||||||
|
/* setup */
|
||||||
|
dom = xs_get_domain_path(xenstore, con->xendev.dom);
|
||||||
|
@@ -191,7 +192,11 @@ static int con_init(struct XenDevice *xe
|
||||||
|
snprintf(con->console, sizeof(con->console), "%s/device/console/%d", dom, xendev->dev);
|
||||||
|
free(dom);
|
||||||
|
|
||||||
|
- type = xenstore_read_str(con->console, "type");
|
||||||
|
+ while (!(type = xenstore_read_str(con->console, "type")) && retries < 5) {
|
||||||
|
+ usleep(250000);
|
||||||
|
+ retries++;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!type || 0 != strcmp(type, "ioemu")) {
|
||||||
|
xen_be_printf(xendev, 1, "not for me (type=%s)\n", type);
|
||||||
|
if (type)
|
66
shadow.patch
Normal file
66
shadow.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
In domain_create, previously we reserve 1M memory for domain creation (as
|
||||||
|
described in xend comment), and these memory SHOULD NOT related with vcpu
|
||||||
|
number. And later, shadow_mem_control() will modify the shadow size to 256
|
||||||
|
pages per vcpu (also plus some other values related with guest memory size...).
|
||||||
|
Therefore the C/S 20389 which modifies 1M to 4M to fit more vcpu number is
|
||||||
|
wrong. I'm sorry for that.
|
||||||
|
|
||||||
|
Following is the reason why currently 1M doesn't work for big number vcpus,
|
||||||
|
as we mentioned, it caused Xen crash.
|
||||||
|
|
||||||
|
Each time when sh_set_allocation() is called, it checks whether
|
||||||
|
shadow_min_acceptable_pages() has been allocated, if not, it will allocate
|
||||||
|
them. That is to say, it is 128 pages per vcpu. But before we define
|
||||||
|
d->max_vcpu, guest vcpu hasn't been initialized, so
|
||||||
|
shadow_min_acceptable_pages() always returns 0. Therefore we only allocated 1M
|
||||||
|
shadow memory for domain_create, and didn't satisfy 128 pages per vcpu for
|
||||||
|
alloc_vcpu().
|
||||||
|
|
||||||
|
As we know, vcpu allocation is done in the hypercall of
|
||||||
|
XEN_DOMCTL_max_vcpus. However, at this point we haven't called
|
||||||
|
shadow_mem_control() and are still using the pre-allocated 1M shadow memory to
|
||||||
|
allocate so many vcpus. So it should be a BUG. Therefore when vcpu number
|
||||||
|
increases, 1M is not enough and causes Xen crash. C/S 20389 exposes this issue.
|
||||||
|
|
||||||
|
So I think the right process should be, after d->max_vcpu is set and before
|
||||||
|
alloc_vcpu(), we should call sh_set_allocation() to satisfy 128 pages per vcpu.
|
||||||
|
The following patch does this work. Is it work for you? Thanks!
|
||||||
|
|
||||||
|
Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
|
||||||
|
|
||||||
|
Index: xen-4.0.0-testing/xen/arch/x86/mm/shadow/common.c
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/xen/arch/x86/mm/shadow/common.c
|
||||||
|
+++ xen-4.0.0-testing/xen/arch/x86/mm/shadow/common.c
|
||||||
|
@@ -41,6 +41,9 @@
|
||||||
|
|
||||||
|
DEFINE_PER_CPU(uint32_t,trace_shadow_path_flags);
|
||||||
|
|
||||||
|
+static unsigned int sh_set_allocation(struct domain *d,
|
||||||
|
+ unsigned int pages,
|
||||||
|
+ int *preempted);
|
||||||
|
/* Set up the shadow-specific parts of a domain struct at start of day.
|
||||||
|
* Called for every domain from arch_domain_create() */
|
||||||
|
void shadow_domain_init(struct domain *d, unsigned int domcr_flags)
|
||||||
|
@@ -82,6 +85,12 @@ void shadow_vcpu_init(struct vcpu *v)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+ if ( !is_idle_domain(v->domain) )
|
||||||
|
+ {
|
||||||
|
+ shadow_lock(v->domain);
|
||||||
|
+ sh_set_allocation(v->domain, 128, NULL);
|
||||||
|
+ shadow_unlock(v->domain);
|
||||||
|
+ }
|
||||||
|
v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -3102,7 +3111,7 @@ int shadow_enable(struct domain *d, u32
|
||||||
|
{
|
||||||
|
unsigned int r;
|
||||||
|
shadow_lock(d);
|
||||||
|
- r = sh_set_allocation(d, 1024, NULL); /* Use at least 4MB */
|
||||||
|
+ r = sh_set_allocation(d, 256, NULL); /* Use at least 1MB */
|
||||||
|
if ( r != 0 )
|
||||||
|
{
|
||||||
|
sh_set_allocation(d, 0, NULL);
|
@ -2,7 +2,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
|
||||||
@@ -865,6 +865,18 @@ static void xenstore_process_dm_command_
|
@@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h
|
|||||||
void xenstore_process_event(void *opaque);
|
void xenstore_process_event(void *opaque);
|
||||||
void xenstore_record_dm(const char *subpath, const char *state);
|
void xenstore_record_dm(const char *subpath, const char *state);
|
||||||
void xenstore_record_dm_state(const char *state);
|
void xenstore_record_dm_state(const char *state);
|
||||||
+void xenstore_record_dm_error(char *errmsg);
|
+void xenstore_record_dm_error(const char *errmsg);
|
||||||
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);
|
||||||
@ -205,9 +205,9 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
#include "sysemu.h"
|
#include "sysemu.h"
|
||||||
+#include "qemu-xen.h"
|
+#include "qemu-xen.h"
|
||||||
|
|
||||||
|
#include "console.h"
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
#include "pci.h"
|
@@ -839,6 +840,7 @@ static void xenstore_process_dm_command_
|
||||||
@@ -836,6 +837,7 @@ static void xenstore_process_dm_command_
|
|
||||||
{
|
{
|
||||||
char *path = NULL, *command = NULL, *par = NULL;
|
char *path = NULL, *command = NULL, *par = NULL;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
@ -215,7 +215,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
|
|
||||||
if (pasprintf(&path,
|
if (pasprintf(&path,
|
||||||
"/local/domain/0/device-model/%u/command", domid) == -1) {
|
"/local/domain/0/device-model/%u/command", domid) == -1) {
|
||||||
@@ -851,7 +853,18 @@ static void xenstore_process_dm_command_
|
@@ -854,7 +856,18 @@ static void xenstore_process_dm_command_
|
||||||
|
|
||||||
if (!strncmp(command, "save", len)) {
|
if (!strncmp(command, "save", len)) {
|
||||||
fprintf(logfile, "dm-command: pause and save state\n");
|
fprintf(logfile, "dm-command: pause and save state\n");
|
||||||
@ -235,17 +235,17 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
} 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;
|
||||||
@@ -984,6 +997,13 @@ void xenstore_record_dm_state(const char
|
@@ -987,6 +1000,13 @@ void xenstore_record_dm_state(const char
|
||||||
xenstore_record_dm("state", state);
|
xenstore_record_dm("state", state);
|
||||||
}
|
}
|
||||||
|
|
||||||
+void xenstore_record_dm_error(char *errmsg)
|
+void xenstore_record_dm_error(const char *errmsg)
|
||||||
+{
|
+{
|
||||||
+ fprintf(logfile, "%s\n", errmsg);
|
+ fprintf(logfile, "%s\n", errmsg);
|
||||||
+ xenstore_record_dm("error", errmsg);
|
+ xenstore_record_dm("error", errmsg);
|
||||||
+ xenstore_record_dm_state("error");
|
+ xenstore_record_dm_state("error");
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
void xenstore_process_media_change_event(char **vec)
|
static void xenstore_process_media_change_event(char **vec)
|
||||||
{
|
{
|
||||||
char *media_present = NULL;
|
char *media_present = NULL;
|
||||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
||||||
@@ -492,7 +492,7 @@ class ImageHandler:
|
@@ -490,7 +490,7 @@ class ImageHandler:
|
||||||
|
|
||||||
domains.domains_lock.acquire()
|
domains.domains_lock.acquire()
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
|||||||
if self.device_model is None:
|
if self.device_model is None:
|
||||||
return
|
return
|
||||||
# Signal the device model to for action
|
# Signal the device model to for action
|
||||||
@@ -529,10 +529,17 @@ class ImageHandler:
|
@@ -527,10 +527,17 @@ class ImageHandler:
|
||||||
while state != ret:
|
while state != ret:
|
||||||
state = xstransact.Read("/local/domain/0/device-model/%i/state"
|
state = xstransact.Read("/local/domain/0/device-model/%i/state"
|
||||||
% self.vm.getDomid())
|
% self.vm.getDomid())
|
||||||
@ -32,7 +32,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
|||||||
|
|
||||||
#resotre orig state
|
#resotre orig state
|
||||||
xstransact.Store("/local/domain/0/device-model/%i"
|
xstransact.Store("/local/domain/0/device-model/%i"
|
||||||
@@ -557,6 +564,10 @@ class ImageHandler:
|
@@ -555,6 +562,10 @@ class ImageHandler:
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -295,7 +295,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendCheckpoint.py
|
|||||||
if dominfo:
|
if dominfo:
|
||||||
dominfo.resume()
|
dominfo.resume()
|
||||||
else:
|
else:
|
||||||
@@ -329,26 +403,7 @@ def restore(xd, fd, dominfo = None, paus
|
@@ -329,24 +403,7 @@ def restore(xd, fd, dominfo = None, paus
|
||||||
|
|
||||||
dominfo.completeRestore(handler.store_mfn, handler.console_mfn)
|
dominfo.completeRestore(handler.store_mfn, handler.console_mfn)
|
||||||
|
|
||||||
@ -314,9 +314,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendCheckpoint.py
|
|||||||
-
|
-
|
||||||
- try:
|
- try:
|
||||||
- dominfo.waitForDevices() # Wait for backends to set up
|
- dominfo.waitForDevices() # Wait for backends to set up
|
||||||
- except Exception, exn:
|
- finally:
|
||||||
- log.exception(exn)
|
|
||||||
-
|
|
||||||
- if lock:
|
- if lock:
|
||||||
- XendDomain.instance().domains_lock.acquire()
|
- XendDomain.instance().domains_lock.acquire()
|
||||||
+ wait_devs(dominfo)
|
+ wait_devs(dominfo)
|
||||||
@ -327,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,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -539,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.'),
|
||||||
@ -554,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'),
|
||||||
),
|
),
|
||||||
@ -564,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",
|
||||||
@ -575,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",
|
||||||
@ -586,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):
|
||||||
#
|
#
|
||||||
#########################################################################
|
#########################################################################
|
||||||
|
|
||||||
@ -649,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,
|
||||||
|
@ -45,7 +45,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/svm/svm.c
|
|||||||
#define set_segment_register(name, value) \
|
#define set_segment_register(name, value) \
|
||||||
asm volatile ( "movw %%ax ,%%" STR(name) "" : : "a" (value) )
|
asm volatile ( "movw %%ax ,%%" STR(name) "" : : "a" (value) )
|
||||||
|
|
||||||
@@ -840,6 +845,29 @@ static int svm_cpu_up(struct cpuinfo_x86
|
@@ -847,6 +852,29 @@ static int svm_cpu_up(struct cpuinfo_x86
|
||||||
/* Initialize core's ASID handling. */
|
/* Initialize core's ASID handling. */
|
||||||
svm_asid_init(c);
|
svm_asid_init(c);
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ Index: xen-4.0.0-testing/xen/include/asm-x86/hvm/hvm.h
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/xen/include/asm-x86/hvm/hvm.h
|
--- xen-4.0.0-testing.orig/xen/include/asm-x86/hvm/hvm.h
|
||||||
+++ xen-4.0.0-testing/xen/include/asm-x86/hvm/hvm.h
|
+++ xen-4.0.0-testing/xen/include/asm-x86/hvm/hvm.h
|
||||||
@@ -131,6 +131,12 @@ struct hvm_function_table {
|
@@ -132,6 +132,12 @@ struct hvm_function_table {
|
||||||
extern struct hvm_function_table hvm_funcs;
|
extern struct hvm_function_table hvm_funcs;
|
||||||
extern int hvm_enabled;
|
extern int hvm_enabled;
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
13
vif-bridge-no-iptables.patch
Normal file
13
vif-bridge-no-iptables.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Index: xen-4.0.0-testing/tools/hotplug/Linux/vif-bridge
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.0-testing.orig/tools/hotplug/Linux/vif-bridge
|
||||||
|
+++ xen-4.0.0-testing/tools/hotplug/Linux/vif-bridge
|
||||||
|
@@ -91,7 +91,7 @@ case "$command" in
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
-handle_iptable
|
||||||
|
+#handle_iptable
|
||||||
|
|
||||||
|
log debug "Successful vif-bridge $command for $vif, bridge $bridge."
|
||||||
|
if [ "$command" == "online" ]
|
@ -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:e09d164603872500120d70e947b329525b920f45ce924c3661057cdff3fb97bd
|
oid sha256:88c2cad04e93a909e405bee6f4c3dff2c6b12ea2485b6e7f1db4813cb74f2f38
|
||||||
size 23209042
|
size 23155997
|
||||||
|
@ -9,9 +9,9 @@ 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 := xen-4.0.0-rc1
|
QEMU_TAG ?= e5d14857cd67490bf956d97c8888c0be95ed3f78
|
||||||
#QEMU_TAG ?= 2621a102cd74cd6691bed30f638581639fcb141d
|
# Thu Feb 18 15:36:29 2010 +0000
|
||||||
@@ -164,9 +164,9 @@ CONFIG_OCAML_XENSTORED ?= n
|
@@ -163,9 +163,9 @@ CONFIG_OCAML_XENSTORED ?= n
|
||||||
# Optional components
|
# Optional components
|
||||||
XENSTAT_XENTOP ?= y
|
XENSTAT_XENTOP ?= y
|
||||||
VTPM_TOOLS ?= n
|
VTPM_TOOLS ?= n
|
||||||
|
@ -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
|
||||||
@@ -2320,6 +2320,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)
|
||||||
@@ -3206,7 +3210,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:
|
||||||
@@ -3217,8 +3221,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
|
||||||
@@ -3234,7 +3247,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:
|
||||||
@@ -3244,8 +3258,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))
|
||||||
|
99
xen-gcc45-fixes.patch
Normal file
99
xen-gcc45-fixes.patch
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
--- xen-4.0.0-testing/tools/xenstore/xs_lib.c.orig 2010-03-01 08:28:04.000000000 -0700
|
||||||
|
+++ xen-4.0.0-testing/tools/xenstore/xs_lib.c 2010-03-01 09:12:04.000000000 -0700
|
||||||
|
@@ -149,7 +149,7 @@ bool xs_strings_to_perms(struct xs_permi
|
||||||
|
bool xs_perm_to_string(const struct xs_permissions *perm,
|
||||||
|
char *buffer, size_t buf_len)
|
||||||
|
{
|
||||||
|
- switch (perm->perms) {
|
||||||
|
+ switch ((int)perm->perms) {
|
||||||
|
case XS_PERM_WRITE:
|
||||||
|
*buffer = 'w';
|
||||||
|
break;
|
||||||
|
--- xen-4.0.0-testing/tools/blktap/lib/blktaplib.h.orig 2010-03-01 09:24:26.000000000 -0700
|
||||||
|
+++ xen-4.0.0-testing/tools/blktap/lib/blktaplib.h 2010-03-01 09:28:16.000000000 -0700
|
||||||
|
@@ -42,7 +42,7 @@
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
-#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, XC_PAGE_SIZE)
|
||||||
|
+#define BLK_RING_SIZE __CONST_RING_SIZE(blkif, XC_PAGE_SIZE)
|
||||||
|
|
||||||
|
/* size of the extra VMA area to map in attached pages. */
|
||||||
|
#define BLKTAP_VMA_PAGES BLK_RING_SIZE
|
||||||
|
--- xen-4.0.0-testing/tools/blktap2/include/blktaplib.h.orig 2010-03-01 09:46:30.000000000 -0700
|
||||||
|
+++ xen-4.0.0-testing/tools/blktap2/include/blktaplib.h 2010-03-01 09:46:50.000000000 -0700
|
||||||
|
@@ -45,7 +45,7 @@
|
||||||
|
#define EPRINTF(_f, _a...) syslog(LOG_ERR, "tap-err:%s: " _f, __func__, ##_a)
|
||||||
|
#define PERROR(_f, _a...) EPRINTF(_f ": %s", ##_a, strerror(errno))
|
||||||
|
|
||||||
|
-#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, XC_PAGE_SIZE)
|
||||||
|
+#define BLK_RING_SIZE __CONST_RING_SIZE(blkif, XC_PAGE_SIZE)
|
||||||
|
|
||||||
|
/* size of the extra VMA area to map in attached pages. */
|
||||||
|
#define BLKTAP_VMA_PAGES BLK_RING_SIZE
|
||||||
|
--- xen-4.0.0-testing/xen/include/xen/compat.h.orig 2010-03-01 13:22:34.000000000 -0700
|
||||||
|
+++ xen-4.0.0-testing/xen/include/xen/compat.h 2010-03-01 14:30:34.000000000 -0700
|
||||||
|
@@ -129,8 +129,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
#define CHECK_TYPE(name) \
|
||||||
|
- typedef int __checkT ## name[1 - ((xen_ ## name ## _t *)0 != \
|
||||||
|
- (compat_ ## name ## _t *)0) * 2]
|
||||||
|
+ typedef int __checkT ## name[1 - (sizeof(xen_ ## name ## _t) != \
|
||||||
|
+ sizeof(compat_ ## name ## _t)) * 2]
|
||||||
|
#define CHECK_TYPE_(k, n) \
|
||||||
|
typedef int __checkT ## k ## _ ## n[1 - ((k xen_ ## n *)0 != \
|
||||||
|
(k compat_ ## n *)0) * 2]
|
||||||
|
@@ -146,26 +146,30 @@
|
||||||
|
typedef int __checkF ## t ## __ ## f[1 - (&((xen_ ## t ## _t *)0)->f != \
|
||||||
|
&((compat_ ## t ## _t *)0)->f) * 2]
|
||||||
|
#define CHECK_FIELD_(k, n, f) \
|
||||||
|
- typedef int __checkF ## k ## _ ## n ## __ ## f[1 - (&((k xen_ ## n *)0)->f != \
|
||||||
|
- &((k compat_ ## n *)0)->f) * 2]
|
||||||
|
+ typedef int __checkF ## k ## _ ## n ## __ ## f[1 - (offsetof(k xen_ ## n,f) != \
|
||||||
|
+ offsetof(k compat_ ## n,f)) * 2]
|
||||||
|
|
||||||
|
#define CHECK_SUBFIELD_1(t, f1, f2) \
|
||||||
|
typedef int __checkF1 ## t ## __ ## f1 ## __ ## f2 \
|
||||||
|
- [1 - (&((xen_ ## t ## _t *)0)->f1.f2 != \
|
||||||
|
- &((compat_ ## t ## _t *)0)->f1.f2) * 2]
|
||||||
|
+ [1 - (offsetof(xen_ ## t ## _t,f1.f2) != \
|
||||||
|
+ offsetof(compat_ ## t ## _t,f1.f2)) * 2]
|
||||||
|
#define CHECK_SUBFIELD_1_(k, n, f1, f2) \
|
||||||
|
typedef int __checkF1 ## k ## _ ## n ## __ ## f1 ## __ ## f2 \
|
||||||
|
- [1 - (&((k xen_ ## n *)0)->f1.f2 != \
|
||||||
|
- &((k compat_ ## n *)0)->f1.f2) * 2]
|
||||||
|
+ [1 - (offsetof(k xen_ ## n,f1.f2) != \
|
||||||
|
+ offsetof(k compat_ ## n,f1.f2)) * 2]
|
||||||
|
|
||||||
|
#define CHECK_SUBFIELD_2(t, f1, f2, f3) \
|
||||||
|
typedef int __checkF2 ## t ## __ ## f1 ## __ ## f2 ## __ ## f3 \
|
||||||
|
- [1 - (&((xen_ ## t ## _t *)0)->f1.f2.f3 != \
|
||||||
|
- &((compat_ ## t ## _t *)0)->f1.f2.f3) * 2]
|
||||||
|
+ [1 - (offsetof(xen_ ## t ## _t,f1.f2.f3) != \
|
||||||
|
+ offsetof(compat_ ## t ## _t,f1.f2.f3)) * 2]
|
||||||
|
+#define CHECK_SUBFIELD_2_(k, n, f1, f2, f3) \
|
||||||
|
+ typedef int __checkF2 ## k ## _ ## n ## __ ## f1 ## __ ## f2 ## __ ## f3 \
|
||||||
|
+ [1 - (offsetof(k xen_ ## n,f1.f2.f3) != \
|
||||||
|
+ offsetof(k compat_ ## n,f1.f2.f3)) * 2]
|
||||||
|
#define CHECK_SUBFIELD_2_(k, n, f1, f2, f3) \
|
||||||
|
typedef int __checkF2 ## k ## _ ## n ## __ ## f1 ## __ ## f2 ## __ ## f3 \
|
||||||
|
- [1 - (&((k xen_ ## n *)0)->f1.f2.f3 != \
|
||||||
|
- &((k compat_ ## n *)0)->f1.f2.f3) * 2]
|
||||||
|
+ [1 - (offsetof(k xen_ ## n,f1.f2.f3) != \
|
||||||
|
+ offsetof(k compat_ ## n,f1.f2.f3)) * 2]
|
||||||
|
|
||||||
|
int hypercall_xlat_continuation(unsigned int *id, unsigned int mask, ...);
|
||||||
|
|
||||||
|
--- xen-4.0.0-testing/tools/ioemu-remote/block-vvfat.c.orig 2010-03-01 14:53:11.000000000 -0700
|
||||||
|
+++ xen-4.0.0-testing/tools/ioemu-remote/block-vvfat.c 2010-03-01 14:53:56.000000000 -0700
|
||||||
|
@@ -865,7 +865,8 @@ static int init_directories(BDRVVVFATSta
|
||||||
|
{
|
||||||
|
direntry_t* entry=array_get_next(&(s->directory));
|
||||||
|
entry->attributes=0x28; /* archive | volume label */
|
||||||
|
- snprintf((char*)entry->name,11,"QEMU VVFAT");
|
||||||
|
+ memcpy(entry->name,"QEMU VVF",8);
|
||||||
|
+ memcpy(entry->extension,"AT ",3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now build FAT, and write back information into directory */
|
@ -34,7 +34,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
||||||
@@ -912,11 +912,13 @@ class HVMImageHandler(ImageHandler):
|
@@ -910,11 +910,13 @@ class HVMImageHandler(ImageHandler):
|
||||||
mac = devinfo.get('mac')
|
mac = devinfo.get('mac')
|
||||||
if mac is None:
|
if mac is None:
|
||||||
raise VmError("MAC address not specified or generated.")
|
raise VmError("MAC address not specified or generated.")
|
||||||
|
@ -4,7 +4,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
||||||
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
||||||
@@ -1030,7 +1030,7 @@ class X86_HVM_ImageHandler(HVMImageHandl
|
@@ -1028,7 +1028,7 @@ class X86_HVM_ImageHandler(HVMImageHandl
|
||||||
|
|
||||||
def configure(self, vmConfig):
|
def configure(self, vmConfig):
|
||||||
HVMImageHandler.configure(self, vmConfig)
|
HVMImageHandler.configure(self, vmConfig)
|
||||||
|
@ -56,7 +56,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
|||||||
+ 'max_hvm_memory',
|
+ 'max_hvm_memory',
|
||||||
'node_to_cpu',
|
'node_to_cpu',
|
||||||
'node_to_memory',
|
'node_to_memory',
|
||||||
'node_to_dma32_mem'
|
'node_to_dma32_mem',
|
||||||
Index: xen-4.0.0-testing/tools/python/xen/xend/balloon.py
|
Index: xen-4.0.0-testing/tools/python/xen/xend/balloon.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/balloon.py
|
--- xen-4.0.0-testing.orig/tools/python/xen/xend/balloon.py
|
||||||
@ -98,7 +98,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
|
||||||
@@ -1452,6 +1452,27 @@ class XendDomainInfo:
|
@@ -1469,6 +1469,27 @@ class XendDomainInfo:
|
||||||
pci_conf = self.info['devices'][dev_uuid][1]
|
pci_conf = self.info['devices'][dev_uuid][1]
|
||||||
return map(pci_dict_to_bdf_str, pci_conf['devs'])
|
return map(pci_dict_to_bdf_str, pci_conf['devs'])
|
||||||
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
--- a/tools/ioemu-remote/xenstore.c
|
||||||
===================================================================
|
+++ b/tools/ioemu-remote/xenstore.c
|
||||||
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
|
@@ -399,7 +399,7 @@ void xenstore_parse_domain_config(int hv
|
||||||
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|
||||||
@@ -398,7 +398,7 @@ void xenstore_parse_domain_config(int hv
|
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
char *fpath = NULL, *bpath = NULL, *btype = NULL,
|
char *fpath = NULL, *bpath = NULL, *btype = NULL,
|
||||||
*dev = NULL, *params = NULL, *drv = NULL;
|
*dev = NULL, *params = NULL, *drv = NULL;
|
||||||
@ -11,7 +9,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
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;
|
||||||
@@ -485,12 +485,7 @@ void xenstore_parse_domain_config(int hv
|
@@ -486,12 +486,7 @@ void xenstore_parse_domain_config(int hv
|
||||||
continue;
|
continue;
|
||||||
free(danger_type);
|
free(danger_type);
|
||||||
danger_type = xs_read(xsh, XBT_NULL, danger_buf, &len);
|
danger_type = xs_read(xsh, XBT_NULL, danger_buf, &len);
|
||||||
@ -25,7 +23,7 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
|
|||||||
/* read the name of the device */
|
/* read the name of the device */
|
||||||
if (pasprintf(&buf, "%s/type", bpath) == -1)
|
if (pasprintf(&buf, "%s/type", bpath) == -1)
|
||||||
continue;
|
continue;
|
||||||
@@ -498,6 +493,35 @@ void xenstore_parse_domain_config(int hv
|
@@ -499,6 +494,35 @@ void xenstore_parse_domain_config(int hv
|
||||||
drv = xs_read(xsh, XBT_NULL, buf, &len);
|
drv = xs_read(xsh, XBT_NULL, buf, &len);
|
||||||
if (drv == NULL)
|
if (drv == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
@ -178,7 +178,7 @@ Index: xen-4.0.0-testing/tools/libxl/Makefile
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.0-testing.orig/tools/libxl/Makefile
|
--- xen-4.0.0-testing.orig/tools/libxl/Makefile
|
||||||
+++ xen-4.0.0-testing/tools/libxl/Makefile
|
+++ xen-4.0.0-testing/tools/libxl/Makefile
|
||||||
@@ -49,7 +49,7 @@ xl.o: $(LIBCONFIG_OUTPUT)/libconfig.so x
|
@@ -50,7 +50,7 @@ xl.o: $(LIBCONFIG_OUTPUT)/libconfig.so x
|
||||||
$(CC) $(CFLAGS) -I$(LIBCONFIG_SOURCE) -c xl.c
|
$(CC) $(CFLAGS) -I$(LIBCONFIG_SOURCE) -c xl.c
|
||||||
|
|
||||||
$(CLIENTS): xl.o libxenlight.so $(LIBCONFIG_OUTPUT)/libconfig.so
|
$(CLIENTS): xl.o libxenlight.so $(LIBCONFIG_OUTPUT)/libconfig.so
|
||||||
|
405
xen.changes
405
xen.changes
@ -1,3 +1,84 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
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
|
||||||
|
|
||||||
|
- Update to changeset 20900 RC2+ for sle11-sp1 beta4.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jan 29 09:22:46 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#573376 - OS reboot while create DomU with Windows CD
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 27 11:45:27 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#573881 - /usr/lib64/xen/bin/qemu-dm is a broken link
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jan 21 18:50:36 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- Update to changeset 20840 RC1+ for sle11-sp1 beta3.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jan 21 10:41:59 MST 2010 - jfehlig@novell.com
|
||||||
|
|
||||||
|
- bnc#569581 - SuSEfirewall2 should handle rules. Disable
|
||||||
|
handle_iptable in vif-bridge script
|
||||||
|
vif-bridge-no-iptables.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 20 09:12:00 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#569577 - /etc/modprove.d/xen_pvdrivers, installed by
|
||||||
|
xen-kmp-default, to ../xen_pvdrivers.conf
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Jan 6 16:50:16 EST 2010 - ksrinivasan@novell.com
|
Wed Jan 6 16:50:16 EST 2010 - ksrinivasan@novell.com
|
||||||
|
|
||||||
@ -128,19 +209,10 @@ Thu Oct 8 22:44:04 MDT 2009 - jfehlig@novell.com
|
|||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Sep 28 16:34:19 CST 2009 - wkong@novell.com
|
Mon Sep 28 16:34:19 CST 2009 - wkong@novell.com
|
||||||
|
|
||||||
- Add patch ioemu-bdrv-open-CACHE_WB.patch
|
- Add patch ioemu-bdrv-open-CACHE_WB.patch
|
||||||
for install guest on tapdisk very very slow.
|
for install guest on tapdisk very very slow.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Mon Sep 28 08:28:24 MDT 2009 - carnold@novell.com
|
|
||||||
|
|
||||||
- bnc#542525 - VUL-1: xen pygrub vulnerability
|
|
||||||
20099-pygrub-security.patch
|
|
||||||
20107-pygrub-security.patch
|
|
||||||
20146-pygrub-security.patch
|
|
||||||
20174-pygrub-security.patch
|
|
||||||
20201-pygrub-security.patch
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Sep 25 15:08:12 MDT 2009 - jfehlig@novell.com
|
Fri Sep 25 15:08:12 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
@ -165,25 +237,36 @@ Tue Sep 15 09:32:59 MDT 2009 - jfehlig@novell.com
|
|||||||
20125-xc-parse-tuple-fix.patch
|
20125-xc-parse-tuple-fix.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Aug 24 10:31:36 MDT 2009 - carnold@novell.com
|
Wed Sep 2 10:12:18 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#536176 - Xen panic when using iommu after updating hypervisor
|
||||||
|
19380-vtd-feature-check.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 28 09:54:08 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
|
- bnc#530959 - virsh autostart doesn't work
|
||||||
|
Fixing this libvirt bug also required fixing xend's op_pincpu
|
||||||
|
method with upstream c/s 19580
|
||||||
|
19580-xend-pincpu.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 28 08:05:17 MDT 2009 - jbeulich@novell.com
|
||||||
|
|
||||||
|
- bnc#534146 - Xen: Fix SRAT check for discontig memory
|
||||||
|
20120-x86-srat-check-discontig.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 24 07:59:14 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
- bnc#491081 - Xen time goes backwards x3950M2
|
- bnc#491081 - Xen time goes backwards x3950M2
|
||||||
Patch for this bug plus additional upstream patches from Jan.
|
|
||||||
19614-x86-emul-lldt-ltr.patch
|
|
||||||
20026-ept-rwx-default.patch
|
|
||||||
20031-x86-pmode-load-seg-retry.patch
|
|
||||||
20035-x86-load-sreg-adjust.patch
|
|
||||||
20059-vmx-nmi-handling.patch
|
|
||||||
20077-x86-runstate-cswitch-out.patch
|
|
||||||
20078-x86_64-branch-emulation.patch
|
|
||||||
20101-hvm-no-compat-virt-start.patch
|
|
||||||
20112-x86-dom0-boot-run-timers.patch
|
20112-x86-dom0-boot-run-timers.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Aug 14 13:00:48 MDT 2009 - carnold@novell.com
|
Tue Aug 11 01:08:51 CEST 2009 - ro@suse.de
|
||||||
|
|
||||||
- Modify the mkbuildtree script so the KMPs will build.
|
- disable module build for ec2 correctly to fix build
|
||||||
mkbuildtree.patch
|
(at the suse_kernel_module_package macro)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Aug 10 16:21:00 EDT 2009 - ksrinivasan@novell.com
|
Mon Aug 10 16:21:00 EDT 2009 - ksrinivasan@novell.com
|
||||||
@ -192,112 +275,298 @@ Mon Aug 10 16:21:00 EDT 2009 - ksrinivasan@novell.com
|
|||||||
hv_win7_eoi_bug.patch
|
hv_win7_eoi_bug.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Aug 7 10:43:32 MDT 2009 - jfehlig@novell.com
|
Mon Aug 3 11:53:37 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
- bnc#524180 - xend memory leak resulting in long garbage collector
|
- bnc#524180 - xend memory leak resulting in long garbage collector
|
||||||
runs. Bug applies to xen 3.4.1 as well.
|
runs
|
||||||
20013-xend-memleak.patch
|
20013-xend-memleak.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Aug 6 10:10:43 MDT 2009 - carnold@novell.com
|
Fri Jul 31 13:22:09 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
- Update to Xen 3.4.1 FCS c/s 19718.
|
- Upstream bugfixes from Jan.
|
||||||
|
19896-32on64-arg-xlat.patch
|
||||||
|
19960-show-page-walk.patch
|
||||||
|
19945-pae-xen-l2-entries.patch
|
||||||
|
19953-x86-fsgs-base.patch
|
||||||
|
19931-gnttblop-preempt.patch
|
||||||
|
19885-kexec-gdt-switch.patch
|
||||||
|
19894-shadow-resync-fastpath-race.patch
|
||||||
|
- hvperv shim patches no longer require being applied conditionally
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Aug 4 15:48:59 MDT 2009 - carnold@novell.com
|
Wed Jul 29 08:47:50 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
- Rename xen_loop to xen_loop.conf to conform with naming rules.
|
- bnc#520234 - npiv does not work with XEN in SLE11
|
||||||
|
Update block-npiv
|
||||||
|
- bnc#496033 - Support for creating NPIV ports without starting vm
|
||||||
|
block-npiv-common.sh
|
||||||
|
block-npiv-vport
|
||||||
|
Update block-npiv
|
||||||
|
- bnc#500043 - Fix access to NPIV disk from HVM vm
|
||||||
|
Update xen-qemu-iscsi-fix.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jul 28 14:07:42 MDT 2009 - carnold@novell.com
|
Wed Jul 15 11:52:31 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
- Update to Xen 3.4.1 RC10 c/s 19711.
|
- Don't build the KMPs for the ec2 kernel.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jun 23 11:09:29 MDT 2009 - carnold@novell.com
|
Thu Jul 2 12:45:32 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
- Update to Xen 3.4.1 RC4 c/s 19664.
|
- Upstream fixes from Jan Beulich
|
||||||
|
19606-hvm-x2apic-cpuid.patch
|
||||||
|
19734-vtd-gcmd-submit.patch
|
||||||
|
19752-vtd-srtp-sirtp-flush.patch
|
||||||
|
19753-vtd-reg-write-lock.patch
|
||||||
|
19764-hvm-domain-lock-leak.patch
|
||||||
|
19765-hvm-post-restore-vcpu-state.patch
|
||||||
|
19767-hvm-port80-inhibit.patch
|
||||||
|
19768-x86-dom0-stack-dump.patch
|
||||||
|
19770-x86-amd-s3-resume.patch
|
||||||
|
19801-x86-p2m-2mb-hap-only.patch
|
||||||
|
19815-vtd-kill-correct-timer.patch
|
||||||
|
- Patch from Jan Beulich to aid in debugging bnc#509911
|
||||||
|
gnttblop-preempt.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jun 16 09:28:51 MDT 2009 - carnold@novell.com
|
Tue Jun 23 15:32:14 CST 2009 - wkong@novell.com
|
||||||
|
|
||||||
- Update to Xen 3.4.1 RC3 c/s 19657.
|
- bnc#515220 - qemu-img-xen snapshot Segmentation fault
|
||||||
|
qemu-img-snapshot.patch update
|
||||||
-------------------------------------------------------------------
|
|
||||||
Thu Jun 11 14:17:22 MDT 2009 - carnold@novell.com
|
|
||||||
|
|
||||||
- Update to Xen 3.4.1 RC2 c/s 19648.
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jun 9 13:52:07 CST 2009 - wkong@novell.com
|
Tue Jun 9 13:52:07 CST 2009 - wkong@novell.com
|
||||||
|
|
||||||
- bnc#504491 - drop write data when set read only disk in xen config
|
- bnc#504491 - drop write data when set read only disk in xen config
|
||||||
bdrv_open2_fix_flags.patch
|
bdrv_open2_fix_flags.patch
|
||||||
bdrv_open2_flags_2.patch
|
bdrv_open2_flags_2.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon May 18 15:03:29 MDT 2009 - carnold@novell.com
|
Fri Jun 5 13:19:04 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
- Update to Xen 3.4.0 FCS c/s 19607
|
- Upstream fixes from Jan Beulich.
|
||||||
|
19474-32on64-S3.patch
|
||||||
|
19490-log-dirty.patch
|
||||||
|
19492-sched-timer-non-idle.patch
|
||||||
|
19493-hvm-io-intercept-count.patch
|
||||||
|
19505-x86_64-clear-cr1.patch
|
||||||
|
19519-domctl-deadlock.patch
|
||||||
|
19523-32on64-restore-p2m.patch
|
||||||
|
19555-ept-live-migration.patch
|
||||||
|
19557-amd-iommu-ioapic-remap.patch
|
||||||
|
19560-x86-flush-tlb-empty-mask.patch
|
||||||
|
19571-x86-numa-shift.patch
|
||||||
|
19578-hvm-load-ldt-first.patch
|
||||||
|
19592-vmx-exit-reason-perfc-size.patch
|
||||||
|
19595-hvm-set-callback-irq-level.patch
|
||||||
|
19597-x86-ioport-quirks-BL2xx.patch
|
||||||
|
19602-vtd-multi-ioapic-remap.patch
|
||||||
|
19631-x86-frametable-map.patch
|
||||||
|
19653-hvm-vcpuid-range-checks.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon May 17 17:15:57 CST 2009 - wkong@novell.com
|
Wed Jun 05 10:35:18 MDT 2009 - jsong@novell.com
|
||||||
|
|
||||||
|
- bnc#382112 - Caps lock not being passed to vm correctly.
|
||||||
|
capslock_enable.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 27 10:35:18 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
|
- bnc#506833 - Use pidof in xend and xendomains init scripts
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 27 09:39:25 MDT 2009 - jsong@novell.com
|
||||||
|
- bnc#484778 - XEN: PXE boot of FV domU using non-Realtek NIC fails
|
||||||
|
enable_more_nic_pxe.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 27 09:38:40 MDT 2009 - jsong@novell.com
|
||||||
|
cross-migrate.patch
|
||||||
|
- bnc#390961 - cross-migration of a VM causes it to become
|
||||||
|
unresponsive (remains paused after migration)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 19 10:58:40 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
|
- Patches taken to fix the xenctx tool. The fixed version of this
|
||||||
|
tool is needed to debug bnc#502735.
|
||||||
|
18962-xc_translate_foreign_address.patch
|
||||||
|
18963-xenctx.patch
|
||||||
|
19168-hvm-domctl.patch
|
||||||
|
19169-remove-declare-bitmap.patch
|
||||||
|
19170-libxc.patch
|
||||||
|
19171-xenctx.patch
|
||||||
|
19450-xc_translate_foreign_address.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon May 18 16:15:57 CST 2009 - wkong@novell.com
|
||||||
-bnc#485770 - check exsit file for save and snapshot-create
|
-bnc#485770 - check exsit file for save and snapshot-create
|
||||||
xm-save-check-file.patch
|
xm-save-check-file.patch
|
||||||
snapshot-xend.patch
|
snapshot-xend.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu May 14 12:00:09 MDT 2009 - jfehlig@novell.com
|
Mon May 18 15:06:41 CST 2009 - wkong@novell.com
|
||||||
|
-bnc#503782 - Using converted vmdk image does not work
|
||||||
|
ioemu-tapdisk-compat-QEMU_IMG.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu May 14 10:54:03 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
- bnc#503332 - Remove useless qcow tools
|
- bnc#503332 - Remove useless qcow tools
|
||||||
/usr/sbin/{qcow-create,img2qcow,qcow2raw} from xen-tools package.
|
/usr/sbin/{qcow-create,img2qcow,qcow2raw} from xen-tools package.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 13 09:59:50 CST 2009 - jsong@novell.com
|
||||||
|
- bnc#474738 - adding CD drive to VM guest makes it unbootable.
|
||||||
|
parse_boot_disk.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon May 11 18:49:50 CST 2009 - wkong@novell.com
|
Mon May 11 18:49:50 CST 2009 - wkong@novell.com
|
||||||
- bnc#477892 - snapshot windows can't accomplish.
|
- bnc#477892 - snapshot windows can't accomplish.
|
||||||
snapshot-xend.patch
|
snapshot-xend.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Apr 22 17:30:02 CST 2009 - wkong@novell.com
|
Tue Apr 28 11:57:00 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
- Backport two qcow2 patches from qemu org
|
- bnc#495300 - L3: Xen unable to PXE boot Windows based DomU's
|
||||||
ioemu-6816-qcow2-revert-6404-6405-6407.patch
|
18545-hvm-gpxe-rom.patch, 18548-hvm-gpxe-rom.patch
|
||||||
ioemu-7615-qcow2-fix-alloc_cluster_link_l2.patch
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Apr 17 16:21:36 CST 2009 - wkong@novell.com
|
Mon Apr 27 10:42:17 MDT 2009 - jfehlig@novell.com
|
||||||
- bnc#477890 - Patch: ioemu-qcow2-enhance-snapshot-create.patch
|
|
||||||
|
- bnc#459836 - Fix rtc_timeoffset when localtime=0
|
||||||
|
xend-timeoffset.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Apr 16 12:13:10 MDT 2009 - jfehlig@novell.com
|
Wed Apr 22 14:50:35 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
- Updated xend-domain-lock.patch
|
- bnc#497440 - xmclone.sh script incorrectly handles networking for
|
||||||
fate#303525, bnc#494892
|
SLE11.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Apr 9 18:36:23 CST 2009 - wkong@novell.com
|
Fri Apr 17 16:21:36 MDT 2009 - wkong@novell.com
|
||||||
|
- bnc#477890 - VM becomes unresponsive after applying snapshot
|
||||||
- Remove Patch155: xend-core-dump-loc.diff
|
|
||||||
- Modify Patch110: xen-domUloader.diff,
|
|
||||||
remove symbol "bootfilter"
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Apr 8 17:38:12 CST 2009 - wkong@novell.com
|
Wed Apr 15 16:34:08 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
- PATCH: network-nat-open-SuSEfirewall2-FORWARD.patch
|
- bnc#494892 - Update xend-domain-lock.patch to flock the lock
|
||||||
fate#305354, bnc#472107
|
file.
|
||||||
Open SuSEfirewall2 FORWARD rule when use xen nat
|
|
||||||
- PATCH: network-nat-dhcpd-domain-info.patch
|
|
||||||
Add domain info for nat-dhcpd
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Apr 2 16:52:04 MDT 2009 - jfehlig@novell.com
|
Wed Apr 8 16:30:14 EDT 2009 - ksrinivasan@novell.com
|
||||||
|
|
||||||
- Fix domUloader to handle block device names with ':'
|
- bnc#439639 - SVVP Test 273 System - Sleep Stress With IO" fails
|
||||||
|
|
||||||
|
Turned off s3/s4 sleep states for HVM guests.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Mar 11 16:28:59 MDT 2009 - jfehlig@novell.com
|
Tue Apr 7 21:55:14 MDT 2009 - jsong@novell.com
|
||||||
|
|
||||||
- Use pidofproc/checkproc in xend init script
|
- bnc#468169 - fix domUloader to umount the mounted device mapper target in dom0
|
||||||
|
when install a sles10 guest with disk = /dev/disk/by_path
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Apr 2 16:03:25 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
|
- bnc#488490 - domUloader can't handle block device names with ':'
|
||||||
|
- bnc#486244 - vms fail to start after reboot when using qcow2
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 31 15:00:50 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#490835 - VTd errata on Cantiga chipset
|
||||||
|
19230-vtd-mobile-series4-chipset.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 30 15:03:16 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#482515 - Missing dependency in xen.spec
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 26 09:17:00 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
|
- Additional upstream bug fix patches from Jan Beulich.
|
||||||
|
19132-page-list-mfn-links.patch
|
||||||
|
19134-fold-shadow-page-info.patch
|
||||||
|
19135-next-shadow-mfn.patch
|
||||||
|
19136-page-info-rearrange.patch
|
||||||
|
19156-page-list-simplify.patch
|
||||||
|
19161-pv-ldt-handling.patch
|
||||||
|
19162-page-info-no-cpumask.patch
|
||||||
|
19216-msix-fixmap.patch
|
||||||
|
19268-page-get-owner.patch
|
||||||
|
19293-vcpu-migration-delay.patch
|
||||||
|
19391-vpmu-double-free.patch
|
||||||
|
19415-vtd-dom0-s3.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 25 13:55:25 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
|
- Imported numerous upstream bug fix patches.
|
||||||
|
19083-memory-is-conventional-fix.patch
|
||||||
|
19097-M2P-table-1G-page-mappings.patch
|
||||||
|
19137-lock-domain-page-list.patch
|
||||||
|
19140-init-heap-pages-max-order.patch
|
||||||
|
19167-recover-pat-value-s3-resume.patch
|
||||||
|
19172-irq-to-vector.patch
|
||||||
|
19173-pci-passthrough-fix.patch
|
||||||
|
19176-free-irq-shutdown-fix.patch
|
||||||
|
19190-pciif-typo-fix.patch
|
||||||
|
19204-allow-old-images-restore.patch
|
||||||
|
19232-xend-exception-fix.patch
|
||||||
|
19239-ioapic-s3-suspend-fix.patch
|
||||||
|
19240-ioapic-s3-suspend-fix.patch
|
||||||
|
19242-xenstored-use-after-free-fix.patch
|
||||||
|
19259-ignore-shutdown-deferrals.patch
|
||||||
|
19266-19365-event-channel-access-fix.patch
|
||||||
|
19275-19296-schedular-deadlock-fixes.patch
|
||||||
|
19276-cpu-selection-allocation-fix.patch
|
||||||
|
19302-passthrough-pt-irq-time-out.patch
|
||||||
|
19313-hvmemul-read-msr-fix.patch
|
||||||
|
19317-vram-tracking-fix.patch
|
||||||
|
19335-apic-s3-resume-error-fix.patch
|
||||||
|
19353-amd-migration-fix.patch
|
||||||
|
19354-amd-migration-fix.patch
|
||||||
|
19371-in-sync-L1s-writable.patch
|
||||||
|
19372-2-on-3-shadow-mode-fix.patch
|
||||||
|
19377-xend-vnclisten.patch
|
||||||
|
19400-ensure-ltr-execute.patch
|
||||||
|
19410-virt-to-maddr-fix.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 9 16:28:27 MDT 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
|
- bnc#483565 - Fix block-iscsi script.
|
||||||
|
Updated block-iscsi and xen-domUloader.diff
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 9 16:06:03 MDT 2009 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#465814 - Mouse stops responding when wheel is used in Windows
|
||||||
|
VM.
|
||||||
|
mouse-wheel-roll.patch (James Song)
|
||||||
|
- bnc#470704 - save/restore of windows VM throws off the mouse
|
||||||
|
tracking.
|
||||||
|
usb-save-restore.patch (James Song)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 5 15:35:30 MST 2009 - jfehlig@novell.com
|
||||||
|
|
||||||
|
- bnc#436629 - Use global vnc-listen setting specified in xend
|
||||||
|
configuration file.
|
||||||
|
xend-vnclisten.patch
|
||||||
|
- bnc#482623 - Fix pygrub to append user-supplied 'extra' args
|
||||||
|
to kernel args.
|
||||||
|
19234_pygrub.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 5 13:52:48 MST 2009 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#481161 upgrade - sles10sp2 to sles11 upgrade keeps
|
||||||
|
xen-tools-ioemu
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Mar 3 16:11:39 CET 2009 - kukuk@suse.de
|
Tue Mar 3 16:11:39 CET 2009 - kukuk@suse.de
|
||||||
|
80
xen.spec
80
xen.spec
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# spec file for package xen (Version 4.0.0_20809_01)
|
# spec file for package xen (Version 4.0.0_20978_01)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
@ -22,10 +22,10 @@ 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 20809
|
%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 acpica automake bin86 curl-devel dev86 graphviz latex2html libjpeg-devel libxml2-devel ncurses-devel openssl openssl-devel pciutils-devel python-devel texinfo transfig
|
||||||
%if %suse_version >= 1030
|
%if %suse_version >= 1030
|
||||||
BuildRequires: texlive texlive-latex
|
BuildRequires: texlive texlive-latex
|
||||||
%else
|
%else
|
||||||
@ -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_20809_01
|
Version: 4.0.0_20978_01
|
||||||
Release: 1
|
Release: 1
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Group: System/Kernel
|
Group: System/Kernel
|
||||||
@ -63,7 +63,7 @@ Source16: xmclone.sh
|
|||||||
Source17: xend-relocation.sh
|
Source17: xend-relocation.sh
|
||||||
Source18: init.xen_loop
|
Source18: init.xen_loop
|
||||||
%if %{?with_kmp}0
|
%if %{?with_kmp}0
|
||||||
Source19: xen_pvdrivers
|
Source19: xen_pvdrivers.conf
|
||||||
Source20: kmp_filelist
|
Source20: kmp_filelist
|
||||||
%endif
|
%endif
|
||||||
Source21: block-dmmd
|
Source21: block-dmmd
|
||||||
@ -119,10 +119,21 @@ Patch354: xen-api-auth.patch
|
|||||||
Patch355: tools-gdbserver-build.diff
|
Patch355: tools-gdbserver-build.diff
|
||||||
Patch356: ioemu-vnc-resize.patch
|
Patch356: ioemu-vnc-resize.patch
|
||||||
Patch357: ioemu-debuginfo.patch
|
Patch357: ioemu-debuginfo.patch
|
||||||
|
Patch358: vif-bridge-no-iptables.patch
|
||||||
|
Patch359: qemu-console-retry.patch
|
||||||
# Needs to go upstream
|
# Needs to go upstream
|
||||||
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
|
||||||
|
Patch371: xen-gcc45-fixes.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
|
||||||
@ -144,6 +155,8 @@ Patch424: ioemu-7615-qcow2-fix-alloc_cluster_link_l2.patch
|
|||||||
Patch425: ioemu-bdrv-open-CACHE_WB.patch
|
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
|
||||||
|
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
|
||||||
@ -162,6 +175,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
|
||||||
@ -546,11 +560,22 @@ Authors:
|
|||||||
%patch355 -p1
|
%patch355 -p1
|
||||||
%patch356 -p1
|
%patch356 -p1
|
||||||
%patch357 -p1
|
%patch357 -p1
|
||||||
|
%patch358 -p1
|
||||||
|
%patch359 -p1
|
||||||
%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
|
||||||
|
%patch371 -p1
|
||||||
%patch400 -p1
|
%patch400 -p1
|
||||||
#%patch401 -p1
|
%patch401 -p1
|
||||||
%patch402 -p1
|
%patch402 -p1
|
||||||
%patch403 -p1
|
%patch403 -p1
|
||||||
%patch410 -p1
|
%patch410 -p1
|
||||||
@ -567,6 +592,8 @@ Authors:
|
|||||||
%patch425 -p1
|
%patch425 -p1
|
||||||
%patch426 -p1
|
%patch426 -p1
|
||||||
%patch427 -p1
|
%patch427 -p1
|
||||||
|
%patch428 -p1
|
||||||
|
%patch429 -p1
|
||||||
%patch450 -p1
|
%patch450 -p1
|
||||||
%patch500 -p1
|
%patch500 -p1
|
||||||
%patch501 -p1
|
%patch501 -p1
|
||||||
@ -583,6 +610,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
|
||||||
@ -669,8 +697,8 @@ rm -f $RPM_BUILD_ROOT/usr/sbin/{qcow-create,img2qcow,qcow2raw}
|
|||||||
make -C tools/misc/serial-split install \
|
make -C tools/misc/serial-split install \
|
||||||
DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir}
|
DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir}
|
||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
mkdir -p $RPM_BUILD_ROOT/usr/lib64/xen/bin/
|
mkdir -p $RPM_BUILD_ROOT/${_libdir}/xen/bin/
|
||||||
ln -s %{_libdir}/xen/bin/qemu-dm $RPM_BUILD_ROOT/usr/lib64/xen/bin/qemu-dm
|
ln -s /usr/lib/xen/bin/qemu-dm $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm
|
||||||
%endif
|
%endif
|
||||||
%if %{?with_kmp}0
|
%if %{?with_kmp}0
|
||||||
# pv driver modules
|
# pv driver modules
|
||||||
@ -681,7 +709,7 @@ for flavor in %flavors_to_build; do
|
|||||||
M=$PWD/obj/$flavor
|
M=$PWD/obj/$flavor
|
||||||
done
|
done
|
||||||
mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d
|
mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d
|
||||||
install -m644 %SOURCE19 $RPM_BUILD_ROOT/etc/modprobe.d/xen_pvdrivers
|
install -m644 %SOURCE19 $RPM_BUILD_ROOT/etc/modprobe.d/xen_pvdrivers.conf
|
||||||
%endif
|
%endif
|
||||||
# docs
|
# docs
|
||||||
make -C docs install \
|
make -C docs install \
|
||||||
@ -756,8 +784,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
|
||||||
|
|
||||||
@ -792,11 +825,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
|
||||||
@ -927,7 +960,6 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
|
|||||||
%{_libdir}/libvhd.so
|
%{_libdir}/libvhd.so
|
||||||
/usr/bin/serial-split
|
/usr/bin/serial-split
|
||||||
/usr/include/blktaplib.h
|
/usr/include/blktaplib.h
|
||||||
/usr/include/flask.h
|
|
||||||
/usr/include/fsimage*
|
/usr/include/fsimage*
|
||||||
/usr/include/xen*.h
|
/usr/include/xen*.h
|
||||||
/usr/include/xen/
|
/usr/include/xen/
|
||||||
@ -949,6 +981,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}
|
||||||
@ -956,6 +1000,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
|
||||||
|
7
xen_pvdrivers.conf
Normal file
7
xen_pvdrivers.conf
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Install the paravirtualized drivers
|
||||||
|
install libata /sbin/modprobe xen-vbd 2>&1 |:; /sbin/modprobe --ignore-install libata
|
||||||
|
|
||||||
|
install 8139cp /sbin/modprobe xen-vnif 2>&1 |:; /sbin/modprobe --ignore-install 8139cp
|
||||||
|
|
||||||
|
install 8139too /sbin/modprobe xen-vnif 2>&1 |:; /sbin/modprobe --ignore-install 8139too
|
||||||
|
|
@ -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
|
||||||
@@ -3896,6 +3896,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
|
||||||
@@ -2291,7 +2291,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
|
||||||
@@ -457,6 +458,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)
|
||||||
|
|
||||||
@@ -2933,6 +2935,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()
|
||||||
|
|
||||||
@@ -4434,6 +4441,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()])
|
||||||
|
|
||||||
@ -243,7 +243,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendCheckpoint.py
|
|||||||
|
|
||||||
+ dominfo.acquire_running_lock()
|
+ dominfo.acquire_running_lock()
|
||||||
return dominfo
|
return dominfo
|
||||||
except:
|
except Exception, exn:
|
||||||
dominfo.destroy()
|
dominfo.destroy()
|
||||||
Index: xen-4.0.0-testing/tools/hotplug/Linux/Makefile
|
Index: xen-4.0.0-testing/tools/hotplug/Linux/Makefile
|
||||||
===================================================================
|
===================================================================
|
||||||
|
Loading…
Reference in New Issue
Block a user