OBS User unknown 2007-08-31 14:05:19 +00:00 committed by Git OBS Bridge
parent 49bc396272
commit 1b5538862e
37 changed files with 1675 additions and 136 deletions

View 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);

View 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)

View 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])

View 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

View File

@ -10,7 +10,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -2057,7 +2057,7 @@ class XendDomainInfo:
@@ -2069,7 +2069,7 @@ class XendDomainInfo:
raise VmError('Invalid VM Name')
dom = XendDomain.instance().domain_lookup_nr(name)

View 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. */

View 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);

View 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,

View 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);

View 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;

View 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)

View 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)

View 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"

View 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
View 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):

View 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));

View File

@ -17,7 +17,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -1562,6 +1562,7 @@ class XendDomainInfo:
@@ -1571,6 +1571,7 @@ class XendDomainInfo:
log.exception("Removing domain path failed.")
self._stateSet(DOM_STATE_HALTED)

View 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

View 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);

View File

@ -6,10 +6,11 @@
Fix Xen API console methods that use undefined variables.
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
diff -r f035c4d9880a -r e63b331d8698 tools/python/xen/xend/XendAPI.py
--- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:04:35 2007 +0100
+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:10 2007 +0100
@@ -2378,11 +2378,13 @@ class XendAPI(object):
Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
+++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py
@@ -2291,11 +2291,13 @@ class XendAPI(object):
return xen_api_success(cons)
def console_get_location(self, session, console_ref):

View File

@ -6,10 +6,11 @@
Implement missing Xen API method Console.get_other_config.
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
diff -r e63b331d8698 -r 2450743f51b2 tools/python/xen/xend/XendAPI.py
--- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:10 2007 +0100
+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:30 2007 +0100
@@ -2394,6 +2394,12 @@ class XendAPI(object):
Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
+++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py
@@ -2307,6 +2307,12 @@ class XendAPI(object):
vm = xendom.get_vm_with_dev_uuid('console', console_ref)
return xen_api_success(vm.get_uuid())

View File

@ -6,10 +6,11 @@
Implement Xen API method Console.set_other_config.
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendAPI.py
--- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:30 2007 +0100
+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:58 2007 +0100
@@ -2438,6 +2438,13 @@ class XendAPI(object):
Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py
+++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py
@@ -2351,6 +2351,13 @@ class XendAPI(object):
except XendError, exn:
return xen_api_error(['INTERNAL_ERROR', str(exn)])
@ -23,22 +24,23 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendAPI.py
# Xen API: Class SR
# ----------------------------------------------------------------
SR_attr_ro = ['VDIs',
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py Fri Jul 27 09:06:30 2007 +0100
+++ b/tools/python/xen/xend/XendConfig.py Fri Jul 27 09:06:58 2007 +0100
@@ -128,6 +128,11 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic',
'soundhw','stdvga', 'usb', 'usbdevice', 'vnc',
Index: xen-3.1-testing/tools/python/xen/xend/XendConfig.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendConfig.py
+++ xen-3.1-testing/tools/python/xen/xend/XendConfig.py
@@ -124,6 +124,11 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic',
'vncconsole', 'vncdisplay', 'vnclisten',
'vncpasswd', 'vncunused', 'xauthority']
+
+# Xen API console 'other_config' keys.
+XENAPI_CONSOLE_OTHER_CFG = ['vncunused', 'vncdisplay', 'vnclisten',
+ 'vncpasswd', 'type', 'display', 'xauthority',
+ 'keymap']
+
# List of XendConfig configuration keys that have no direct equivalent
# in the old world.
@@ -1121,9 +1126,7 @@ class XendConfig(dict):
@@ -1023,9 +1028,7 @@ class XendConfig(dict):
# with vfb
other_config = {}
@ -49,7 +51,7 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
if key in dev_info:
other_config[key] = dev_info[key]
target['devices'][dev_uuid][1]['other_config'] = other_config
@@ -1311,6 +1314,13 @@ class XendConfig(dict):
@@ -1208,6 +1211,13 @@ class XendConfig(dict):
for dev_uuid, (dev_type, dev_info) in self['devices'].items():
if dev_uuid == console_uuid:
dev_info[key] = value
@ -63,10 +65,11 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py
break
def console_get_all(self, protocol):
diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Fri Jul 27 09:06:30 2007 +0100
+++ b/tools/python/xen/xend/XendDomainInfo.py Fri Jul 27 09:06:58 2007 +0100
@@ -2633,6 +2633,9 @@ class XendDomainInfo:
Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -2488,6 +2488,9 @@ class XendDomainInfo:
return dev_uuid

