[PATCH] efi: Fix free_end build warning
Will Deacon
will.deacon at arm.com
Thu Nov 13 03:44:20 PST 2014
Hi Geoff,
On Wed, Nov 12, 2014 at 08:27:30PM +0000, Geoff Levand wrote:
> Initialize the free_end variable to zero. Fixes build warnings
> like these:
>
> arch/arm64/kernel/efi.c: warning: ‘free_end’ may be used uninitialized in this function
>
> Signed-off-by: Geoff Levand <geoff at infradead.org>
> ---
> Got this with the latest arm64/for-next/core branch. Please consider.
>
> -Geoff
>
> arch/arm64/kernel/efi.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
> index 4f39a18..83fc53c 100644
> --- a/arch/arm64/kernel/efi.c
> +++ b/arch/arm64/kernel/efi.c
> @@ -239,6 +239,7 @@ static void __init free_boot_services(void)
> * want to keep for UEFI.
> */
>
> + free_end = 0;
> keep_end = 0;
> free_start = 0;
Do you have any idea how GCC arrives at this conclusion? I can't see a
path through that function where we use free_end without initialising it.
Does something like the patch below help?
Will
--->8
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
index 95c49ebc660d..4c577b538d1c 100644
--- a/arch/arm64/kernel/efi.c
+++ b/arch/arm64/kernel/efi.c
@@ -271,17 +271,16 @@ static void __init free_boot_services(void)
size = npages << PAGE_SHIFT;
if (free_start) {
- if (paddr <= free_end)
- free_end = paddr + size;
- else {
+ if (paddr > free_end) {
total_freed += free_region(free_start, free_end);
free_start = paddr;
- free_end = paddr + size;
}
} else {
free_start = paddr;
- free_end = paddr + size;
}
+
+ free_end = paddr + size;
+
if (free_start < keep_end) {
free_start += PAGE_SIZE;
if (free_start >= free_end)
More information about the linux-arm-kernel
mailing list