All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baoquan He <bhe@redhat.com>
To: Mike Rapoport <rppt@kernel.org>
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,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	linux-parisc@vger.kernel.org
Subject: Re: [PATCH v5 RESEND 13/17] parisc: mm: Convert to GENERIC_IOREMAP
Date: Tue, 16 May 2023 21:07:43 +0800	[thread overview]
Message-ID: <ZGOAHxpKYBQNUI7Z@MiWiFi-R3L-srv> (raw)
In-Reply-To: <ZGMoN/FiwWnvjAjS@kernel.org>

On 05/16/23 at 09:52am, Mike Rapoport wrote:
> On Mon, May 15, 2023 at 05:08:44PM +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 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:
> 
> Looks like this paragraph is outdated, as an earlier patch in the series
> removes use of ARCH_HAS_IOREMAP_WC?

You are right, I forgot updating this patchlog after removing
ARCH_HAS_IOREMAP_WC. Will update in new post. Thanks.

>  
> > ./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>
> > Acked-by: Helge Deller <deller@gmx.de>
> > Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> > Cc: linux-parisc@vger.kernel.org
> > ---
> >  arch/parisc/Kconfig          |  1 +
> >  arch/parisc/include/asm/io.h | 15 ++++++---
> >  arch/parisc/mm/ioremap.c     | 62 +++---------------------------------
> >  3 files changed, 15 insertions(+), 63 deletions(-)
> > 
> > diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
> > index 466a25525364..be6ab4530390 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..366537042465 100644
> > --- a/arch/parisc/include/asm/io.h
> > +++ b/arch/parisc/include/asm/io.h
> > @@ -125,12 +125,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
> > 
> > 
> 
> -- 
> Sincerely yours,
> Mike.
> 


  reply	other threads:[~2023-05-16 13:08 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
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 [this message]
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=ZGOAHxpKYBQNUI7Z@MiWiFi-R3L-srv \
    --to=bhe@redhat.com \
    --cc=David.Laight@aculab.com \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=agordeev@linux.ibm.com \
    --cc=arnd@arndb.de \
    --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-parisc@vger.kernel.org \
    --cc=rppt@kernel.org \
    --cc=schnelle@linux.ibm.com \
    --cc=shorne@gmail.com \
    --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.