[XEN] Fix XENVER_capabilities hypercall.
authorIan Campbell <ian.campbell@xensource.com>
Wed, 31 Jan 2007 10:11:26 +0000 (10:11 +0000)
committerIan Campbell <ian.campbell@xensource.com>
Wed, 31 Jan 2007 10:11:26 +0000 (10:11 +0000)
Passing an array to a function turns it into a pointer which confuses
safe_strcat.

Also fix 54->64 typo in ia64 tree.

Thanks to Alex Williamson for pointing out the problem.

Signed-off-by: Ian Campbell <ian.campbell@xensource.com>
xen/arch/ia64/xen/xensetup.c
xen/arch/powerpc/setup.c
xen/arch/x86/setup.c
xen/common/kernel.c

index 2496683a5e3cc66cbe002b76f18d4f915ea53082..5e8ed8261ba213918934106ba30fb6550af5a4cc 100644 (file)
@@ -545,21 +545,21 @@ printk("num_online_cpus=%d, max_cpus=%d\n",num_online_cpus(),max_cpus);
     startup_cpu_idle_loop();
 }
 
-void arch_get_xen_caps(xen_capabilities_info_t info)
+void arch_get_xen_caps(xen_capabilities_info_t *info)
 {
     int major = xen_major_version();
     int minor = xen_minor_version();
     char s[32];
 
-    info[0] = '\0';
+    (*info)[0] = '\0';
 
-    snprintf(s, sizeof(s), "xen-%d.%d-ia54 ", major, minor);
-    safe_strcat(info, s);
+    snprintf(s, sizeof(s), "xen-%d.%d-ia64 ", major, minor);
+    safe_strcat(*info, s);
 
     if (vmx_enabled)
     {
         snprintf(s, sizeof(s), "hvm-%d.%d-ia64 ", major, minor);
-        safe_strcat(info, s);
+        safe_strcat(*info, s);
     }
 }
 
index 440acbbb1eb919156807834cffc037cb730d2c84..ad4ea33fe27e57563875857e93c15cb8eda8256a 100644 (file)
@@ -444,8 +444,8 @@ void __init __start_xen_ppc(
 
 }
 
-extern void arch_get_xen_caps(xen_capabilities_info_t info);
-void arch_get_xen_caps(xen_capabilities_info_t info)
+extern void arch_get_xen_caps(xen_capabilities_info_t *info);
+void arch_get_xen_caps(xen_capabilities_info_t *info)
 {
 }
 
index 9e67c009cab9c575d6eceedc3ab7256fa443ea46..0e010e272438a9b260f1bc4474afa8058e944688 100644 (file)
@@ -800,52 +800,52 @@ void __init __start_xen(multiboot_info_t *mbi)
     startup_cpu_idle_loop();
 }
 
-void arch_get_xen_caps(xen_capabilities_info_t info)
+void arch_get_xen_caps(xen_capabilities_info_t *info)
 {
     int major = xen_major_version();
     int minor = xen_minor_version();
     char s[32];
 
-    info[0] = '\0';
+    (*info)[0] = '\0';
 
 #if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE)
 
     snprintf(s, sizeof(s), "xen-%d.%d-x86_32 ", major, minor);
-    safe_strcat(info, s);
+    safe_strcat(*info, s);
     if ( hvm_enabled )
     {
         snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor);
-        safe_strcat(info, s);
+        safe_strcat(*info, s);
     }
 
 #elif defined(CONFIG_X86_32) && defined(CONFIG_X86_PAE)
 
     snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor);
-    safe_strcat(info, s);
+    safe_strcat(*info, s);
     if ( hvm_enabled )
     {
         snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor);
-        safe_strcat(info, s);
+        safe_strcat(*info, s);
         snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor);
-        safe_strcat(info, s);
+        safe_strcat(*info, s);
     }
 
 #elif defined(CONFIG_X86_64)
 
     snprintf(s, sizeof(s), "xen-%d.%d-x86_64 ", major, minor);
-    safe_strcat(info, s);
+    safe_strcat(*info, s);
 #ifdef CONFIG_COMPAT
     snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor);
-    safe_strcat(info, s);
+    safe_strcat(*info, s);
 #endif
     if ( hvm_enabled )
     {
         snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor);
-        safe_strcat(info, s);
+        safe_strcat(*info, s);
         snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor);
-        safe_strcat(info, s);
+        safe_strcat(*info, s);
         snprintf(s, sizeof(s), "hvm-%d.%d-x86_64 ", major, minor);
-        safe_strcat(info, s);
+        safe_strcat(*info, s);
     }
 
 #endif
index 4c22cf8803ef152bbd7b99a75e8fa1a58e1cd4a9..fa448b07a3a524ba9add1775b70c8157c50f8624 100644 (file)
@@ -162,10 +162,10 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE(void) arg)
     case XENVER_capabilities:
     {
         xen_capabilities_info_t info;
-        extern void arch_get_xen_caps(xen_capabilities_info_t info);
+        extern void arch_get_xen_caps(xen_capabilities_info_t *info);
 
         memset(info, 0, sizeof(info));
-        arch_get_xen_caps(info);
+        arch_get_xen_caps(&info);
 
         if ( copy_to_guest(arg, (char *)info, sizeof(info)) )
             return -EFAULT;