linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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, Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@linux.ibm.com>,
	Sven Schnelle <svens@linux.ibm.com>,
	linux-s390@vger.kernel.org
Subject: Re: [PATCH v5 RESEND 10/17] s390: mm: Convert to GENERIC_IOREMAP
Date: Tue, 16 May 2023 09:50:50 +0300	[thread overview]
Message-ID: <ZGMnyk4l6Id1flpN@kernel.org> (raw)
In-Reply-To: <20230515090848.833045-11-bhe@redhat.com>

On Mon, May 15, 2023 at 05:08:41PM +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 s390's
> special operation when ioremap() and iounmap().
> 
> Signed-off-by: Baoquan He <bhe@redhat.com>
> Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
> Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
> Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
> Cc: Heiko Carstens <hca@linux.ibm.com>
> Cc: Vasily Gorbik <gor@linux.ibm.com>
> Cc: Alexander Gordeev <agordeev@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
> Cc: Sven Schnelle <svens@linux.ibm.com>
> Cc: linux-s390@vger.kernel.org

Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>

> ---
>  arch/s390/Kconfig          |  1 +
>  arch/s390/include/asm/io.h | 21 ++++++++------
>  arch/s390/pci/pci.c        | 57 +++++++-------------------------------
>  3 files changed, 23 insertions(+), 56 deletions(-)
> 
> diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
> index db20c1589a98..f33923fa8c99 100644
> --- a/arch/s390/Kconfig
> +++ b/arch/s390/Kconfig
> @@ -142,6 +142,7 @@ config S390
>  	select GENERIC_SMP_IDLE_THREAD
>  	select GENERIC_TIME_VSYSCALL
>  	select GENERIC_VDSO_TIME_NS
> +	select GENERIC_IOREMAP if PCI
>  	select HAVE_ALIGNED_STRUCT_PAGE if SLUB
>  	select HAVE_ARCH_AUDITSYSCALL
>  	select HAVE_ARCH_JUMP_LABEL
> diff --git a/arch/s390/include/asm/io.h b/arch/s390/include/asm/io.h
> index e3882b012bfa..4453ad7c11ac 100644
> --- a/arch/s390/include/asm/io.h
> +++ b/arch/s390/include/asm/io.h
> @@ -22,11 +22,18 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr);
>  
>  #define IO_SPACE_LIMIT 0
>  
> -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot);
> -void __iomem *ioremap(phys_addr_t addr, size_t size);
> -void __iomem *ioremap_wc(phys_addr_t addr, size_t size);
> -void __iomem *ioremap_wt(phys_addr_t addr, size_t size);
> -void iounmap(volatile void __iomem *addr);
> +/*
> + * I/O memory mapping functions.
> + */
> +#define ioremap_prot ioremap_prot
> +#define iounmap iounmap
> +
> +#define _PAGE_IOREMAP pgprot_val(PAGE_KERNEL)
> +
> +#define ioremap_wc(addr, size)  \
> +	ioremap_prot((addr), (size), pgprot_val(pgprot_writecombine(PAGE_KERNEL)))
> +#define ioremap_wt(addr, size)  \
> +	ioremap_prot((addr), (size), pgprot_val(pgprot_writethrough(PAGE_KERNEL)))
>  
>  static inline void __iomem *ioport_map(unsigned long port, unsigned int nr)
>  {
> @@ -51,10 +58,6 @@ static inline void ioport_unmap(void __iomem *p)
>  #define pci_iomap_wc pci_iomap_wc
>  #define pci_iomap_wc_range pci_iomap_wc_range
>  
> -#define ioremap ioremap
> -#define ioremap_wt ioremap_wt
> -#define ioremap_wc ioremap_wc
> -
>  #define memcpy_fromio(dst, src, count)	zpci_memcpy_fromio(dst, src, count)
>  #define memcpy_toio(dst, src, count)	zpci_memcpy_toio(dst, src, count)
>  #define memset_io(dst, val, count)	zpci_memset_io(dst, val, count)
> diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
> index afc3f33788da..d34d5813d006 100644
> --- a/arch/s390/pci/pci.c
> +++ b/arch/s390/pci/pci.c
> @@ -244,62 +244,25 @@ void __iowrite64_copy(void __iomem *to, const void *from, size_t count)
>         zpci_memcpy_toio(to, from, count);
>  }
>  
> -static void __iomem *__ioremap(phys_addr_t addr, size_t size, pgprot_t prot)
> +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size,
> +			   unsigned long prot)
>  {
> -	unsigned long offset, vaddr;
> -	struct vm_struct *area;
> -	phys_addr_t last_addr;
> -
> -	last_addr = addr + size - 1;
> -	if (!size || last_addr < addr)
> -		return NULL;
> -
> +	/*
> +	 * When PCI MIO instructions are unavailable the "physical" address
> +	 * encodes a hint for accessing the PCI memory space it represents.
> +	 * Just pass it unchanged such that ioread/iowrite can decode it.
> +	 */
>  	if (!static_branch_unlikely(&have_mio))
> -		return (void __iomem *) addr;
> +		return (void __iomem *)phys_addr;
>  
> -	offset = addr & ~PAGE_MASK;
> -	addr &= PAGE_MASK;
> -	size = PAGE_ALIGN(size + offset);
> -	area = get_vm_area(size, VM_IOREMAP);
> -	if (!area)
> -		return NULL;
> -
> -	vaddr = (unsigned long) area->addr;
> -	if (ioremap_page_range(vaddr, vaddr + size, addr, prot)) {
> -		free_vm_area(area);
> -		return NULL;
> -	}
> -	return (void __iomem *) ((unsigned long) area->addr + offset);
> -}
> -
> -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot)
> -{
> -	return __ioremap(addr, size, __pgprot(prot));
> +	return generic_ioremap_prot(phys_addr, size, __pgprot(prot));
>  }
>  EXPORT_SYMBOL(ioremap_prot);
>  
> -void __iomem *ioremap(phys_addr_t addr, size_t size)
> -{
> -	return __ioremap(addr, size, PAGE_KERNEL);
> -}
> -EXPORT_SYMBOL(ioremap);
> -
> -void __iomem *ioremap_wc(phys_addr_t addr, size_t size)
> -{
> -	return __ioremap(addr, size, pgprot_writecombine(PAGE_KERNEL));
> -}
> -EXPORT_SYMBOL(ioremap_wc);
> -
> -void __iomem *ioremap_wt(phys_addr_t addr, size_t size)
> -{
> -	return __ioremap(addr, size, pgprot_writethrough(PAGE_KERNEL));
> -}
> -EXPORT_SYMBOL(ioremap_wt);
> -
>  void iounmap(volatile void __iomem *addr)
>  {
>  	if (static_branch_likely(&have_mio))
> -		vunmap((__force void *) ((unsigned long) addr & PAGE_MASK));
> +		generic_iounmap(addr);
>  }
>  EXPORT_SYMBOL(iounmap);
>  
> -- 
> 2.34.1
> 
> 