View File

@ -1,19 +1,19 @@
# HG changeset patch
# User Jim Fehlig <jfehlig@novell.com>
# Date 1186081049 21600
# Node ID 430ae0d3a333ff4d212df7c2313caa03e8f4dd51
# Parent 88bb0d305308a2cab31fd8559a6a2719db1ea55a
# User kfraser@localhost.localdomain
# Date 1186391554 -3600
# Node ID f8d5c509f156cbe3a6a1683f21a75e560e7ba369
# Parent 92e43b36d211606435587420d08b6b949911ce18
Fix/cleanup destroyDevice code path in xend.
When calling destroyDevice code path (e.g. xm block-detach dom devid),
allow specifying an integer device id or a device name such as xvdN or
/dev/xvdN. Allowing the /dev/xvdN form is useful when detaching devices
from dom0. Bootloaders may do this to unmount a disk previously
mounted in dom0.
/dev/xvdN. Allowing the /dev/xvdN form is useful when detaching
devices from dom0. Bootloaders may do this to unmount a disk
previously mounted in dom0.
Move examination of device ID format into the DevController, permitting
device controllers to determine a valid device ID instead of higher
level code.
Move examination of device ID format into the DevController,
permitting device controllers to determine a valid device ID instead
of higher level code.
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
@ -21,7 +21,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -544,18 +544,8 @@ class XendDomainInfo:
@@ -553,18 +553,8 @@ class XendDomainInfo:
self.getDeviceController(devclass).waitForDevices()
def destroyDevice(self, deviceClass, devid, force = False):
@ -115,3 +115,84 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/blkif.py
except ValueError:
devid_end = type(devid) is str and devid.split('/')[-1] or None
Index: xen-3.1-testing/tools/security/policies/default-security_policy.xml
===================================================================
--- /dev/null
+++ xen-3.1-testing/tools/security/policies/default-security_policy.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" ?>
+<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd">
+ <PolicyHeader>
+ <PolicyName>DEFAULT</PolicyName>
+ <Version>1.0</Version>
+ </PolicyHeader>
+ <SimpleTypeEnforcement>
+ <SimpleTypeEnforcementTypes>
+ <Type>SystemManagement</Type>
+ </SimpleTypeEnforcementTypes>
+ </SimpleTypeEnforcement>
+ <ChineseWall>
+ <ChineseWallTypes>
+ <Type>SystemManagement</Type>
+ </ChineseWallTypes>
+ </ChineseWall>
+ <SecurityLabelTemplate>
+ <SubjectLabels bootstrap="SystemManagement">
+ <VirtualMachineLabel>
+ <Name>SystemManagement</Name>
+ <SimpleTypeEnforcementTypes>
+ <Type>SystemManagement</Type>
+ </SimpleTypeEnforcementTypes>
+ <ChineseWallTypes>
+ <Type/>
+ </ChineseWallTypes>
+ </VirtualMachineLabel>
+ </SubjectLabels>
+ </SecurityLabelTemplate>
+</SecurityPolicyDefinition>
Index: xen-3.1-testing/tools/security/policies/default-ul-security_policy.xml
===================================================================
--- /dev/null
+++ xen-3.1-testing/tools/security/policies/default-ul-security_policy.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" ?>
+<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd">
+ <PolicyHeader>
+ <PolicyName>DEFAULT-UL</PolicyName>
+ <Version>1.0</Version>
+ </PolicyHeader>
+ <SimpleTypeEnforcement>
+ <SimpleTypeEnforcementTypes>
+ <Type>SystemManagement</Type>
+ <Type>__UNLABELED__</Type>
+ </SimpleTypeEnforcementTypes>
+ </SimpleTypeEnforcement>
+ <ChineseWall>
+ <ChineseWallTypes>
+ <Type>SystemManagement</Type>
+ </ChineseWallTypes>
+ </ChineseWall>
+ <SecurityLabelTemplate>
+ <SubjectLabels bootstrap="SystemManagement">
+ <VirtualMachineLabel>
+ <Name>SystemManagement</Name>
+ <SimpleTypeEnforcementTypes>
+ <Type>SystemManagement</Type>
+ <Type>__UNLABELED__</Type>
+ </SimpleTypeEnforcementTypes>
+ <ChineseWallTypes>
+ <Type/>
+ </ChineseWallTypes>
+ </VirtualMachineLabel>
+ <VirtualMachineLabel>
+ <Name>__UNLABELED__</Name>
+ <SimpleTypeEnforcementTypes>
+ <Type>__UNLABELED__</Type>
+ </SimpleTypeEnforcementTypes>
+ <ChineseWallTypes>
+ <Type/>
+ </ChineseWallTypes>
+ </VirtualMachineLabel>
+ </SubjectLabels>
+ </SecurityLabelTemplate>
+</SecurityPolicyDefinition>

