All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christophe Leroy <christophe.leroy@c-s.fr>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
Cc: "linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH v1 3/4] powerpc: Add support for GENERIC_EARLY_IOREMAP
Date: Thu, 12 Sep 2019 18:01:31 +0200	[thread overview]
Message-ID: <d2ca0ea6-b4c7-58aa-ffed-74730ab1f492@c-s.fr> (raw)
In-Reply-To: <874l1hsed6.fsf@linux.ibm.com>



Le 12/09/2019 à 17:50, Aneesh Kumar K.V a écrit :
> Christophe Leroy <christophe.leroy@c-s.fr> writes:
> 
>> Le 12/09/2019 à 17:37, Aneesh Kumar K.V a écrit :
>>> Christophe Leroy <christophe.leroy@c-s.fr> writes:
>>>
>>>> Add support for GENERIC_EARLY_IOREMAP.
>>>>
>>>> Let's define 16 slots of 256Kbytes each for early ioremap.
>>>>
>>>> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
>>>> ---
>>>>    arch/powerpc/Kconfig              |  1 +
>>>>    arch/powerpc/include/asm/Kbuild   |  1 +
>>>>    arch/powerpc/include/asm/fixmap.h | 12 ++++++++++++
>>>>    arch/powerpc/kernel/setup_32.c    |  3 +++
>>>>    arch/powerpc/kernel/setup_64.c    |  3 +++
>>>>    5 files changed, 20 insertions(+)
>>>>
>>>> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
>>>> index 6a7c797fa9d2..8fe252962518 100644
>>>> --- a/arch/powerpc/Kconfig
>>>> +++ b/arch/powerpc/Kconfig
>>>> @@ -161,6 +161,7 @@ config PPC
>>>>    	select GENERIC_CMOS_UPDATE
>>>>    	select GENERIC_CPU_AUTOPROBE
>>>>    	select GENERIC_CPU_VULNERABILITIES	if PPC_BARRIER_NOSPEC
>>>> +	select GENERIC_EARLY_IOREMAP
>>>>    	select GENERIC_IRQ_SHOW
>>>>    	select GENERIC_IRQ_SHOW_LEVEL
>>>>    	select GENERIC_PCI_IOMAP		if PCI
>>>> diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild
>>>> index 9a1d2fc6ceb7..30829120659c 100644
>>>> --- a/arch/powerpc/include/asm/Kbuild
>>>> +++ b/arch/powerpc/include/asm/Kbuild
>>>> @@ -12,3 +12,4 @@ generic-y += preempt.h
>>>>    generic-y += vtime.h
>>>>    generic-y += msi.h
>>>>    generic-y += simd.h
>>>> +generic-y += early_ioremap.h
>>>> diff --git a/arch/powerpc/include/asm/fixmap.h b/arch/powerpc/include/asm/fixmap.h
>>>> index 722289a1d000..d5c4d357bd33 100644
>>>> --- a/arch/powerpc/include/asm/fixmap.h
>>>> +++ b/arch/powerpc/include/asm/fixmap.h
>>>> @@ -15,6 +15,7 @@
>>>>    #define _ASM_FIXMAP_H
>>>>    
>>>>    #ifndef __ASSEMBLY__
>>>> +#include <linux/sizes.h>
>>>>    #include <asm/page.h>
>>>>    #include <asm/pgtable.h>
>>>>    #ifdef CONFIG_HIGHMEM
>>>> @@ -64,6 +65,14 @@ enum fixed_addresses {
>>>>    		       FIX_IMMR_SIZE,
>>>>    #endif
>>>>    	/* FIX_PCIE_MCFG, */
>>>> +	__end_of_permanent_fixed_addresses,
>>>> +
>>>> +#define NR_FIX_BTMAPS		(SZ_256K / PAGE_SIZE)
>>>> +#define FIX_BTMAPS_SLOTS	16
>>>> +#define TOTAL_FIX_BTMAPS	(NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS)
>>>> +
>>>> +	FIX_BTMAP_END = __end_of_permanent_fixed_addresses,
>>>> +	FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1,
>>>>    	__end_of_fixed_addresses
>>>>    };
>>>>    
>>>> @@ -71,6 +80,7 @@ enum fixed_addresses {
>>>>    #define FIXADDR_START		(FIXADDR_TOP - __FIXADDR_SIZE)
>>>>    
>>>>    #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_NCG
>>>> +#define FIXMAP_PAGE_IO	PAGE_KERNEL_NCG
>>>>    
>>>>    #include <asm-generic/fixmap.h>
>>>>    
>>>> @@ -85,5 +95,7 @@ static inline void __set_fixmap(enum fixed_addresses idx,
>>>>    	map_kernel_page(__fix_to_virt(idx), phys, flags);
>>>>    }
>>>>    
>>>> +#define __early_set_fixmap	__set_fixmap
>>>> +
>>>>    #endif /* !__ASSEMBLY__ */
>>>>    #endif
>>>> diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
>>>> index a7541edf0cdb..dcffe927f5b9 100644
>>>> --- a/arch/powerpc/kernel/setup_32.c
>>>> +++ b/arch/powerpc/kernel/setup_32.c
>>>> @@ -44,6 +44,7 @@
>>>>    #include <asm/asm-prototypes.h>
>>>>    #include <asm/kdump.h>
>>>>    #include <asm/feature-fixups.h>
>>>> +#include <asm/early_ioremap.h>
>>>>    
>>>>    #include "setup.h"
>>>>    
>>>> @@ -80,6 +81,8 @@ notrace void __init machine_init(u64 dt_ptr)
>>>>    	/* Configure static keys first, now that we're relocated. */
>>>>    	setup_feature_keys();
>>>>    
>>>> +	early_ioremap_setup();
>>>> +
>>>>    	/* Enable early debugging if any specified (see udbg.h) */
>>>>    	udbg_early_init();
>>>>    
>>>> diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
>>>> index 44b4c432a273..b85f6a1cc3a1 100644
>>>> --- a/arch/powerpc/kernel/setup_64.c
>>>> +++ b/arch/powerpc/kernel/setup_64.c
>>>> @@ -65,6 +65,7 @@
>>>>    #include <asm/hw_irq.h>
>>>>    #include <asm/feature-fixups.h>
>>>>    #include <asm/kup.h>
>>>> +#include <asm/early_ioremap.h>
>>>>    
>>>>    #include "setup.h"
>>>>    
>>>> @@ -338,6 +339,8 @@ void __init early_setup(unsigned long dt_ptr)
>>>>    	apply_feature_fixups();
>>>>    	setup_feature_keys();
>>>>    
>>>> +	early_ioremap_setup();
>>>> +
>>>>    	/* Initialize the hash table or TLB handling */
>>>>    	early_init_mmu();
>>>>    
>>>
>>> Can we remove early_ioremap_range() after this?
>>>
>>
>> Yes, once all early callers of ioremap functions are converted to using
>> early_ioremap()
> 
> Why can't we switch the early callers to early_ioremap and print a
> warning?
> 
> ie,
> if (!slab_available()) {
>     pr_warn("switch to early_ioremap");
>     early_ioremap();
> }
> 

Because:
- early_iounmap() requires the size of the area to be freed unlike iounmap()
- early_ioremap() is for ephemeral mappings. All early mapping must be 
gone at the end of init (this is verified by 
late_initcall(check_early_ioremap_leak))

Second point means another approach has to be taken for installing early 
permanent mapping, for instance by using fixmaps.

Christophe

  parent reply	other threads:[~2019-09-12 16:03 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-12 13:49 [PATCH v1 0/4] powerpc: Add support for GENERIC_EARLY_IOREMAP Christophe Leroy
2019-09-12 13:49 ` Christophe Leroy
2019-09-12 13:49 ` [PATCH v1 1/4] powerpc/fixmap: don't clear fixmap area in paging_init() Christophe Leroy
2019-09-12 13:49   ` Christophe Leroy
2019-11-26  1:13   ` Michael Ellerman
2019-11-27 14:43     ` Christophe Leroy
2019-11-28  8:06       ` Christophe Leroy
2019-09-12 13:49 ` [PATCH v1 2/4] powerpc/fixmap: Use __fix_to_virt() instead of fix_to_virt() Christophe Leroy
2019-09-12 13:49   ` Christophe Leroy
2019-11-25 10:47   ` Michael Ellerman
2019-09-12 13:49 ` [PATCH v1 3/4] powerpc: Add support for GENERIC_EARLY_IOREMAP Christophe Leroy
2019-09-12 13:49   ` Christophe Leroy
2019-09-12 15:37   ` Aneesh Kumar K.V
2019-09-12 15:43     ` Christophe Leroy
     [not found]       ` <874l1hsed6.fsf@linux.ibm.com>
2019-09-12 16:01         ` Christophe Leroy [this message]
2019-11-25 10:47   ` Michael Ellerman
2019-09-12 13:49 ` [PATCH v1 4/4] powerpc/ioremap: warn on early use of ioremap() Christophe Leroy
2019-09-12 13:49   ` Christophe Leroy
2019-11-25 10:47   ` Michael Ellerman
2019-09-18 13:40 ` [PATCH v1 0/4] powerpc: Add support for GENERIC_EARLY_IOREMAP Christoph Hellwig
2019-09-18 13:40   ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d2ca0ea6-b4c7-58aa-ffed-74730ab1f492@c-s.fr \
    --to=christophe.leroy@c-s.fr \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.