From 27c451323a75bd3c787689fa5abd171476d5ec25 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Wed, 21 Mar 2007 08:51:51 +0000 Subject: [PATCH 1/3] LINUX: x86_64: start_pfn should be initialised even when XENFEAT_auto_translated_physmap is set. Signed-off-by: Ian Campbell --- linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c b/linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c index dbb1bc39fe..356c0717ff 100644 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c @@ -105,13 +105,11 @@ void __init x86_64_start_kernel(char * real_mode_data) int i; xen_start_info = (struct start_info *)real_mode_data; - if (!xen_feature(XENFEAT_auto_translated_physmap)) { + if (!xen_feature(XENFEAT_auto_translated_physmap)) phys_to_machine_mapping = (unsigned long *)xen_start_info->mfn_list; - start_pfn = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT) + - xen_start_info->nr_pt_frames; - } - + start_pfn = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT) + + xen_start_info->nr_pt_frames; machine_to_phys_mapping = (unsigned long *)MACH2PHYS_VIRT_START; machine_to_phys_nr_ents = MACH2PHYS_NR_ENTRIES; From 9639f3da4fbb1240b5501588ce2e33896f28957d Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Wed, 21 Mar 2007 12:03:42 +0000 Subject: [PATCH 2/3] Change xm dmesg -c so that it prints out the current buffer as well as clearing it. This avoids a race so that you don't lose messages, matches the behaviour of the hypercall, and the Unix dmesg command. Change the Xen-API binding to use a separate function host.dmesg_clear rather than a flag on host.dmesg. Signed-off-by: Ewan Mellor --- tools/python/xen/xend/XendAPI.py | 11 ++++++----- tools/python/xen/xend/XendDmesg.py | 3 ++- tools/python/xen/xm/main.py | 15 +++++++-------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/tools/python/xen/xend/XendAPI.py b/tools/python/xen/xend/XendAPI.py index a0f7c351b4..de9c1bffb1 100644 --- a/tools/python/xen/xend/XendAPI.py +++ b/tools/python/xen/xend/XendAPI.py @@ -665,6 +665,7 @@ class XendAPI(object): ('add_to_other_config', None), ('remove_from_other_config', None), ('dmesg', 'String'), + ('dmesg_clear', 'String'), ('get_log', 'String'), ('send_debug_keys', None)] @@ -742,11 +743,11 @@ class XendAPI(object): return xen_api_error(XEND_ERROR_HOST_RUNNING) return xen_api_error(XEND_ERROR_UNSUPPORTED) - def host_dmesg(self, session, host_ref, clear): - if clear: - return xen_api_success(XendDmesg.instance().clear()) - else: - return xen_api_success(XendDmesg.instance().info()) + def host_dmesg(self, session, host_ref): + return xen_api_success(XendDmesg.instance().info()) + + def host_dmesg_clear(self, session, host_ref): + return xen_api_success(XendDmesg.instance().clear()) def host_get_log(self, session, host_ref): log_file = open(XendLogging.getLogFilename()) diff --git a/tools/python/xen/xend/XendDmesg.py b/tools/python/xen/xend/XendDmesg.py index a3bc8c45b4..f4d0ff6be3 100644 --- a/tools/python/xen/xend/XendDmesg.py +++ b/tools/python/xen/xend/XendDmesg.py @@ -13,6 +13,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #============================================================================ # Copyright (C) 2004, 2005 Mike Wray +# Copyright (C) 2007 XenSource Inc. #============================================================================ """Get dmesg output for this node. @@ -28,7 +29,7 @@ class XendDmesg: return self.xc.readconsolering() def clear(self): - self.xc.readconsolering(True) + return self.xc.readconsolering(True) def instance(): global inst diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 66a5951f7f..372b4b2510 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -217,7 +217,7 @@ SUBCOMMAND_OPTIONS = { ('-q', '--quiet', 'Do not print an error message if the domain does not exist'), ), 'dmesg': ( - ('-c', '--clear', 'Clear dmesg buffer'), + ('-c', '--clear', 'Clear dmesg buffer as well as printing it'), ), 'vnet-list': ( ('-l', '--long', 'List Vnets as SXP'), @@ -1587,17 +1587,16 @@ def xm_dmesg(args): usage('dmesg') if serverType == SERVER_XEN_API: - if not use_clear: - print server.xenapi.host.dmesg( - server.xenapi.session.get_this_host(),0) + host = server.xenapi.session.get_this_host() + if use_clear: + print server.xenapi.host.dmesg_clear(host), else: - server.xenapi.host.dmesg( - server.xenapi.session.get_this_host(),1) + print server.xenapi.host.dmesg(host), else: if not use_clear: - print server.xend.node.dmesg.info() + print server.xend.node.dmesg.info(), else: - server.xend.node.dmesg.clear() + print server.xend.node.dmesg.clear(), def xm_log(args): arg_check(args, "log", 0) From 2ccced7b73c5d2d52febbaced473deeac9042c47 Mon Sep 17 00:00:00 2001 From: Tim Deegan Date: Wed, 21 Mar 2007 17:17:08 +0000 Subject: [PATCH 3/3] [XEN] Shadow: check the _PAGE_PRESENT bit in fast-path MMIO shadow ptes otherwise the fast-path code is not safe against some kinds of concurrent shadow updates. Signed-off-by: Tim Deegan --- xen/arch/x86/mm/shadow/types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/arch/x86/mm/shadow/types.h b/xen/arch/x86/mm/shadow/types.h index 400514f241..8397e7ae2c 100644 --- a/xen/arch/x86/mm/shadow/types.h +++ b/xen/arch/x86/mm/shadow/types.h @@ -597,7 +597,7 @@ accumulate_guest_flags(struct vcpu *v, walk_t *gw) * have reserved bits that we can use for this. */ -#define SH_L1E_MAGIC 0xffffffff00000000ULL +#define SH_L1E_MAGIC 0xffffffff00000001ULL static inline int sh_l1e_is_magic(shadow_l1e_t sl1e) { return ((sl1e.l1 & SH_L1E_MAGIC) == SH_L1E_MAGIC);