View 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
View 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):

View File

@ -43,7 +43,7 @@ find_sdev()
if ! test -e $session; then return; fi
if test $1 = `cat $session/targetname`; then
sess_lun_to_bdev $session $lun
echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2
#echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2
return
fi
done
@ -58,7 +58,7 @@ find_sdev_rev()
for d in $dev; do
if test "$d" = "$1"; then
tgt=`cat $session/targetname`
echo "fsr: $2 -> $tgt ($cnt)" 1>&2
#echo "fsr: $2 -> $tgt ($cnt)" 1>&2
return
fi
done
@ -72,16 +72,16 @@ case "$command" in
{ /etc/init.d/open-iscsi start >/dev/null 2>&1; sleep 1; }
# list of targets on node
par=`xenstore-read $XENBUS_PATH/params` || true
TGTID=$par; TGTID=${TGTID//@/:}
TGTID=$par; TGTID=${TGTID//@/:}; TGTID=${TGTID//\#/,}
LUN=${TGTID##*,}; TGTID=${TGTID%,*}
if test $LUN = $TGTID; then unset LUN; fi
#echo "add $TGTID lun $LUN" 1>&2
while read rec port uuid; do
while read port uuid; do
if test $uuid = $TGTID; then
rec=${rec%]}; rec=${rec#[}
find_sdev $TGTID $LUN
if test -z "$dev"; then
iscsiadm -m node -r $rec -l || exit 2
#echo iscsiadm -m node -T $uuid -p $port -l 1>&2
iscsiadm -m node -T $uuid -p $port -l || exit 2
usleep 100000
find_sdev $TGTID $LUN
fi
@ -96,13 +96,12 @@ case "$command" in
node=`xenstore-read $XENBUS_PATH/node` || true
dev=$node; dev=${dev#/dev/}
find_sdev_rev $dev
#echo $tgt
#echo "remove $dev:$tgt" 1>&2
if test -x /sbin/blockdev -a -n "$node"; then blockdev --flushbufs $node; fi
test -z "$tgt" && exit 2
while read rec port uuid; do
while read port uuid; do
if test $uuid = $tgt; then
rec=${rec%]}; rec=${rec#[}
iscsiadm -m node -r $rec -u
iscsiadm -m node -T $uuid -p $port -u
exit 0
fi
done < <(iscsiadm -m node)

160
dmi-table.patch Normal file
View 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
View 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
View 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
+

View 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():

View File

@ -5,10 +5,10 @@ the "sendkey" command, among other useful things), remove all console
commands that can read/write dom0's state.
Index: xen-unstable/tools/ioemu/monitor.c
Index: xen-3.1-testing/tools/ioemu/monitor.c
===================================================================
--- xen-unstable.orig/tools/ioemu/monitor.c
+++ xen-unstable/tools/ioemu/monitor.c
--- xen-3.1-testing.orig/tools/ioemu/monitor.c
+++ xen-3.1-testing/tools/ioemu/monitor.c
@@ -1158,6 +1158,7 @@ static term_cmd_t term_cmds[] = {
"", "commit changes to the disk images (if -snapshot is used)" },
{ "info", "s?", do_info,

View File

@ -10,7 +10,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendBootloader.py
import shlex
from xen.xend import sxp
@@ -187,3 +188,14 @@ def bootloader_tidy(dom):
@@ -185,3 +186,14 @@ def bootloader_tidy(dom):
os.kill(pid, signal.SIGKILL)
@ -38,7 +38,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
from xen.xend.XendError import XendError, VmError
from xen.xend.XendDevices import XendDevices
from xen.xend.XendTask import XendTask
@@ -1781,8 +1781,11 @@ class XendDomainInfo:
@@ -1859,8 +1859,11 @@ class XendDomainInfo:
blexec = osdep.pygrub_path
blcfg = None

View File

@ -90,8 +90,8 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -570,6 +570,27 @@ class XendDomainInfo:
return sxprs
@@ -644,6 +644,27 @@ class XendDomainInfo:
return dev_info
+ def capAndSetMemoryTarget(self, target):

View File

@ -1,3 +1,27 @@
-------------------------------------------------------------------
Wed Aug 29 16:20:48 MDT 2007 - ccoffing@novell.com
- Update block-iscsi to match changes to open-iscsi.
-------------------------------------------------------------------
Mon Aug 27 16:49:48 MDT 2007 - carnold@novell.com
- #289275 - domu will not reboot if pci= is passed in at boot time.
-------------------------------------------------------------------
Fri Aug 24 11:30:49 MDT 2007 - carnold@novell.com
- #297345: Added several upstream patches for hvm migration.
-------------------------------------------------------------------
Fri Aug 17 18:28:34 MDT 2007 - jfehlig@novell.com
- Added upstream c/s 15128, 15153, 15477, and 15716. These patches
provide foundation for bug #238986
- Renamed xend_dev_destroy_cleanup.patch to reflect the upstream
c/s number and moved it to "upstream patches" section of spec
file.
-------------------------------------------------------------------
Mon Aug 13 10:25:32 MDT 2007 - carnold@novell.com

218
xen.spec
View File

@ -34,7 +34,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
%endif
Version: 3.1.0_15042
Release: 32
Release: 38
License: GPL v2 only
Group: System/Kernel
Autoreqprov: on
@ -58,36 +58,57 @@ Source17: sysconfig.xend
Source18: network-multinet
# Upstream patches
Patch0: 15048-localtime.diff
Patch1: 15059-check-libvncserver.patch
Patch2: 15060-check-xenapi.patch
Patch3: 15061-kill-sh_mapcache.patch
Patch4: 15157_xend_device_destroy.patch
Patch5: 15173-32on64-runstate.patch
Patch6: 15183-32on64-multicall.patch
Patch7: 15189-pmtimer.patch
Patch8: 15190-clocksource-opt.patch
Patch9: 15250_xend_device_destroy.patch
Patch10: 15273_libxenapi.patch
Patch11: 15274_xenapi.patch
Patch12: 15275_xenapi.patch
Patch13: 15381-log-svm-npt.patch
Patch14: 15389-32on64-memop-error-path.patch
Patch15: 15390-32on64-setup-error-path.patch
Patch16: 15391-32on64-setup-pgtable.patch
Patch17: 15410-domain-restore.patch
Patch18: 15416-x86_64-failsafe.patch
Patch19: 15433-pae-ptwr-check.patch
Patch20: 15444-vmxassist-p2r.patch
Patch21: 15480-man-xm.patch
Patch22: rtl8139-data-corruption.patch
Patch23: 15168-check-dup-domians.patch
Patch24: 15587-domid-reset.patch
Patch25: 15609-save-mem-values.patch
Patch26: 15642_uuid_unique.patch
Patch27: 15649_xenapi.patch
Patch28: 15650_xenapi.patch
Patch29: 15651_xenapi.patch
Patch30: 15693-32on64-gnttab-err.patch
Patch1: 15054-hvm-save-restore.patch
Patch2: 15059-check-libvncserver.patch
Patch3: 15060-check-xenapi.patch
Patch4: 15061-kill-sh_mapcache.patch
Patch5: 15128_xend_dev_disconnect.patch
Patch6: 15152-save-restore-fix-cpu-affinity.patch
Patch7: 15153_xend_dom_teardown.patch
Patch8: 15157_xend_device_destroy.patch
Patch9: 15168-check-dup-domians.patch
Patch10: 15173-32on64-runstate.patch
Patch11: 15183-32on64-multicall.patch
Patch12: 15189-pmtimer.patch
Patch13: 15190-clocksource-opt.patch
Patch14: 15217-hvm-save-restore.patch
Patch15: 15228-hvm-usb-windows-crash.patch
Patch16: 15230-hvm-usb-windows-crash.patch
Patch17: 15234-hvm-usb-windows-crash.patch
Patch18: 15250_xend_device_destroy.patch
Patch19: 15257-hvm-save-restore.patch
Patch20: 15273_libxenapi.patch
Patch21: 15274_xenapi.patch
Patch22: 15275_xenapi.patch
Patch23: 15277-hvm-intel2amd-windows-migrate.patch
Patch24: 15381-log-svm-npt.patch
Patch25: 15383-hvm-usb-windows-crash.patch
Patch26: 15389-32on64-memop-error-path.patch
Patch27: 15390-32on64-setup-error-path.patch
Patch28: 15391-32on64-setup-pgtable.patch
Patch29: 15410-domain-restore.patch
Patch30: 15416-x86_64-failsafe.patch
Patch31: 15418-hvm-usb-windows-crash.patch
Patch32: 15433-pae-ptwr-check.patch
Patch33: 15444-vmxassist-p2r.patch
Patch34: 15469-hvm-save-restore.patch
Patch35: 15477_dev_attach.patch
Patch36: 15480-man-xm.patch
Patch37: 15528-hvm-sles9-install.patch
Patch38: 15587-domid-reset.patch
Patch39: 15595-rtl8139-data-corruption.patch
Patch40: 15596-rtl8139-crc-fix.patch
Patch41: 15609-save-mem-values.patch
Patch42: 15642_uuid_unique.patch
Patch43: 15645-hvm-save-restore.patch
Patch44: 15649_xenapi.patch
Patch45: 15650_xenapi.patch
Patch46: 15651_xenapi.patch
Patch47: 15689_dev_destroy_cleanup.patch
Patch48: 15691-hvm-save-restore.patch
Patch49: 15693-32on64-gnttab-err.patch
Patch50: 15716_dev_detach.patch
Patch51: fix_15716.patch
# Our patches
Patch100: xen-config.diff
Patch101: xend-config.diff
@ -128,42 +149,44 @@ Patch142: netfront_mac.patch
Patch143: vnc-i18n-keys.diff
Patch144: rpmlint.diff
Patch145: cdrom-removable.patch
Patch146: xend_dev_destroy_cleanup.patch
Patch150: bridge-suse.diff
Patch151: bridge-bonding.diff
Patch152: bridge-hostonly.diff
Patch153: bridge-vlan.diff
Patch154: pci-passthru-reboot-fix.patch
Patch155: keymap_nl-be.patch
# Patches from Jan
Patch180: inval-sh-ldt.patch
Patch181: 32on64-cpuid.patch
Patch182: 32on64-ioemu.patch
Patch186: intpte_t-cast.patch
Patch187: ptwr-sanity.patch
Patch188: hvm-pio-read.patch
Patch189: hvm-shared-info-size.patch
Patch190: hvm-hypercall-context.patch
Patch191: hvm-efer.patch
Patch192: hvm-hypercall-debug.patch
Patch193: svm-reg-save.patch
Patch194: vmx-no-cstar.patch
Patch195: hvm-debug-msg.patch
Patch196: guest-copy.patch
Patch197: x86-page-cacheability.patch
Patch198: realmode.patch
Patch199: edd.patch
Patch200: edid.patch
Patch201: 32on64-call-gates.patch
Patch202: x86-nmi-inject.patch
Patch203: x86_emulate.patch
Patch204: vgacon-keep.patch
Patch205: vgacon-50-lines.patch
Patch206: x86-extra-trap-info.patch
Patch207: x86-machine-check.patch
Patch208: x86-emul-rf.patch
Patch209: vmx-check-descr.patch
Patch210: x86_64-syscall-clear-df.patch
Patch211: 32on64-extra-mem.patch
Patch212: blktap.patch
Patch200: inval-sh-ldt.patch
Patch201: 32on64-cpuid.patch
Patch202: 32on64-ioemu.patch
Patch203: intpte_t-cast.patch
Patch204: ptwr-sanity.patch
Patch205: hvm-pio-read.patch
Patch206: hvm-shared-info-size.patch
Patch207: hvm-hypercall-context.patch
Patch208: hvm-efer.patch
Patch209: hvm-hypercall-debug.patch
Patch210: svm-reg-save.patch
Patch211: vmx-no-cstar.patch
Patch212: hvm-debug-msg.patch
Patch213: guest-copy.patch
Patch214: x86-page-cacheability.patch
Patch215: realmode.patch
Patch216: edd.patch
Patch217: edid.patch
Patch218: 32on64-call-gates.patch
Patch219: x86-nmi-inject.patch
Patch220: x86_emulate.patch
Patch221: vgacon-keep.patch
Patch222: vgacon-50-lines.patch
Patch223: x86-extra-trap-info.patch
Patch224: x86-machine-check.patch
Patch225: x86-emul-rf.patch
Patch226: vmx-check-descr.patch
Patch227: x86_64-syscall-clear-df.patch
Patch228: 32on64-extra-mem.patch
Patch229: blktap.patch
Patch230: dmi-table.patch
URL: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()")
@ -566,6 +589,27 @@ Authors:
%patch28 -p1
%patch29 -p1
%patch30 -p1
%patch31 -p1
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
%patch36 -p1
%patch37 -p1
%patch38 -p1
%patch39 -p1
%patch40 -p1
%patch41 -p1
%patch42 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%patch48 -p1
%patch49 -p1
%patch50 -p1
%patch51 -p1
%patch100 -p1
%patch101 -p1
%patch102 -p1
@ -605,28 +649,12 @@ Authors:
%patch143 -p1
%patch144 -p1
%patch145 -p1
%patch146 -p1
%patch150 -p1
%patch151 -p1
%patch152 -p1
%patch153 -p1
%patch180 -p1
%patch181 -p1
%patch182 -p1
%patch186 -p1
%patch187 -p1
%patch188 -p1
%patch189 -p1
%patch190 -p1
%patch191 -p1
%patch192 -p1
%patch193 -p1
%patch194 -p1
%patch195 -p1
%patch196 -p1
%patch197 -p1
%patch198 -p1
%patch199 -p1
%patch154 -p1
%patch155 -p1
%patch200 -p1
%patch201 -p1
%patch202 -p1
@ -640,6 +668,24 @@ Authors:
%patch210 -p1
%patch211 -p1
%patch212 -p1
%patch213 -p1
%patch214 -p1
%patch215 -p1
%patch216 -p1
%patch217 -p1
%patch218 -p1
%patch219 -p1
%patch220 -p1
%patch221 -p1
%patch222 -p1
%patch223 -p1
%patch224 -p1
%patch225 -p1
%patch226 -p1
%patch227 -p1
%patch228 -p1
%patch229 -p1
%patch230 -p1
%build
XEN_EXTRAVERSION=%version-%release
@ -951,6 +997,18 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info
/sbin/ldconfig
%changelog
* Wed Aug 29 2007 - ccoffing@novell.com
- Update block-iscsi to match changes to open-iscsi.
* Mon Aug 27 2007 - carnold@novell.com
- #289275 - domu will not reboot if pci= is passed in at boot time.
* Fri Aug 24 2007 - carnold@novell.com
- #297345: Added several upstream patches for hvm migration.
* Fri Aug 17 2007 - jfehlig@novell.com
- Added upstream c/s 15128, 15153, 15477, and 15716. These patches
provide foundation for bug #238986
- Renamed xend_dev_destroy_cleanup.patch to reflect the upstream
c/s number and moved it to "upstream patches" section of spec
file.
* Mon Aug 13 2007 - carnold@novell.com
- hvm svm: Log into 'xm dmesg' that SVM NPT is enabled.
* Fri Aug 10 2007 - ccoffing@novell.com

View File

@ -2,7 +2,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -2349,6 +2349,14 @@ class XendDomainInfo:
@@ -2427,6 +2427,14 @@ class XendDomainInfo:
if not config.has_key('backend'):
config['backend'] = "00000000-0000-0000-0000-000000000000"