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.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-3.1-testing/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')
|
raise VmError('Invalid VM Name')
|
||||||
|
|
||||||
dom = XendDomain.instance().domain_lookup_nr(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.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-3.1-testing/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.")
|
log.exception("Removing domain path failed.")
|
||||||
|
|
||||||
self._stateSet(DOM_STATE_HALTED)
|
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.
|
Fix Xen API console methods that use undefined variables.
|
||||||
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
||||||
|
|
||||||
diff -r f035c4d9880a -r e63b331d8698 tools/python/xen/xend/XendAPI.py
|
Index: xen-3.1-testing/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
|
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
|
||||||
@@ -2378,11 +2378,13 @@ class XendAPI(object):
|
+++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py
|
||||||
|
@@ -2291,11 +2291,13 @@ class XendAPI(object):
|
||||||
return xen_api_success(cons)
|
return xen_api_success(cons)
|
||||||
|
|
||||||
def console_get_location(self, session, console_ref):
|
def console_get_location(self, session, console_ref):
|
||||||
|
@ -6,10 +6,11 @@
|
|||||||
Implement missing Xen API method Console.get_other_config.
|
Implement missing Xen API method Console.get_other_config.
|
||||||
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
||||||
|
|
||||||
diff -r e63b331d8698 -r 2450743f51b2 tools/python/xen/xend/XendAPI.py
|
Index: xen-3.1-testing/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
|
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
|
||||||
@@ -2394,6 +2394,12 @@ class XendAPI(object):
|
+++ 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)
|
vm = xendom.get_vm_with_dev_uuid('console', console_ref)
|
||||||
return xen_api_success(vm.get_uuid())
|
return xen_api_success(vm.get_uuid())
|
||||||
|
|
||||||
|
@ -6,10 +6,11 @@
|
|||||||
Implement Xen API method Console.set_other_config.
|
Implement Xen API method Console.set_other_config.
|
||||||
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
||||||
|
|
||||||
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendAPI.py
|
Index: xen-3.1-testing/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
|
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
|
||||||
@@ -2438,6 +2438,13 @@ class XendAPI(object):
|
+++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py
|
||||||
|
@@ -2351,6 +2351,13 @@ class XendAPI(object):
|
||||||
except XendError, exn:
|
except XendError, exn:
|
||||||
return xen_api_error(['INTERNAL_ERROR', str(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
|
# Xen API: Class SR
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
SR_attr_ro = ['VDIs',
|
SR_attr_ro = ['VDIs',
|
||||||
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
|
Index: xen-3.1-testing/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
|
--- xen-3.1-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||||
@@ -128,6 +128,11 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic',
|
+++ xen-3.1-testing/tools/python/xen/xend/XendConfig.py
|
||||||
'soundhw','stdvga', 'usb', 'usbdevice', 'vnc',
|
@@ -124,6 +124,11 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic',
|
||||||
'vncconsole', 'vncdisplay', 'vnclisten',
|
'vncconsole', 'vncdisplay', 'vnclisten',
|
||||||
'vncpasswd', 'vncunused', 'xauthority']
|
'vncpasswd', 'vncunused', 'xauthority']
|
||||||
+
|
|
||||||
+# Xen API console 'other_config' keys.
|
+# Xen API console 'other_config' keys.
|
||||||
+XENAPI_CONSOLE_OTHER_CFG = ['vncunused', 'vncdisplay', 'vnclisten',
|
+XENAPI_CONSOLE_OTHER_CFG = ['vncunused', 'vncdisplay', 'vnclisten',
|
||||||
+ 'vncpasswd', 'type', 'display', 'xauthority',
|
+ 'vncpasswd', 'type', 'display', 'xauthority',
|
||||||
+ 'keymap']
|
+ 'keymap']
|
||||||
|
+
|
||||||
# List of XendConfig configuration keys that have no direct equivalent
|
# List of XendConfig configuration keys that have no direct equivalent
|
||||||
# in the old world.
|
# in the old world.
|
||||||
@@ -1121,9 +1126,7 @@ class XendConfig(dict):
|
|
||||||
|
@@ -1023,9 +1028,7 @@ class XendConfig(dict):
|
||||||
# with vfb
|
# with vfb
|
||||||
|
|
||||||
other_config = {}
|
other_config = {}
|
||||||
@ -49,7 +51,7 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
|
|||||||
if key in dev_info:
|
if key in dev_info:
|
||||||
other_config[key] = dev_info[key]
|
other_config[key] = dev_info[key]
|
||||||
target['devices'][dev_uuid][1]['other_config'] = other_config
|
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():
|
for dev_uuid, (dev_type, dev_info) in self['devices'].items():
|
||||||
if dev_uuid == console_uuid:
|
if dev_uuid == console_uuid:
|
||||||
dev_info[key] = value
|
dev_info[key] = value
|
||||||
@ -63,10 +65,11 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
|
|||||||
break
|
break
|
||||||
|
|
||||||
def console_get_all(self, protocol):
|
def console_get_all(self, protocol):
|
||||||
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendDomainInfo.py
|
Index: xen-3.1-testing/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
|
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
@@ -2633,6 +2633,9 @@ class XendDomainInfo:
|
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||||
|
@@ -2488,6 +2488,9 @@ class XendDomainInfo:
|
||||||
|
|
||||||
return dev_uuid
|
return dev_uuid
|
||||||
|
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# User Jim Fehlig <jfehlig@novell.com>
|
# User kfraser@localhost.localdomain
|
||||||
# Date 1186081049 21600
|
# Date 1186391554 -3600
|
||||||
# Node ID 430ae0d3a333ff4d212df7c2313caa03e8f4dd51
|
# Node ID f8d5c509f156cbe3a6a1683f21a75e560e7ba369
|
||||||
# Parent 88bb0d305308a2cab31fd8559a6a2719db1ea55a
|
# Parent 92e43b36d211606435587420d08b6b949911ce18
|
||||||
Fix/cleanup destroyDevice code path in xend.
|
Fix/cleanup destroyDevice code path in xend.
|
||||||
|
|
||||||
When calling destroyDevice code path (e.g. xm block-detach dom devid),
|
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
|
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
|
/dev/xvdN. Allowing the /dev/xvdN form is useful when detaching
|
||||||
from dom0. Bootloaders may do this to unmount a disk previously
|
devices from dom0. Bootloaders may do this to unmount a disk
|
||||||
mounted in dom0.
|
previously mounted in dom0.
|
||||||
|
|
||||||
Move examination of device ID format into the DevController, permitting
|
Move examination of device ID format into the DevController,
|
||||||
device controllers to determine a valid device ID instead of higher
|
permitting device controllers to determine a valid device ID instead
|
||||||
level code.
|
of higher level code.
|
||||||
|
|
||||||
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
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.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-3.1-testing/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()
|
self.getDeviceController(devclass).waitForDevices()
|
||||||
|
|
||||||
def destroyDevice(self, deviceClass, devid, force = False):
|
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:
|
except ValueError:
|
||||||
devid_end = type(devid) is str and devid.split('/')[-1] or None
|
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 -e $session; then return; fi
|
||||||
if test $1 = `cat $session/targetname`; then
|
if test $1 = `cat $session/targetname`; then
|
||||||
sess_lun_to_bdev $session $lun
|
sess_lun_to_bdev $session $lun
|
||||||
echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2
|
#echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@ -58,7 +58,7 @@ find_sdev_rev()
|
|||||||
for d in $dev; do
|
for d in $dev; do
|
||||||
if test "$d" = "$1"; then
|
if test "$d" = "$1"; then
|
||||||
tgt=`cat $session/targetname`
|
tgt=`cat $session/targetname`
|
||||||
echo "fsr: $2 -> $tgt ($cnt)" 1>&2
|
#echo "fsr: $2 -> $tgt ($cnt)" 1>&2
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@ -72,16 +72,16 @@ case "$command" in
|
|||||||
{ /etc/init.d/open-iscsi start >/dev/null 2>&1; sleep 1; }
|
{ /etc/init.d/open-iscsi start >/dev/null 2>&1; sleep 1; }
|
||||||
# list of targets on node
|
# list of targets on node
|
||||||
par=`xenstore-read $XENBUS_PATH/params` || true
|
par=`xenstore-read $XENBUS_PATH/params` || true
|
||||||
TGTID=$par; TGTID=${TGTID//@/:}
|
TGTID=$par; TGTID=${TGTID//@/:}; TGTID=${TGTID//\#/,}
|
||||||
LUN=${TGTID##*,}; TGTID=${TGTID%,*}
|
LUN=${TGTID##*,}; TGTID=${TGTID%,*}
|
||||||
if test $LUN = $TGTID; then unset LUN; fi
|
if test $LUN = $TGTID; then unset LUN; fi
|
||||||
#echo "add $TGTID lun $LUN" 1>&2
|
#echo "add $TGTID lun $LUN" 1>&2
|
||||||
while read rec port uuid; do
|
while read port uuid; do
|
||||||
if test $uuid = $TGTID; then
|
if test $uuid = $TGTID; then
|
||||||
rec=${rec%]}; rec=${rec#[}
|
|
||||||
find_sdev $TGTID $LUN
|
find_sdev $TGTID $LUN
|
||||||
if test -z "$dev"; then
|
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
|
usleep 100000
|
||||||
find_sdev $TGTID $LUN
|
find_sdev $TGTID $LUN
|
||||||
fi
|
fi
|
||||||
@ -96,13 +96,12 @@ case "$command" in
|
|||||||
node=`xenstore-read $XENBUS_PATH/node` || true
|
node=`xenstore-read $XENBUS_PATH/node` || true
|
||||||
dev=$node; dev=${dev#/dev/}
|
dev=$node; dev=${dev#/dev/}
|
||||||
find_sdev_rev $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
|
if test -x /sbin/blockdev -a -n "$node"; then blockdev --flushbufs $node; fi
|
||||||
test -z "$tgt" && exit 2
|
test -z "$tgt" && exit 2
|
||||||
while read rec port uuid; do
|
while read port uuid; do
|
||||||
if test $uuid = $tgt; then
|
if test $uuid = $tgt; then
|
||||||
rec=${rec%]}; rec=${rec#[}
|
iscsiadm -m node -T $uuid -p $port -u
|
||||||
iscsiadm -m node -r $rec -u
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
done < <(iscsiadm -m node)
|
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.
|
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-3.1-testing.orig/tools/ioemu/monitor.c
|
||||||
+++ xen-unstable/tools/ioemu/monitor.c
|
+++ xen-3.1-testing/tools/ioemu/monitor.c
|
||||||
@@ -1158,6 +1158,7 @@ static term_cmd_t term_cmds[] = {
|
@@ -1158,6 +1158,7 @@ static term_cmd_t term_cmds[] = {
|
||||||
"", "commit changes to the disk images (if -snapshot is used)" },
|
"", "commit changes to the disk images (if -snapshot is used)" },
|
||||||
{ "info", "s?", do_info,
|
{ "info", "s?", do_info,
|
||||||
|
@ -10,7 +10,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendBootloader.py
|
|||||||
import shlex
|
import shlex
|
||||||
from xen.xend import sxp
|
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)
|
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.XendError import XendError, VmError
|
||||||
from xen.xend.XendDevices import XendDevices
|
from xen.xend.XendDevices import XendDevices
|
||||||
from xen.xend.XendTask import XendTask
|
from xen.xend.XendTask import XendTask
|
||||||
@@ -1781,8 +1781,11 @@ class XendDomainInfo:
|
@@ -1859,8 +1859,11 @@ class XendDomainInfo:
|
||||||
blexec = osdep.pygrub_path
|
blexec = osdep.pygrub_path
|
||||||
|
|
||||||
blcfg = None
|
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.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||||
@@ -570,6 +570,27 @@ class XendDomainInfo:
|
@@ -644,6 +644,27 @@ class XendDomainInfo:
|
||||||
return sxprs
|
return dev_info
|
||||||
|
|
||||||
|
|
||||||
+ def capAndSetMemoryTarget(self, target):
|
+ 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
|
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
|
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
|
||||||
%endif
|
%endif
|
||||||
Version: 3.1.0_15042
|
Version: 3.1.0_15042
|
||||||
Release: 32
|
Release: 38
|
||||||
License: GPL v2 only
|
License: GPL v2 only
|
||||||
Group: System/Kernel
|
Group: System/Kernel
|
||||||
Autoreqprov: on
|
Autoreqprov: on
|
||||||
@ -58,36 +58,57 @@ Source17: sysconfig.xend
|
|||||||
Source18: network-multinet
|
Source18: network-multinet
|
||||||
# Upstream patches
|
# Upstream patches
|
||||||
Patch0: 15048-localtime.diff
|
Patch0: 15048-localtime.diff
|
||||||
Patch1: 15059-check-libvncserver.patch
|
Patch1: 15054-hvm-save-restore.patch
|
||||||
Patch2: 15060-check-xenapi.patch
|
Patch2: 15059-check-libvncserver.patch
|
||||||
Patch3: 15061-kill-sh_mapcache.patch
|
Patch3: 15060-check-xenapi.patch
|
||||||
Patch4: 15157_xend_device_destroy.patch
|
Patch4: 15061-kill-sh_mapcache.patch
|
||||||
Patch5: 15173-32on64-runstate.patch
|
Patch5: 15128_xend_dev_disconnect.patch
|
||||||
Patch6: 15183-32on64-multicall.patch
|
Patch6: 15152-save-restore-fix-cpu-affinity.patch
|
||||||
Patch7: 15189-pmtimer.patch
|
Patch7: 15153_xend_dom_teardown.patch
|
||||||
Patch8: 15190-clocksource-opt.patch
|
Patch8: 15157_xend_device_destroy.patch
|
||||||
Patch9: 15250_xend_device_destroy.patch
|
Patch9: 15168-check-dup-domians.patch
|
||||||
Patch10: 15273_libxenapi.patch
|
Patch10: 15173-32on64-runstate.patch
|
||||||
Patch11: 15274_xenapi.patch
|
Patch11: 15183-32on64-multicall.patch
|
||||||
Patch12: 15275_xenapi.patch
|
Patch12: 15189-pmtimer.patch
|
||||||
Patch13: 15381-log-svm-npt.patch
|
Patch13: 15190-clocksource-opt.patch
|
||||||
Patch14: 15389-32on64-memop-error-path.patch
|
Patch14: 15217-hvm-save-restore.patch
|
||||||
Patch15: 15390-32on64-setup-error-path.patch
|
Patch15: 15228-hvm-usb-windows-crash.patch
|
||||||
Patch16: 15391-32on64-setup-pgtable.patch
|
Patch16: 15230-hvm-usb-windows-crash.patch
|
||||||
Patch17: 15410-domain-restore.patch
|
Patch17: 15234-hvm-usb-windows-crash.patch
|
||||||
Patch18: 15416-x86_64-failsafe.patch
|
Patch18: 15250_xend_device_destroy.patch
|
||||||
Patch19: 15433-pae-ptwr-check.patch
|
Patch19: 15257-hvm-save-restore.patch
|
||||||
Patch20: 15444-vmxassist-p2r.patch
|
Patch20: 15273_libxenapi.patch
|
||||||
Patch21: 15480-man-xm.patch
|
Patch21: 15274_xenapi.patch
|
||||||
Patch22: rtl8139-data-corruption.patch
|
Patch22: 15275_xenapi.patch
|
||||||
Patch23: 15168-check-dup-domians.patch
|
Patch23: 15277-hvm-intel2amd-windows-migrate.patch
|
||||||
Patch24: 15587-domid-reset.patch
|
Patch24: 15381-log-svm-npt.patch
|
||||||
Patch25: 15609-save-mem-values.patch
|
Patch25: 15383-hvm-usb-windows-crash.patch
|
||||||
Patch26: 15642_uuid_unique.patch
|
Patch26: 15389-32on64-memop-error-path.patch
|
||||||
Patch27: 15649_xenapi.patch
|
Patch27: 15390-32on64-setup-error-path.patch
|
||||||
Patch28: 15650_xenapi.patch
|
Patch28: 15391-32on64-setup-pgtable.patch
|
||||||
Patch29: 15651_xenapi.patch
|
Patch29: 15410-domain-restore.patch
|
||||||
Patch30: 15693-32on64-gnttab-err.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
|
# Our patches
|
||||||
Patch100: xen-config.diff
|
Patch100: xen-config.diff
|
||||||
Patch101: xend-config.diff
|
Patch101: xend-config.diff
|
||||||
@ -128,42 +149,44 @@ Patch142: netfront_mac.patch
|
|||||||
Patch143: vnc-i18n-keys.diff
|
Patch143: vnc-i18n-keys.diff
|
||||||
Patch144: rpmlint.diff
|
Patch144: rpmlint.diff
|
||||||
Patch145: cdrom-removable.patch
|
Patch145: cdrom-removable.patch
|
||||||
Patch146: xend_dev_destroy_cleanup.patch
|
|
||||||
Patch150: bridge-suse.diff
|
Patch150: bridge-suse.diff
|
||||||
Patch151: bridge-bonding.diff
|
Patch151: bridge-bonding.diff
|
||||||
Patch152: bridge-hostonly.diff
|
Patch152: bridge-hostonly.diff
|
||||||
Patch153: bridge-vlan.diff
|
Patch153: bridge-vlan.diff
|
||||||
|
Patch154: pci-passthru-reboot-fix.patch
|
||||||
|
Patch155: keymap_nl-be.patch
|
||||||
# Patches from Jan
|
# Patches from Jan
|
||||||
Patch180: inval-sh-ldt.patch
|
Patch200: inval-sh-ldt.patch
|
||||||
Patch181: 32on64-cpuid.patch
|
Patch201: 32on64-cpuid.patch
|
||||||
Patch182: 32on64-ioemu.patch
|
Patch202: 32on64-ioemu.patch
|
||||||
Patch186: intpte_t-cast.patch
|
Patch203: intpte_t-cast.patch
|
||||||
Patch187: ptwr-sanity.patch
|
Patch204: ptwr-sanity.patch
|
||||||
Patch188: hvm-pio-read.patch
|
Patch205: hvm-pio-read.patch
|
||||||
Patch189: hvm-shared-info-size.patch
|
Patch206: hvm-shared-info-size.patch
|
||||||
Patch190: hvm-hypercall-context.patch
|
Patch207: hvm-hypercall-context.patch
|
||||||
Patch191: hvm-efer.patch
|
Patch208: hvm-efer.patch
|
||||||
Patch192: hvm-hypercall-debug.patch
|
Patch209: hvm-hypercall-debug.patch
|
||||||
Patch193: svm-reg-save.patch
|
Patch210: svm-reg-save.patch
|
||||||
Patch194: vmx-no-cstar.patch
|
Patch211: vmx-no-cstar.patch
|
||||||
Patch195: hvm-debug-msg.patch
|
Patch212: hvm-debug-msg.patch
|
||||||
Patch196: guest-copy.patch
|
Patch213: guest-copy.patch
|
||||||
Patch197: x86-page-cacheability.patch
|
Patch214: x86-page-cacheability.patch
|
||||||
Patch198: realmode.patch
|
Patch215: realmode.patch
|
||||||
Patch199: edd.patch
|
Patch216: edd.patch
|
||||||
Patch200: edid.patch
|
Patch217: edid.patch
|
||||||
Patch201: 32on64-call-gates.patch
|
Patch218: 32on64-call-gates.patch
|
||||||
Patch202: x86-nmi-inject.patch
|
Patch219: x86-nmi-inject.patch
|
||||||
Patch203: x86_emulate.patch
|
Patch220: x86_emulate.patch
|
||||||
Patch204: vgacon-keep.patch
|
Patch221: vgacon-keep.patch
|
||||||
Patch205: vgacon-50-lines.patch
|
Patch222: vgacon-50-lines.patch
|
||||||
Patch206: x86-extra-trap-info.patch
|
Patch223: x86-extra-trap-info.patch
|
||||||
Patch207: x86-machine-check.patch
|
Patch224: x86-machine-check.patch
|
||||||
Patch208: x86-emul-rf.patch
|
Patch225: x86-emul-rf.patch
|
||||||
Patch209: vmx-check-descr.patch
|
Patch226: vmx-check-descr.patch
|
||||||
Patch210: x86_64-syscall-clear-df.patch
|
Patch227: x86_64-syscall-clear-df.patch
|
||||||
Patch211: 32on64-extra-mem.patch
|
Patch228: 32on64-extra-mem.patch
|
||||||
Patch212: blktap.patch
|
Patch229: blktap.patch
|
||||||
|
Patch230: dmi-table.patch
|
||||||
URL: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
|
URL: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()")
|
%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()")
|
||||||
@ -566,6 +589,27 @@ Authors:
|
|||||||
%patch28 -p1
|
%patch28 -p1
|
||||||
%patch29 -p1
|
%patch29 -p1
|
||||||
%patch30 -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
|
%patch100 -p1
|
||||||
%patch101 -p1
|
%patch101 -p1
|
||||||
%patch102 -p1
|
%patch102 -p1
|
||||||
@ -605,28 +649,12 @@ Authors:
|
|||||||
%patch143 -p1
|
%patch143 -p1
|
||||||
%patch144 -p1
|
%patch144 -p1
|
||||||
%patch145 -p1
|
%patch145 -p1
|
||||||
%patch146 -p1
|
|
||||||
%patch150 -p1
|
%patch150 -p1
|
||||||
%patch151 -p1
|
%patch151 -p1
|
||||||
%patch152 -p1
|
%patch152 -p1
|
||||||
%patch153 -p1
|
%patch153 -p1
|
||||||
%patch180 -p1
|
%patch154 -p1
|
||||||
%patch181 -p1
|
%patch155 -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
|
|
||||||
%patch200 -p1
|
%patch200 -p1
|
||||||
%patch201 -p1
|
%patch201 -p1
|
||||||
%patch202 -p1
|
%patch202 -p1
|
||||||
@ -640,6 +668,24 @@ Authors:
|
|||||||
%patch210 -p1
|
%patch210 -p1
|
||||||
%patch211 -p1
|
%patch211 -p1
|
||||||
%patch212 -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
|
%build
|
||||||
XEN_EXTRAVERSION=%version-%release
|
XEN_EXTRAVERSION=%version-%release
|
||||||
@ -951,6 +997,18 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info
|
|||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
|
|
||||||
%changelog
|
%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
|
* Mon Aug 13 2007 - carnold@novell.com
|
||||||
- hvm svm: Log into 'xm dmesg' that SVM NPT is enabled.
|
- hvm svm: Log into 'xm dmesg' that SVM NPT is enabled.
|
||||||
* Fri Aug 10 2007 - ccoffing@novell.com
|
* 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.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-3.1-testing/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'):
|
if not config.has_key('backend'):
|
||||||
config['backend'] = "00000000-0000-0000-0000-000000000000"
|
config['backend'] = "00000000-0000-0000-0000-000000000000"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user