From: Mike Rapoport <rppt@kernel.org>
To: Baoquan He <bhe@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
linux-mm@kvack.org, arnd@arndb.de, christophe.leroy@csgroup.eu,
hch@infradead.org, agordeev@linux.ibm.com,
wangkefeng.wang@huawei.com, schnelle@linux.ibm.com,
David.Laight@aculab.com, shorne@gmail.com, willy@infradead.org,
deller@gmx.de, Vineet Gupta <vgupta@kernel.org>,
linux-snps-arc@lists.infradead.org
Subject: Re: [PATCH v5 RESEND 07/17] arc: mm: Convert to GENERIC_IOREMAP
Date: Tue, 16 May 2023 09:49:17 +0300 [thread overview]
Message-ID: <ZGMnbeQzIv+6HYGe@kernel.org> (raw)
In-Reply-To: <20230515090848.833045-8-bhe@redhat.com>
On Mon, May 15, 2023 at 05:08:38PM +0800, Baoquan He wrote:
> 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 functions ioremap_prot() and iounmap() for arc's
> special operation when ioremap_prot() and iounmap().
>
> Signed-off-by: Baoquan He <bhe@redhat.com>
> Cc: Vineet Gupta <vgupta@kernel.org>
> Cc: linux-snps-arc@lists.infradead.org
Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
> ---
> arch/arc/Kconfig | 1 +
> arch/arc/include/asm/io.h | 7 +++---
> arch/arc/mm/ioremap.c | 49 ++++-----------------------------------
> 3 files changed, 8 insertions(+), 49 deletions(-)
>
> diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
> index ab6d701365bb..3a666ee0c0bc 100644
> --- a/arch/arc/Kconfig
> +++ b/arch/arc/Kconfig
> @@ -26,6 +26,7 @@ config ARC
> select GENERIC_PENDING_IRQ if SMP
> select GENERIC_SCHED_CLOCK
> select GENERIC_SMP_IDLE_THREAD
> + select GENERIC_IOREMAP
> select HAVE_ARCH_KGDB
> select HAVE_ARCH_TRACEHOOK
> select HAVE_ARCH_TRANSPARENT_HUGEPAGE if ARC_MMU_V4
> diff --git a/arch/arc/include/asm/io.h b/arch/arc/include/asm/io.h
> index 80347382a380..4fdb7350636c 100644
> --- a/arch/arc/include/asm/io.h
> +++ b/arch/arc/include/asm/io.h
> @@ -21,8 +21,9 @@
> #endif
>
> extern void __iomem *ioremap(phys_addr_t paddr, unsigned long size);
> -extern void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,
> - unsigned long flags);
> +#define ioremap ioremap
> +#define ioremap_prot ioremap_prot
> +#define iounmap iounmap
> static inline void __iomem *ioport_map(unsigned long port, unsigned int nr)
> {
> return (void __iomem *)port;
> @@ -32,8 +33,6 @@ static inline void ioport_unmap(void __iomem *addr)
> {
> }
>
> -extern void iounmap(const volatile void __iomem *addr);
> -
> /*
> * io{read,write}{16,32}be() macros
> */
> diff --git a/arch/arc/mm/ioremap.c b/arch/arc/mm/ioremap.c
> index 712c2311daef..b07004d53267 100644
> --- a/arch/arc/mm/ioremap.c
> +++ b/arch/arc/mm/ioremap.c
> @@ -8,7 +8,6 @@
> #include <linux/module.h>
> #include <linux/io.h>
> #include <linux/mm.h>
> -#include <linux/slab.h>
> #include <linux/cache.h>
>
> static inline bool arc_uncached_addr_space(phys_addr_t paddr)
> @@ -25,13 +24,6 @@ static inline bool arc_uncached_addr_space(phys_addr_t paddr)
>
> void __iomem *ioremap(phys_addr_t paddr, unsigned long size)
> {
> - phys_addr_t end;
> -
> - /* Don't allow wraparound or zero size */
> - end = paddr + size - 1;
> - if (!size || (end < paddr))
> - return NULL;
> -
> /*
> * If the region is h/w uncached, MMU mapping can be elided as optim
> * The cast to u32 is fine as this region can only be inside 4GB
> @@ -51,55 +43,22 @@ EXPORT_SYMBOL(ioremap);
> * ARC hardware uncached region, this one still goes thru the MMU as caller
> * might need finer access control (R/W/X)
> */
> -void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,
> +void __iomem *ioremap_prot(phys_addr_t paddr, size_t size,
> unsigned long flags)
> {
> - unsigned int off;
> - unsigned long vaddr;
> - struct vm_struct *area;
> - phys_addr_t end;
> pgprot_t prot = __pgprot(flags);
>
> - /* Don't allow wraparound, zero size */
> - end = paddr + size - 1;
> - if ((!size) || (end < paddr))
> - return NULL;
> -
> - /* An early platform driver might end up here */
> - if (!slab_is_available())
> - return NULL;
> -
> /* force uncached */
> - prot = pgprot_noncached(prot);
> -
> - /* Mappings have to be page-aligned */
> - off = paddr & ~PAGE_MASK;
> - paddr &= PAGE_MASK_PHYS;
> - size = PAGE_ALIGN(end + 1) - paddr;
> -
> - /*
> - * Ok, go for it..
> - */
> - area = get_vm_area(size, VM_IOREMAP);
> - if (!area)
> - return NULL;
> - area->phys_addr = paddr;
> - vaddr = (unsigned long)area->addr;
> - if (ioremap_page_range(vaddr, vaddr + size, paddr, prot)) {
> - vunmap((void __force *)vaddr);
> - return NULL;
> - }
> - return (void __iomem *)(off + (char __iomem *)vaddr);
> + return generic_ioremap_prot(paddr, size, pgprot_noncached(prot));
> }
> EXPORT_SYMBOL(ioremap_prot);
>
> -
> -void iounmap(const volatile void __iomem *addr)
> +void iounmap(volatile void __iomem *addr)
> {
> /* weird double cast to handle phys_addr_t > 32 bits */
> if (arc_uncached_addr_space((phys_addr_t)(u32)addr))
> return;
>
> - vfree((void *)(PAGE_MASK & (unsigned long __force)addr));
> + generic_iounmap(addr);
> }
> EXPORT_SYMBOL(iounmap);
> --
> 2.34.1
>
>
--
Sincerely yours,
Mike.
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Baoquan He <bhe@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
linux-mm@kvack.org, arnd@arndb.de, christophe.leroy@csgroup.eu,
hch@infradead.org, agordeev@linux.ibm.com,
wangkefeng.wang@huawei.com, schnelle@linux.ibm.com,
David.Laight@aculab.com, shorne@gmail.com, willy@infradead.org,
deller@gmx.de, Vineet Gupta <vgupta@kernel.org>,
linux-snps-arc@lists.infradead.org
Subject: Re: [PATCH v5 RESEND 07/17] arc: mm: Convert to GENERIC_IOREMAP
Date: Tue, 16 May 2023 09:49:17 +0300 [thread overview]
Message-ID: <ZGMnbeQzIv+6HYGe@kernel.org> (raw)
In-Reply-To: <20230515090848.833045-8-bhe@redhat.com>
On Mon, May 15, 2023 at 05:08:38PM +0800, Baoquan He wrote:
> 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 functions ioremap_prot() and iounmap() for arc's
> special operation when ioremap_prot() and iounmap().
>
> Signed-off-by: Baoquan He <bhe@redhat.com>
> Cc: Vineet Gupta <vgupta@kernel.org>
> Cc: linux-snps-arc@lists.infradead.org
Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
> ---
> arch/arc/Kconfig | 1 +
> arch/arc/include/asm/io.h | 7 +++---
> arch/arc/mm/ioremap.c | 49 ++++-----------------------------------
> 3 files changed, 8 insertions(+), 49 deletions(-)
>
> diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
> index ab6d701365bb..3a666ee0c0bc 100644
> --- a/arch/arc/Kconfig
> +++ b/arch/arc/Kconfig
> @@ -26,6 +26,7 @@ config ARC
> select GENERIC_PENDING_IRQ if SMP
> select GENERIC_SCHED_CLOCK
> select GENERIC_SMP_IDLE_THREAD
> + select GENERIC_IOREMAP
> select HAVE_ARCH_KGDB
> select HAVE_ARCH_TRACEHOOK
> select HAVE_ARCH_TRANSPARENT_HUGEPAGE if ARC_MMU_V4
> diff --git a/arch/arc/include/asm/io.h b/arch/arc/include/asm/io.h
> index 80347382a380..4fdb7350636c 100644
> --- a/arch/arc/include/asm/io.h
> +++ b/arch/arc/include/asm/io.h
> @@ -21,8 +21,9 @@
> #endif
>
> extern void __iomem *ioremap(phys_addr_t paddr, unsigned long size);
> -extern void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,
> - unsigned long flags);
> +#define ioremap ioremap
> +#define ioremap_prot ioremap_prot
> +#define iounmap iounmap
> static inline void __iomem *ioport_map(unsigned long port, unsigned int nr)
> {
> return (void __iomem *)port;
> @@ -32,8 +33,6 @@ static inline void ioport_unmap(void __iomem *addr)
> {
> }
>
> -extern void iounmap(const volatile void __iomem *addr);
> -
> /*
> * io{read,write}{16,32}be() macros
> */
> diff --git a/arch/arc/mm/ioremap.c b/arch/arc/mm/ioremap.c
> index 712c2311daef..b07004d53267 100644
> --- a/arch/arc/mm/ioremap.c
> +++ b/arch/arc/mm/ioremap.c
> @@ -8,7 +8,6 @@
> #include <linux/module.h>
> #include <linux/io.h>
> #include <linux/mm.h>
> -#include <linux/slab.h>
> #include <linux/cache.h>
>
> static inline bool arc_uncached_addr_space(phys_addr_t paddr)
> @@ -25,13 +24,6 @@ static inline bool arc_uncached_addr_space(phys_addr_t paddr)
>
> void __iomem *ioremap(phys_addr_t paddr, unsigned long size)
> {
> - phys_addr_t end;
> -
> - /* Don't allow wraparound or zero size */
> - end = paddr + size - 1;
> - if (!size || (end < paddr))
> - return NULL;
> -
> /*
> * If the region is h/w uncached, MMU mapping can be elided as optim
> * The cast to u32 is fine as this region can only be inside 4GB
> @@ -51,55 +43,22 @@ EXPORT_SYMBOL(ioremap);
> * ARC hardware uncached region, this one still goes thru the MMU as caller
> * might need finer access control (R/W/X)
> */
> -void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,
> +void __iomem *ioremap_prot(phys_addr_t paddr, size_t size,
> unsigned long flags)
> {
> - unsigned int off;
> - unsigned long vaddr;
> - struct vm_struct *area;
> - phys_addr_t end;
> pgprot_t prot = __pgprot(flags);
>
> - /* Don't allow wraparound, zero size */
> - end = paddr + size - 1;
> - if ((!size) || (end < paddr))
> - return NULL;
> -
> - /* An early platform driver might end up here */
> - if (!slab_is_available())
> - return NULL;
> -
> /* force uncached */
> - prot = pgprot_noncached(prot);
> -
> - /* Mappings have to be page-aligned */
> - off = paddr & ~PAGE_MASK;
> - paddr &= PAGE_MASK_PHYS;
> - size = PAGE_ALIGN(end + 1) - paddr;
> -
> - /*
> - * Ok, go for it..
> - */
> - area = get_vm_area(size, VM_IOREMAP);
> - if (!area)
> - return NULL;
> - area->phys_addr = paddr;
> - vaddr = (unsigned long)area->addr;
> - if (ioremap_page_range(vaddr, vaddr + size, paddr, prot)) {
> - vunmap((void __force *)vaddr);
> - return NULL;
> - }
> - return (void __iomem *)(off + (char __iomem *)vaddr);
> + return generic_ioremap_prot(paddr, size, pgprot_noncached(prot));
> }
> EXPORT_SYMBOL(ioremap_prot);
>
> -
> -void iounmap(const volatile void __iomem *addr)
> +void iounmap(volatile void __iomem *addr)
> {
> /* weird double cast to handle phys_addr_t > 32 bits */
> if (arc_uncached_addr_space((phys_addr_t)(u32)addr))
> return;
>
> - vfree((void *)(PAGE_MASK & (unsigned long __force)addr));
> + generic_iounmap(addr);
> }
> EXPORT_SYMBOL(iounmap);
> --
> 2.34.1
>
>
--
Sincerely yours,
Mike.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
next prev parent reply other threads:[~2023-05-16 6:49 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-15 9:08 [PATCH v5 RESEND 00/17] mm: ioremap: Convert architectures to take GENERIC_IOREMAP way Baoquan He
2023-05-15 9:08 ` [PATCH v5 RESEND 01/17] asm-generic/iomap.h: remove ARCH_HAS_IOREMAP_xx macros Baoquan He
2023-05-15 9:08 ` Baoquan He
2023-05-16 6:15 ` Mike Rapoport
2023-05-16 6:15 ` Mike Rapoport
2023-05-16 12:54 ` Baoquan He
2023-05-16 12:54 ` Baoquan He
2023-05-16 7:07 ` Geert Uytterhoeven
2023-05-16 7:07 ` Geert Uytterhoeven
2023-05-17 6:27 ` Christoph Hellwig
2023-05-17 6:27 ` Christoph Hellwig
2023-05-15 9:08 ` [PATCH v5 RESEND 02/17] hexagon: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-05-16 6:17 ` Mike Rapoport
2023-05-17 6:27 ` Christoph Hellwig
2023-05-15 9:08 ` [PATCH v5 RESEND 03/17] openrisc: mm: remove unneeded early ioremap code Baoquan He
2023-05-16 6:17 ` Mike Rapoport
2023-05-16 13:03 ` Baoquan He
2023-05-17 6:28 ` Christoph Hellwig
2023-05-15 9:08 ` [PATCH v5 RESEND 04/17] mm/ioremap: Define generic_ioremap_prot() and generic_iounmap() Baoquan He
2023-05-16 6:17 ` Mike Rapoport
2023-05-17 6:29 ` Christoph Hellwig
2023-05-18 3:38 ` Baoquan He
2023-05-18 1:56 ` Kefeng Wang
2023-05-15 9:08 ` [PATCH v5 RESEND 05/17] mm: ioremap: allow ARCH to have its own ioremap method definition Baoquan He
2023-05-16 6:48 ` Mike Rapoport
2023-05-17 6:30 ` Christoph Hellwig
2023-05-18 1:56 ` Kefeng Wang
2023-05-15 9:08 ` [PATCH v5 RESEND 06/17] mm/ioremap: add slab availability checking in ioremap_prot Baoquan He
2023-05-16 6:48 ` Mike Rapoport
2023-05-17 6:30 ` Christoph Hellwig
2023-05-18 3:43 ` Baoquan He
2023-05-18 1:57 ` Kefeng Wang
2023-05-15 9:08 ` [PATCH v5 RESEND 07/17] arc: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-05-15 9:08 ` Baoquan He
2023-05-16 6:49 ` Mike Rapoport [this message]
2023-05-16 6:49 ` Mike Rapoport
2023-05-17 6:31 ` Christoph Hellwig
2023-05-17 6:31 ` Christoph Hellwig
2023-05-18 3:43 ` Baoquan He
2023-05-18 3:43 ` Baoquan He
2023-05-30 9:25 ` Baoquan He
2023-05-30 9:25 ` Baoquan He
2023-06-01 11:14 ` Christoph Hellwig
2023-06-01 11:14 ` Christoph Hellwig
2023-05-15 9:08 ` [PATCH v5 RESEND 08/17] ia64: " Baoquan He
2023-05-15 9:08 ` Baoquan He
2023-05-16 6:49 ` Mike Rapoport
2023-05-16 6:49 ` Mike Rapoport
2023-05-17 6:33 ` Christoph Hellwig
2023-05-17 6:33 ` Christoph Hellwig
2023-05-18 3:44 ` Baoquan He
2023-05-18 3:44 ` Baoquan He
2023-05-15 9:08 ` [PATCH v5 RESEND 09/17] openrisc: " Baoquan He
2023-05-16 6:49 ` Mike Rapoport
2023-05-16 13:05 ` Baoquan He
2023-05-15 9:08 ` [PATCH v5 RESEND 10/17] s390: " Baoquan He
2023-05-16 6:50 ` Mike Rapoport
2023-05-17 6:36 ` Christoph Hellwig
2023-05-17 7:58 ` Niklas Schnelle
2023-05-17 8:08 ` Christoph Hellwig
2023-05-15 9:08 ` [PATCH v5 RESEND 11/17] sh: " Baoquan He
2023-05-17 6:37 ` Christoph Hellwig
2023-05-18 3:45 ` Baoquan He
2023-05-15 9:08 ` [PATCH v5 RESEND 12/17] xtensa: " Baoquan He
2023-05-16 6:51 ` Mike Rapoport
2023-05-17 6:38 ` Christoph Hellwig
2023-05-15 9:08 ` [PATCH v5 RESEND 13/17] parisc: " Baoquan He
2023-05-16 6:52 ` Mike Rapoport
2023-05-16 13:07 ` Baoquan He
2023-05-17 6:38 ` Christoph Hellwig
2023-05-15 9:08 ` [PATCH v5 RESEND 14/17] mm/ioremap: Consider IOREMAP space in generic ioremap Baoquan He
2023-05-16 6:53 ` Mike Rapoport
2023-05-17 6:41 ` Christoph Hellwig
2023-05-17 6:44 ` Christoph Hellwig
2023-05-20 3:31 ` Baoquan He
2023-05-20 5:04 ` Christoph Hellwig
2023-05-30 9:37 ` Baoquan He
2023-06-01 11:13 ` Christoph Hellwig
2023-06-02 10:42 ` Baoquan He
2023-06-02 15:05 ` Christoph Hellwig
2023-05-20 3:28 ` Baoquan He
2023-05-15 9:08 ` [PATCH v5 RESEND 15/17] powerpc: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-05-15 9:08 ` Baoquan He
2023-05-16 7:00 ` Mike Rapoport
2023-05-16 7:00 ` Mike Rapoport
2023-05-17 6:42 ` Christoph Hellwig
2023-05-17 6:42 ` Christoph Hellwig
2023-05-15 9:08 ` [PATCH v5 RESEND 16/17] arm64 : mm: add wrapper function ioremap_prot() Baoquan He
2023-05-15 9:08 ` Baoquan He
2023-05-16 7:02 ` Mike Rapoport
2023-05-16 7:02 ` Mike Rapoport
2023-05-17 6:42 ` Christoph Hellwig
2023-05-17 6:42 ` Christoph Hellwig
2023-05-18 1:58 ` Kefeng Wang
2023-05-18 1:58 ` Kefeng Wang
2023-05-15 9:08 ` [PATCH v5 RESEND 17/17] mm: ioremap: remove unneeded ioremap_allowed and iounmap_allowed Baoquan He
2023-05-16 7:02 ` Mike Rapoport
2023-05-17 6:43 ` Christoph Hellwig
2023-05-18 1:58 ` Kefeng Wang
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=ZGMnbeQzIv+6HYGe@kernel.org \
--to=rppt@kernel.org \
--cc=David.Laight@aculab.com \
--cc=agordeev@linux.ibm.com \
--cc=arnd@arndb.de \
--cc=bhe@redhat.com \
--cc=christophe.leroy@csgroup.eu \
--cc=deller@gmx.de \
--cc=hch@infradead.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-snps-arc@lists.infradead.org \
--cc=schnelle@linux.ibm.com \
--cc=shorne@gmail.com \
--cc=vgupta@kernel.org \
--cc=wangkefeng.wang@huawei.com \
--cc=willy@infradead.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.