Re: [PATCH v2 3/4] x86/efi: print size and base in binary units in efi_print_memmap

From: Andrew Morton
Date: Thu Jan 21 2016 - 17:36:08 EST


On Thu, 21 Jan 2016 17:22:31 +0200 Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:

> From: Robert Elliott <elliott@xxxxxxx>
>
> Print the base in the best-fit B, KiB, MiB, etc. units rather than
> always MiB. This avoids rounding, which can be misleading.
>
> Use proper IEC binary units (KiB, MiB, etc.) rather than misuse SI
> decimal units (KB, MB, etc.).
>
> old:
> efi: mem61: [Persistent Memory | | | | | | | |WB|WT|WC|UC] range=[0x0000000880000000-0x0000000c7fffffff) (16384MB)
>
> new:
> efi: mem61: [Persistent Memory | | | | | | | |WB|WT|WC|UC] range=[0x0000000880000000-0x0000000c7fffffff] (16 GiB)

hm,

> @@ -225,21 +235,20 @@ int __init efi_memblock_x86_reserve_range(void)
> void __init efi_print_memmap(void)
> {
> #ifdef EFI_DEBUG
> - efi_memory_desc_t *md;
> void *p;
> int i;
>
> for (p = memmap.map, i = 0;
> p < memmap.map_end;
> p += memmap.desc_size, i++) {
> - char buf[64];
> + efi_memory_desc_t *md = p;
> + u64 size = md->num_pages << EFI_PAGE_SHIFT;
> + char buf[64], buf3[32];
>
> - md = p;
> - pr_info("mem%02u: %s range=[0x%016llx-0x%016llx] (%lluMB)\n",
> + pr_info("mem%02u: %s range=[0x%016llx-0x%016llx] (%s)\n",
> i, efi_md_typeattr_format(buf, sizeof(buf), md),
> - md->phys_addr,
> - md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1,

Where did this " - 1" come from? I can't find a tree which has this.

> - (md->num_pages >> (20 - EFI_PAGE_SHIFT)));
> + md->phys_addr, md->phys_addr + size - 1,

So I did s/ - 1// here, but worried.

> + efi_size_format(buf3, sizeof(buf3), size));
> }
> #endif /* EFI_DEBUG */
> }