SHA256
1
0
forked from pool/xen

- bnc#624285 - TP-L3: xen rdtsc emulation reports wrong frequency

21445-x86-tsc-handling-cleanups-v2.patch

- bnc#623201 - drbd xvd will fail in new xen4 packages due to wrong
  popen2 arguments in blkif.py
  popen2-argument-fix.patch
- bnc#599550 - Xen cannot distinguish the status of 'pause'

OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=64
This commit is contained in:
Charles Arnold 2010-07-26 17:09:10 +00:00 committed by Git OBS Bridge
parent ff4b346ede
commit 73e10176b8
9 changed files with 375 additions and 248 deletions

View File

@ -1,20 +0,0 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1273651780 -3600
# Node ID fa94385978e6317732e2c12000923ca6a5e0d2ed
# Parent 0079f76e906f378f81044da4e135df2fbb878fa5
mce: MCE polling logic should check mce_disabled during initialisation.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
--- a/xen/arch/x86/cpu/mcheck/non-fatal.c
+++ b/xen/arch/x86/cpu/mcheck/non-fatal.c
@@ -91,7 +91,7 @@ static int __init init_nonfatal_mce_chec
struct cpuinfo_x86 *c = &boot_cpu_data;
/* Check for MCE support */
- if (!mce_available(c))
+ if (mce_disabled || !mce_available(c))
return -ENODEV;
/*

View File

@ -0,0 +1,268 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1278094440 -3600
# Node ID a9c458ab90e4ecb25383456be653368ecd900ee4
# Parent 322468d5ab6ceca4afa21977a02f4492308d2ddc
x86: TSC handling cleanups (version 2)
"I am removing the tsc_scaled variable that is never actually used
because when tsc needs to be scaled vtsc is 1. I am also making this
more explicit in tsc_set_info. I am also removing hvm_domain.gtsc_khz
that is a duplicate of d->arch.tsc_khz. I am using scale_delta(delta,
&d->arch.ns_to_vtsc) to scale the tsc value before returning it to the
guest like in the pv case. I added a feature flag to specify that the
pvclock algorithm is safe to be used in an HVM guest so that the guest
can now use it without hanging."
Version 2 fixes a bug which breaks PV domU time.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
xen-unstable changeset: 21445:c1ed00d49534
xen-unstable date: Sat May 22 06:31:47 2010 +0100
Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
===================================================================
--- xen-4.0.0-testing.orig/xen/arch/x86/hvm/hvm.c
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
@@ -152,32 +152,6 @@ void hvm_set_rdtsc_exiting(struct domain
hvm_funcs.set_rdtsc_exiting(v, enable);
}
-int hvm_gtsc_need_scale(struct domain *d)
-{
- uint32_t gtsc_mhz, htsc_mhz;
-
- if ( d->arch.vtsc )
- return 0;
-
- gtsc_mhz = d->arch.hvm_domain.gtsc_khz / 1000;
- htsc_mhz = (uint32_t)cpu_khz / 1000;
-
- d->arch.hvm_domain.tsc_scaled = (gtsc_mhz && (gtsc_mhz != htsc_mhz));
- return d->arch.hvm_domain.tsc_scaled;
-}
-
-static u64 hvm_h2g_scale_tsc(struct vcpu *v, u64 host_tsc)
-{
- uint32_t gtsc_khz, htsc_khz;
-
- if ( !v->domain->arch.hvm_domain.tsc_scaled )
- return host_tsc;
-
- htsc_khz = cpu_khz;
- gtsc_khz = v->domain->arch.hvm_domain.gtsc_khz;
- return muldiv64(host_tsc, gtsc_khz, htsc_khz);
-}
-
void hvm_set_guest_tsc(struct vcpu *v, u64 guest_tsc)
{
uint64_t tsc;
@@ -185,11 +159,11 @@ void hvm_set_guest_tsc(struct vcpu *v, u
if ( v->domain->arch.vtsc )
{
tsc = hvm_get_guest_time(v);
+ tsc = gtime_to_gtsc(v->domain, tsc);
}
else
{
rdtscll(tsc);
- tsc = hvm_h2g_scale_tsc(v, tsc);
}
v->arch.hvm_vcpu.cache_tsc_offset = guest_tsc - tsc;
@@ -203,12 +177,12 @@ u64 hvm_get_guest_tsc(struct vcpu *v)
if ( v->domain->arch.vtsc )
{
tsc = hvm_get_guest_time(v);
+ tsc = gtime_to_gtsc(v->domain, tsc);
v->domain->arch.vtsc_kerncount++;
}
else
{
rdtscll(tsc);
- tsc = hvm_h2g_scale_tsc(v, tsc);
}
return tsc + v->arch.hvm_vcpu.cache_tsc_offset;
Index: xen-4.0.0-testing/xen/arch/x86/hvm/save.c
===================================================================
--- xen-4.0.0-testing.orig/xen/arch/x86/hvm/save.c
+++ xen-4.0.0-testing/xen/arch/x86/hvm/save.c
@@ -33,7 +33,7 @@ void arch_hvm_save(struct domain *d, str
hdr->cpuid = eax;
/* Save guest's preferred TSC. */
- hdr->gtsc_khz = d->arch.hvm_domain.gtsc_khz;
+ hdr->gtsc_khz = d->arch.tsc_khz;
}
int arch_hvm_load(struct domain *d, struct hvm_save_header *hdr)
@@ -62,8 +62,8 @@ int arch_hvm_load(struct domain *d, stru
/* Restore guest's preferred TSC frequency. */
if ( hdr->gtsc_khz )
- d->arch.hvm_domain.gtsc_khz = hdr->gtsc_khz;
- if ( hvm_gtsc_need_scale(d) )
+ d->arch.tsc_khz = hdr->gtsc_khz;
+ if ( d->arch.vtsc )
{
hvm_set_rdtsc_exiting(d, 1);
gdprintk(XENLOG_WARNING, "Domain %d expects freq %uMHz "
Index: xen-4.0.0-testing/xen/arch/x86/hvm/vpt.c
===================================================================
--- xen-4.0.0-testing.orig/xen/arch/x86/hvm/vpt.c
+++ xen-4.0.0-testing/xen/arch/x86/hvm/vpt.c
@@ -32,9 +32,6 @@ void hvm_init_guest_time(struct domain *
spin_lock_init(&pl->pl_time_lock);
pl->stime_offset = -(u64)get_s_time();
pl->last_guest_time = 0;
-
- d->arch.hvm_domain.gtsc_khz = cpu_khz;
- d->arch.hvm_domain.tsc_scaled = 0;
}
u64 hvm_get_guest_time(struct vcpu *v)
Index: xen-4.0.0-testing/xen/arch/x86/time.c
===================================================================
--- xen-4.0.0-testing.orig/xen/arch/x86/time.c
+++ xen-4.0.0-testing/xen/arch/x86/time.c
@@ -850,8 +850,13 @@ static void __update_vcpu_system_time(st
if ( d->arch.vtsc )
{
- u64 delta = max_t(s64, t->stime_local_stamp - d->arch.vtsc_offset, 0);
- tsc_stamp = scale_delta(delta, &d->arch.ns_to_vtsc);
+ u64 stime = t->stime_local_stamp;
+ if ( is_hvm_domain(d) )
+ {
+ struct pl_time *pl = &v->domain->arch.hvm_domain.pl_time;
+ stime += pl->stime_offset + v->arch.hvm_vcpu.stime_offset;
+ }
+ tsc_stamp = gtime_to_gtsc(d, stime);
}
else
{
@@ -874,6 +879,8 @@ static void __update_vcpu_system_time(st
_u.tsc_to_system_mul = t->tsc_scale.mul_frac;
_u.tsc_shift = (s8)t->tsc_scale.shift;
}
+ if ( is_hvm_domain(d) )
+ _u.tsc_timestamp += v->arch.hvm_vcpu.cache_tsc_offset;
/* Don't bother unless timestamp record has changed or we are forced. */
_u.version = u->version; /* make versions match for memcmp test */
@@ -1640,11 +1647,17 @@ struct tm wallclock_time(void)
* PV SoftTSC Emulation.
*/
+u64 gtime_to_gtsc(struct domain *d, u64 tsc)
+{
+ if ( !is_hvm_domain(d) )
+ tsc = max_t(s64, tsc - d->arch.vtsc_offset, 0);
+ return scale_delta(tsc, &d->arch.ns_to_vtsc);
+}
+
void pv_soft_rdtsc(struct vcpu *v, struct cpu_user_regs *regs, int rdtscp)
{
s_time_t now = get_s_time();
struct domain *d = v->domain;
- u64 delta;
spin_lock(&d->arch.vtsc_lock);
@@ -1660,8 +1673,7 @@ void pv_soft_rdtsc(struct vcpu *v, struc
spin_unlock(&d->arch.vtsc_lock);
- delta = max_t(s64, now - d->arch.vtsc_offset, 0);
- now = scale_delta(delta, &d->arch.ns_to_vtsc);
+ now = gtime_to_gtsc(d, now);
regs->eax = (uint32_t)now;
regs->edx = (uint32_t)(now >> 32);
@@ -1802,8 +1814,10 @@ void tsc_set_info(struct domain *d,
d->arch.vtsc_offset = get_s_time() - elapsed_nsec;
d->arch.tsc_khz = gtsc_khz ? gtsc_khz : cpu_khz;
set_time_scale(&d->arch.vtsc_to_ns, d->arch.tsc_khz * 1000 );
- /* use native TSC if initial host has safe TSC and not migrated yet */
- if ( host_tsc_is_safe() && incarnation == 0 )
+ /* use native TSC if initial host has safe TSC, has not migrated
+ * yet and tsc_khz == cpu_khz */
+ if ( host_tsc_is_safe() && incarnation == 0 &&
+ d->arch.tsc_khz == cpu_khz )
d->arch.vtsc = 0;
else
d->arch.ns_to_vtsc = scale_reciprocal(d->arch.vtsc_to_ns);
@@ -1828,7 +1842,7 @@ void tsc_set_info(struct domain *d,
}
d->arch.incarnation = incarnation + 1;
if ( is_hvm_domain(d) )
- hvm_set_rdtsc_exiting(d, d->arch.vtsc || hvm_gtsc_need_scale(d));
+ hvm_set_rdtsc_exiting(d, d->arch.vtsc);
}
/* vtsc may incur measurable performance degradation, diagnose with this */
Index: xen-4.0.0-testing/xen/common/kernel.c
===================================================================
--- xen-4.0.0-testing.orig/xen/common/kernel.c
+++ xen-4.0.0-testing/xen/common/kernel.c
@@ -243,6 +243,8 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDL
fi.submap |= (1U << XENFEAT_mmu_pt_update_preserve_ad) |
(1U << XENFEAT_highmem_assist) |
(1U << XENFEAT_gnttab_map_avail_bits);
+ else
+ fi.submap |= (1U << XENFEAT_hvm_safe_pvclock);
#endif
break;
default:
Index: xen-4.0.0-testing/xen/include/asm-x86/hvm/domain.h
===================================================================
--- xen-4.0.0-testing.orig/xen/include/asm-x86/hvm/domain.h
+++ xen-4.0.0-testing/xen/include/asm-x86/hvm/domain.h
@@ -45,8 +45,6 @@ struct hvm_domain {
struct hvm_ioreq_page ioreq;
struct hvm_ioreq_page buf_ioreq;
- uint32_t gtsc_khz; /* kHz */
- bool_t tsc_scaled;
struct pl_time pl_time;
struct hvm_io_handler io_handler;
Index: xen-4.0.0-testing/xen/include/asm-x86/hvm/hvm.h
===================================================================
--- xen-4.0.0-testing.orig/xen/include/asm-x86/hvm/hvm.h
+++ xen-4.0.0-testing/xen/include/asm-x86/hvm/hvm.h
@@ -290,7 +290,6 @@ int hvm_event_needs_reinjection(uint8_t
uint8_t hvm_combine_hw_exceptions(uint8_t vec1, uint8_t vec2);
void hvm_set_rdtsc_exiting(struct domain *d, bool_t enable);
-int hvm_gtsc_need_scale(struct domain *d);
static inline int
hvm_cpu_prepare(unsigned int cpu)
Index: xen-4.0.0-testing/xen/include/asm-x86/time.h
===================================================================
--- xen-4.0.0-testing.orig/xen/include/asm-x86/time.h
+++ xen-4.0.0-testing/xen/include/asm-x86/time.h
@@ -60,6 +60,7 @@ uint64_t acpi_pm_tick_to_ns(uint64_t tic
uint64_t ns_to_acpi_pm_tick(uint64_t ns);
void pv_soft_rdtsc(struct vcpu *v, struct cpu_user_regs *regs, int rdtscp);
+u64 gtime_to_gtsc(struct domain *d, u64 tsc);
void tsc_set_info(struct domain *d, uint32_t tsc_mode, uint64_t elapsed_nsec,
uint32_t gtsc_khz, uint32_t incarnation);
Index: xen-4.0.0-testing/xen/include/public/features.h
===================================================================
--- xen-4.0.0-testing.orig/xen/include/public/features.h
+++ xen-4.0.0-testing/xen/include/public/features.h
@@ -68,6 +68,9 @@
*/
#define XENFEAT_gnttab_map_avail_bits 7
+/* x86: pvclock algorithm is safe to use on HVM */
+#define XENFEAT_hvm_safe_pvclock 9
+
#define XENFEAT_NR_SUBMAPS 1
#endif /* __XEN_PUBLIC_FEATURES_H__ */

View File

@ -19,8 +19,10 @@ present in the hypervisor.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com> Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
--- a/tools/python/xen/xend/image.py Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
+++ b/tools/python/xen/xend/image.py ===================================================================
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
@@ -830,8 +830,10 @@ class HVMImageHandler(ImageHandler): @@ -830,8 +830,10 @@ class HVMImageHandler(ImageHandler):
self.acpi = int(vmConfig['platform'].get('acpi', 0)) self.acpi = int(vmConfig['platform'].get('acpi', 0))
self.guest_os_type = vmConfig['platform'].get('guest_os_type') self.guest_os_type = vmConfig['platform'].get('guest_os_type')
@ -34,8 +36,10 @@ Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
# Return a list of cmd line args to the device models based on the # Return a list of cmd line args to the device models based on the
# xm config file # xm config file
--- a/xen/arch/x86/domctl.c Index: xen-4.0.0-testing/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c ===================================================================
--- xen-4.0.0-testing.orig/xen/arch/x86/domctl.c
+++ xen-4.0.0-testing/xen/arch/x86/domctl.c
@@ -1420,6 +1420,7 @@ long arch_do_domctl( @@ -1420,6 +1420,7 @@ long arch_do_domctl(
break; break;
#endif /* XEN_GDBSX_CONFIG */ #endif /* XEN_GDBSX_CONFIG */
@ -52,9 +56,11 @@ Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
default: default:
ret = -ENOSYS; ret = -ENOSYS;
--- a/xen/arch/x86/hvm/hvm.c Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c ===================================================================
@@ -948,6 +948,7 @@ bool_t hvm_hap_nested_page_fault(unsigne --- xen-4.0.0-testing.orig/xen/arch/x86/hvm/hvm.c
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
@@ -922,6 +922,7 @@ bool_t hvm_hap_nested_page_fault(unsigne
return 1; return 1;
} }
@ -62,7 +68,7 @@ Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
/* Check if the page has been paged out */ /* Check if the page has been paged out */
if ( p2m_is_paged(p2mt) || (p2mt == p2m_ram_paging_out) ) if ( p2m_is_paged(p2mt) || (p2mt == p2m_ram_paging_out) )
p2m_mem_paging_populate(current->domain, gfn); p2m_mem_paging_populate(current->domain, gfn);
@@ -958,6 +959,7 @@ bool_t hvm_hap_nested_page_fault(unsigne @@ -932,6 +933,7 @@ bool_t hvm_hap_nested_page_fault(unsigne
mem_sharing_unshare_page(current->domain, gfn, 0); mem_sharing_unshare_page(current->domain, gfn, 0);
return 1; return 1;
} }
@ -70,8 +76,10 @@ Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
/* Spurious fault? PoD and log-dirty also take this path. */ /* Spurious fault? PoD and log-dirty also take this path. */
if ( p2m_is_ram(p2mt) ) if ( p2m_is_ram(p2mt) )
--- a/xen/arch/x86/mm.c Index: xen-4.0.0-testing/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c ===================================================================
--- xen-4.0.0-testing.orig/xen/arch/x86/mm.c
+++ xen-4.0.0-testing/xen/arch/x86/mm.c
@@ -3179,20 +3179,23 @@ int do_mmu_update( @@ -3179,20 +3179,23 @@ int do_mmu_update(
rc = -ENOENT; rc = -ENOENT;
break; break;
@ -109,8 +117,10 @@ Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
default: default:
return subarch_memory_op(op, arg); return subarch_memory_op(op, arg);
--- a/xen/arch/x86/mm/Makefile Index: xen-4.0.0-testing/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile ===================================================================
--- xen-4.0.0-testing.orig/xen/arch/x86/mm/Makefile
+++ xen-4.0.0-testing/xen/arch/x86/mm/Makefile
@@ -6,9 +6,9 @@ obj-y += p2m.o @@ -6,9 +6,9 @@ obj-y += p2m.o
obj-y += guest_walk_2.o obj-y += guest_walk_2.o
obj-y += guest_walk_3.o obj-y += guest_walk_3.o
@ -124,8 +134,10 @@ Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
guest_walk_%.o: guest_walk.c Makefile guest_walk_%.o: guest_walk.c Makefile
$(CC) $(CFLAGS) -DGUEST_PAGING_LEVELS=$* -c $< -o $@ $(CC) $(CFLAGS) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
--- a/xen/arch/x86/mm/p2m.c Index: xen-4.0.0-testing/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c ===================================================================
--- xen-4.0.0-testing.orig/xen/arch/x86/mm/p2m.c
+++ xen-4.0.0-testing/xen/arch/x86/mm/p2m.c
@@ -1708,17 +1708,23 @@ void p2m_teardown(struct domain *d) @@ -1708,17 +1708,23 @@ void p2m_teardown(struct domain *d)
{ {
struct page_info *pg; struct page_info *pg;
@ -169,8 +181,10 @@ Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
/* /*
* Local variables: * Local variables:
--- a/xen/include/asm-x86/mem_sharing.h Index: xen-4.0.0-testing/xen/include/asm-x86/mem_sharing.h
+++ b/xen/include/asm-x86/mem_sharing.h ===================================================================
--- xen-4.0.0-testing.orig/xen/include/asm-x86/mem_sharing.h
+++ xen-4.0.0-testing/xen/include/asm-x86/mem_sharing.h
@@ -22,6 +22,8 @@ @@ -22,6 +22,8 @@
#ifndef __MEM_SHARING_H__ #ifndef __MEM_SHARING_H__
#define __MEM_SHARING_H__ #define __MEM_SHARING_H__
@ -191,8 +205,10 @@ Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
+#endif /* __x86_64__ */ +#endif /* __x86_64__ */
+ +
#endif /* __MEM_SHARING_H__ */ #endif /* __MEM_SHARING_H__ */
--- a/xen/include/asm-x86/p2m.h Index: xen-4.0.0-testing/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h ===================================================================
--- xen-4.0.0-testing.orig/xen/include/asm-x86/p2m.h
+++ xen-4.0.0-testing/xen/include/asm-x86/p2m.h
@@ -77,11 +77,12 @@ typedef enum { @@ -77,11 +77,12 @@ typedef enum {
p2m_grant_map_rw = 7, /* Read/write grant mapping */ p2m_grant_map_rw = 7, /* Read/write grant mapping */
p2m_grant_map_ro = 8, /* Read-only grant mapping */ p2m_grant_map_ro = 8, /* Read-only grant mapping */

View File

@ -464,6 +464,9 @@ The hypervisor and domain 0 kernel are a matched set, and usually must be
upgraded together. Consult the online documentation for a matrix of supported upgraded together. Consult the online documentation for a matrix of supported
32- and 64-bit combinations 32- and 64-bit combinations
A 64-bit paravirtualized VM will not run on 32-bit host but a 32-bit
paravirtualized VM will run on a 64-bit host.
On certain machines with 2GB or less of RAM, domain 0 Linux may fail to boot, On certain machines with 2GB or less of RAM, domain 0 Linux may fail to boot,
printing the following messages: printing the following messages:
PCI-DMA: Using software bounce buffering for IO (SWIOTLB) PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
@ -495,8 +498,8 @@ file (viewable with the "xm dmesg" command).
If problems persist, check if a newer version is available. Well-tested If problems persist, check if a newer version is available. Well-tested
versions will be shipped with SUSE and via YaST Online Update. More frequent versions will be shipped with SUSE and via YaST Online Update. More frequent
(but less supported) updates are available on Novell's Forge site: (but less supported) updates are available on the Xen Technical Preview site:
http://forge.novell.com/modules/xfmod/project/?xenpreview ftp://ftp.novell.com/forge/XenTechnicalPreview/
Known Issues Known Issues

View File

@ -1,172 +0,0 @@
Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomain.py
===================================================================
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomain.py
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomain.py
@@ -251,6 +251,18 @@ class XendDomain:
@return: path to config file.
"""
return os.path.join(self._managed_path(domuuid), CACHED_CONFIG_FILE)
+ def domain_setpauseflag(self, dom, flag=False):
+ try:
+ dominfo = self.domain_lookup_nr(dom)
+ dominfo.paused_by_admin = flag
+ except Exception, err:
+ log.debug("error in in setpauseflag")
+ def domain_getpauseflag(self, dom):
+ try:
+ dominfo = self.domain_lookup_nr(dom)
+ return dominfo.paused_by_admin
+ except Exception, err:
+ log.debug("error in in getpauseflag")
def _managed_check_point_path(self, domuuid):
"""Returns absolute path to check point file for managed domain.
Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -329,7 +329,9 @@ class XendDomainInfo:
@type info: dictionary
@ivar domid: Domain ID (if VM has started)
@type domid: int or None
- @ivar guest_bitsize: the bitsize of guest
+ @ivar paused_by_admin: Is this Domain paused by command or API
+ @type paused_by_admin: bool
+ @ivar guest_bitsize: the bitsize of guest
@type guest_bitsize: int or None
@ivar alloc_mem: the memory domain allocated when booting
@type alloc_mem: int or None
@@ -392,6 +394,7 @@ class XendDomainInfo:
self.domid = domid
self.guest_bitsize = None
self.alloc_mem = None
+ self.paused_by_admin = False
maxmem = self.info.get('memory_static_max', 0)
memory = self.info.get('memory_dynamic_max', 0)
Index: xen-4.0.0-testing/tools/python/xen/xend/server/SrvDomain.py
===================================================================
--- xen-4.0.0-testing.orig/tools/python/xen/xend/server/SrvDomain.py
+++ xen-4.0.0-testing/tools/python/xen/xend/server/SrvDomain.py
@@ -250,6 +250,20 @@ class SrvDomain(SrvDir):
self.acceptCommand(req)
return self.xd.domain_reset(self.dom.getName())
+ def op_do_get_pauseflag(self, op, req):
+ self.acceptCommand(req)
+ return req.threadRequest(self.do_get_pauseflag, op, req)
+
+ def do_get_pauseflag(self, _, req):
+ return self.xd.domain_getpauseflag(self.dom.getName(), req)
+
+ def op_do_set_pauseflag(self, op, req):
+ self.acceptCommand(req)
+ return req.threadRequest(self.do_set_pauseflag, op, req)
+
+ def do_set_pauseflag(self, _, req):
+ return self.xd.domain_setpauseflag(self.dom.getName(), req)
+
def op_usb_add(self, op, req):
self.acceptCommand(req)
return req.threadRequest(self.do_usb_add, op, req)
Index: xen-4.0.0-testing/tools/python/xen/xm/main.py
===================================================================
--- xen-4.0.0-testing.orig/tools/python/xen/xm/main.py
+++ xen-4.0.0-testing/tools/python/xen/xm/main.py
@@ -174,6 +174,8 @@ SUBCOMMAND_HELP = {
#usb
'usb-add' : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
'usb-del' : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
+ #domstate
+ 'domstate' : ('<domain> ', 'get the state of a domain'),
# device commands
@@ -409,6 +411,7 @@ common_commands = [
"uptime",
"usb-add",
"usb-del",
+ "domstate",
"vcpu-set",
]
@@ -447,6 +450,7 @@ domain_commands = [
"uptime",
"usb-add",
"usb-del",
+ "domstate",
"vcpu-list",
"vcpu-pin",
"vcpu-set",
@@ -1018,7 +1022,6 @@ def getDomains(domain_names, state, full
return "-"
state_str = "".join([state_on_off(state)
for state in states])
-
dom_rec.update({'name': dom_rec['name_label'],
'memory_actual': int(dom_metrics_rec['memory_actual'])/1024,
'vcpus': dom_metrics_rec['VCPUs_number'],
@@ -1527,8 +1530,10 @@ def xm_pause(args):
if serverType == SERVER_XEN_API:
server.xenapi.VM.pause(get_single_vm(dom))
+ server.xenapi.VM.set_pauseflag(get_single_vm(dom), True)
else:
server.xend.domain.pause(dom)
+ server.xend.domain.setpauseflag(dom, True)
def xm_unpause(args):
arg_check(args, "unpause", 1)
@@ -1536,8 +1541,10 @@ def xm_unpause(args):
if serverType == SERVER_XEN_API:
server.xenapi.VM.unpause(get_single_vm(dom))
+ server.xenapi.VM.set_pauseflag(get_single_vm(dom), False)
else:
server.xend.domain.unpause(dom)
+ server.xend.domain.setpauseflag(dom, False)
def xm_dump_core(args):
live = False
@@ -1647,6 +1654,32 @@ def xm_usb_add(args):
arg_check(args, "usb-add", 2)
server.xend.domain.usb_add(args[0],args[1])
+def xm_domstate(args):
+ arg_check(args, "domstate", 1)
+ (opitons, params) = getopt.gnu_getopt(args, 's', ['domname='])
+ doms = getDomains(params, 'all')
+ d = parse_doms_info(doms[0])
+ state = d['state']
+ if state:
+ if state.find('s') > 0:
+ print 'shutoff'
+ elif state.find('b') > 0:
+ print 'idle'
+ elif state.find('d') > 0:
+ print 'shutdown'
+ elif state.find('r') > 0:
+ print 'running'
+ elif state.find('c') > 0:
+ print 'crashed'
+ elif state.find('p') > 0:
+ if server.xend.domain.getpauseflag(args[0]):
+ print 'paused by admin'
+ else:
+ print 'paused'
+ else:
+ print 'shutoff'
+ return
+
def xm_usb_del(args):
arg_check(args, "usb-del", 2)
server.xend.domain.usb_del(args[0],args[1])
@@ -3859,6 +3892,8 @@ commands = {
#usb
"usb-add": xm_usb_add,
"usb-del": xm_usb_del,
+ #domstate
+ "domstate": xm_domstate,
}
## The commands supported by a separate argument parser in xend.xm.

View File

@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/xen/include/asm-x86/hvm/domain.h
=================================================================== ===================================================================
--- xen-4.0.0-testing.orig/xen/include/asm-x86/hvm/domain.h --- xen-4.0.0-testing.orig/xen/include/asm-x86/hvm/domain.h
+++ xen-4.0.0-testing/xen/include/asm-x86/hvm/domain.h +++ xen-4.0.0-testing/xen/include/asm-x86/hvm/domain.h
@@ -98,6 +98,7 @@ struct hvm_domain { @@ -96,6 +96,7 @@ struct hvm_domain {
struct vmx_domain vmx; struct vmx_domain vmx;
struct svm_domain svm; struct svm_domain svm;
}; };
@ -33,7 +33,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
#include <asm/hvm/vpt.h> #include <asm/hvm/vpt.h>
#include <asm/hvm/support.h> #include <asm/hvm/support.h>
#include <asm/hvm/cacheattr.h> #include <asm/hvm/cacheattr.h>
@@ -461,6 +462,7 @@ void hvm_domain_relinquish_resources(str @@ -435,6 +436,7 @@ void hvm_domain_relinquish_resources(str
void hvm_domain_destroy(struct domain *d) void hvm_domain_destroy(struct domain *d)
{ {
@ -41,7 +41,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
hvm_funcs.domain_destroy(d); hvm_funcs.domain_destroy(d);
rtc_deinit(d); rtc_deinit(d);
stdvga_deinit(d); stdvga_deinit(d);
@@ -782,8 +784,14 @@ int hvm_vcpu_initialise(struct vcpu *v) @@ -756,8 +758,14 @@ int hvm_vcpu_initialise(struct vcpu *v)
v->arch.hvm_vcpu.xfeature_mask = XSTATE_FP_SSE; v->arch.hvm_vcpu.xfeature_mask = XSTATE_FP_SSE;
} }
@ -56,7 +56,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
if ( (rc = hvm_funcs.vcpu_initialise(v)) != 0 ) if ( (rc = hvm_funcs.vcpu_initialise(v)) != 0 )
goto fail2; goto fail2;
@@ -834,12 +842,14 @@ int hvm_vcpu_initialise(struct vcpu *v) @@ -808,12 +816,14 @@ int hvm_vcpu_initialise(struct vcpu *v)
hvm_funcs.vcpu_destroy(v); hvm_funcs.vcpu_destroy(v);
fail2: fail2:
vlapic_destroy(v); vlapic_destroy(v);
@ -71,7 +71,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
tasklet_kill(&v->arch.hvm_vcpu.assert_evtchn_irq_tasklet); tasklet_kill(&v->arch.hvm_vcpu.assert_evtchn_irq_tasklet);
hvm_vcpu_cacheattr_destroy(v); hvm_vcpu_cacheattr_destroy(v);
vlapic_destroy(v); vlapic_destroy(v);
@@ -1899,7 +1909,7 @@ void hvm_cpuid(unsigned int input, unsig @@ -1873,7 +1883,7 @@ void hvm_cpuid(unsigned int input, unsig
return; return;
if ( cpuid_hypervisor_leaves(input, count, eax, ebx, ecx, edx) ) if ( cpuid_hypervisor_leaves(input, count, eax, ebx, ecx, edx) )
@ -80,7 +80,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
domain_cpuid(v->domain, input, *ecx, eax, ebx, ecx, edx); domain_cpuid(v->domain, input, *ecx, eax, ebx, ecx, edx);
@@ -1966,6 +1976,8 @@ void hvm_cpuid(unsigned int input, unsig @@ -1940,6 +1950,8 @@ void hvm_cpuid(unsigned int input, unsig
*edx &= ~bitmaskof(X86_FEATURE_RDTSCP); *edx &= ~bitmaskof(X86_FEATURE_RDTSCP);
break; break;
} }
@ -89,7 +89,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
} }
void hvm_rdtsc_intercept(struct cpu_user_regs *regs) void hvm_rdtsc_intercept(struct cpu_user_regs *regs)
@@ -2066,6 +2078,8 @@ int hvm_msr_read_intercept(struct cpu_us @@ -2040,6 +2052,8 @@ int hvm_msr_read_intercept(struct cpu_us
break; break;
/* ret == 0, This is not an MCE MSR, see other MSRs */ /* ret == 0, This is not an MCE MSR, see other MSRs */
else if (!ret) else if (!ret)
@ -98,7 +98,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
return hvm_funcs.msr_read_intercept(regs); return hvm_funcs.msr_read_intercept(regs);
} }
@@ -2164,6 +2178,8 @@ int hvm_msr_write_intercept(struct cpu_u @@ -2138,6 +2152,8 @@ int hvm_msr_write_intercept(struct cpu_u
else if ( ret ) else if ( ret )
break; break;
else if (!ret) else if (!ret)
@ -107,7 +107,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
return hvm_funcs.msr_write_intercept(regs); return hvm_funcs.msr_write_intercept(regs);
} }
@@ -2356,6 +2372,10 @@ int hvm_do_hypercall(struct cpu_user_reg @@ -2330,6 +2346,10 @@ int hvm_do_hypercall(struct cpu_user_reg
case 0: case 0:
break; break;
} }
@ -118,7 +118,7 @@ Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
if ( (eax & 0x80000000) && is_viridian_domain(curr->domain) ) if ( (eax & 0x80000000) && is_viridian_domain(curr->domain) )
return viridian_hypercall(regs); return viridian_hypercall(regs);
@@ -2890,6 +2910,18 @@ long do_hvm_op(unsigned long op, XEN_GUE @@ -2864,6 +2884,18 @@ long do_hvm_op(unsigned long op, XEN_GUE
rc = -EINVAL; rc = -EINVAL;
break; break;

13
popen2-argument-fix.patch Normal file
View File

@ -0,0 +1,13 @@
Index: xen-4.0.0-testing/tools/python/xen/util/blkif.py
===================================================================
--- xen-4.0.0-testing.orig/tools/python/xen/util/blkif.py
+++ xen-4.0.0-testing/tools/python/xen/util/blkif.py
@@ -81,7 +81,7 @@ def parse_uname(uname):
if typ == "drbd":
if not fn.startswith("drbd"):
- (drbdadmstdin, drbdadmstdout) = os.popen2(["/sbin/drbdadm", "sh-dev", fn])
+ (drbdadmstdin, drbdadmstdout) = os.popen2("/sbin/drbdadm "+"sh-dev "+fn)
fn = drbdadmstdout.readline().strip()
else:
fn = "/dev/%s" %(fn,)

View File

@ -1,3 +1,16 @@
-------------------------------------------------------------------
Wed Jul 21 11:46:41 MDT 2010 - carnold@novell.com
- bnc#624285 - TP-L3: xen rdtsc emulation reports wrong frequency
21445-x86-tsc-handling-cleanups-v2.patch
-------------------------------------------------------------------
Thu Jul 20 13:23:14 MDT 2010 - carnold@novell.com
- bnc#623201 - drbd xvd will fail in new xen4 packages due to wrong
popen2 arguments in blkif.py
popen2-argument-fix.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Thu Jul 8 15:27:14 MDT 2010 - carnold@novell.com Thu Jul 8 15:27:14 MDT 2010 - carnold@novell.com
@ -34,7 +47,7 @@ Tue Jul 6 11:31:33 MDT 2010 - carnold@novell.com
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Jun 25 15:43:35 CST 2010 - jsong@novell.com Fri Jun 25 15:43:35 CST 2010 - jsong@novell.com
- bnc #599550 - Xen cannot distinguish the status of 'pause' - bnc#599550 - Xen cannot distinguish the status of 'pause'
addcommand_domstate.patch addcommand_domstate.patch
------------------------------------------------------------------- -------------------------------------------------------------------

View File

@ -108,31 +108,32 @@ Patch30: 21406-x86-microcode-quiet.patch
Patch31: 21408-amd-erratum-383.patch Patch31: 21408-amd-erratum-383.patch
Patch32: 21421-vts-ats-enabling.patch Patch32: 21421-vts-ats-enabling.patch
Patch33: 21435-vmx-retain-global-controls.patch Patch33: 21435-vmx-retain-global-controls.patch
Patch34: 21446-iommu-graceful-generic-fail.patch Patch34: 21445-x86-tsc-handling-cleanups-v2.patch
Patch35: 21453-shadow-avoid-remove-all-after-teardown.patch Patch35: 21446-iommu-graceful-generic-fail.patch
Patch36: 21456-compat-hvm-addr-check.patch Patch36: 21453-shadow-avoid-remove-all-after-teardown.patch
Patch37: 21459-block-script.patch Patch37: 21456-compat-hvm-addr-check.patch
Patch38: 21460-xend-timeoffset.patch Patch38: 21459-block-script.patch
Patch39: 21492-x86-pirq-unbind.patch Patch39: 21460-xend-timeoffset.patch
Patch40: 21526-x86-nehalem-cpuid-mask.patch Patch40: 21492-x86-pirq-unbind.patch
Patch41: 21542-amd-erratum-411.patch Patch41: 21526-x86-nehalem-cpuid-mask.patch
Patch42: 21615-dont-save-xen-heap-pages.patch Patch42: 21542-amd-erratum-411.patch
Patch43: 21620-x86-signed-domain-irq.patch Patch43: 21615-dont-save-xen-heap-pages.patch
Patch44: 21627-cpuidle-wrap.patch Patch44: 21620-x86-signed-domain-irq.patch
Patch45: 21643-vmx-vpmu-pmc-offset.patch Patch45: 21627-cpuidle-wrap.patch
Patch46: 21653-xend-mac-addr.patch Patch46: 21643-vmx-vpmu-pmc-offset.patch
Patch47: 21678-xend-mac-fix.patch Patch47: 21653-xend-mac-addr.patch
Patch48: 21682-trace-buffer-range.patch Patch48: 21678-xend-mac-fix.patch
Patch49: 21683-vtd-kill-timer-conditional.patch Patch49: 21682-trace-buffer-range.patch
Patch50: 21693-memevent-64bit-only.patch Patch50: 21683-vtd-kill-timer-conditional.patch
Patch51: 21695-trace-t_info-readonly.patch Patch51: 21693-memevent-64bit-only.patch
Patch52: 21698-x86-pirq-range-check.patch Patch52: 21695-trace-t_info-readonly.patch
Patch53: 21699-p2m-query-for-type-change.patch Patch53: 21698-x86-pirq-range-check.patch
Patch54: 21700-32on64-vm86-gpf.patch Patch54: 21699-p2m-query-for-type-change.patch
Patch55: 21705-trace-printk.patch Patch55: 21700-32on64-vm86-gpf.patch
Patch56: 21706-trace-security.patch Patch56: 21705-trace-printk.patch
Patch57: 21712-amd-osvw.patch Patch57: 21706-trace-security.patch
Patch58: 21744-x86-cpufreq-range-check.patch Patch58: 21712-amd-osvw.patch
Patch59: 21744-x86-cpufreq-range-check.patch
# Our patches # Our patches
Patch300: xen-config.diff Patch300: xen-config.diff
Patch301: xend-config.diff Patch301: xend-config.diff
@ -194,6 +195,8 @@ Patch367: cpu-pools-libxen.patch
Patch368: cpu-pools-xmtest.patch Patch368: cpu-pools-xmtest.patch
Patch369: cpu-pools-docs.patch Patch369: cpu-pools-docs.patch
Patch370: xend-sysconfig.patch Patch370: xend-sysconfig.patch
Patch371: domu-usb-controller.patch
Patch372: popen2-argument-fix.patch
# Patches for snapshot support # Patches for snapshot support
Patch400: snapshot-ioemu-save.patch Patch400: snapshot-ioemu-save.patch
Patch401: snapshot-ioemu-restore.patch Patch401: snapshot-ioemu-restore.patch
@ -635,6 +638,7 @@ Authors:
%patch56 -p1 %patch56 -p1
%patch57 -p1 %patch57 -p1
%patch58 -p1 %patch58 -p1
%patch59 -p1
%patch300 -p1 %patch300 -p1
%patch301 -p1 %patch301 -p1
%patch302 -p1 %patch302 -p1
@ -694,6 +698,8 @@ Authors:
%patch368 -p1 %patch368 -p1
%patch369 -p1 %patch369 -p1
%patch370 -p1 %patch370 -p1
%patch371 -p1
%patch372 -p1
%patch400 -p1 %patch400 -p1
%patch401 -p1 %patch401 -p1
%patch402 -p1 %patch402 -p1