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

Re: [Xen-devel] [PATCH 2/2] arch/x86/xen: Silence compiler warnings



On 07/11/2014 03:54 PM, Daniel Kiper wrote:
Compiler complains in the following way when x86 32-bit kernel
with Xen support is build:

   CC      arch/x86/xen/enlighten.o
arch/x86/xen/enlighten.c: In function âxen_start_kernelâ:
arch/x86/xen/enlighten.c:1726:3: warning: right shift count >= width of type 
[enabled by default]

Such line contains following EFI initialization code:

boot_params.efi_info.efi_systab_hi = (__u32)(__pa(efi_systab_xen) >> 32);

There is no issue if x86 64-bit kernel is build. However, 32-bit case
generate warning (even if that code will not be executed because Xen
does not work on 32-bit EFI platforms) due to __pa() returning unsigned long
type which has 32-bits width. So move whole EFI initialization stuff
to separate function and build its body conditionally to avoid above
mentioned warning on x86 32-bit architecture.

Signed-off-by: Daniel Kiper <daniel.kiper@xxxxxxxxxx>
---
  arch/x86/xen/enlighten.c |   35 ++++++++++++++++++++++-------------
  1 file changed, 22 insertions(+), 13 deletions(-)

diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index bc89647..6abec74 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1516,12 +1516,32 @@ static void __init xen_pvh_early_guest_init(void)
  #endif
  }
+static void __init xen_efi_init(void)
+{
+#ifdef CONFIG_XEN_EFI
+       efi_system_table_t *efi_systab_xen;
+
+       efi_systab_xen = xen_efi_probe();
+
+       if (efi_systab_xen == NULL)
+               return;
+
+       strncpy((char *)&boot_params.efi_info.efi_loader_signature, "Xen",
+                       sizeof(boot_params.efi_info.efi_loader_signature));
+       boot_params.efi_info.efi_systab = (__u32)__pa(efi_systab_xen);
+       boot_params.efi_info.efi_systab_hi = (__u32)(__pa(efi_systab_xen) >> 
32);
+
+       set_bit(EFI_BOOT, &efi.flags);
+       set_bit(EFI_PARAVIRT, &efi.flags);
+       set_bit(EFI_64BIT, &efi.flags);
+#endif
+}
+
  /* First C function to be called on Xen boot */
  asmlinkage __visible void __init xen_start_kernel(void)
  {
        struct physdev_set_iopl set_iopl;
        int rc;
-       efi_system_table_t *efi_systab_xen;
if (!xen_start_info)
                return;
@@ -1717,18 +1737,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
xen_setup_runstate_info(0); - efi_systab_xen = xen_efi_probe();
-
-       if (efi_systab_xen) {
-               strncpy((char *)&boot_params.efi_info.efi_loader_signature, 
"Xen",
-                               
sizeof(boot_params.efi_info.efi_loader_signature));
-               boot_params.efi_info.efi_systab = (__u32)__pa(efi_systab_xen);
-               boot_params.efi_info.efi_systab_hi = (__u32)(__pa(efi_systab_xen) 
>> 32);
-
-               set_bit(EFI_BOOT, &efi.flags);
-               set_bit(EFI_PARAVIRT, &efi.flags);
-               set_bit(EFI_64BIT, &efi.flags);
-       }
+       xen_efi_init();

I'd put ifdef CONFIG_XEN_EFI around the call instead of having it inside the routine.

-boris

/* Start the world */
  #ifdef CONFIG_X86_32


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

 


Rackspace

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