[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] xen/common: Drop function calls for Xen compile/version information



The chageset/version/compile information is currently exported as a set of
function calls into a separate translation unit, which is inefficient for all
callers.

Replace the function calls with externs pointing appropriately into .rodata,
which allows all users to generate code referencing the data directly.

No functional change, but causes smaller and more efficient compiled code.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
CC: Julien Grall <julien.grall@xxxxxxx>

Restricted to $ARCH maintainers as this is a tree-wide change with no
behavioural change.
---
 xen/arch/arm/traps.c        |  2 +-
 xen/arch/x86/hvm/viridian.c |  2 +-
 xen/arch/x86/traps.c        |  2 +-
 xen/arch/x86/x86_64/traps.c |  2 +-
 xen/common/hvm/save.c       |  2 +-
 xen/common/kernel.c         | 18 ++++++------
 xen/common/kexec.c          | 14 ++++-----
 xen/common/version.c        | 72 ++++++++-------------------------------------
 xen/drivers/char/console.c  | 10 +++----
 xen/include/xen/version.h   | 25 ++++++++--------
 10 files changed, 52 insertions(+), 97 deletions(-)

diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index 35d8e8b..5730452 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -144,7 +144,7 @@ static void print_xen_info(void)
     char taint_str[TAINT_STRING_MAX_LEN];
 
     printk("----[ Xen-%d.%d%s  %s  debug=%c " gcov_string "  %s ]----\n",
-           xen_major_version(), xen_minor_version(), xen_extra_version(),
+           xen_major_version, xen_minor_version, xen_extra_version,
 #ifdef CONFIG_ARM_32
            "arm32",
 #else
diff --git a/xen/arch/x86/hvm/viridian.c b/xen/arch/x86/hvm/viridian.c
index 37c8f68..aebf6c1 100644
--- a/xen/arch/x86/hvm/viridian.c
+++ b/xen/arch/x86/hvm/viridian.c
@@ -95,7 +95,7 @@ void cpuid_viridian_leaves(const struct vcpu *v, uint32_t 
leaf,
         if ( d->arch.hvm_domain.viridian.guest_os_id.raw == 0 )
             break;
         res->a = 1; /* Build number */
-        res->b = (xen_major_version() << 16) | xen_minor_version();
+        res->b = (xen_major_version << 16) | xen_minor_version;
         res->c = 0; /* SP */
         res->d = 0; /* Service branch and number */
         break;
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index 4f29c3a..5dfd31a 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -931,7 +931,7 @@ void cpuid_hypervisor_leaves(const struct vcpu *v, uint32_t 
leaf,
         break;
 
     case 1:
-        res->a = (xen_major_version() << 16) | xen_minor_version();
+        res->a = (xen_major_version << 16) | xen_minor_version;
         break;
 
     case 2:
diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c
index fc8cde6..b82872f 100644
--- a/xen/arch/x86/x86_64/traps.c
+++ b/xen/arch/x86/x86_64/traps.c
@@ -32,7 +32,7 @@ static void print_xen_info(void)
     char taint_str[TAINT_STRING_MAX_LEN];
 
     printk("----[ Xen-%d.%d%s  x86_64  debug=%c " gcov_string "  %s ]----\n",
-           xen_major_version(), xen_minor_version(), xen_extra_version(),
+           xen_major_version, xen_minor_version, xen_extra_version,
            debug_build() ? 'y' : 'n', print_tainted(taint_str));
 }
 
diff --git a/xen/common/hvm/save.c b/xen/common/hvm/save.c
index dd2c547..245e852 100644
--- a/xen/common/hvm/save.c
+++ b/xen/common/hvm/save.c
@@ -152,7 +152,7 @@ int hvm_save(struct domain *d, hvm_domain_context_t *h)
     hdr.version = HVM_FILE_VERSION;
 
     /* Save xen changeset */
-    c = strrchr(xen_changeset(), ':');
+    c = strrchr(xen_changeset, ':');
     if ( c )
         hdr.changeset = simple_strtoll(c, NULL, 16);
     else 
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index d0edb13..8008e40 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -233,14 +233,14 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
     switch ( cmd )
     {
     case XENVER_version:
-        return (xen_major_version() << 16) | xen_minor_version();
+        return (xen_major_version << 16) | xen_minor_version;
 
     case XENVER_extraversion:
     {
         xen_extraversion_t extraversion;
 
         memset(extraversion, 0, sizeof(extraversion));
-        safe_strcpy(extraversion, deny ? xen_deny() : xen_extra_version());
+        safe_strcpy(extraversion, deny ? xen_deny : xen_extra_version);
         if ( copy_to_guest(arg, extraversion, ARRAY_SIZE(extraversion)) )
             return -EFAULT;
         return 0;
@@ -251,10 +251,10 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         xen_compile_info_t info;
 
         memset(&info, 0, sizeof(info));
-        safe_strcpy(info.compiler,       deny ? xen_deny() : xen_compiler());
-        safe_strcpy(info.compile_by,     deny ? xen_deny() : xen_compile_by());
-        safe_strcpy(info.compile_domain, deny ? xen_deny() : 
xen_compile_domain());
-        safe_strcpy(info.compile_date,   deny ? xen_deny() : 
xen_compile_date());
+        safe_strcpy(info.compiler,       deny ? xen_deny : xen_compiler);
+        safe_strcpy(info.compile_by,     deny ? xen_deny : xen_compile_by);
+        safe_strcpy(info.compile_domain, deny ? xen_deny : xen_compile_domain);
+        safe_strcpy(info.compile_date,   deny ? xen_deny : xen_compile_date);
         if ( copy_to_guest(arg, &info, 1) )
             return -EFAULT;
         return 0;
@@ -290,7 +290,7 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         xen_changeset_info_t chgset;
 
         memset(chgset, 0, sizeof(chgset));
-        safe_strcpy(chgset, deny ? xen_deny() : xen_changeset());
+        safe_strcpy(chgset, deny ? xen_deny : xen_changeset);
         if ( copy_to_guest(arg, chgset, ARRAY_SIZE(chgset)) )
             return -EFAULT;
         return 0;
@@ -371,9 +371,9 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         size_t len = ARRAY_SIZE(saved_cmdline);
 
         if ( deny )
-            len = strlen(xen_deny()) + 1;
+            len = strlen(xen_deny) + 1;
 
-        if ( copy_to_guest(arg, deny ? xen_deny() : saved_cmdline, len) )
+        if ( copy_to_guest(arg, deny ? xen_deny : saved_cmdline, len) )
             return -EFAULT;
         return 0;
     }
diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index c83d48f..8d9ef79 100644
--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -311,13 +311,13 @@ crash_xen_info_t *kexec_crash_save_info(void)
     BUG_ON(!cpumask_test_and_set_cpu(cpu, &crash_saved_cpus));
 
     memset(&info, 0, sizeof(info));
-    info.xen_major_version = xen_major_version();
-    info.xen_minor_version = xen_minor_version();
-    info.xen_extra_version = __pa(xen_extra_version());
-    info.xen_changeset = __pa(xen_changeset());
-    info.xen_compiler = __pa(xen_compiler());
-    info.xen_compile_date = __pa(xen_compile_date());
-    info.xen_compile_time = __pa(xen_compile_time());
+    info.xen_major_version = xen_major_version;
+    info.xen_minor_version = xen_minor_version;
+    info.xen_extra_version = __pa(xen_extra_version);
+    info.xen_changeset = __pa(xen_changeset);
+    info.xen_compiler = __pa(xen_compiler);
+    info.xen_compile_date = __pa(xen_compile_date);
+    info.xen_compile_time = __pa(xen_compile_time);
     info.tainted = tainted;
 
     /* Copy from guaranteed-aligned local copy to possibly-unaligned dest. */
diff --git a/xen/common/version.c b/xen/common/version.c
index 223cb52..65b74c1 100644
--- a/xen/common/version.c
+++ b/xen/common/version.c
@@ -10,65 +10,19 @@
 
 #include <asm/cache.h>
 
-const char *xen_compile_date(void)
-{
-    return XEN_COMPILE_DATE;
-}
-
-const char *xen_compile_time(void)
-{
-    return XEN_COMPILE_TIME;
-}
-
-const char *xen_compile_by(void)
-{
-    return XEN_COMPILE_BY;
-}
-
-const char *xen_compile_domain(void)
-{
-    return XEN_COMPILE_DOMAIN;
-}
-
-const char *xen_compile_host(void)
-{
-    return XEN_COMPILE_HOST;
-}
-
-const char *xen_compiler(void)
-{
-    return XEN_COMPILER;
-}
-
-unsigned int xen_major_version(void)
-{
-    return XEN_VERSION;
-}
-
-unsigned int xen_minor_version(void)
-{
-    return XEN_SUBVERSION;
-}
-
-const char *xen_extra_version(void)
-{
-    return XEN_EXTRAVERSION;
-}
-
-const char *xen_changeset(void)
-{
-    return XEN_CHANGESET;
-}
-
-const char *xen_banner(void)
-{
-    return XEN_BANNER;
-}
-
-const char *xen_deny(void)
-{
-    return "<denied>";
-}
+const unsigned int xen_major_version = XEN_VERSION;
+const unsigned int xen_minor_version = XEN_SUBVERSION;
+
+const char xen_compile_date[] = XEN_COMPILE_DATE;
+const char xen_compile_time[] = XEN_COMPILE_TIME;
+const char xen_compile_by[] = XEN_COMPILE_BY;
+const char xen_compile_domain[] = XEN_COMPILE_DOMAIN;
+const char xen_compile_host[] = XEN_COMPILE_HOST;
+const char xen_compiler[] = XEN_COMPILER;
+const char xen_extra_version[] = XEN_EXTRAVERSION;
+const char xen_changeset[] = XEN_CHANGESET;
+const char xen_banner[] = XEN_BANNER;
+const char xen_deny[] = "<denied>";
 
 static const void *build_id_p __read_mostly;
 static unsigned int build_id_len __read_mostly;
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index eb21e7c..7324595 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -777,13 +777,13 @@ void __init console_init_preirq(void)
 
     /* HELLO WORLD --- start-of-day banner text. */
     spin_lock(&console_lock);
-    __putstr(xen_banner());
+    __putstr(xen_banner);
     spin_unlock(&console_lock);
     printk("Xen version %d.%d%s (%s@%s) (%s) debug=%c " gcov_string " %s\n",
-           xen_major_version(), xen_minor_version(), xen_extra_version(),
-           xen_compile_by(), xen_compile_domain(),
-           xen_compiler(), debug_build() ? 'y' : 'n', xen_compile_date());
-    printk("Latest ChangeSet: %s\n", xen_changeset());
+           xen_major_version, xen_minor_version, xen_extra_version,
+           xen_compile_by, xen_compile_domain,
+           xen_compiler, debug_build() ? 'y' : 'n', xen_compile_date);
+    printk("Latest ChangeSet: %s\n", xen_changeset);
 
     if ( opt_sync_console )
     {
diff --git a/xen/include/xen/version.h b/xen/include/xen/version.h
index 97c247a..dba3803 100644
--- a/xen/include/xen/version.h
+++ b/xen/include/xen/version.h
@@ -4,18 +4,19 @@
 #include <xen/types.h>
 #include <xen/elfstructs.h>
 
-const char *xen_compile_date(void);
-const char *xen_compile_time(void);
-const char *xen_compile_by(void);
-const char *xen_compile_domain(void);
-const char *xen_compile_host(void);
-const char *xen_compiler(void);
-unsigned int xen_major_version(void);
-unsigned int xen_minor_version(void);
-const char *xen_extra_version(void);
-const char *xen_changeset(void);
-const char *xen_banner(void);
-const char *xen_deny(void);
+extern const unsigned int xen_major_version, xen_minor_version;
+
+extern const char xen_compile_date[];
+extern const char xen_compile_time[];
+extern const char xen_compile_by[];
+extern const char xen_compile_domain[];
+extern const char xen_compile_host[];
+extern const char xen_compiler[];
+extern const char xen_extra_version[];
+extern const char xen_changeset[];
+extern const char xen_banner[];
+extern const char xen_deny[];
+
 int xen_build_id(const void **p, unsigned int *len);
 
 #ifdef BUILD_ID
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.