-- 
Sincerely yours,
Mike.

  reply	other threads:[~2023-05-16  6:51 UTC|newest]

Thread overview: 77+ 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-16  6:15   ` Mike Rapoport
2023-05-16 12:54     ` Baoquan He
2023-05-16  7:07   ` Geert Uytterhoeven
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-16  6:49   ` Mike Rapoport
2023-05-17  6:31   ` Christoph Hellwig
2023-05-18  3:43     ` Baoquan He
2023-05-30  9:25     ` Baoquan He
2023-06-01 11:14       ` Christoph Hellwig
2023-05-15  9:08 ` [PATCH v5 RESEND 08/17] ia64: " Baoquan He
2023-05-16  6:49   ` Mike Rapoport
2023-05-17  6:33   ` Christoph Hellwig
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 [this message]
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-16  7:00   ` Mike Rapoport
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-16  7:02   ` Mike Rapoport
2023-05-17  6:42   ` Christoph Hellwig
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=ZGMnyk4l6Id1flpN@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=borntraeger@linux.ibm.com \
    --cc=christophe.leroy@csgroup.eu \
    --cc=deller@gmx.de \
    --cc=gerald.schaefer@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=hch@infradead.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=schnelle@linux.ibm.com \
    --cc=shorne@gmail.com \
    --cc=svens@linux.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).