* [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
[not found] <20230216123419.461016-1-bhe@redhat.com>
@ 2023-02-16 12:34 ` Baoquan He
2023-02-16 13:50 ` Matthew Wilcox
0 siblings, 1 reply; 11+ messages in thread
From: Baoquan He @ 2023-02-16 12:34 UTC (permalink / raw)
To: linux-kernel
Cc: linux-mm, akpm, christophe.leroy, hch, agordeev, wangkefeng.wang,
schnelle, David.Laight, shorne, arnd, Baoquan He,
James E.J. Bottomley, Helge Deller, linux-parisc
By taking GENERIC_IOREMAP method, the generic generic_ioremap_prot(),
generic_iounmap(), and their generic wrapper ioremap_prot(), ioremap()
and iounmap() are all visible and available to arch. Arch needs to
provide wrapper functions to override the generic versions if there's
arch specific handling in its ioremap_prot(), ioremap() or iounmap().
This change will simplify implementation by removing duplicated codes
with generic_ioremap_prot() and generic_iounmap(), and has the equivalent
functioality as before.
Here, add wrapper function ioremap_prot() for parisc's special operation
when iounmap().
Meanwhile, add macro ARCH_HAS_IOREMAP_WC since the added ioremap_wc()
will conflict with the one in include/asm-generic/iomap.h, then an
compiling error is seen:
./include/asm-generic/iomap.h:97: warning: "ioremap_wc" redefined
97 | #define ioremap_wc ioremap
And benefit from the commit 437b6b35362b ("parisc: Use the generic
IO helpers"), those macros don't need be added any more.
Signed-off-by: Baoquan He <bhe@redhat.com>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-parisc@vger.kernel.org
---
arch/parisc/Kconfig | 1 +
arch/parisc/include/asm/io.h | 17 +++++++---
arch/parisc/mm/ioremap.c | 62 +++---------------------------------
3 files changed, 17 insertions(+), 63 deletions(-)
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index a98940e64243..0ed18e673aba 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -36,6 +36,7 @@ config PARISC
select GENERIC_ATOMIC64 if !64BIT
select GENERIC_IRQ_PROBE
select GENERIC_PCI_IOMAP
+ select GENERIC_IOREMAP
select ARCH_HAVE_NMI_SAFE_CMPXCHG
select GENERIC_SMP_IDLE_THREAD
select GENERIC_ARCH_TOPOLOGY if SMP
diff --git a/arch/parisc/include/asm/io.h b/arch/parisc/include/asm/io.h
index c05e781be2f5..4c386b0cee08 100644
--- a/arch/parisc/include/asm/io.h
+++ b/arch/parisc/include/asm/io.h
@@ -2,6 +2,8 @@
#ifndef _ASM_IO_H
#define _ASM_IO_H
+#define ARCH_HAS_IOREMAP_WC
+
#include <linux/types.h>
#include <linux/pgtable.h>
@@ -125,12 +127,17 @@ static inline void gsc_writeq(unsigned long long val, unsigned long addr)
/*
* The standard PCI ioremap interfaces
*/
-void __iomem *ioremap(unsigned long offset, unsigned long size);
-#define ioremap_wc ioremap
-#define ioremap_uc ioremap
-#define pci_iounmap pci_iounmap
+#define ioremap_prot ioremap_prot
+
+#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | \
+ _PAGE_ACCESSED | _PAGE_NO_CACHE)
-extern void iounmap(const volatile void __iomem *addr);
+#define ioremap_wc(addr, size) \
+ ioremap_prot((addr), (size), _PAGE_IOREMAP)
+#define ioremap_uc(addr, size) \
+ ioremap_prot((addr), (size), _PAGE_IOREMAP)
+
+#define pci_iounmap pci_iounmap
void memset_io(volatile void __iomem *addr, unsigned char val, int count);
void memcpy_fromio(void *dst, const volatile void __iomem *src, int count);
diff --git a/arch/parisc/mm/ioremap.c b/arch/parisc/mm/ioremap.c
index 345ff0b66499..fd996472dfe7 100644
--- a/arch/parisc/mm/ioremap.c
+++ b/arch/parisc/mm/ioremap.c
@@ -13,25 +13,9 @@
#include <linux/io.h>
#include <linux/mm.h>
-/*
- * Generic mapping function (not visible outside):
- */
-
-/*
- * Remap an arbitrary physical address space into the kernel virtual
- * address space.
- *
- * NOTE! We need to allow non-page-aligned mappings too: we will obviously
- * have to convert them into an offset in a page-aligned mapping, but the
- * caller shouldn't need to know that small detail.
- */
-void __iomem *ioremap(unsigned long phys_addr, unsigned long size)
+void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size,
+ unsigned long prot)
{
- void __iomem *addr;
- struct vm_struct *area;
- unsigned long offset, last_addr;
- pgprot_t pgprot;
-
#ifdef CONFIG_EISA
unsigned long end = phys_addr + size - 1;
/* Support EISA addresses */
@@ -40,11 +24,6 @@ void __iomem *ioremap(unsigned long phys_addr, unsigned long size)
phys_addr |= F_EXTEND(0xfc000000);
#endif
- /* Don't allow wraparound or zero size */
- last_addr = phys_addr + size - 1;
- if (!size || last_addr < phys_addr)
- return NULL;
-
/*
* Don't allow anybody to remap normal RAM that we're using..
*/
@@ -62,39 +41,6 @@ void __iomem *ioremap(unsigned long phys_addr, unsigned long size)
}
}
- pgprot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY |
- _PAGE_ACCESSED | _PAGE_NO_CACHE);
-
- /*
- * Mappings have to be page-aligned
- */
- offset = phys_addr & ~PAGE_MASK;
- phys_addr &= PAGE_MASK;
- size = PAGE_ALIGN(last_addr + 1) - phys_addr;
-
- /*
- * Ok, go for it..
- */
- area = get_vm_area(size, VM_IOREMAP);
- if (!area)
- return NULL;
-
- addr = (void __iomem *) area->addr;
- if (ioremap_page_range((unsigned long)addr, (unsigned long)addr + size,
- phys_addr, pgprot)) {
- vunmap(addr);
- return NULL;
- }
-
- return (void __iomem *) (offset + (char __iomem *)addr);
-}
-EXPORT_SYMBOL(ioremap);
-
-void iounmap(const volatile void __iomem *io_addr)
-{
- unsigned long addr = (unsigned long)io_addr & PAGE_MASK;
-
- if (is_vmalloc_addr((void *)addr))
- vunmap((void *)addr);
+ return generic_ioremap_prot(phys_addr, size, __pgprot(prot));
}
-EXPORT_SYMBOL(iounmap);
+EXPORT_SYMBOL(ioremap_prot);
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-16 12:34 ` [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP Baoquan He
@ 2023-02-16 13:50 ` Matthew Wilcox
2023-02-16 15:02 ` Baoquan He
0 siblings, 1 reply; 11+ messages in thread
From: Matthew Wilcox @ 2023-02-16 13:50 UTC (permalink / raw)
To: Baoquan He
Cc: linux-kernel, linux-mm, akpm, christophe.leroy, hch, agordeev,
wangkefeng.wang, schnelle, David.Laight, shorne, arnd,
James E.J. Bottomley, Helge Deller, linux-parisc
On Thu, Feb 16, 2023 at 08:34:15PM +0800, Baoquan He wrote:
> Meanwhile, add macro ARCH_HAS_IOREMAP_WC since the added ioremap_wc()
> will conflict with the one in include/asm-generic/iomap.h, then an
> compiling error is seen:
Huh? ARCH_HAS_IOREMAP_WC comes up nowhere else in this patchset, and
the current definition of ioremap_wc() is guarded by an ifndef ioremap_wc
> +#define ioremap_wc(addr, size) \
> + ioremap_prot((addr), (size), _PAGE_IOREMAP)
This should be enough all by itself.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-16 13:50 ` Matthew Wilcox
@ 2023-02-16 15:02 ` Baoquan He
2023-02-16 15:18 ` Arnd Bergmann
0 siblings, 1 reply; 11+ messages in thread
From: Baoquan He @ 2023-02-16 15:02 UTC (permalink / raw)
To: Matthew Wilcox
Cc: linux-kernel, linux-mm, akpm, christophe.leroy, hch, agordeev,
wangkefeng.wang, schnelle, David.Laight, shorne, arnd,
James E.J. Bottomley, Helge Deller, linux-parisc
On 02/16/23 at 01:50pm, Matthew Wilcox wrote:
> On Thu, Feb 16, 2023 at 08:34:15PM +0800, Baoquan He wrote:
> > Meanwhile, add macro ARCH_HAS_IOREMAP_WC since the added ioremap_wc()
> > will conflict with the one in include/asm-generic/iomap.h, then an
> > compiling error is seen:
>
Thanks for reviewing.
> Huh? ARCH_HAS_IOREMAP_WC comes up nowhere else in this patchset, and
> the current definition of ioremap_wc() is guarded by an ifndef ioremap_wc
Because another patch of powerpc has got ARCH_HAS_IOREMAP_WC in the
existed code.
>
> > +#define ioremap_wc(addr, size) \
> > + ioremap_prot((addr), (size), _PAGE_IOREMAP)
>
> This should be enough all by itself.
It's not if including asm-generic/iomap.h. The ARCH_HAS_IOREMAP_xx is to
avoid redefinition there.
include/asm-generic/iomap.h:
----
#ifndef ARCH_HAS_IOREMAP_WC
#define ioremap_wc ioremap
#endif
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-16 15:02 ` Baoquan He
@ 2023-02-16 15:18 ` Arnd Bergmann
2023-02-17 13:31 ` Baoquan He
0 siblings, 1 reply; 11+ messages in thread
From: Arnd Bergmann @ 2023-02-16 15:18 UTC (permalink / raw)
To: Baoquan He, Matthew Wilcox
Cc: linux-kernel, linux-mm, Andrew Morton, Christophe Leroy,
Christoph Hellwig, Alexander Gordeev, Kefeng Wang,
Niklas Schnelle, David Laight, Stafford Horne,
James E . J . Bottomley, Helge Deller, linux-parisc
On Thu, Feb 16, 2023, at 16:02, Baoquan He wrote:
> On 02/16/23 at 01:50pm, Matthew Wilcox wrote:
> It's not if including asm-generic/iomap.h. The ARCH_HAS_IOREMAP_xx is to
> avoid redefinition there.
>
> include/asm-generic/iomap.h:
> ----
> #ifndef ARCH_HAS_IOREMAP_WC
> #define ioremap_wc ioremap
> #endif
I'd change that to the usual '#ifndef ioremap_wc' in that case.
Arnd
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-16 15:18 ` Arnd Bergmann
@ 2023-02-17 13:31 ` Baoquan He
2023-02-17 13:46 ` Christophe Leroy
0 siblings, 1 reply; 11+ messages in thread
From: Baoquan He @ 2023-02-17 13:31 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Matthew Wilcox, linux-kernel, linux-mm, Andrew Morton,
Christophe Leroy, Christoph Hellwig, Alexander Gordeev,
Kefeng Wang, Niklas Schnelle, David Laight, Stafford Horne,
James E . J . Bottomley, Helge Deller, linux-parisc
On 02/16/23 at 04:18pm, Arnd Bergmann wrote:
> On Thu, Feb 16, 2023, at 16:02, Baoquan He wrote:
> > On 02/16/23 at 01:50pm, Matthew Wilcox wrote:
> > It's not if including asm-generic/iomap.h. The ARCH_HAS_IOREMAP_xx is to
> > avoid redefinition there.
> >
> > include/asm-generic/iomap.h:
> > ----
> > #ifndef ARCH_HAS_IOREMAP_WC
> > #define ioremap_wc ioremap
> > #endif
>
> I'd change that to the usual '#ifndef ioremap_wc' in that case.
Not sure if I got you. Kill all ARCH_HAS_IOREMAP_xxx in kernel? If yes,
sounds like a good idea.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-17 13:31 ` Baoquan He
@ 2023-02-17 13:46 ` Christophe Leroy
2023-02-17 14:21 ` Baoquan He
2023-02-22 8:35 ` Baoquan He
0 siblings, 2 replies; 11+ messages in thread
From: Christophe Leroy @ 2023-02-17 13:46 UTC (permalink / raw)
To: Baoquan He, Arnd Bergmann
Cc: Matthew Wilcox, linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Andrew Morton, Christoph Hellwig, Alexander Gordeev, Kefeng Wang,
Niklas Schnelle, David Laight, Stafford Horne,
James E . J . Bottomley, Helge Deller,
linux-parisc@vger.kernel.org
Le 17/02/2023 à 14:31, Baoquan He a écrit :
> On 02/16/23 at 04:18pm, Arnd Bergmann wrote:
>> On Thu, Feb 16, 2023, at 16:02, Baoquan He wrote:
>>> On 02/16/23 at 01:50pm, Matthew Wilcox wrote:
>>> It's not if including asm-generic/iomap.h. The ARCH_HAS_IOREMAP_xx is to
>>> avoid redefinition there.
>>>
>>> include/asm-generic/iomap.h:
>>> ----
>>> #ifndef ARCH_HAS_IOREMAP_WC
>>> #define ioremap_wc ioremap
>>> #endif
>>
>> I'd change that to the usual '#ifndef ioremap_wc' in that case.
>
> Not sure if I got you. Kill all ARCH_HAS_IOREMAP_xxx in kernel? If yes,
> sounds like a good idea.
>
At least kill that one at the first place in your series, and then the
other ones in a follow-up series maybe.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-17 13:46 ` Christophe Leroy
@ 2023-02-17 14:21 ` Baoquan He
2023-02-17 14:33 ` Christophe Leroy
2023-02-22 8:35 ` Baoquan He
1 sibling, 1 reply; 11+ messages in thread
From: Baoquan He @ 2023-02-17 14:21 UTC (permalink / raw)
To: Christophe Leroy
Cc: Arnd Bergmann, Matthew Wilcox, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, Andrew Morton, Christoph Hellwig,
Alexander Gordeev, Kefeng Wang, Niklas Schnelle, David Laight,
Stafford Horne, James E . J . Bottomley, Helge Deller,
linux-parisc@vger.kernel.org
On 02/17/23 at 01:46pm, Christophe Leroy wrote:
>
>
> Le 17/02/2023 à 14:31, Baoquan He a écrit :
> > On 02/16/23 at 04:18pm, Arnd Bergmann wrote:
> >> On Thu, Feb 16, 2023, at 16:02, Baoquan He wrote:
> >>> On 02/16/23 at 01:50pm, Matthew Wilcox wrote:
> >>> It's not if including asm-generic/iomap.h. The ARCH_HAS_IOREMAP_xx is to
> >>> avoid redefinition there.
> >>>
> >>> include/asm-generic/iomap.h:
> >>> ----
> >>> #ifndef ARCH_HAS_IOREMAP_WC
> >>> #define ioremap_wc ioremap
> >>> #endif
> >>
> >> I'd change that to the usual '#ifndef ioremap_wc' in that case.
> >
> > Not sure if I got you. Kill all ARCH_HAS_IOREMAP_xxx in kernel? If yes,
> > sounds like a good idea.
> >
>
> At least kill that one at the first place in your series, and then the
> other ones in a follow-up series maybe.
Then we can make a preparation patch to change that in iomap.h, then
remove all ARCH_HAS_IOREMAP_WC definition in arch. I thought to let this
patch as is, then get rid of all ARCH_HAS_IOREMAP_xxx in a follow-up
series. While the former is also fine to me. Thanks, Christophe.
diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h
index 08237ae8b840..5fa1e9ca951c 100644
--- a/include/asm-generic/iomap.h
+++ b/include/asm-generic/iomap.h
@@ -93,7 +93,7 @@ extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
extern void ioport_unmap(void __iomem *);
#endif
-#ifndef ARCH_HAS_IOREMAP_WC
+#ifndef ioremap_wc
#define ioremap_wc ioremap
#endif
[~]$ git grep ARCH_HAS_IOREMAP_WC
arch/loongarch/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/mips/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
drivers/net/ethernet/sfc/io.h:#ifdef ARCH_HAS_IOREMAP_WC
drivers/net/ethernet/sfc/siena/io.h:#ifdef ARCH_HAS_IOREMAP_WC
include/asm-generic/iomap.h:#ifndef ARCH_HAS_IOREMAP_WC
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-17 14:21 ` Baoquan He
@ 2023-02-17 14:33 ` Christophe Leroy
2023-02-17 14:35 ` Christophe Leroy
0 siblings, 1 reply; 11+ messages in thread
From: Christophe Leroy @ 2023-02-17 14:33 UTC (permalink / raw)
To: Baoquan He
Cc: Arnd Bergmann, Matthew Wilcox, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, Andrew Morton, Christoph Hellwig,
Alexander Gordeev, Kefeng Wang, Niklas Schnelle, David Laight,
Stafford Horne, James E . J . Bottomley, Helge Deller,
linux-parisc@vger.kernel.org
Le 17/02/2023 à 15:21, Baoquan He a écrit :
> On 02/17/23 at 01:46pm, Christophe Leroy wrote:
>>
>>
>> Le 17/02/2023 à 14:31, Baoquan He a écrit :
>>> On 02/16/23 at 04:18pm, Arnd Bergmann wrote:
>>>> On Thu, Feb 16, 2023, at 16:02, Baoquan He wrote:
>>>>> On 02/16/23 at 01:50pm, Matthew Wilcox wrote:
>>>>> It's not if including asm-generic/iomap.h. The ARCH_HAS_IOREMAP_xx is to
>>>>> avoid redefinition there.
>>>>>
>>>>> include/asm-generic/iomap.h:
>>>>> ----
>>>>> #ifndef ARCH_HAS_IOREMAP_WC
>>>>> #define ioremap_wc ioremap
>>>>> #endif
>>>>
>>>> I'd change that to the usual '#ifndef ioremap_wc' in that case.
>>>
>>> Not sure if I got you. Kill all ARCH_HAS_IOREMAP_xxx in kernel? If yes,
>>> sounds like a good idea.
>>>
>>
>> At least kill that one at the first place in your series, and then the
>> other ones in a follow-up series maybe.
>
> Then we can make a preparation patch to change that in iomap.h, then
> remove all ARCH_HAS_IOREMAP_WC definition in arch. I thought to let this
> patch as is, then get rid of all ARCH_HAS_IOREMAP_xxx in a follow-up
> series. While the former is also fine to me. Thanks, Christophe.
>
> diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h
> index 08237ae8b840..5fa1e9ca951c 100644
> --- a/include/asm-generic/iomap.h
> +++ b/include/asm-generic/iomap.h
> @@ -93,7 +93,7 @@ extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
> extern void ioport_unmap(void __iomem *);
> #endif
>
> -#ifndef ARCH_HAS_IOREMAP_WC
> +#ifndef ioremap_wc
> #define ioremap_wc ioremap
> #endif
>
> [~]$ git grep ARCH_HAS_IOREMAP_WC
> arch/loongarch/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/mips/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> drivers/net/ethernet/sfc/io.h:#ifdef ARCH_HAS_IOREMAP_WC
> drivers/net/ethernet/sfc/siena/io.h:#ifdef ARCH_HAS_IOREMAP_WC
> include/asm-generic/iomap.h:#ifndef ARCH_HAS_IOREMAP_WC
>
>
Not so many:
$ git grep ARCH_HAS_IOREMAP_WC | grep define
arch/loongarch/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/mips/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
And also make sure they define ioremap_wc :
$ git grep "define ioremap_wc" `git grep -l "define ARCH_HAS_IOREMAP_WC"`
arch/loongarch/include/asm/io.h:#define ioremap_wc(offset, size) \
arch/mips/include/asm/io.h:#define ioremap_wc(offset, size)
\
arch/powerpc/include/asm/io.h:#define ioremap_wc ioremap_wc
arch/x86/include/asm/io.h:#define ioremap_wc ioremap_wc
Christophe
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-17 14:33 ` Christophe Leroy
@ 2023-02-17 14:35 ` Christophe Leroy
2023-02-21 11:43 ` Baoquan He
0 siblings, 1 reply; 11+ messages in thread
From: Christophe Leroy @ 2023-02-17 14:35 UTC (permalink / raw)
To: Baoquan He
Cc: Arnd Bergmann, Matthew Wilcox, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, Andrew Morton, Christoph Hellwig,
Alexander Gordeev, Kefeng Wang, Niklas Schnelle, David Laight,
Stafford Horne, James E . J . Bottomley, Helge Deller,
linux-parisc@vger.kernel.org
Le 17/02/2023 à 15:33, Christophe Leroy a écrit :
>
>
> Le 17/02/2023 à 15:21, Baoquan He a écrit :
>> On 02/17/23 at 01:46pm, Christophe Leroy wrote:
>>>
>>>
>>> Le 17/02/2023 à 14:31, Baoquan He a écrit :
>>>> On 02/16/23 at 04:18pm, Arnd Bergmann wrote:
>>>>> On Thu, Feb 16, 2023, at 16:02, Baoquan He wrote:
>>>>>> On 02/16/23 at 01:50pm, Matthew Wilcox wrote:
>>>>>> It's not if including asm-generic/iomap.h. The ARCH_HAS_IOREMAP_xx
>>>>>> is to
>>>>>> avoid redefinition there.
>>>>>>
>>>>>> include/asm-generic/iomap.h:
>>>>>> ----
>>>>>> #ifndef ARCH_HAS_IOREMAP_WC
>>>>>> #define ioremap_wc ioremap
>>>>>> #endif
>>>>>
>>>>> I'd change that to the usual '#ifndef ioremap_wc' in that case.
>>>>
>>>> Not sure if I got you. Kill all ARCH_HAS_IOREMAP_xxx in kernel? If yes,
>>>> sounds like a good idea.
>>>>
>>>
>>> At least kill that one at the first place in your series, and then the
>>> other ones in a follow-up series maybe.
>>
>> Then we can make a preparation patch to change that in iomap.h, then
>> remove all ARCH_HAS_IOREMAP_WC definition in arch. I thought to let this
>> patch as is, then get rid of all ARCH_HAS_IOREMAP_xxx in a follow-up
>> series. While the former is also fine to me. Thanks, Christophe.
>>
>> diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h
>> index 08237ae8b840..5fa1e9ca951c 100644
>> --- a/include/asm-generic/iomap.h
>> +++ b/include/asm-generic/iomap.h
>> @@ -93,7 +93,7 @@ extern void __iomem *ioport_map(unsigned long port,
>> unsigned int nr);
>> extern void ioport_unmap(void __iomem *);
>> #endif
>> -#ifndef ARCH_HAS_IOREMAP_WC
>> +#ifndef ioremap_wc
>> #define ioremap_wc ioremap
>> #endif
>>
>> [~]$ git grep ARCH_HAS_IOREMAP_WC
>> arch/loongarch/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
>> arch/mips/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
>> arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
>> arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
>> drivers/net/ethernet/sfc/io.h:#ifdef ARCH_HAS_IOREMAP_WC
>> drivers/net/ethernet/sfc/siena/io.h:#ifdef ARCH_HAS_IOREMAP_WC
>> include/asm-generic/iomap.h:#ifndef ARCH_HAS_IOREMAP_WC
>>
>>
>
> Not so many:
>
> $ git grep ARCH_HAS_IOREMAP_WC | grep define
> arch/loongarch/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/mips/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
>
> And also make sure they define ioremap_wc :
>
> $ git grep "define ioremap_wc" `git grep -l "define ARCH_HAS_IOREMAP_WC"`
> arch/loongarch/include/asm/io.h:#define ioremap_wc(offset, size) \
> arch/mips/include/asm/io.h:#define ioremap_wc(offset, size)
> \
> arch/powerpc/include/asm/io.h:#define ioremap_wc ioremap_wc
> arch/x86/include/asm/io.h:#define ioremap_wc ioremap_wc
>
By the way there are so few, you can make all at once:
$ git grep ARCH_HAS_IOREMAP_ | grep define
arch/loongarch/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/m68k/include/asm/kmap.h:#define ARCH_HAS_IOREMAP_WT
arch/mips/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WT
arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WT
Christophe
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-17 14:35 ` Christophe Leroy
@ 2023-02-21 11:43 ` Baoquan He
0 siblings, 0 replies; 11+ messages in thread
From: Baoquan He @ 2023-02-21 11:43 UTC (permalink / raw)
To: Christophe Leroy
Cc: Arnd Bergmann, Matthew Wilcox, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, Andrew Morton, Christoph Hellwig,
Alexander Gordeev, Kefeng Wang, Niklas Schnelle, David Laight,
Stafford Horne, James E . J . Bottomley, Helge Deller,
linux-parisc@vger.kernel.org
On 02/17/23 at 02:35pm, Christophe Leroy wrote:
......
> > Not so many:
> >
> > $ git grep ARCH_HAS_IOREMAP_WC | grep define
> > arch/loongarch/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> > arch/mips/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> > arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> > arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> >
> > And also make sure they define ioremap_wc :
> >
> > $ git grep "define ioremap_wc" `git grep -l "define ARCH_HAS_IOREMAP_WC"`
> > arch/loongarch/include/asm/io.h:#define ioremap_wc(offset, size) \
> > arch/mips/include/asm/io.h:#define ioremap_wc(offset, size)
> > \
> > arch/powerpc/include/asm/io.h:#define ioremap_wc ioremap_wc
> > arch/x86/include/asm/io.h:#define ioremap_wc ioremap_wc
> >
>
>
> By the way there are so few, you can make all at once:
OK, I will try to pack this into one preparation patch. Thanks.
>
> $ git grep ARCH_HAS_IOREMAP_ | grep define
> arch/loongarch/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/m68k/include/asm/kmap.h:#define ARCH_HAS_IOREMAP_WT
> arch/mips/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/powerpc/include/asm/io.h:#define ARCH_HAS_IOREMAP_WT
> arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WC
> arch/x86/include/asm/io.h:#define ARCH_HAS_IOREMAP_WT
>
> Christophe
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP
2023-02-17 13:46 ` Christophe Leroy
2023-02-17 14:21 ` Baoquan He
@ 2023-02-22 8:35 ` Baoquan He
1 sibling, 0 replies; 11+ messages in thread
From: Baoquan He @ 2023-02-22 8:35 UTC (permalink / raw)
To: Christophe Leroy, Arnd Bergmann
Cc: Matthew Wilcox, linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Andrew Morton, Christoph Hellwig, Alexander Gordeev, Kefeng Wang,
Niklas Schnelle, David Laight, Stafford Horne,
James E . J . Bottomley, Helge Deller,
linux-parisc@vger.kernel.org
Hi Christophe, Arnd,
On 02/17/23 at 01:46pm, Christophe Leroy wrote:
>
>
> Le 17/02/2023 à 14:31, Baoquan He a écrit :
> > On 02/16/23 at 04:18pm, Arnd Bergmann wrote:
> >> On Thu, Feb 16, 2023, at 16:02, Baoquan He wrote:
> >>> On 02/16/23 at 01:50pm, Matthew Wilcox wrote:
> >>> It's not if including asm-generic/iomap.h. The ARCH_HAS_IOREMAP_xx is to
> >>> avoid redefinition there.
> >>>
> >>> include/asm-generic/iomap.h:
> >>> ----
> >>> #ifndef ARCH_HAS_IOREMAP_WC
> >>> #define ioremap_wc ioremap
> >>> #endif
> >>
> >> I'd change that to the usual '#ifndef ioremap_wc' in that case.
> >
> > Not sure if I got you. Kill all ARCH_HAS_IOREMAP_xxx in kernel? If yes,
> > sounds like a good idea.
> >
>
> At least kill that one at the first place in your series, and then the
> other ones in a follow-up series maybe.
I made a patch to remove all ARCH_HAS_IOREMAP_xx macros in architectures
and the ifdeffery of ARCH_HAS_IOREMAP_xx in asm-generic/iomap.h.
But the change will cause building error as below. Becuase we usually
have '#include <asm-generic/iomap.h>' at the beginning of
arch/xx/include/asm/io.h, and have '#include <asm-generic/io.h>' at the
end of arch/xx/include/asm/io.h. For architecutres which has
ARCH_HAS_IOREMAP_xx defining, we need move ''#include <asm-generic/iomap.h>
dowe to below '#include <asm-generic/io.h>'. Please help check if it's
still worth doing.
***move '#include <asm-generic/iomap.h>' below '#include <asm-generic/io.h>'
***
diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
index 8ab68cde1f13..a8d55fc62959 100644
--- a/arch/x86/include/asm/io.h
+++ b/arch/x86/include/asm/io.h
@@ -209,8 +209,6 @@ void memset_io(volatile void __iomem *, int, size_t);
#define memcpy_toio memcpy_toio
#define memset_io memset_io
-#include <asm-generic/iomap.h>
-
/*
* ISA space is 'always mapped' on a typical x86 system, no need to
* explicitly ioremap() it. The fact that the ISA IO space is mapped
@@ -329,6 +327,8 @@ extern bool is_early_ioremap_ptep(pte_t *ptep);
#include <asm-generic/io.h>
#undef PCI_IOBASE
+#include <asm-generic/iomap.h>
+
#ifdef CONFIG_MTRR
extern int __must_check arch_phys_wc_index(int handle);
#define arch_phys_wc_index arch_phys_wc_index
***Building error after removing ARCH_HAS_IOREMAP_xx
***
In file included from ./include/linux/io.h:13,
from ./include/linux/irq.h:20,
from ./include/xen/events.h:6,
from arch/x86/entry/common.c:25:
./arch/x86/include/asm/io.h:321: warning: "ioremap_wc" redefined
321 | #define ioremap_wc ioremap_wc
|
In file included from ./arch/x86/include/asm/io.h:212:
./include/asm-generic/iomap.h:97: note: this is the location of the previous definition
97 | #define ioremap_wc ioremap
|
./arch/x86/include/asm/io.h:323: warning: "ioremap_wt" redefined
323 | #define ioremap_wt ioremap_wt
|
./include/asm-generic/iomap.h:101: note: this is the location of the previous definition
101 | #define ioremap_wt ioremap
^ permalink raw reply related [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-02-22 8:36 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20230216123419.461016-1-bhe@redhat.com>
2023-02-16 12:34 ` [PATCH v4 12/16] parisc: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-02-16 13:50 ` Matthew Wilcox
2023-02-16 15:02 ` Baoquan He
2023-02-16 15:18 ` Arnd Bergmann
2023-02-17 13:31 ` Baoquan He
2023-02-17 13:46 ` Christophe Leroy
2023-02-17 14:21 ` Baoquan He
2023-02-17 14:33 ` Christophe Leroy
2023-02-17 14:35 ` Christophe Leroy
2023-02-21 11:43 ` Baoquan He
2023-02-22 8:35 ` Baoquan He
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox