Re: [RFC PATCH 17/18] ARM: LPAE: define printk format for physicaladdresses and page table entries

From: Kirill A. Shutemov
Date: Mon Oct 25 2010 - 08:01:37 EST


On Mon, Oct 25, 2010 at 10:01:10AM +0100, Catalin Marinas wrote:
> From: Will Deacon <will.deacon@xxxxxxx>
>
> Now that the Kernel supports 2 level and 3 level page tables, physical
> addresses (and also page table entries) may be 32 or 64-bits depending
> upon the configuration.
>
> This patch adds a conversion specifier (PHYS_ADDR_FMT) which represents
> a u32 or u64 depending on the width of a physical address.
>
> Signed-off-by: Will Deacon <will.deacon@xxxxxxx>
> Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxx>
> ---
> arch/arm/include/asm/types.h | 6 ++++++
> arch/arm/kernel/setup.c | 2 +-
> arch/arm/mm/fault.c | 8 ++++----
> arch/arm/mm/mmu.c | 18 +++++++++---------
> 4 files changed, 20 insertions(+), 14 deletions(-)
>
> diff --git a/arch/arm/include/asm/types.h b/arch/arm/include/asm/types.h
> index 039dd8f..88190c0 100644
> --- a/arch/arm/include/asm/types.h
> +++ b/arch/arm/include/asm/types.h
> @@ -6,6 +6,12 @@
> #ifdef __KERNEL__
> #define BITS_PER_LONG 32
>
> +#ifdef CONFIG_PHYS_ADDR_T_64BIT
> +#define PHYS_ADDR_FMT "%016Lx"

I think, better to use ANSI C compatible 'll' instead of 'L'.

> +#else
> +#define PHYS_ADDR_FMT "%08x"
> +#endif
> +
> #ifndef __ASSEMBLY__
> typedef dma_addr_t dma64_addr_t;
> #endif /* __ASSEMBLY__ */
> diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
> index a6a37d5..80ff616 100644
> --- a/arch/arm/kernel/setup.c
> +++ b/arch/arm/kernel/setup.c
> @@ -413,7 +413,7 @@ static int __init arm_add_memory(phys_addr_t start, unsigned long size)
>
> if (meminfo.nr_banks >= NR_BANKS) {
> printk(KERN_CRIT "NR_BANKS too low, "
> - "ignoring memory at %#lx\n", start);
> + "ignoring memory at " PHYS_ADDR_FMT "\n", start);
> return -EINVAL;
> }
>
> diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
> index b662aea..df33362 100644
> --- a/arch/arm/mm/fault.c
> +++ b/arch/arm/mm/fault.c
> @@ -81,7 +81,7 @@ void show_pte(struct mm_struct *mm, unsigned long addr)
>
> printk(KERN_ALERT "pgd = %p\n", mm->pgd);
> pgd = pgd_offset(mm, addr);
> - printk(KERN_ALERT "[%08lx] *pgd=%08lx", addr, pgd_val(*pgd));
> + printk(KERN_ALERT "[%08lx] *pgd=" PHYS_ADDR_FMT, addr, pgd_val(*pgd));
>
> do {
> pmd_t *pmd;
> @@ -97,7 +97,7 @@ void show_pte(struct mm_struct *mm, unsigned long addr)
>
> pmd = pmd_offset(pgd, addr);
> if (PTRS_PER_PMD != 1)
> - printk(", *pmd=%08lx", pmd_val(*pmd));
> + printk(", *pmd=" PHYS_ADDR_FMT, pmd_val(*pmd));
>
> if (pmd_none(*pmd))
> break;
> @@ -112,9 +112,9 @@ void show_pte(struct mm_struct *mm, unsigned long addr)
> break;
>
> pte = pte_offset_map(pmd, addr);
> - printk(", *pte=%08lx", pte_val(*pte));
> + printk(", *pte=" PHYS_ADDR_FMT, pte_val(*pte));
> #ifndef CONFIG_ARM_LPAE
> - printk(", *ppte=%08lx", pte_val(pte[-LINUX_PTE_OFFSET]));
> + printk(", *ppte=" PHYS_ADDR_FMT, pte_val(pte[-LINUX_PTE_OFFSET]));
> #endif
> pte_unmap(pte);
> } while(0);
> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
> index f8f8e06..87460bb 100644
> --- a/arch/arm/mm/mmu.c
> +++ b/arch/arm/mm/mmu.c
> @@ -622,7 +622,7 @@ static void __init create_36bit_mapping(struct map_desc *md,
>
> if (!(cpu_architecture() >= CPU_ARCH_ARMv6 || cpu_is_xsc3())) {
> printk(KERN_ERR "MM: CPU does not support supersection "
> - "mapping for 0x%08llx at 0x%08lx\n",
> + "mapping for 0x" PHYS_ADDR_FMT " at 0x%08lx\n",
> __pfn_to_phys((u64)md->pfn), addr);
> return;
> }
> @@ -635,14 +635,14 @@ static void __init create_36bit_mapping(struct map_desc *md,
> */
> if (type->domain) {
> printk(KERN_ERR "MM: invalid domain in supersection "
> - "mapping for 0x%08llx at 0x%08lx\n",
> + "mapping for 0x" PHYS_ADDR_FMT " at 0x%08lx\n",
> __pfn_to_phys((u64)md->pfn), addr);
> return;
> }
>
> if ((addr | length | __pfn_to_phys(md->pfn)) & ~SUPERSECTION_MASK) {
> - printk(KERN_ERR "MM: cannot create mapping for "
> - "0x%08llx at 0x%08lx invalid alignment\n",
> + printk(KERN_ERR "MM: cannot create mapping for 0x" PHYS_ADDR_FMT
> + " at 0x%08lx invalid alignment\n",
> __pfn_to_phys((u64)md->pfn), addr);
> return;
> }
> @@ -684,16 +684,16 @@ static void __init create_mapping(struct map_desc *md)
> pgd_t *pgd;
>
> if (md->virtual != vectors_base() && md->virtual < TASK_SIZE) {
> - printk(KERN_WARNING "BUG: not creating mapping for "
> - "0x%08llx at 0x%08lx in user region\n",
> + printk(KERN_WARNING "BUG: not creating mapping for 0x"
> + PHYS_ADDR_FMT " at 0x%08lx in user region\n",
> __pfn_to_phys((u64)md->pfn), md->virtual);
> return;
> }
>
> if ((md->type == MT_DEVICE || md->type == MT_ROM) &&
> md->virtual >= PAGE_OFFSET && md->virtual < VMALLOC_END) {
> - printk(KERN_WARNING "BUG: mapping for 0x%08llx at 0x%08lx "
> - "overlaps vmalloc space\n",
> + printk(KERN_WARNING "BUG: mapping for 0x" PHYS_ADDR_FMT
> + " at 0x%08lx overlaps vmalloc space\n",
> __pfn_to_phys((u64)md->pfn), md->virtual);
> }
>
> @@ -714,7 +714,7 @@ static void __init create_mapping(struct map_desc *md)
> length = PAGE_ALIGN(md->length + (md->virtual & ~PAGE_MASK));
>
> if (type->prot_l1 == 0 && ((addr | phys | length) & ~SECTION_MASK)) {
> - printk(KERN_WARNING "BUG: map for 0x%08lx at 0x%08lx can not "
> + printk(KERN_WARNING "BUG: map for 0x" PHYS_ADDR_FMT " at 0x%08lx can not "
> "be mapped using pages, ignoring.\n",
> __pfn_to_phys(md->pfn), addr);
> return;
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

--
Kirill A. Shutemov
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/