This commit is contained in:
parent
49bc396272
commit
1b5538862e
22
15054-hvm-save-restore.patch
Normal file
22
15054-hvm-save-restore.patch
Normal file
@ -0,0 +1,22 @@
|
||||
# HG changeset patch
|
||||
# User Steven Hand <steven@xensource.com>
|
||||
# Date 1179152192 -3600
|
||||
# Node ID 9c2a616722da143f8abcd0eabb45159341f3cce0
|
||||
# Parent 3ecf516896719b667833183a4aa87975824b931b
|
||||
HVM save/restore: handle larger domain ids.
|
||||
|
||||
Signed-off-by: Steven Hand <steven@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/target-i386-dm/helper2.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/helper2.c
|
||||
+++ xen-3.1-testing/tools/ioemu/target-i386-dm/helper2.c
|
||||
@@ -615,7 +615,7 @@ int main_loop(void)
|
||||
extern int suspend_requested;
|
||||
CPUState *env = cpu_single_env;
|
||||
int evtchn_fd = xc_evtchn_fd(xce_handle);
|
||||
- char qemu_file[20];
|
||||
+ char qemu_file[32];
|
||||
|
||||
buffered_io_timer = qemu_new_timer(rt_clock, handle_buffered_io,
|
||||
cpu_single_env);
|
25
15128_xend_dev_disconnect.patch
Normal file
25
15128_xend_dev_disconnect.patch
Normal file
@ -0,0 +1,25 @@
|
||||
# HG changeset patch
|
||||
# User Steven Hand <steven@xensource.com>
|
||||
# Date 1179844370 -3600
|
||||
# Node ID f6928d6369999cd063edd361d592579c2483196b
|
||||
# Parent 98cf6c05c32a59ad3f4fcd505ca60348589e6096
|
||||
This patch fixes the issue with waiting for devices to disconnect during the end
|
||||
stage of migration in Xend. The problem was cause by a deletion of the VM domain
|
||||
ID which is used by testDevicecompleComplete ->deviceIDs->backendRoot() to get
|
||||
the virtual backend device path. The virtual backend device path is used to
|
||||
check if a device still exists in xenstore.
|
||||
|
||||
Signed-off-by: Yung Giang <yung.giang@gmail.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -1680,7 +1680,6 @@ class XendDomainInfo:
|
||||
try:
|
||||
if self.domid is not None:
|
||||
xc.domain_destroy(self.domid)
|
||||
- self.domid = None
|
||||
for state in DOM_STATES_OLD:
|
||||
self.info[state] = 0
|
||||
self._stateSet(DOM_STATE_HALTED)
|
92
15152-save-restore-fix-cpu-affinity.patch
Normal file
92
15152-save-restore-fix-cpu-affinity.patch
Normal file
@ -0,0 +1,92 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1180011729 -3600
|
||||
# Node ID 853853686147c4e863551b5742ca424e2929599a
|
||||
# Parent 6223d154e55f6cf7144c758979e6d3364d5d436e
|
||||
xend: Fix CPU affinity reset across save/restore.
|
||||
Fixes bug #936.
|
||||
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -587,30 +587,46 @@ class XendConfig(dict):
|
||||
else:
|
||||
cfg['cpus'] = str(cfg['cpu'])
|
||||
|
||||
- # convert 'cpus' string to list of ints
|
||||
- # 'cpus' supports a list of ranges (0-3), seperated by
|
||||
- # commas, and negation, (^1).
|
||||
- # Precedence is settled by order of the string:
|
||||
- # "0-3,^1" -> [0,2,3]
|
||||
- # "0-3,^1,1" -> [0,1,2,3]
|
||||
- try:
|
||||
- if 'cpus' in cfg and type(cfg['cpus']) != list:
|
||||
- cpus = []
|
||||
- for c in cfg['cpus'].split(','):
|
||||
- if c.find('-') != -1:
|
||||
- (x, y) = c.split('-')
|
||||
- for i in range(int(x), int(y)+1):
|
||||
- cpus.append(int(i))
|
||||
- else:
|
||||
- # remove this element from the list
|
||||
- if c[0] == '^':
|
||||
- cpus = [x for x in cpus if x != int(c[1:])]
|
||||
+ # Convert 'cpus' to list of ints
|
||||
+ if 'cpus' in cfg:
|
||||
+ cpus = []
|
||||
+ if type(cfg['cpus']) == list:
|
||||
+ # If sxp_cfg was created from config.sxp,
|
||||
+ # the form of 'cpus' is list of string.
|
||||
+ # Convert 'cpus' to list of ints.
|
||||
+ # ['1'] -> [1]
|
||||
+ # ['0','2','3'] -> [0,2,3]
|
||||
+ try:
|
||||
+ for c in cfg['cpus']:
|
||||
+ cpus.append(int(c))
|
||||
+
|
||||
+ cfg['cpus'] = cpus
|
||||
+ except ValueError, e:
|
||||
+ raise XendConfigError('cpus = %s: %s' % (cfg['cpus'], e))
|
||||
+ else:
|
||||
+ # Convert 'cpus' string to list of ints
|
||||
+ # 'cpus' supports a list of ranges (0-3),
|
||||
+ # seperated by commas, and negation, (^1).
|
||||
+ # Precedence is settled by order of the
|
||||
+ # string:
|
||||
+ # "0-3,^1" -> [0,2,3]
|
||||
+ # "0-3,^1,1" -> [0,1,2,3]
|
||||
+ try:
|
||||
+ for c in cfg['cpus'].split(','):
|
||||
+ if c.find('-') != -1:
|
||||
+ (x, y) = c.split('-')
|
||||
+ for i in range(int(x), int(y)+1):
|
||||
+ cpus.append(int(i))
|
||||
else:
|
||||
- cpus.append(int(c))
|
||||
-
|
||||
- cfg['cpus'] = cpus
|
||||
- except ValueError, e:
|
||||
- raise XendConfigError('cpus = %s: %s' % (cfg['cpus'], e))
|
||||
+ # remove this element from the list
|
||||
+ if c[0] == '^':
|
||||
+ cpus = [x for x in cpus if x != int(c[1:])]
|
||||
+ else:
|
||||
+ cpus.append(int(c))
|
||||
+
|
||||
+ cfg['cpus'] = cpus
|
||||
+ except ValueError, e:
|
||||
+ raise XendConfigError('cpus = %s: %s' % (cfg['cpus'], e))
|
||||
|
||||
if 'security' in cfg and isinstance(cfg['security'], str):
|
||||
cfg['security'] = sxp.from_string(cfg['security'])
|
||||
@@ -842,6 +858,8 @@ class XendConfig(dict):
|
||||
if name in self and self[name] not in (None, []):
|
||||
if typ == dict:
|
||||
s = self[name].items()
|
||||
+ elif typ == list:
|
||||
+ s = self[name]
|
||||
else:
|
||||
s = str(self[name])
|
||||
sxpr.append([name, s])
|
44
15153_xend_dom_teardown.patch
Normal file
44
15153_xend_dom_teardown.patch
Normal file
@ -0,0 +1,44 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1180011958 -3600
|
||||
# Node ID f07c1bb86d6c54458ff944e71453173cbf567ed2
|
||||
# Parent 853853686147c4e863551b5742ca424e2929599a
|
||||
xend: Tear down domain if device hotplug fails during startup
|
||||
|
||||
If creating an unmanaged guest (eg xm create), if device hotplug fails
|
||||
during the startup of the guest, then the guest will be torn down
|
||||
again. If creating and starting a managed guest (eg xm new && xm
|
||||
start), then if device hotplug fails, the still born guest gets left
|
||||
in 'paused' state. This confuses users no end, who go an unpause and
|
||||
then get all upset when it shortly crashes (due to lack of disk or
|
||||
network devices).
|
||||
|
||||
The attached patch fixes XenDomain.py's domain_start() method so that
|
||||
if waitForDevices() fails, then the entire domain is torn down. This
|
||||
is the same approach used in xm create.
|
||||
|
||||
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendDomain.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomain.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomain.py
|
||||
@@ -985,10 +985,16 @@ class XendDomain:
|
||||
dominfo.start(is_managed = True)
|
||||
finally:
|
||||
self.domains_lock.release()
|
||||
- dominfo.waitForDevices()
|
||||
+
|
||||
+ try:
|
||||
+ dominfo.waitForDevices()
|
||||
+ except Exception, ex:
|
||||
+ log.warn("Failed to setup devices for " + str(dominfo) + ": " + str(ex))
|
||||
+ dominfo.destroy()
|
||||
+ raise
|
||||
+
|
||||
if not start_paused:
|
||||
dominfo.unpause()
|
||||
-
|
||||
|
||||
def domain_delete(self, domid):
|
||||
"""Remove a managed domain from database
|
@ -10,7 +10,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -2057,7 +2057,7 @@ class XendDomainInfo:
|
||||
@@ -2069,7 +2069,7 @@ class XendDomainInfo:
|
||||
raise VmError('Invalid VM Name')
|
||||
|
||||
dom = XendDomain.instance().domain_lookup_nr(name)
|
||||
|
31
15217-hvm-save-restore.patch
Normal file
31
15217-hvm-save-restore.patch
Normal file
@ -0,0 +1,31 @@
|
||||
# HG changeset patch
|
||||
# User Tim Deegan <Tim.Deegan@xensource.com>
|
||||
# Date 1180973352 -3600
|
||||
# Node ID 7a16a499152ce67fb36b4e101b7d2d953d1f6362
|
||||
# Parent 6f13c3be08fa4c044868144672783f7b1341999a
|
||||
[HVM] Save/restore: trigger FPU state save based on v->fpu_initialised
|
||||
and not on the i387_valid flag, which has no meaning in this context.
|
||||
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/xen/arch/x86/hvm/hvm.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/xen/arch/x86/hvm/hvm.c
|
||||
+++ xen-3.1-testing/xen/arch/x86/hvm/hvm.c
|
||||
@@ -272,7 +272,7 @@ static int hvm_save_cpu_ctxt(struct doma
|
||||
|
||||
/* Other vcpu register state */
|
||||
vc = &v->arch.guest_context;
|
||||
- if ( vc->flags & VGCF_i387_valid )
|
||||
+ if ( v->fpu_initialised )
|
||||
memcpy(ctxt.fpu_regs, &vc->fpu_ctxt, sizeof(ctxt.fpu_regs));
|
||||
else
|
||||
memset(ctxt.fpu_regs, 0, sizeof(ctxt.fpu_regs));
|
||||
@@ -364,7 +364,7 @@ static int hvm_load_cpu_ctxt(struct doma
|
||||
vc->debugreg[6] = ctxt.dr6;
|
||||
vc->debugreg[7] = ctxt.dr7;
|
||||
|
||||
- vc->flags = VGCF_i387_valid | VGCF_online;
|
||||
+ vc->flags = VGCF_online;
|
||||
v->fpu_initialised = 1;
|
||||
|
||||
/* Auxiliary processors should be woken immediately. */
|
74
15228-hvm-usb-windows-crash.patch
Normal file
74
15228-hvm-usb-windows-crash.patch
Normal file
@ -0,0 +1,74 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1181157846 -3600
|
||||
# Node ID 677731eb734d8d7afa37a2e31ca2ed85fbebc2a5
|
||||
# Parent f5a71c9771a81f220926ac11e4c9a2a27530c20a
|
||||
[HVM] Prevent usb driver crashes in Windows
|
||||
|
||||
Use atomic updates to read/write usb controller data.
|
||||
This can be done because:
|
||||
a) word copies on x86 are atomic
|
||||
b) The USB spec requires word alignment
|
||||
|
||||
This will need to be enhanced once USB 1.2 is supported.
|
||||
|
||||
Signed-off-by: Steve Ofsthun <sofsthun@virtualiron.com>
|
||||
|
||||
Update to copy 'longword'-sized atoms.
|
||||
|
||||
Signed-off-by: Keir Fraser <keir@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
+++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
@@ -434,6 +434,31 @@ int iomem_index(target_phys_addr_t addr)
|
||||
extern unsigned long *logdirty_bitmap;
|
||||
extern unsigned long logdirty_bitmap_size;
|
||||
|
||||
+/*
|
||||
+ * Replace the standard byte memcpy with a word memcpy for appropriately sized
|
||||
+ * memory copy operations. Some users (USB-UHCI) can not tolerate the possible
|
||||
+ * word tearing that can result from a guest concurrently writing a memory
|
||||
+ * structure while the qemu device model is modifying the same location.
|
||||
+ * Forcing a word-sized read/write prevents the guest from seeing a partially
|
||||
+ * written word-sized atom.
|
||||
+ */
|
||||
+void memcpy_words(void *dst, void *src, size_t n)
|
||||
+{
|
||||
+ while (n >= sizeof(long)) {
|
||||
+ *((long *)dst)++ = *((long *)src)++;
|
||||
+ n -= sizeof(long);
|
||||
+ }
|
||||
+
|
||||
+ if (n & 4)
|
||||
+ *((uint32_t *)dst)++ = *((uint32_t *)src)++;
|
||||
+
|
||||
+ if (n & 2)
|
||||
+ *((uint16_t *)dst)++ = *((uint16_t *)src)++;
|
||||
+
|
||||
+ if (n & 1)
|
||||
+ *((uint8_t *)dst)++ = *((uint8_t *)src)++;
|
||||
+}
|
||||
+
|
||||
void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
|
||||
int len, int is_write)
|
||||
{
|
||||
@@ -470,7 +495,7 @@ void cpu_physical_memory_rw(target_phys_
|
||||
}
|
||||
} else if ((ptr = phys_ram_addr(addr)) != NULL) {
|
||||
/* Writing to RAM */
|
||||
- memcpy(ptr, buf, l);
|
||||
+ memcpy_words(ptr, buf, l);
|
||||
if (logdirty_bitmap != NULL) {
|
||||
/* Record that we have dirtied this frame */
|
||||
unsigned long pfn = addr >> TARGET_PAGE_BITS;
|
||||
@@ -506,7 +531,7 @@ void cpu_physical_memory_rw(target_phys_
|
||||
}
|
||||
} else if ((ptr = phys_ram_addr(addr)) != NULL) {
|
||||
/* Reading from RAM */
|
||||
- memcpy(buf, ptr, l);
|
||||
+ memcpy_words(buf, ptr, l);
|
||||
} else {
|
||||
/* Neither RAM nor known MMIO space */
|
||||
memset(buf, 0xff, len);
|
55
15230-hvm-usb-windows-crash.patch
Normal file
55
15230-hvm-usb-windows-crash.patch
Normal file
@ -0,0 +1,55 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1181210543 -3600
|
||||
# Node ID b090c290d9f8fc579be32ddd68f2bcd96e05aa03
|
||||
# Parent 6d45351273da0b49ed328ef8077446c4ceedf3ff
|
||||
tools: Fix some type issues GCC 4.1.0 warnings.
|
||||
|
||||
FC5's gcc 4.1.0 can't make some files in tools/ due to its stronger
|
||||
type checking.
|
||||
|
||||
From: Dexuan Cui <dexuan.cui@intel.com>
|
||||
Signed-off-by: Keir Fraser <keir@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
+++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
@@ -445,18 +445,29 @@ extern unsigned long logdirty_bitmap_siz
|
||||
void memcpy_words(void *dst, void *src, size_t n)
|
||||
{
|
||||
while (n >= sizeof(long)) {
|
||||
- *((long *)dst)++ = *((long *)src)++;
|
||||
+ *((long *)dst) = *((long *)src);
|
||||
+ dst = ((long *)dst) + 1;
|
||||
+ src = ((long *)src) + 1;
|
||||
n -= sizeof(long);
|
||||
}
|
||||
|
||||
- if (n & 4)
|
||||
- *((uint32_t *)dst)++ = *((uint32_t *)src)++;
|
||||
-
|
||||
- if (n & 2)
|
||||
- *((uint16_t *)dst)++ = *((uint16_t *)src)++;
|
||||
+ if (n & 4) {
|
||||
+ *((uint32_t *)dst) = *((uint32_t *)src);
|
||||
+ dst = ((uint32_t *)dst) + 1;
|
||||
+ src = ((uint32_t *)src) + 1;
|
||||
+ }
|
||||
+
|
||||
+ if (n & 2) {
|
||||
+ *((uint16_t *)dst) = *((uint16_t *)src);
|
||||
+ dst = ((uint16_t *)dst) + 1;
|
||||
+ src = ((uint16_t *)src) + 1;
|
||||
+ }
|
||||
|
||||
- if (n & 1)
|
||||
- *((uint8_t *)dst)++ = *((uint8_t *)src)++;
|
||||
+ if (n & 1) {
|
||||
+ *((uint8_t *)dst) = *((uint8_t *)src);
|
||||
+ dst = ((uint8_t *)dst) + 1;
|
||||
+ src = ((uint8_t *)src) + 1;
|
||||
+ }
|
||||
}
|
||||
|
||||
void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
|
21
15234-hvm-usb-windows-crash.patch
Normal file
21
15234-hvm-usb-windows-crash.patch
Normal file
@ -0,0 +1,21 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1181211324 -3600
|
||||
# Node ID 1cae82505e9e11bcf47f0857917cd20b2d0bad26
|
||||
# Parent 3a413f011b8f5dc53825d6882cdf95d47a4212b1
|
||||
ioemu: Tiny indentation fix.
|
||||
Signed-off-by: Keir Fraser <keir@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
+++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
@@ -455,7 +455,7 @@ void memcpy_words(void *dst, void *src,
|
||||
*((uint32_t *)dst) = *((uint32_t *)src);
|
||||
dst = ((uint32_t *)dst) + 1;
|
||||
src = ((uint32_t *)src) + 1;
|
||||
- }
|
||||
+ }
|
||||
|
||||
if (n & 2) {
|
||||
*((uint16_t *)dst) = *((uint16_t *)src);
|
21
15257-hvm-save-restore.patch
Normal file
21
15257-hvm-save-restore.patch
Normal file
@ -0,0 +1,21 @@
|
||||
# HG changeset patch
|
||||
# User Tim Deegan <Tim.Deegan@xensource.com>
|
||||
# Date 1181570210 -3600
|
||||
# Node ID ed254cf78f7ca758539ba3314932fbbd808807d2
|
||||
# Parent 2c8c6ca1296b82e31bb0a50fcf9f63d0bfa11176
|
||||
[QEMU] Fix up ioemu timer save/restore after version changes.
|
||||
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/vl.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/vl.c
|
||||
+++ xen-3.1-testing/tools/ioemu/vl.c
|
||||
@@ -872,7 +872,7 @@ static void timer_save(QEMUFile *f, void
|
||||
|
||||
static int timer_load(QEMUFile *f, void *opaque, int version_id)
|
||||
{
|
||||
- if (version_id != 1)
|
||||
+ if (version_id != 1 && version_id != 2)
|
||||
return -EINVAL;
|
||||
if (cpu_ticks_enabled) {
|
||||
return -EINVAL;
|
51
15277-hvm-intel2amd-windows-migrate.patch
Normal file
51
15277-hvm-intel2amd-windows-migrate.patch
Normal file
@ -0,0 +1,51 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1181832897 -3600
|
||||
# Node ID 912f7e312ec2a56c89ef5a949b6ecc72f5df74a6
|
||||
# Parent 4d838167960694f1b9fcaec54590aef0e1f0a7ee
|
||||
hvm svm: Fix for BSOD when "migrating" from Intel to AMD.
|
||||
|
||||
The Intel processor driver for Windows (XP and later at least) reads
|
||||
an MSR that AMD doesn't have. This causes GP-fault in kernel mode,
|
||||
which causes blue-screen-of-death on Windows. This prevents a
|
||||
disk-image that was installed on Intel from starting on an AMD
|
||||
processor.
|
||||
|
||||
This patch "fixes" the problem by allowing reads from the msr,
|
||||
returning all zero's (which is a valid, if not particulary
|
||||
meaningful, value for this register).
|
||||
|
||||
Signed-off-by: Mats Petersson <mats.petersson@amd.com>
|
||||
|
||||
Index: xen-3.1-testing/xen/arch/x86/hvm/svm/svm.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/xen/arch/x86/hvm/svm/svm.c
|
||||
+++ xen-3.1-testing/xen/arch/x86/hvm/svm/svm.c
|
||||
@@ -2000,6 +2000,15 @@ static inline void svm_do_msr_access(
|
||||
msr_content = v->arch.hvm_svm.cpu_shadow_efer;
|
||||
break;
|
||||
|
||||
+ case MSR_IA32_EBC_FREQUENCY_ID:
|
||||
+ /*
|
||||
+ * This Intel-only register may be accessed if this HVM guest
|
||||
+ * has been migrated from an Intel host. The value zero is not
|
||||
+ * particularly meaningful, but at least avoids the guest crashing!
|
||||
+ */
|
||||
+ msr_content = 0;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
if ( rdmsr_hypervisor_regs(ecx, &eax, &edx) ||
|
||||
rdmsr_safe(ecx, eax, edx) == 0 )
|
||||
Index: xen-3.1-testing/xen/include/asm-x86/msr.h
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/xen/include/asm-x86/msr.h
|
||||
+++ xen-3.1-testing/xen/include/asm-x86/msr.h
|
||||
@@ -93,6 +93,7 @@ static inline void wrmsrl(unsigned int m
|
||||
#define MSR_IA32_TIME_STAMP_COUNTER 0x10
|
||||
#define MSR_IA32_PLATFORM_ID 0x17
|
||||
#define MSR_IA32_EBL_CR_POWERON 0x2a
|
||||
+#define MSR_IA32_EBC_FREQUENCY_ID 0x2c
|
||||
|
||||
#define MSR_IA32_APICBASE 0x1b
|
||||
#define MSR_IA32_APICBASE_BSP (1<<8)
|
72
15383-hvm-usb-windows-crash.patch
Normal file
72
15383-hvm-usb-windows-crash.patch
Normal file
@ -0,0 +1,72 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1182265695 -3600
|
||||
# Node ID 896b536d66c9952fac4bd1c9a6e3f562debec19d
|
||||
# Parent cb747a35e057ad2536fc560d21d43a1ade1faae5
|
||||
ioemu: Assembler memcpy() for x86, and lowest-common-denominator
|
||||
memcpy() function for all others, avoiding noisy longword copies on
|
||||
ia64.
|
||||
Signed-off-by: Keir Fraser <keir@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
+++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
@@ -442,19 +442,40 @@ extern unsigned long logdirty_bitmap_siz
|
||||
* Forcing a word-sized read/write prevents the guest from seeing a partially
|
||||
* written word-sized atom.
|
||||
*/
|
||||
-void memcpy_words(void *dst, void *src, size_t n)
|
||||
+#if defined(__x86_64__) || defined(__i386__)
|
||||
+static void memcpy_words(void *dst, void *src, size_t n)
|
||||
{
|
||||
- while (n >= sizeof(long)) {
|
||||
- *((long *)dst) = *((long *)src);
|
||||
- dst = ((long *)dst) + 1;
|
||||
- src = ((long *)src) + 1;
|
||||
- n -= sizeof(long);
|
||||
- }
|
||||
-
|
||||
- if (n & 4) {
|
||||
+ asm (
|
||||
+ " movl %%edx,%%ecx \n"
|
||||
+#ifdef __x86_64
|
||||
+ " shrl $3,%%ecx \n"
|
||||
+ " andl $7,%%edx \n"
|
||||
+ " rep movsq \n"
|
||||
+ " test $4,%%edx \n"
|
||||
+ " jz 1f \n"
|
||||
+ " movsl \n"
|
||||
+#else /* __i386__ */
|
||||
+ " shrl $2,%%ecx \n"
|
||||
+ " andl $3,%%edx \n"
|
||||
+ " rep movsl \n"
|
||||
+#endif
|
||||
+ "1: test $2,%%edx \n"
|
||||
+ " jz 1f \n"
|
||||
+ " movsw \n"
|
||||
+ "1: test $1,%%edx \n"
|
||||
+ " jz 1f \n"
|
||||
+ " movsb \n"
|
||||
+ "1: \n"
|
||||
+ : : "S" (src), "D" (dst), "d" (n) : "ecx" );
|
||||
+}
|
||||
+#else
|
||||
+static void memcpy_words(void *dst, void *src, size_t n)
|
||||
+{
|
||||
+ while (n >= sizeof(uint32_t)) {
|
||||
*((uint32_t *)dst) = *((uint32_t *)src);
|
||||
dst = ((uint32_t *)dst) + 1;
|
||||
src = ((uint32_t *)src) + 1;
|
||||
+ n -= sizeof(uint32_t);
|
||||
}
|
||||
|
||||
if (n & 2) {
|
||||
@@ -469,6 +490,7 @@ void memcpy_words(void *dst, void *src,
|
||||
src = ((uint8_t *)src) + 1;
|
||||
}
|
||||
}
|
||||
+#endif
|
||||
|
||||
void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
|
||||
int len, int is_write)
|
21
15418-hvm-usb-windows-crash.patch
Normal file
21
15418-hvm-usb-windows-crash.patch
Normal file
@ -0,0 +1,21 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1182786759 -3600
|
||||
# Node ID 3f76b2f76c2ad605c448a5535780a17cbefd0b05
|
||||
# Parent 015d9abeacfb39c73c9aa488c2def2f66ab06e2b
|
||||
ioemu: Fix ifdef __x86_64__
|
||||
Signed-off-by: Keir Fraser <keir@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
+++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c
|
||||
@@ -447,7 +447,7 @@ static void memcpy_words(void *dst, void
|
||||
{
|
||||
asm (
|
||||
" movl %%edx,%%ecx \n"
|
||||
-#ifdef __x86_64
|
||||
+#ifdef __x86_64__
|
||||
" shrl $3,%%ecx \n"
|
||||
" andl $7,%%edx \n"
|
||||
" rep movsq \n"
|
67
15469-hvm-save-restore.patch
Normal file
67
15469-hvm-save-restore.patch
Normal file
@ -0,0 +1,67 @@
|
||||
# HG changeset patch
|
||||
# User Tim Deegan <Tim.Deegan@xensource.com>
|
||||
# Date 1183643173 -3600
|
||||
# Node ID 936aa542053d050c246825993b1213243ea2fb00
|
||||
# Parent d54d47fc8c6cdea23437476407bec05d85742760
|
||||
[HVM] Shadow: avoid xen crash if guest uses special memory for pagetables
|
||||
(just crash the guest and don't do any more PTE propagations).
|
||||
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/xen/arch/x86/mm/shadow/common.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/xen/arch/x86/mm/shadow/common.c
|
||||
+++ xen-3.1-testing/xen/arch/x86/mm/shadow/common.c
|
||||
@@ -474,7 +474,9 @@ void shadow_promote(struct vcpu *v, mfn_
|
||||
ASSERT(mfn_valid(gmfn));
|
||||
|
||||
/* We should never try to promote a gmfn that has writeable mappings */
|
||||
- ASSERT(sh_remove_write_access(v, gmfn, 0, 0) == 0);
|
||||
+ ASSERT((page->u.inuse.type_info & PGT_type_mask) != PGT_writable_page
|
||||
+ || (page->u.inuse.type_info & PGT_count_mask) == 0
|
||||
+ || v->domain->is_shutting_down);
|
||||
|
||||
/* Is the page already shadowed? */
|
||||
if ( !test_and_set_bit(_PGC_page_table, &page->count_info) )
|
||||
@@ -1818,11 +1820,12 @@ int sh_remove_write_access(struct vcpu *
|
||||
perfc_incr(shadow_writeable_bf);
|
||||
hash_foreach(v, callback_mask, callbacks, gmfn);
|
||||
|
||||
- /* If that didn't catch the mapping, something is very wrong */
|
||||
+ /* If that didn't catch the mapping, then there's some non-pagetable
|
||||
+ * mapping -- ioreq page, grant mapping, &c. */
|
||||
if ( (mfn_to_page(gmfn)->u.inuse.type_info & PGT_count_mask) != 0 )
|
||||
{
|
||||
- SHADOW_ERROR("can't find all writeable mappings of mfn %lx: "
|
||||
- "%lu left\n", mfn_x(gmfn),
|
||||
+ SHADOW_ERROR("can't remove write access to mfn %lx: guest has "
|
||||
+ "%lu special-use mappings of it\n", mfn_x(gmfn),
|
||||
(mfn_to_page(gmfn)->u.inuse.type_info&PGT_count_mask));
|
||||
domain_crash(v->domain);
|
||||
}
|
||||
Index: xen-3.1-testing/xen/arch/x86/mm/shadow/multi.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/xen/arch/x86/mm/shadow/multi.c
|
||||
+++ xen-3.1-testing/xen/arch/x86/mm/shadow/multi.c
|
||||
@@ -2719,10 +2719,21 @@ static int sh_page_fault(struct vcpu *v,
|
||||
|
||||
if ( guest_walk_tables(v, va, &gw, 1) != 0 )
|
||||
{
|
||||
- SHADOW_PRINTK("malformed guest pagetable!");
|
||||
+ SHADOW_PRINTK("malformed guest pagetable\n");
|
||||
print_gw(&gw);
|
||||
}
|
||||
|
||||
+ /* It's possible that the guest has put pagetables in memory that it has
|
||||
+ * already used for some special purpose (ioreq pages, or granted pages).
|
||||
+ * If that happens we'll have killed the guest already but it's still not
|
||||
+ * safe to propagate entries out of the guest PT so get out now. */
|
||||
+ if ( unlikely(d->is_shutting_down) )
|
||||
+ {
|
||||
+ SHADOW_PRINTK("guest is shutting down\n");
|
||||
+ shadow_unlock(d);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
sh_audit_gw(v, &gw);
|
||||
|
||||
// We do not look at the gw->l1e, as that will not exist for superpages.
|
34
15477_dev_attach.patch
Normal file
34
15477_dev_attach.patch
Normal file
@ -0,0 +1,34 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1183729265 -3600
|
||||
# Node ID 3196b63a7301b264d45b82ac347b1bef854680b3
|
||||
# Parent f20ee5bc9d28cab8a27e2bd073b72033adb7f9a7
|
||||
xend: Fix xm block/network-attach command for inactive managed domain
|
||||
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -500,9 +500,18 @@ class XendDomainInfo:
|
||||
dev_uuid = self.info.device_add(dev_type, cfg_sxp = dev_config)
|
||||
dev_config_dict = self.info['devices'][dev_uuid][1]
|
||||
log.debug("XendDomainInfo.device_create: %s" % scrub_password(dev_config_dict))
|
||||
- dev_config_dict['devid'] = devid = \
|
||||
- self._createDevice(dev_type, dev_config_dict)
|
||||
- self._waitForDevice(dev_type, devid)
|
||||
+
|
||||
+ if self.domid is not None:
|
||||
+ try:
|
||||
+ dev_config_dict['devid'] = devid = \
|
||||
+ self._createDevice(dev_type, dev_config_dict)
|
||||
+ self._waitForDevice(dev_type, devid)
|
||||
+ except VmError, ex:
|
||||
+ raise ex
|
||||
+ else:
|
||||
+ devid = None
|
||||
+
|
||||
+ xen.xend.XendDomain.instance().managed_config_save(self)
|
||||
return self.getDeviceController(dev_type).sxpr(devid)
|
||||
|
||||
def device_configure(self, dev_sxp, devid = None):
|
35
15528-hvm-sles9-install.patch
Normal file
35
15528-hvm-sles9-install.patch
Normal file
@ -0,0 +1,35 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1184147295 -3600
|
||||
# Node ID 637ff26be6ff820d185d8cdc5cc344aea6b5c9e2
|
||||
# Parent ff51ff907f8cce9d10296507e6c4c666cf603876
|
||||
Make QEMU consistently report write caching support for emulated IDE
|
||||
drives to fix a hang during SLES 9 HVM guest installation.
|
||||
|
||||
Without this, the SLES 9 installer kernels (32 and 64 bit) were
|
||||
getting inconsistent information from QEMU as to whether the
|
||||
(emulated) IDE drives support write caching (which they do). So part
|
||||
of the kernel thought write caching was enabled (and enabled the usage
|
||||
of barrier writes) and part of it didn't, which triggered a bug in
|
||||
which the same barrier write is submitted over and over again ...
|
||||
|
||||
Fixed by setting another bit in the WIN_IDENTIFY (IDE drive "identify"
|
||||
command) response to indicate we really, truly support write caching.
|
||||
|
||||
Signed-off-by: David Lively <dlively@virtualiron.com>
|
||||
Signed-off-by: Ben Guthro <bguthro@virtualiron.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/hw/ide.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/hw/ide.c
|
||||
+++ xen-3.1-testing/tools/ioemu/hw/ide.c
|
||||
@@ -676,7 +676,8 @@ static void ide_identify(IDEState *s)
|
||||
/* 13=flush_cache_ext,12=flush_cache,10=lba48 */
|
||||
put_le16(p + 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
|
||||
put_le16(p + 84, (1 << 14));
|
||||
- put_le16(p + 85, (1 << 14));
|
||||
+ /* 14=nop 5=write_cache */
|
||||
+ put_le16(p + 85, (1 << 14) | (1 << 5));
|
||||
/* 13=flush_cache_ext,12=flush_cache,10=lba48 */
|
||||
put_le16(p + 86, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
|
||||
put_le16(p + 87, (1 << 14));
|
@ -17,7 +17,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -1562,6 +1562,7 @@ class XendDomainInfo:
|
||||
@@ -1571,6 +1571,7 @@ class XendDomainInfo:
|
||||
log.exception("Removing domain path failed.")
|
||||
|
||||
self._stateSet(DOM_STATE_HALTED)
|
||||
|
42
15596-rtl8139-crc-fix.patch
Normal file
42
15596-rtl8139-crc-fix.patch
Normal file
@ -0,0 +1,42 @@
|
||||
# HG changeset patch
|
||||
# User Tim Deegan <Tim.Deegan@xensource.com>
|
||||
# Date 1184592534 -3600
|
||||
# Node ID d99903a98ad018c9aed180480577f56ce015fd30
|
||||
# Parent 1158b6115b1413aa5d92ebe5b4ab2640eded40e3
|
||||
[HVM] Qemu rtl8139: correct rx CRC calculation
|
||||
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/hw/rtl8139.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/hw/rtl8139.c 2007-08-20 15:15:42.000000000 -0600
|
||||
+++ xen-3.1-testing/tools/ioemu/hw/rtl8139.c 2007-08-20 15:15:43.000000000 -0600
|
||||
@@ -53,9 +53,8 @@
|
||||
/* debug RTL8139 card C+ mode only */
|
||||
//#define DEBUG_RTL8139CP 1
|
||||
|
||||
-/* RTL8139 provides frame CRC with received packet, this feature seems to be
|
||||
- ignored by most drivers, disabled by default */
|
||||
-//#define RTL8139_CALCULATE_RXCRC 1
|
||||
+/* Calculate CRCs propoerly on Rx packets */
|
||||
+#define RTL8139_CALCULATE_RXCRC 1
|
||||
|
||||
/* Uncomment to enable on-board timer interrupts */
|
||||
//#define RTL8139_ONBOARD_TIMER 1
|
||||
@@ -1030,7 +1029,7 @@
|
||||
|
||||
/* write checksum */
|
||||
#if defined (RTL8139_CALCULATE_RXCRC)
|
||||
- val = cpu_to_le32(crc32(~0, buf, size));
|
||||
+ val = cpu_to_le32(crc32(0, buf, size));
|
||||
#else
|
||||
val = 0;
|
||||
#endif
|
||||
@@ -1136,7 +1135,7 @@
|
||||
|
||||
/* write checksum */
|
||||
#if defined (RTL8139_CALCULATE_RXCRC)
|
||||
- val = cpu_to_le32(crc32(~0, buf, size));
|
||||
+ val = cpu_to_le32(crc32(0, buf, size));
|
||||
#else
|
||||
val = 0;
|
||||
#endif
|
62
15645-hvm-save-restore.patch
Normal file
62
15645-hvm-save-restore.patch
Normal file
@ -0,0 +1,62 @@
|
||||
# HG changeset patch
|
||||
# User Tim Deegan <Tim.Deegan@xensource.com>
|
||||
# Date 1185447632 -3600
|
||||
# Node ID 07655ed2fe58ebf883b8a4b5c2dccf15576f4778
|
||||
# Parent 3ec3e2840a29bb6d4c64b8094248381712370f17
|
||||
[HVM] Save/restore: don't leak shared-memory segments after HVM live-migrate.
|
||||
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/xcutils/xc_save.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/xcutils/xc_save.c
|
||||
+++ xen-3.1-testing/tools/xcutils/xc_save.c
|
||||
@@ -54,8 +54,18 @@ static int suspend(int domid)
|
||||
|
||||
static char *qemu_active_path;
|
||||
static char *qemu_next_active_path;
|
||||
+static int qemu_shmid = -1;
|
||||
static struct xs_handle *xs;
|
||||
|
||||
+
|
||||
+/* Mark the shared-memory segment for destruction */
|
||||
+static void qemu_destroy_buffer(void)
|
||||
+{
|
||||
+ if (qemu_shmid != -1)
|
||||
+ shmctl(qemu_shmid, IPC_RMID, NULL);
|
||||
+ qemu_shmid = -1;
|
||||
+}
|
||||
+
|
||||
/* Get qemu to change buffers. */
|
||||
static void qemu_flip_buffer(int domid, int next_active)
|
||||
{
|
||||
@@ -97,22 +107,23 @@ static void * init_qemu_maps(int domid,
|
||||
{
|
||||
key_t key;
|
||||
char key_ascii[17] = {0,};
|
||||
- int shmid = -1;
|
||||
void *seg;
|
||||
char *path, *p;
|
||||
|
||||
/* Make a shared-memory segment */
|
||||
- while (shmid == -1)
|
||||
- {
|
||||
+ do {
|
||||
key = rand(); /* No security, just a sequence of numbers */
|
||||
- shmid = shmget(key, 2 * bitmap_size,
|
||||
+ qemu_shmid = shmget(key, 2 * bitmap_size,
|
||||
IPC_CREAT|IPC_EXCL|S_IRUSR|S_IWUSR);
|
||||
- if (shmid == -1 && errno != EEXIST)
|
||||
+ if (qemu_shmid == -1 && errno != EEXIST)
|
||||
errx(1, "can't get shmem to talk to qemu-dm");
|
||||
- }
|
||||
+ } while (qemu_shmid == -1);
|
||||
+
|
||||
+ /* Remember to tidy up after ourselves */
|
||||
+ atexit(qemu_destroy_buffer);
|
||||
|
||||
/* Map it into our address space */
|
||||
- seg = shmat(shmid, NULL, 0);
|
||||
+ seg = shmat(qemu_shmid, NULL, 0);
|
||||
if (seg == (void *) -1)
|
||||
errx(1, "can't map shmem to talk to qemu-dm");
|
||||
memset(seg, 0, 2 * bitmap_size);
|
@ -6,10 +6,11 @@
|
||||
Fix Xen API console methods that use undefined variables.
|
||||
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
||||
|
||||
diff -r f035c4d9880a -r e63b331d8698 tools/python/xen/xend/XendAPI.py
|
||||
--- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:04:35 2007 +0100
|
||||
+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:10 2007 +0100
|
||||
@@ -2378,11 +2378,13 @@ class XendAPI(object):
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py
|
||||
@@ -2291,11 +2291,13 @@ class XendAPI(object):
|
||||
return xen_api_success(cons)
|
||||
|
||||
def console_get_location(self, session, console_ref):
|
||||
|
@ -6,10 +6,11 @@
|
||||
Implement missing Xen API method Console.get_other_config.
|
||||
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
||||
|
||||
diff -r e63b331d8698 -r 2450743f51b2 tools/python/xen/xend/XendAPI.py
|
||||
--- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:10 2007 +0100
|
||||
+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:30 2007 +0100
|
||||
@@ -2394,6 +2394,12 @@ class XendAPI(object):
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py
|
||||
@@ -2307,6 +2307,12 @@ class XendAPI(object):
|
||||
vm = xendom.get_vm_with_dev_uuid('console', console_ref)
|
||||
return xen_api_success(vm.get_uuid())
|
||||
|
||||
|
@ -6,10 +6,11 @@
|
||||
Implement Xen API method Console.set_other_config.
|
||||
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
||||
|
||||
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendAPI.py
|
||||
--- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:30 2007 +0100
|
||||
+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:58 2007 +0100
|
||||
@@ -2438,6 +2438,13 @@ class XendAPI(object):
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py
|
||||
@@ -2351,6 +2351,13 @@ class XendAPI(object):
|
||||
except XendError, exn:
|
||||
return xen_api_error(['INTERNAL_ERROR', str(exn)])
|
||||
|
||||
@ -23,22 +24,23 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendAPI.py
|
||||
# Xen API: Class SR
|
||||
# ----------------------------------------------------------------
|
||||
SR_attr_ro = ['VDIs',
|
||||
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
|
||||
--- a/tools/python/xen/xend/XendConfig.py Fri Jul 27 09:06:30 2007 +0100
|
||||
+++ b/tools/python/xen/xend/XendConfig.py Fri Jul 27 09:06:58 2007 +0100
|
||||
@@ -128,6 +128,11 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic',
|
||||
'soundhw','stdvga', 'usb', 'usbdevice', 'vnc',
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -124,6 +124,11 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic',
|
||||
'vncconsole', 'vncdisplay', 'vnclisten',
|
||||
'vncpasswd', 'vncunused', 'xauthority']
|
||||
+
|
||||
|
||||
+# Xen API console 'other_config' keys.
|
||||
+XENAPI_CONSOLE_OTHER_CFG = ['vncunused', 'vncdisplay', 'vnclisten',
|
||||
+ 'vncpasswd', 'type', 'display', 'xauthority',
|
||||
+ 'keymap']
|
||||
|
||||
+
|
||||
# List of XendConfig configuration keys that have no direct equivalent
|
||||
# in the old world.
|
||||
@@ -1121,9 +1126,7 @@ class XendConfig(dict):
|
||||
|
||||
@@ -1023,9 +1028,7 @@ class XendConfig(dict):
|
||||
# with vfb
|
||||
|
||||
other_config = {}
|
||||
@ -49,7 +51,7 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
|
||||
if key in dev_info:
|
||||
other_config[key] = dev_info[key]
|
||||
target['devices'][dev_uuid][1]['other_config'] = other_config
|
||||
@@ -1311,6 +1314,13 @@ class XendConfig(dict):
|
||||
@@ -1208,6 +1211,13 @@ class XendConfig(dict):
|
||||
for dev_uuid, (dev_type, dev_info) in self['devices'].items():
|
||||
if dev_uuid == console_uuid:
|
||||
dev_info[key] = value
|
||||
@ -63,10 +65,11 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
|
||||
break
|
||||
|
||||
def console_get_all(self, protocol):
|
||||
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendDomainInfo.py
|
||||
--- a/tools/python/xen/xend/XendDomainInfo.py Fri Jul 27 09:06:30 2007 +0100
|
||||
+++ b/tools/python/xen/xend/XendDomainInfo.py Fri Jul 27 09:06:58 2007 +0100
|
||||
@@ -2633,6 +2633,9 @@ class XendDomainInfo:
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -2488,6 +2488,9 @@ class XendDomainInfo:
|
||||
|
||||
return dev_uuid
|
||||
|
||||
|
@ -1,19 +1,19 @@
|
||||
# HG changeset patch
|
||||
# User Jim Fehlig <jfehlig@novell.com>
|
||||
# Date 1186081049 21600
|
||||
# Node ID 430ae0d3a333ff4d212df7c2313caa03e8f4dd51
|
||||
# Parent 88bb0d305308a2cab31fd8559a6a2719db1ea55a
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1186391554 -3600
|
||||
# Node ID f8d5c509f156cbe3a6a1683f21a75e560e7ba369
|
||||
# Parent 92e43b36d211606435587420d08b6b949911ce18
|
||||
Fix/cleanup destroyDevice code path in xend.
|
||||
|
||||
When calling destroyDevice code path (e.g. xm block-detach dom devid),
|
||||
allow specifying an integer device id or a device name such as xvdN or
|
||||
/dev/xvdN. Allowing the /dev/xvdN form is useful when detaching devices
|
||||
from dom0. Bootloaders may do this to unmount a disk previously
|
||||
mounted in dom0.
|
||||
/dev/xvdN. Allowing the /dev/xvdN form is useful when detaching
|
||||
devices from dom0. Bootloaders may do this to unmount a disk
|
||||
previously mounted in dom0.
|
||||
|
||||
Move examination of device ID format into the DevController, permitting
|
||||
device controllers to determine a valid device ID instead of higher
|
||||
level code.
|
||||
Move examination of device ID format into the DevController,
|
||||
permitting device controllers to determine a valid device ID instead
|
||||
of higher level code.
|
||||
|
||||
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
||||
|
||||
@ -21,7 +21,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -544,18 +544,8 @@ class XendDomainInfo:
|
||||
@@ -553,18 +553,8 @@ class XendDomainInfo:
|
||||
self.getDeviceController(devclass).waitForDevices()
|
||||
|
||||
def destroyDevice(self, deviceClass, devid, force = False):
|
||||
@ -115,3 +115,84 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/blkif.py
|
||||
except ValueError:
|
||||
devid_end = type(devid) is str and devid.split('/')[-1] or None
|
||||
|
||||
Index: xen-3.1-testing/tools/security/policies/default-security_policy.xml
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ xen-3.1-testing/tools/security/policies/default-security_policy.xml
|
||||
@@ -0,0 +1,30 @@
|
||||
+<?xml version="1.0" ?>
|
||||
+<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd">
|
||||
+ <PolicyHeader>
|
||||
+ <PolicyName>DEFAULT</PolicyName>
|
||||
+ <Version>1.0</Version>
|
||||
+ </PolicyHeader>
|
||||
+ <SimpleTypeEnforcement>
|
||||
+ <SimpleTypeEnforcementTypes>
|
||||
+ <Type>SystemManagement</Type>
|
||||
+ </SimpleTypeEnforcementTypes>
|
||||
+ </SimpleTypeEnforcement>
|
||||
+ <ChineseWall>
|
||||
+ <ChineseWallTypes>
|
||||
+ <Type>SystemManagement</Type>
|
||||
+ </ChineseWallTypes>
|
||||
+ </ChineseWall>
|
||||
+ <SecurityLabelTemplate>
|
||||
+ <SubjectLabels bootstrap="SystemManagement">
|
||||
+ <VirtualMachineLabel>
|
||||
+ <Name>SystemManagement</Name>
|
||||
+ <SimpleTypeEnforcementTypes>
|
||||
+ <Type>SystemManagement</Type>
|
||||
+ </SimpleTypeEnforcementTypes>
|
||||
+ <ChineseWallTypes>
|
||||
+ <Type/>
|
||||
+ </ChineseWallTypes>
|
||||
+ </VirtualMachineLabel>
|
||||
+ </SubjectLabels>
|
||||
+ </SecurityLabelTemplate>
|
||||
+</SecurityPolicyDefinition>
|
||||
Index: xen-3.1-testing/tools/security/policies/default-ul-security_policy.xml
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ xen-3.1-testing/tools/security/policies/default-ul-security_policy.xml
|
||||
@@ -0,0 +1,41 @@
|
||||
+<?xml version="1.0" ?>
|
||||
+<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd">
|
||||
+ <PolicyHeader>
|
||||
+ <PolicyName>DEFAULT-UL</PolicyName>
|
||||
+ <Version>1.0</Version>
|
||||
+ </PolicyHeader>
|
||||
+ <SimpleTypeEnforcement>
|
||||
+ <SimpleTypeEnforcementTypes>
|
||||
+ <Type>SystemManagement</Type>
|
||||
+ <Type>__UNLABELED__</Type>
|
||||
+ </SimpleTypeEnforcementTypes>
|
||||
+ </SimpleTypeEnforcement>
|
||||
+ <ChineseWall>
|
||||
+ <ChineseWallTypes>
|
||||
+ <Type>SystemManagement</Type>
|
||||
+ </ChineseWallTypes>
|
||||
+ </ChineseWall>
|
||||
+ <SecurityLabelTemplate>
|
||||
+ <SubjectLabels bootstrap="SystemManagement">
|
||||
+ <VirtualMachineLabel>
|
||||
+ <Name>SystemManagement</Name>
|
||||
+ <SimpleTypeEnforcementTypes>
|
||||
+ <Type>SystemManagement</Type>
|
||||
+ <Type>__UNLABELED__</Type>
|
||||
+ </SimpleTypeEnforcementTypes>
|
||||
+ <ChineseWallTypes>
|
||||
+ <Type/>
|
||||
+ </ChineseWallTypes>
|
||||
+ </VirtualMachineLabel>
|
||||
+ <VirtualMachineLabel>
|
||||
+ <Name>__UNLABELED__</Name>
|
||||
+ <SimpleTypeEnforcementTypes>
|
||||
+ <Type>__UNLABELED__</Type>
|
||||
+ </SimpleTypeEnforcementTypes>
|
||||
+ <ChineseWallTypes>
|
||||
+ <Type/>
|
||||
+ </ChineseWallTypes>
|
||||
+ </VirtualMachineLabel>
|
||||
+ </SubjectLabels>
|
||||
+ </SecurityLabelTemplate>
|
||||
+</SecurityPolicyDefinition>
|
49
15691-hvm-save-restore.patch
Normal file
49
15691-hvm-save-restore.patch
Normal file
@ -0,0 +1,49 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1186394937 -3600
|
||||
# Node ID e1435c1f3382069ca5044808b3233bda8b09d150
|
||||
# Parent fd20c1333e3ee8f58e879aed79d74a75bc1969e6
|
||||
hvm: Fix save/restore when callback_via line is routed through a PCI
|
||||
INTx wire.
|
||||
Signed-off-by: Edwin Zhai <edwin.zhai@intel.com>
|
||||
Signed-off-by: Keir Fraser <keir@xensource.com>
|
||||
|
||||
Index: xen-3.1-testing/xen/arch/x86/hvm/irq.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/xen/arch/x86/hvm/irq.c
|
||||
+++ xen-3.1-testing/xen/arch/x86/hvm/irq.c
|
||||
@@ -388,9 +388,33 @@ static void irq_dump(struct domain *d)
|
||||
static int irq_save_pci(struct domain *d, hvm_domain_context_t *h)
|
||||
{
|
||||
struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
|
||||
+ unsigned int asserted, pdev, pintx;
|
||||
+ int rc;
|
||||
+
|
||||
+ spin_lock(&d->arch.hvm_domain.irq_lock);
|
||||
+
|
||||
+ pdev = hvm_irq->callback_via.pci.dev;
|
||||
+ pintx = hvm_irq->callback_via.pci.intx;
|
||||
+ asserted = (hvm_irq->callback_via_asserted &&
|
||||
+ (hvm_irq->callback_via_type == HVMIRQ_callback_pci_intx));
|
||||
+
|
||||
+ /*
|
||||
+ * Deassert virtual interrupt via PCI INTx line. The virtual interrupt
|
||||
+ * status is not save/restored, so the INTx line must be deasserted in
|
||||
+ * the restore context.
|
||||
+ */
|
||||
+ if ( asserted )
|
||||
+ __hvm_pci_intx_deassert(d, pdev, pintx);
|
||||
|
||||
/* Save PCI IRQ lines */
|
||||
- return ( hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx) );
|
||||
+ rc = hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx);
|
||||
+
|
||||
+ if ( asserted )
|
||||
+ __hvm_pci_intx_assert(d, pdev, pintx);
|
||||
+
|
||||
+ spin_unlock(&d->arch.hvm_domain.irq_lock);
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int irq_save_isa(struct domain *d, hvm_domain_context_t *h)
|
292
15716_dev_detach.patch
Normal file
292
15716_dev_detach.patch
Normal file
@ -0,0 +1,292 @@
|
||||
# HG changeset patch
|
||||
# User kfraser@localhost.localdomain
|
||||
# Date 1186672901 -3600
|
||||
# Node ID 95f90f24f3b1f33f911d3e9a01cb1d7bce5b29e0
|
||||
# Parent f0298301ba8b34ac3e5470cf953a3591f7730d26
|
||||
Fix xm block/network-detach command.
|
||||
|
||||
- To remove device info, it waits for the backend path of the device
|
||||
to be removed.
|
||||
- It removes device info from domain info.
|
||||
- It saves domain info to the config.sxp of the managed domain.
|
||||
|
||||
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
|
||||
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -552,9 +552,64 @@ class XendDomainInfo:
|
||||
for devclass in XendDevices.valid_devices():
|
||||
self.getDeviceController(devclass).waitForDevices()
|
||||
|
||||
- def destroyDevice(self, deviceClass, devid, force = False):
|
||||
- log.debug("dev = %s", devid)
|
||||
- return self.getDeviceController(deviceClass).destroyDevice(devid, force)
|
||||
+ def destroyDevice(self, deviceClass, devid, force = False, rm_cfg = False):
|
||||
+ log.debug("XendDomainInfo.destroyDevice: deviceClass = %s, device = %s",
|
||||
+ deviceClass, devid)
|
||||
+
|
||||
+ if rm_cfg:
|
||||
+ # Convert devid to device number. A device number is
|
||||
+ # needed to remove its configuration.
|
||||
+ dev = self.getDeviceController(deviceClass).convertToDeviceNumber(devid)
|
||||
+
|
||||
+ # Save current sxprs. A device number and a backend
|
||||
+ # path are needed to remove its configuration but sxprs
|
||||
+ # do not have those after calling destroyDevice.
|
||||
+ sxprs = self.getDeviceSxprs(deviceClass)
|
||||
+
|
||||
+ rc = None
|
||||
+ if self.domid is not None:
|
||||
+ rc = self.getDeviceController(deviceClass).destroyDevice(devid, force)
|
||||
+ if not force and rm_cfg:
|
||||
+ # The backend path, other than the device itself,
|
||||
+ # has to be passed because its accompanied frontend
|
||||
+ # path may be void until its removal is actually
|
||||
+ # issued. It is probable because destroyDevice is
|
||||
+ # issued first.
|
||||
+ for dev_num, dev_info in sxprs:
|
||||
+ dev_num = int(dev_num)
|
||||
+ if dev_num == dev:
|
||||
+ for x in dev_info:
|
||||
+ if x[0] == 'backend':
|
||||
+ backend = x[1]
|
||||
+ break
|
||||
+ break
|
||||
+ self._waitForDevice_destroy(deviceClass, devid, backend)
|
||||
+
|
||||
+ if rm_cfg:
|
||||
+ if deviceClass == 'vif':
|
||||
+ if self.domid is not None:
|
||||
+ for dev_num, dev_info in sxprs:
|
||||
+ dev_num = int(dev_num)
|
||||
+ if dev_num == dev:
|
||||
+ for x in dev_info:
|
||||
+ if x[0] == 'mac':
|
||||
+ mac = x[1]
|
||||
+ break
|
||||
+ break
|
||||
+ dev_info = self.getDeviceInfo_vif(mac)
|
||||
+ else:
|
||||
+ _, dev_info = sxprs[dev]
|
||||
+ else: # 'vbd' or 'tap'
|
||||
+ dev_info = self.getDeviceInfo_vbd(dev)
|
||||
+ if dev_info is None:
|
||||
+ return rc
|
||||
+
|
||||
+ dev_uuid = sxp.child_value(dev_info, 'uuid')
|
||||
+ del self.info['devices'][dev_uuid]
|
||||
+ self.info['%s_refs' % deviceClass].remove(dev_uuid)
|
||||
+ xen.xend.XendDomain.instance().managed_config_save(self)
|
||||
+
|
||||
+ return rc
|
||||
|
||||
def getDeviceSxprs(self, deviceClass):
|
||||
if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED):
|
||||
@@ -568,6 +623,23 @@ class XendDomainInfo:
|
||||
dev_num += 1
|
||||
return sxprs
|
||||
|
||||
+ def getDeviceInfo_vif(self, mac):
|
||||
+ for dev_type, dev_info in self.info.all_devices_sxpr():
|
||||
+ if dev_type != 'vif':
|
||||
+ continue
|
||||
+ if mac == sxp.child_value(dev_info, 'mac'):
|
||||
+ return dev_info
|
||||
+
|
||||
+ def getDeviceInfo_vbd(self, devid):
|
||||
+ for dev_type, dev_info in self.info.all_devices_sxpr():
|
||||
+ if dev_type != 'vbd' and dev_type != 'tap':
|
||||
+ continue
|
||||
+ dev = sxp.child_value(dev_info, 'dev')
|
||||
+ dev = dev.split(':')[0]
|
||||
+ dev = self.getDeviceController(dev_type).convertToDeviceNumber(dev)
|
||||
+ if devid == dev:
|
||||
+ return dev_info
|
||||
+
|
||||
|
||||
def setMemoryTarget(self, target):
|
||||
"""Set the memory target of this domain.
|
||||
@@ -1296,6 +1368,10 @@ class XendDomainInfo:
|
||||
deviceClass, config = self.info['devices'].get(dev_uuid)
|
||||
self._waitForDevice(deviceClass, config['devid'])
|
||||
|
||||
+ def _waitForDevice_destroy(self, deviceClass, devid, backpath):
|
||||
+ return self.getDeviceController(deviceClass).waitForDevice_destroy(
|
||||
+ devid, backpath)
|
||||
+
|
||||
def _reconfigureDevice(self, deviceClass, devid, devconfig):
|
||||
return self.getDeviceController(deviceClass).reconfigureDevice(
|
||||
devid, devconfig)
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/server/DevController.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/server/DevController.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/server/DevController.py
|
||||
@@ -28,17 +28,19 @@ from xen.xend.xenstore.xswatch import xs
|
||||
|
||||
import os
|
||||
|
||||
-DEVICE_CREATE_TIMEOUT = 100
|
||||
+DEVICE_CREATE_TIMEOUT = 100
|
||||
+DEVICE_DESTROY_TIMEOUT = 100
|
||||
HOTPLUG_STATUS_NODE = "hotplug-status"
|
||||
HOTPLUG_ERROR_NODE = "hotplug-error"
|
||||
HOTPLUG_STATUS_ERROR = "error"
|
||||
HOTPLUG_STATUS_BUSY = "busy"
|
||||
|
||||
-Connected = 1
|
||||
-Error = 2
|
||||
-Missing = 3
|
||||
-Timeout = 4
|
||||
-Busy = 5
|
||||
+Connected = 1
|
||||
+Error = 2
|
||||
+Missing = 3
|
||||
+Timeout = 4
|
||||
+Busy = 5
|
||||
+Disconnected = 6
|
||||
|
||||
xenbusState = {
|
||||
'Unknown' : 0,
|
||||
@@ -185,6 +187,18 @@ class DevController:
|
||||
(devid, self.deviceClass, err))
|
||||
|
||||
|
||||
+ def waitForDevice_destroy(self, devid, backpath):
|
||||
+ log.debug("Waiting for %s - destroyDevice.", devid)
|
||||
+
|
||||
+ if not self.hotplug:
|
||||
+ return
|
||||
+
|
||||
+ status = self.waitForBackend_destroy(backpath)
|
||||
+
|
||||
+ if status == Timeout:
|
||||
+ raise VmError("Device %s (%s) could not be disconnected. " %
|
||||
+ (devid, self.deviceClass))
|
||||
+
|
||||
|
||||
def reconfigureDevice(self, devid, config):
|
||||
"""Reconfigure the specified device.
|
||||
@@ -209,12 +223,7 @@ class DevController:
|
||||
here.
|
||||
"""
|
||||
|
||||
- try:
|
||||
- dev = int(devid)
|
||||
- except ValueError:
|
||||
- # Does devid contain devicetype/deviceid?
|
||||
- # Propogate exception if unable to find an integer devid
|
||||
- dev = int(type(devid) is str and devid.split('/')[-1] or None)
|
||||
+ dev = self.convertToDeviceNumber(devid)
|
||||
|
||||
# Modify online status /before/ updating state (latter is watched by
|
||||
# drivers, so this ordering avoids a race).
|
||||
@@ -283,6 +292,15 @@ class DevController:
|
||||
all_configs[devid] = config_dict
|
||||
return all_configs
|
||||
|
||||
+
|
||||
+ def convertToDeviceNumber(self, devid):
|
||||
+ try:
|
||||
+ return int(devid)
|
||||
+ except ValueError:
|
||||
+ # Does devid contain devicetype/deviceid?
|
||||
+ # Propogate exception if unable to find an integer devid
|
||||
+ return int(type(devid) is str and devid.split('/')[-1] or None)
|
||||
+
|
||||
## protected:
|
||||
|
||||
def getDeviceDetails(self, config):
|
||||
@@ -511,6 +529,19 @@ class DevController:
|
||||
return (Missing, None)
|
||||
|
||||
|
||||
+ def waitForBackend_destroy(self, backpath):
|
||||
+
|
||||
+ statusPath = backpath + '/' + HOTPLUG_STATUS_NODE
|
||||
+ ev = Event()
|
||||
+ result = { 'status': Timeout }
|
||||
+
|
||||
+ xswatch(statusPath, deviceDestroyCallback, ev, result)
|
||||
+
|
||||
+ ev.wait(DEVICE_DESTROY_TIMEOUT)
|
||||
+
|
||||
+ return result['status']
|
||||
+
|
||||
+
|
||||
def backendPath(self, backdom, devid):
|
||||
"""Construct backend path given the backend domain and device id.
|
||||
|
||||
@@ -559,3 +590,19 @@ def hotplugStatusCallback(statusPath, ev
|
||||
|
||||
ev.set()
|
||||
return 0
|
||||
+
|
||||
+
|
||||
+def deviceDestroyCallback(statusPath, ev, result):
|
||||
+ log.debug("deviceDestroyCallback %s.", statusPath)
|
||||
+
|
||||
+ status = xstransact.Read(statusPath)
|
||||
+
|
||||
+ if status is None:
|
||||
+ result['status'] = Disconnected
|
||||
+ else:
|
||||
+ return 1
|
||||
+
|
||||
+ log.debug("deviceDestroyCallback %d.", result['status'])
|
||||
+
|
||||
+ ev.set()
|
||||
+ return 0
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/server/blkif.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/server/blkif.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/server/blkif.py
|
||||
@@ -148,11 +148,23 @@ class BlkifController(DevController):
|
||||
try:
|
||||
DevController.destroyDevice(self, devid, force)
|
||||
except ValueError:
|
||||
- devid_end = type(devid) is str and devid.split('/')[-1] or None
|
||||
+ dev = self.convertToDeviceNumber(devid)
|
||||
|
||||
for i in self.deviceIDs():
|
||||
- d = self.readBackend(i, 'dev')
|
||||
- if d == devid or (devid_end and d == devid_end):
|
||||
+ if i == dev:
|
||||
DevController.destroyDevice(self, i, force)
|
||||
return
|
||||
raise VmError("Device %s not connected" % devid)
|
||||
+
|
||||
+ def convertToDeviceNumber(self, devid):
|
||||
+ try:
|
||||
+ dev = int(devid)
|
||||
+ except ValueError:
|
||||
+ if type(devid) is not str:
|
||||
+ raise VmError("devid %s is wrong type" % str(devid))
|
||||
+ try:
|
||||
+ dev = devid.split('/')[-1]
|
||||
+ dev = int(dev)
|
||||
+ except ValueError:
|
||||
+ dev = blkif.blkdev_name_to_number(dev)
|
||||
+ return dev
|
||||
Index: xen-3.1-testing/tools/python/xen/xm/main.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xm/main.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xm/main.py
|
||||
@@ -2129,6 +2129,7 @@ def xm_network_attach(args):
|
||||
def detach(args, command, deviceClass):
|
||||
arg_check(args, command, 2, 3)
|
||||
|
||||
+ rm_cfg = True
|
||||
dom = args[0]
|
||||
dev = args[1]
|
||||
try:
|
||||
@@ -2139,7 +2140,7 @@ def detach(args, command, deviceClass):
|
||||
except IndexError:
|
||||
force = None
|
||||
|
||||
- server.xend.domain.destroyDevice(dom, deviceClass, dev, force)
|
||||
+ server.xend.domain.destroyDevice(dom, deviceClass, dev, force, rm_cfg)
|
||||
|
||||
|
||||
def xm_block_detach(args):
|
19
block-iscsi
19
block-iscsi
@ -43,7 +43,7 @@ find_sdev()
|
||||
if ! test -e $session; then return; fi
|
||||
if test $1 = `cat $session/targetname`; then
|
||||
sess_lun_to_bdev $session $lun
|
||||
echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2
|
||||
#echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2
|
||||
return
|
||||
fi
|
||||
done
|
||||
@ -58,7 +58,7 @@ find_sdev_rev()
|
||||
for d in $dev; do
|
||||
if test "$d" = "$1"; then
|
||||
tgt=`cat $session/targetname`
|
||||
echo "fsr: $2 -> $tgt ($cnt)" 1>&2
|
||||
#echo "fsr: $2 -> $tgt ($cnt)" 1>&2
|
||||
return
|
||||
fi
|
||||
done
|
||||
@ -72,16 +72,16 @@ case "$command" in
|
||||
{ /etc/init.d/open-iscsi start >/dev/null 2>&1; sleep 1; }
|
||||
# list of targets on node
|
||||
par=`xenstore-read $XENBUS_PATH/params` || true
|
||||
TGTID=$par; TGTID=${TGTID//@/:}
|
||||
TGTID=$par; TGTID=${TGTID//@/:}; TGTID=${TGTID//\#/,}
|
||||
LUN=${TGTID##*,}; TGTID=${TGTID%,*}
|
||||
if test $LUN = $TGTID; then unset LUN; fi
|
||||
#echo "add $TGTID lun $LUN" 1>&2
|
||||
while read rec port uuid; do
|
||||
while read port uuid; do
|
||||
if test $uuid = $TGTID; then
|
||||
rec=${rec%]}; rec=${rec#[}
|
||||
find_sdev $TGTID $LUN
|
||||
if test -z "$dev"; then
|
||||
iscsiadm -m node -r $rec -l || exit 2
|
||||
#echo iscsiadm -m node -T $uuid -p $port -l 1>&2
|
||||
iscsiadm -m node -T $uuid -p $port -l || exit 2
|
||||
usleep 100000
|
||||
find_sdev $TGTID $LUN
|
||||
fi
|
||||
@ -96,13 +96,12 @@ case "$command" in
|
||||
node=`xenstore-read $XENBUS_PATH/node` || true
|
||||
dev=$node; dev=${dev#/dev/}
|
||||
find_sdev_rev $dev
|
||||
#echo $tgt
|
||||
#echo "remove $dev:$tgt" 1>&2
|
||||
if test -x /sbin/blockdev -a -n "$node"; then blockdev --flushbufs $node; fi
|
||||
test -z "$tgt" && exit 2
|
||||
while read rec port uuid; do
|
||||
while read port uuid; do
|
||||
if test $uuid = $tgt; then
|
||||
rec=${rec%]}; rec=${rec#[}
|
||||
iscsiadm -m node -r $rec -u
|
||||
iscsiadm -m node -T $uuid -p $port -u
|
||||
exit 0
|
||||
fi
|
||||
done < <(iscsiadm -m node)
|
||||
|
160
dmi-table.patch
Normal file
160
dmi-table.patch
Normal file
@ -0,0 +1,160 @@
|
||||
Index: 2007-05-14/xen/arch/x86/dmi_scan.c
|
||||
===================================================================
|
||||
--- 2007-05-14.orig/xen/arch/x86/dmi_scan.c 2007-08-17 17:13:44.000000000 +0200
|
||||
+++ 2007-05-14/xen/arch/x86/dmi_scan.c 2007-08-16 16:44:35.000000000 +0200
|
||||
@@ -102,7 +102,7 @@ inline static int __init dmi_checksum(u8
|
||||
return (sum==0);
|
||||
}
|
||||
|
||||
-static int __init dmi_iterate(void (*decode)(struct dmi_header *))
|
||||
+static int __init dmi_iterate(void (*decode)(struct dmi_header *), u32 *pbase)
|
||||
{
|
||||
u8 buf[15];
|
||||
char __iomem *p, *q;
|
||||
@@ -123,6 +123,11 @@ static int __init dmi_iterate(void (*dec
|
||||
u16 len=buf[7]<<8|buf[6];
|
||||
u32 base=buf[11]<<24|buf[10]<<16|buf[9]<<8|buf[8];
|
||||
|
||||
+ if (pbase)
|
||||
+ *pbase = base;
|
||||
+ if (!decode)
|
||||
+ return len;
|
||||
+
|
||||
/*
|
||||
* DMI version 0.0 means that the real version is taken from
|
||||
* the SMBIOS version, which we don't know at this point.
|
||||
@@ -436,13 +441,27 @@ static void __init dmi_decode(struct dmi
|
||||
|
||||
void __init dmi_scan_machine(void)
|
||||
{
|
||||
- int err = dmi_iterate(dmi_decode);
|
||||
+ int err = dmi_iterate(dmi_decode, NULL);
|
||||
if(err == 0)
|
||||
dmi_check_system(dmi_blacklist);
|
||||
else
|
||||
printk(KERN_INFO "DMI not present.\n");
|
||||
}
|
||||
|
||||
+int __init dmi_get_table(u32*pbase, u32*plen)
|
||||
+{
|
||||
+ int rc = dmi_iterate(NULL, pbase);
|
||||
+
|
||||
+ if (rc < 0) {
|
||||
+ *pbase = *plen = 0;
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
+ *plen = rc;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
|
||||
/**
|
||||
* dmi_check_system - check system DMI data
|
||||
Index: 2007-05-14/xen/arch/x86/setup.c
|
||||
===================================================================
|
||||
--- 2007-05-14.orig/xen/arch/x86/setup.c 2007-08-17 17:13:44.000000000 +0200
|
||||
+++ 2007-05-14/xen/arch/x86/setup.c 2007-08-20 11:59:15.000000000 +0200
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <xen/kexec.h>
|
||||
|
||||
extern void dmi_scan_machine(void);
|
||||
+extern int dmi_get_table(u32 *pbase, u32 *plen);
|
||||
extern void generic_apic_probe(void);
|
||||
extern void numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn);
|
||||
|
||||
@@ -301,8 +302,9 @@ void __init __start_xen(multiboot_info_t
|
||||
unsigned long _policy_len = 0;
|
||||
module_t *mod = (module_t *)__va(mbi->mods_addr);
|
||||
unsigned long nr_pages, modules_length;
|
||||
- paddr_t s, e;
|
||||
+ u64 s, e;
|
||||
int i, e820_warn = 0, e820_raw_nr = 0, bytes = 0;
|
||||
+ u32 dmi_table_start, dmi_table_len;
|
||||
struct ns16550_defaults ns16550 = {
|
||||
.data_bits = 8,
|
||||
.parity = 'n',
|
||||
@@ -361,7 +363,7 @@ void __init __start_xen(multiboot_info_t
|
||||
|
||||
if ( mbi->flags & MBI_MEMMAP )
|
||||
{
|
||||
- while ( bytes < mbi->mmap_length )
|
||||
+ while ( bytes < mbi->mmap_length && e820_raw_nr < E820MAX )
|
||||
{
|
||||
memory_map_t *map = __va(mbi->mmap_addr + bytes);
|
||||
|
||||
@@ -411,15 +413,52 @@ void __init __start_xen(multiboot_info_t
|
||||
printk("WARNING: Buggy e820 map detected and fixed "
|
||||
"(truncated length fields).\n");
|
||||
|
||||
+ dmi_get_table(&dmi_table_start, &dmi_table_len);
|
||||
+ e820_warn = 0;
|
||||
+
|
||||
/* Ensure that all E820 RAM regions are page-aligned and -sized. */
|
||||
for ( i = 0; i < e820_raw_nr; i++ )
|
||||
{
|
||||
- uint64_t s, e;
|
||||
if ( e820_raw[i].type != E820_RAM )
|
||||
continue;
|
||||
s = PFN_UP(e820_raw[i].addr);
|
||||
e = PFN_DOWN(e820_raw[i].addr + e820_raw[i].size);
|
||||
e820_raw[i].size = 0; /* discarded later */
|
||||
+
|
||||
+ /*
|
||||
+ * Dom0 will want to map the DMI table, yet some BIOSes put it
|
||||
+ * in RAM regions - forcibly cut off the portion that overlaps.
|
||||
+ */
|
||||
+ if ( s < e &&
|
||||
+ dmi_table_len > 0 &&
|
||||
+ (e << PAGE_SHIFT) > dmi_table_start &&
|
||||
+ (s << PAGE_SHIFT) < (u64)dmi_table_start + dmi_table_len )
|
||||
+ {
|
||||
+ u64 dmi_table_end = (u64)dmi_table_start + dmi_table_len;
|
||||
+
|
||||
+ if ( (s << PAGE_SHIFT) >= dmi_table_start &&
|
||||
+ (e << PAGE_SHIFT) <= dmi_table_end )
|
||||
+ e = s;
|
||||
+ else if ( (s << PAGE_SHIFT) >= dmi_table_start )
|
||||
+ s = PFN_UP(dmi_table_end);
|
||||
+ else if ( (e << PAGE_SHIFT) <= dmi_table_end )
|
||||
+ e = PFN_DOWN(dmi_table_start);
|
||||
+ else if ( e820_raw_nr < E820MAX )
|
||||
+ {
|
||||
+ e820_raw[e820_raw_nr].addr = dmi_table_end;
|
||||
+ e820_raw[e820_raw_nr].size = (e << PAGE_SHIFT) - dmi_table_end;
|
||||
+ e820_raw[e820_raw_nr].type = E820_RAM;
|
||||
+ ++e820_raw_nr;
|
||||
+ e = PFN_DOWN(dmi_table_start);
|
||||
+ }
|
||||
+ else if ( dmi_table_start - (s << PAGE_SHIFT) >=
|
||||
+ (e << PAGE_SHIFT) - dmi_table_end )
|
||||
+ e = PFN_DOWN(dmi_table_start);
|
||||
+ else
|
||||
+ s = PFN_UP(dmi_table_end);
|
||||
+ e820_warn = 1;
|
||||
+ }
|
||||
+
|
||||
if ( s < e )
|
||||
{
|
||||
e820_raw[i].addr = s << PAGE_SHIFT;
|
||||
@@ -427,6 +466,19 @@ void __init __start_xen(multiboot_info_t
|
||||
}
|
||||
}
|
||||
|
||||
+ if ( e820_warn )
|
||||
+ {
|
||||
+ printk("WARNING: DMI table located in E820 RAM "
|
||||
+ "(fixed by shrinking/splitting RAM region).\n");
|
||||
+ if ( e820_raw_nr < E820MAX )
|
||||
+ {
|
||||
+ e820_raw[e820_raw_nr].addr = dmi_table_start;
|
||||
+ e820_raw[e820_raw_nr].size = dmi_table_len;
|
||||
+ e820_raw[e820_raw_nr].type = E820_RESERVED;
|
||||
+ ++e820_raw_nr;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* Sanitise the raw E820 map to produce a final clean version. */
|
||||
max_page = init_e820(e820_raw, &e820_raw_nr);
|
||||
|
14
fix_15716.patch
Normal file
14
fix_15716.patch
Normal file
@ -0,0 +1,14 @@
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -601,6 +601,9 @@ class XendDomainInfo:
|
||||
_, dev_info = sxprs[dev]
|
||||
else: # 'vbd' or 'tap'
|
||||
dev_info = self.getDeviceInfo_vbd(dev)
|
||||
+ # To remove the UUID of the device from refs,
|
||||
+ # deviceClass must be always 'vbd'.
|
||||
+ deviceClass = 'vbd'
|
||||
if dev_info is None:
|
||||
return rc
|
||||
|
75
keymap_nl-be.patch
Normal file
75
keymap_nl-be.patch
Normal file
@ -0,0 +1,75 @@
|
||||
Index: xen-3.0.4-testing/tools/ioemu/keymaps/nl-be
|
||||
===================================================================
|
||||
--- xen-3.0.4-testing.orig/tools/ioemu/keymaps/nl-be 2006-12-14 14:49:55.000000000 -0700
|
||||
+++ xen-3.0.4-testing/tools/ioemu/keymaps/nl-be 2007-08-30 07:46:28.000000000 -0600
|
||||
@@ -1,3 +1,69 @@
|
||||
# Dutch (Belgium)
|
||||
-map 0x813
|
||||
include common
|
||||
+map 0x813
|
||||
+ampersand 0x02
|
||||
+1 0x02 shift
|
||||
+bar 0x02 altgr
|
||||
+eacute 0x03
|
||||
+2 0x03 shift
|
||||
+at 0x03 altgr
|
||||
+quotedbl 0x04
|
||||
+3 0x04 shift
|
||||
+numbersign 0x04 altgr
|
||||
+apostrophe 0x05
|
||||
+4 0x05 shift
|
||||
+parenleft 0x06
|
||||
+5 0x06 shift
|
||||
+section 0x07
|
||||
+6 0x07 shift
|
||||
+circumflex 0x07 altgr
|
||||
+egrave 0x08
|
||||
+7 0x08 shift
|
||||
+exclam 0x09
|
||||
+8 0x09 shift
|
||||
+bracketleft 0x09 altgr
|
||||
+ccedilla 0x0a
|
||||
+9 0x0a shift
|
||||
+braceleft 0x0a altgr
|
||||
+agrave 0x0b
|
||||
+0 0x0b shift
|
||||
+braceright 0x0b altgr
|
||||
+parenright 0x0c
|
||||
+degree 0x0c shift
|
||||
+minus 0x0d
|
||||
+underscore 0x0d shift
|
||||
+a 0x10 addupper
|
||||
+z 0x11 addupper
|
||||
+EuroSign 0x12 altgr
|
||||
+dead_circumflex 0x1a
|
||||
+dead_diaeresis 0x1a shift
|
||||
+bracketleft 0x1a altgr
|
||||
+dollar 0x1b
|
||||
+asterisk 0x1b shift
|
||||
+bracketright 0x1b altgr
|
||||
+q 0x1e addupper
|
||||
+m 0x27 addupper
|
||||
+ugrave 0x28
|
||||
+percent 0x28 shift
|
||||
+dead_acute 0x28 altgr
|
||||
+twosuperior 0x29
|
||||
+threesuperior 0x29 shift
|
||||
+mu 0x2b
|
||||
+sterling 0x2b shift
|
||||
+dead_grave 0x2b altgr
|
||||
+w 0x2c addupper
|
||||
+comma 0x32
|
||||
+question 0x32 shift
|
||||
+semicolon 0x33
|
||||
+period 0x33 shift
|
||||
+colon 0x34
|
||||
+slash 0x34 shift
|
||||
+periodcentered 0x34 altgr
|
||||
+equal 0x35
|
||||
+plus 0x35 shift
|
||||
+tilde 0x35 altgr
|
||||
+dead_tilde 0x35 shift altgr
|
||||
+less 0x56
|
||||
+greater 0x56 shift
|
||||
+backslash 0x56 altgr
|
||||
+
|
13
pci-passthru-reboot-fix.patch
Normal file
13
pci-passthru-reboot-fix.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -1338,7 +1338,7 @@ class XendConfig(dict):
|
||||
for dev_uuid in ordered_refs:
|
||||
dev_type, dev_info = self['devices'][dev_uuid]
|
||||
if dev_type == 'pci': # special case for pci devices
|
||||
- sxpr = [['uuid', dev_info['uuid']]]
|
||||
+ sxpr = ['pci', ['uuid', dev_info['uuid']]]
|
||||
for pci_dev_info in dev_info['devs']:
|
||||
pci_dev_sxpr = ['dev']
|
||||
for opt, val in pci_dev_info.items():
|
@ -5,10 +5,10 @@ the "sendkey" command, among other useful things), remove all console
|
||||
commands that can read/write dom0's state.
|
||||
|
||||
|
||||
Index: xen-unstable/tools/ioemu/monitor.c
|
||||
Index: xen-3.1-testing/tools/ioemu/monitor.c
|
||||
===================================================================
|
||||
--- xen-unstable.orig/tools/ioemu/monitor.c
|
||||
+++ xen-unstable/tools/ioemu/monitor.c
|
||||
--- xen-3.1-testing.orig/tools/ioemu/monitor.c
|
||||
+++ xen-3.1-testing/tools/ioemu/monitor.c
|
||||
@@ -1158,6 +1158,7 @@ static term_cmd_t term_cmds[] = {
|
||||
"", "commit changes to the disk images (if -snapshot is used)" },
|
||||
{ "info", "s?", do_info,
|
||||
|
@ -10,7 +10,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendBootloader.py
|
||||
import shlex
|
||||
from xen.xend import sxp
|
||||
|
||||
@@ -187,3 +188,14 @@ def bootloader_tidy(dom):
|
||||
@@ -185,3 +186,14 @@ def bootloader_tidy(dom):
|
||||
os.kill(pid, signal.SIGKILL)
|
||||
|
||||
|
||||
@ -38,7 +38,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
from xen.xend.XendError import XendError, VmError
|
||||
from xen.xend.XendDevices import XendDevices
|
||||
from xen.xend.XendTask import XendTask
|
||||
@@ -1781,8 +1781,11 @@ class XendDomainInfo:
|
||||
@@ -1859,8 +1859,11 @@ class XendDomainInfo:
|
||||
blexec = osdep.pygrub_path
|
||||
|
||||
blcfg = None
|
||||
|
@ -90,8 +90,8 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -570,6 +570,27 @@ class XendDomainInfo:
|
||||
return sxprs
|
||||
@@ -644,6 +644,27 @@ class XendDomainInfo:
|
||||
return dev_info
|
||||
|
||||
|
||||
+ def capAndSetMemoryTarget(self, target):
|
||||
|
24
xen.changes
24
xen.changes
@ -1,3 +1,27 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Aug 29 16:20:48 MDT 2007 - ccoffing@novell.com
|
||||
|
||||
- Update block-iscsi to match changes to open-iscsi.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Aug 27 16:49:48 MDT 2007 - carnold@novell.com
|
||||
|
||||
- #289275 - domu will not reboot if pci= is passed in at boot time.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Aug 24 11:30:49 MDT 2007 - carnold@novell.com
|
||||
|
||||
- #297345: Added several upstream patches for hvm migration.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Aug 17 18:28:34 MDT 2007 - jfehlig@novell.com
|
||||
|
||||
- Added upstream c/s 15128, 15153, 15477, and 15716. These patches
|
||||
provide foundation for bug #238986
|
||||
- Renamed xend_dev_destroy_cleanup.patch to reflect the upstream
|
||||
c/s number and moved it to "upstream patches" section of spec
|
||||
file.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Aug 13 10:25:32 MDT 2007 - carnold@novell.com
|
||||
|
||||
|
218
xen.spec
218
xen.spec
@ -34,7 +34,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit
|
||||
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
|
||||
%endif
|
||||
Version: 3.1.0_15042
|
||||
Release: 32
|
||||
Release: 38
|
||||
License: GPL v2 only
|
||||
Group: System/Kernel
|
||||
Autoreqprov: on
|
||||
@ -58,36 +58,57 @@ Source17: sysconfig.xend
|
||||
Source18: network-multinet
|
||||
# Upstream patches
|
||||
Patch0: 15048-localtime.diff
|
||||
Patch1: 15059-check-libvncserver.patch
|
||||
Patch2: 15060-check-xenapi.patch
|
||||
Patch3: 15061-kill-sh_mapcache.patch
|
||||
Patch4: 15157_xend_device_destroy.patch
|
||||
Patch5: 15173-32on64-runstate.patch
|
||||
Patch6: 15183-32on64-multicall.patch
|
||||
Patch7: 15189-pmtimer.patch
|
||||
Patch8: 15190-clocksource-opt.patch
|
||||
Patch9: 15250_xend_device_destroy.patch
|
||||
Patch10: 15273_libxenapi.patch
|
||||
Patch11: 15274_xenapi.patch
|
||||
Patch12: 15275_xenapi.patch
|
||||
Patch13: 15381-log-svm-npt.patch
|
||||
Patch14: 15389-32on64-memop-error-path.patch
|
||||
Patch15: 15390-32on64-setup-error-path.patch
|
||||
Patch16: 15391-32on64-setup-pgtable.patch
|
||||
Patch17: 15410-domain-restore.patch
|
||||
Patch18: 15416-x86_64-failsafe.patch
|
||||
Patch19: 15433-pae-ptwr-check.patch
|
||||
Patch20: 15444-vmxassist-p2r.patch
|
||||
Patch21: 15480-man-xm.patch
|
||||
Patch22: rtl8139-data-corruption.patch
|
||||
Patch23: 15168-check-dup-domians.patch
|
||||
Patch24: 15587-domid-reset.patch
|
||||
Patch25: 15609-save-mem-values.patch
|
||||
Patch26: 15642_uuid_unique.patch
|
||||
Patch27: 15649_xenapi.patch
|
||||
Patch28: 15650_xenapi.patch
|
||||
Patch29: 15651_xenapi.patch
|
||||
Patch30: 15693-32on64-gnttab-err.patch
|
||||
Patch1: 15054-hvm-save-restore.patch
|
||||
Patch2: 15059-check-libvncserver.patch
|
||||
Patch3: 15060-check-xenapi.patch
|
||||
Patch4: 15061-kill-sh_mapcache.patch
|
||||
Patch5: 15128_xend_dev_disconnect.patch
|
||||
Patch6: 15152-save-restore-fix-cpu-affinity.patch
|
||||
Patch7: 15153_xend_dom_teardown.patch
|
||||
Patch8: 15157_xend_device_destroy.patch
|
||||
Patch9: 15168-check-dup-domians.patch
|
||||
Patch10: 15173-32on64-runstate.patch
|
||||
Patch11: 15183-32on64-multicall.patch
|
||||
Patch12: 15189-pmtimer.patch
|
||||
Patch13: 15190-clocksource-opt.patch
|
||||
Patch14: 15217-hvm-save-restore.patch
|
||||
Patch15: 15228-hvm-usb-windows-crash.patch
|
||||
Patch16: 15230-hvm-usb-windows-crash.patch
|
||||
Patch17: 15234-hvm-usb-windows-crash.patch
|
||||
Patch18: 15250_xend_device_destroy.patch
|
||||
Patch19: 15257-hvm-save-restore.patch
|
||||
Patch20: 15273_libxenapi.patch
|
||||
Patch21: 15274_xenapi.patch
|
||||
Patch22: 15275_xenapi.patch
|
||||
Patch23: 15277-hvm-intel2amd-windows-migrate.patch
|
||||
Patch24: 15381-log-svm-npt.patch
|
||||
Patch25: 15383-hvm-usb-windows-crash.patch
|
||||
Patch26: 15389-32on64-memop-error-path.patch
|
||||
Patch27: 15390-32on64-setup-error-path.patch
|
||||
Patch28: 15391-32on64-setup-pgtable.patch
|
||||
Patch29: 15410-domain-restore.patch
|
||||
Patch30: 15416-x86_64-failsafe.patch
|
||||
Patch31: 15418-hvm-usb-windows-crash.patch
|
||||
Patch32: 15433-pae-ptwr-check.patch
|
||||
Patch33: 15444-vmxassist-p2r.patch
|
||||
Patch34: 15469-hvm-save-restore.patch
|
||||
Patch35: 15477_dev_attach.patch
|
||||
Patch36: 15480-man-xm.patch
|
||||
Patch37: 15528-hvm-sles9-install.patch
|
||||
Patch38: 15587-domid-reset.patch
|
||||
Patch39: 15595-rtl8139-data-corruption.patch
|
||||
Patch40: 15596-rtl8139-crc-fix.patch
|
||||
Patch41: 15609-save-mem-values.patch
|
||||
Patch42: 15642_uuid_unique.patch
|
||||
Patch43: 15645-hvm-save-restore.patch
|
||||
Patch44: 15649_xenapi.patch
|
||||
Patch45: 15650_xenapi.patch
|
||||
Patch46: 15651_xenapi.patch
|
||||
Patch47: 15689_dev_destroy_cleanup.patch
|
||||
Patch48: 15691-hvm-save-restore.patch
|
||||
Patch49: 15693-32on64-gnttab-err.patch
|
||||
Patch50: 15716_dev_detach.patch
|
||||
Patch51: fix_15716.patch
|
||||
# Our patches
|
||||
Patch100: xen-config.diff
|
||||
Patch101: xend-config.diff
|
||||
@ -128,42 +149,44 @@ Patch142: netfront_mac.patch
|
||||
Patch143: vnc-i18n-keys.diff
|
||||
Patch144: rpmlint.diff
|
||||
Patch145: cdrom-removable.patch
|
||||
Patch146: xend_dev_destroy_cleanup.patch
|
||||
Patch150: bridge-suse.diff
|
||||
Patch151: bridge-bonding.diff
|
||||
Patch152: bridge-hostonly.diff
|
||||
Patch153: bridge-vlan.diff
|
||||
Patch154: pci-passthru-reboot-fix.patch
|
||||
Patch155: keymap_nl-be.patch
|
||||
# Patches from Jan
|
||||
Patch180: inval-sh-ldt.patch
|
||||
Patch181: 32on64-cpuid.patch
|
||||
Patch182: 32on64-ioemu.patch
|
||||
Patch186: intpte_t-cast.patch
|
||||
Patch187: ptwr-sanity.patch
|
||||
Patch188: hvm-pio-read.patch
|
||||
Patch189: hvm-shared-info-size.patch
|
||||
Patch190: hvm-hypercall-context.patch
|
||||
Patch191: hvm-efer.patch
|
||||
Patch192: hvm-hypercall-debug.patch
|
||||
Patch193: svm-reg-save.patch
|
||||
Patch194: vmx-no-cstar.patch
|
||||
Patch195: hvm-debug-msg.patch
|
||||
Patch196: guest-copy.patch
|
||||
Patch197: x86-page-cacheability.patch
|
||||
Patch198: realmode.patch
|
||||
Patch199: edd.patch
|
||||
Patch200: edid.patch
|
||||
Patch201: 32on64-call-gates.patch
|
||||
Patch202: x86-nmi-inject.patch
|
||||
Patch203: x86_emulate.patch
|
||||
Patch204: vgacon-keep.patch
|
||||
Patch205: vgacon-50-lines.patch
|
||||
Patch206: x86-extra-trap-info.patch
|
||||
Patch207: x86-machine-check.patch
|
||||
Patch208: x86-emul-rf.patch
|
||||
Patch209: vmx-check-descr.patch
|
||||
Patch210: x86_64-syscall-clear-df.patch
|
||||
Patch211: 32on64-extra-mem.patch
|
||||
Patch212: blktap.patch
|
||||
Patch200: inval-sh-ldt.patch
|
||||
Patch201: 32on64-cpuid.patch
|
||||
Patch202: 32on64-ioemu.patch
|
||||
Patch203: intpte_t-cast.patch
|
||||
Patch204: ptwr-sanity.patch
|
||||
Patch205: hvm-pio-read.patch
|
||||
Patch206: hvm-shared-info-size.patch
|
||||
Patch207: hvm-hypercall-context.patch
|
||||
Patch208: hvm-efer.patch
|
||||
Patch209: hvm-hypercall-debug.patch
|
||||
Patch210: svm-reg-save.patch
|
||||
Patch211: vmx-no-cstar.patch
|
||||
Patch212: hvm-debug-msg.patch
|
||||
Patch213: guest-copy.patch
|
||||
Patch214: x86-page-cacheability.patch
|
||||
Patch215: realmode.patch
|
||||
Patch216: edd.patch
|
||||
Patch217: edid.patch
|
||||
Patch218: 32on64-call-gates.patch
|
||||
Patch219: x86-nmi-inject.patch
|
||||
Patch220: x86_emulate.patch
|
||||
Patch221: vgacon-keep.patch
|
||||
Patch222: vgacon-50-lines.patch
|
||||
Patch223: x86-extra-trap-info.patch
|
||||
Patch224: x86-machine-check.patch
|
||||
Patch225: x86-emul-rf.patch
|
||||
Patch226: vmx-check-descr.patch
|
||||
Patch227: x86_64-syscall-clear-df.patch
|
||||
Patch228: 32on64-extra-mem.patch
|
||||
Patch229: blktap.patch
|
||||
Patch230: dmi-table.patch
|
||||
URL: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()")
|
||||
@ -566,6 +589,27 @@ Authors:
|
||||
%patch28 -p1
|
||||
%patch29 -p1
|
||||
%patch30 -p1
|
||||
%patch31 -p1
|
||||
%patch32 -p1
|
||||
%patch33 -p1
|
||||
%patch34 -p1
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
%patch40 -p1
|
||||
%patch41 -p1
|
||||
%patch42 -p1
|
||||
%patch43 -p1
|
||||
%patch44 -p1
|
||||
%patch45 -p1
|
||||
%patch46 -p1
|
||||
%patch47 -p1
|
||||
%patch48 -p1
|
||||
%patch49 -p1
|
||||
%patch50 -p1
|
||||
%patch51 -p1
|
||||
%patch100 -p1
|
||||
%patch101 -p1
|
||||
%patch102 -p1
|
||||
@ -605,28 +649,12 @@ Authors:
|
||||
%patch143 -p1
|
||||
%patch144 -p1
|
||||
%patch145 -p1
|
||||
%patch146 -p1
|
||||
%patch150 -p1
|
||||
%patch151 -p1
|
||||
%patch152 -p1
|
||||
%patch153 -p1
|
||||
%patch180 -p1
|
||||
%patch181 -p1
|
||||
%patch182 -p1
|
||||
%patch186 -p1
|
||||
%patch187 -p1
|
||||
%patch188 -p1
|
||||
%patch189 -p1
|
||||
%patch190 -p1
|
||||
%patch191 -p1
|
||||
%patch192 -p1
|
||||
%patch193 -p1
|
||||
%patch194 -p1
|
||||
%patch195 -p1
|
||||
%patch196 -p1
|
||||
%patch197 -p1
|
||||
%patch198 -p1
|
||||
%patch199 -p1
|
||||
%patch154 -p1
|
||||
%patch155 -p1
|
||||
%patch200 -p1
|
||||
%patch201 -p1
|
||||
%patch202 -p1
|
||||
@ -640,6 +668,24 @@ Authors:
|
||||
%patch210 -p1
|
||||
%patch211 -p1
|
||||
%patch212 -p1
|
||||
%patch213 -p1
|
||||
%patch214 -p1
|
||||
%patch215 -p1
|
||||
%patch216 -p1
|
||||
%patch217 -p1
|
||||
%patch218 -p1
|
||||
%patch219 -p1
|
||||
%patch220 -p1
|
||||
%patch221 -p1
|
||||
%patch222 -p1
|
||||
%patch223 -p1
|
||||
%patch224 -p1
|
||||
%patch225 -p1
|
||||
%patch226 -p1
|
||||
%patch227 -p1
|
||||
%patch228 -p1
|
||||
%patch229 -p1
|
||||
%patch230 -p1
|
||||
|
||||
%build
|
||||
XEN_EXTRAVERSION=%version-%release
|
||||
@ -951,6 +997,18 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info
|
||||
/sbin/ldconfig
|
||||
|
||||
%changelog
|
||||
* Wed Aug 29 2007 - ccoffing@novell.com
|
||||
- Update block-iscsi to match changes to open-iscsi.
|
||||
* Mon Aug 27 2007 - carnold@novell.com
|
||||
- #289275 - domu will not reboot if pci= is passed in at boot time.
|
||||
* Fri Aug 24 2007 - carnold@novell.com
|
||||
- #297345: Added several upstream patches for hvm migration.
|
||||
* Fri Aug 17 2007 - jfehlig@novell.com
|
||||
- Added upstream c/s 15128, 15153, 15477, and 15716. These patches
|
||||
provide foundation for bug #238986
|
||||
- Renamed xend_dev_destroy_cleanup.patch to reflect the upstream
|
||||
c/s number and moved it to "upstream patches" section of spec
|
||||
file.
|
||||
* Mon Aug 13 2007 - carnold@novell.com
|
||||
- hvm svm: Log into 'xm dmesg' that SVM NPT is enabled.
|
||||
* Fri Aug 10 2007 - ccoffing@novell.com
|
||||
|
@ -2,7 +2,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -2349,6 +2349,14 @@ class XendDomainInfo:
|
||||
@@ -2427,6 +2427,14 @@ class XendDomainInfo:
|
||||
if not config.has_key('backend'):
|
||||
config['backend'] = "00000000-0000-0000-0000-000000000000"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user