[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 Fri, Jul 11, 2014 at 04:03:46PM -0400, Boris Ostrovsky wrote:
> 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.

Well, I thought about that a bit and I prefer function like Konrad.
Could you agree with him which solution do you (as maintainers) prefer?

Daniel

_______________________________________________
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®.