Jan Beulich
2008-Jan-18 16:15 UTC
[Xen-devel] [PATCH] linux/x86: clean up hypercall headers
- don''t define HYPERVISOR_hvm_op() for pv guests (requiring to not include include/xen/hvm.h in non-pv-driver builds) - remove the custome __STR/STR macros - remove stringification where not necessary - reduce instruction size for pv-driver case on x86-64 As usual, written and tested on 2.6.24-rc7 and made apply to the 2.6.18 tree without further testing. Signed-off-by: Jan Beulich <jbeulich@novell.com> Index: head-2007-12-11/drivers/xen/xenbus/xenbus_probe.c ==================================================================--- head-2007-12-11.orig/drivers/xen/xenbus/xenbus_probe.c 2007-12-11 11:17:36.000000000 +0100 +++ head-2007-12-11/drivers/xen/xenbus/xenbus_probe.c 2007-12-21 11:26:51.000000000 +0100 @@ -53,7 +53,9 @@ #include <xen/xen_proc.h> #include <xen/evtchn.h> #include <xen/features.h> +#ifdef MODULE #include <xen/hvm.h> +#endif #include "xenbus_comms.h" #include "xenbus_probe.h" Index: head-2007-12-11/drivers/xen/xenbus/xenbus_probe_backend.c ==================================================================--- head-2007-12-11.orig/drivers/xen/xenbus/xenbus_probe_backend.c 2007-12-11 11:17:36.000000000 +0100 +++ head-2007-12-11/drivers/xen/xenbus/xenbus_probe_backend.c 2007-12-21 11:23:53.000000000 +0100 @@ -52,7 +52,6 @@ #include <xen/xen_proc.h> #include <xen/evtchn.h> #include <xen/features.h> -#include <xen/hvm.h> #include "xenbus_comms.h" #include "xenbus_probe.h" Index: head-2007-12-11/include/asm-i386/mach-xen/asm/hypercall.h ==================================================================--- head-2007-12-11.orig/include/asm-i386/mach-xen/asm/hypercall.h 2007-12-21 11:21:58.000000000 +0100 +++ head-2007-12-11/include/asm-i386/mach-xen/asm/hypercall.h 2007-12-21 10:19:20.000000000 +0100 @@ -40,16 +40,13 @@ # error "please don''t include this file directly" #endif -#define __STR(x) #x -#define STR(x) __STR(x) - #ifdef CONFIG_XEN #define HYPERCALL_STR(name) \ - "call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)" + "call hypercall_page + ("__stringify(__HYPERVISOR_##name)" * 32)" #else #define HYPERCALL_STR(name) \ - "mov "__stringify(hypercall_stubs)",%%eax; " \ - "add $("STR(__HYPERVISOR_##name)" * 32),%%eax; " \ + "mov hypercall_stubs,%%eax; " \ + "add $("__stringify(__HYPERVISOR_##name)" * 32),%%eax; "\ "call *%%eax" #endif @@ -375,12 +372,14 @@ HYPERVISOR_nmi_op( return _hypercall2(int, nmi_op, op, arg); } +#ifndef CONFIG_XEN static inline unsigned long HYPERVISOR_hvm_op( int op, void *arg) { return _hypercall2(unsigned long, hvm_op, op, arg); } +#endif static inline int HYPERVISOR_callback_op( Index: head-2007-12-11/include/asm-x86_64/mach-xen/asm/hypercall.h ==================================================================--- head-2007-12-11.orig/include/asm-x86_64/mach-xen/asm/hypercall.h 2007-12-21 11:21:58.000000000 +0100 +++ head-2007-12-11/include/asm-x86_64/mach-xen/asm/hypercall.h 2007-12-21 10:19:16.000000000 +0100 @@ -44,16 +44,13 @@ # error "please don''t include this file directly" #endif -#define __STR(x) #x -#define STR(x) __STR(x) - #ifdef CONFIG_XEN #define HYPERCALL_STR(name) \ - "call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)" + "call hypercall_page + ("__stringify(__HYPERVISOR_##name)" * 32)" #else #define HYPERCALL_STR(name) \ - "mov "__stringify(hypercall_stubs)",%%rax; " \ - "add $("STR(__HYPERVISOR_##name)" * 32),%%rax; " \ + "mov $("__stringify(__HYPERVISOR_##name)" * 32),%%eax; "\ + "add hypercall_stubs(%%rip),%%rax; " \ "call *%%rax" #endif @@ -376,12 +373,14 @@ HYPERVISOR_nmi_op( return _hypercall2(int, nmi_op, op, arg); } +#ifndef CONFIG_XEN static inline unsigned long HYPERVISOR_hvm_op( int op, void *arg) { return _hypercall2(unsigned long, hvm_op, op, arg); } +#endif static inline int HYPERVISOR_callback_op( _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel