From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Vrabel Subject: [PATCH 02/10] xen: make GUEST_HANDLE_64() and uint64_aligned_t available everywhere Date: Mon, 24 Jun 2013 18:42:13 +0100 Message-ID: <1372095741-27012-3-git-send-email-david.vrabel@citrix.com> References: <1372095741-27012-1-git-send-email-david.vrabel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1372095741-27012-1-git-send-email-david.vrabel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Daniel Kiper , Keir Fraser , David Vrabel List-Id: xen-devel@lists.xenproject.org From: David Vrabel GUEST_HANDLE_64() and uint64_aligned_t allow hypercall ABI structures to be identical (binary compatible) for 32 and 64-bit guests. They are currently limited to only being available for use in sysctls and domctls. Relax this restriction so they may be used by any new structures. There is a minimal cost for 32-bit guests on 64-but hypervisors as set_xen_guest_handle() needs to zero the whole field on GUEST_HANDLE_64() handles, but this is expected to be less than the overhead of having to translate compat structures. Signed-off-by: David Vrabel Reviewed-by: Daniel Kiper Tested-by: Daniel Kiper --- xen/include/public/arch-x86/xen-x86_32.h | 4 +--- xen/include/public/xen.h | 13 ++++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/xen/include/public/arch-x86/xen-x86_32.h b/xen/include/public/arch-x86/xen-x86_32.h index 1504191..f6b4f49 100644 --- a/xen/include/public/arch-x86/xen-x86_32.h +++ b/xen/include/public/arch-x86/xen-x86_32.h @@ -91,8 +91,7 @@ #define machine_to_phys_mapping ((unsigned long *)MACH2PHYS_VIRT_START) #endif -/* 32-/64-bit invariability for control interfaces (domctl/sysctl). */ -#if defined(__XEN__) || defined(__XEN_TOOLS__) +/* 32-/64-bit invariability. */ #undef ___DEFINE_XEN_GUEST_HANDLE #define ___DEFINE_XEN_GUEST_HANDLE(name, type) \ typedef struct { type *p; } \ @@ -107,7 +106,6 @@ #define uint64_aligned_t uint64_t __attribute__((aligned(8))) #define __XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name #define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name) -#endif #ifndef __ASSEMBLY__ diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h index 3cab74f..9b574c9 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -858,9 +858,14 @@ __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t); #endif /* !__ASSEMBLY__ */ -/* Default definitions for macros used by domctl/sysctl. */ -#if defined(__XEN__) || defined(__XEN_TOOLS__) - +/* + * Default definitions for 32/64-bit invariant macros. + * + * Use these in ABI structures that should be identical for 32 and + * 64-bit guests. There is some (very small) overhead in using + * XEN_GUEST_HANDLE_64() instead of XEN_GUEST_HANDLE() so avoid for + * very hot paths. + */ #ifndef uint64_aligned_t #define uint64_aligned_t uint64_t #endif @@ -875,8 +880,6 @@ struct xenctl_bitmap { }; #endif -#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ - #endif /* __XEN_PUBLIC_XEN_H__ */ /* -- 1.7.2.5