All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stafford Horne <shorne@gmail.com>
To: Baoquan He <bhe@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-mm@kvack.org, arnd@arndb.de, hch@lst.de,
	christophe.leroy@csgroup.eu, rppt@kernel.org,
	willy@infradead.org, agordeev@linux.ibm.com,
	wangkefeng.wang@huawei.com, schnelle@linux.ibm.com,
	David.Laight@aculab.com, deller@gmx.de, nathan@kernel.org,
	glaubitz@physik.fu-berlin.de, Jonas Bonn <jonas@southpole.se>,
	Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>,
	openrisc@lists.librecores.org
Subject: Re: [PATCH v7 09/19] openrisc: mm: Convert to GENERIC_IOREMAP
Date: Sat, 8 Jul 2023 01:33:26 +0100	[thread overview]
Message-ID: <ZKiu1hjMPHRTYBLy@antec> (raw)
In-Reply-To: <20230620131356.25440-10-bhe@redhat.com>

On Tue, Jun 20, 2023 at 09:13:46PM +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.
> 
> For openrisc, the current ioremap() and iounmap() are the same as
> generic version. After taking GENERIC_IOREMAP way, the old ioremap()
> and iounmap() can be completely removed.
> 
> Signed-off-by: Baoquan He <bhe@redhat.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
> Cc: Stafford Horne <shorne@gmail.com>
> Cc: Jonas Bonn <jonas@southpole.se>
> Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
> Cc: openrisc@lists.librecores.org
> ---
>  arch/openrisc/Kconfig          |  1 +
>  arch/openrisc/include/asm/io.h | 11 ++++----
>  arch/openrisc/mm/ioremap.c     | 49 ----------------------------------
>  3 files changed, 7 insertions(+), 54 deletions(-)
> 
> diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig
> index c7f282f60f64..fd9bb76a610b 100644
> --- a/arch/openrisc/Kconfig
> +++ b/arch/openrisc/Kconfig
> @@ -21,6 +21,7 @@ config OPENRISC
>  	select GENERIC_IRQ_PROBE
>  	select GENERIC_IRQ_SHOW
>  	select GENERIC_PCI_IOMAP
> +	select GENERIC_IOREMAP
>  	select GENERIC_CPU_DEVICES
>  	select HAVE_PCI
>  	select HAVE_UID16
> diff --git a/arch/openrisc/include/asm/io.h b/arch/openrisc/include/asm/io.h
> index ee6043a03173..5a6f0f16a5ce 100644
> --- a/arch/openrisc/include/asm/io.h
> +++ b/arch/openrisc/include/asm/io.h
> @@ -15,6 +15,8 @@
>  #define __ASM_OPENRISC_IO_H
>  
>  #include <linux/types.h>
> +#include <asm/pgalloc.h>
> +#include <asm/pgtable.h>
>  
>  /*
>   * PCI: We do not use IO ports in OpenRISC
> @@ -27,11 +29,10 @@
>  #define PIO_OFFSET		0
>  #define PIO_MASK		0
>  
> -#define ioremap ioremap
> -void __iomem *ioremap(phys_addr_t offset, unsigned long size);
> -
> -#define iounmap iounmap
> -extern void iounmap(volatile void __iomem *addr);
> +/*
> + * I/O memory mapping functions.
> + */
> +#define _PAGE_IOREMAP (pgprot_val(PAGE_KERNEL) | _PAGE_CI)
>  
>  #include <asm-generic/io.h>
>  
> diff --git a/arch/openrisc/mm/ioremap.c b/arch/openrisc/mm/ioremap.c
> index cdbcc7e73684..91c8259d4b7e 100644
> --- a/arch/openrisc/mm/ioremap.c
> +++ b/arch/openrisc/mm/ioremap.c
> @@ -22,55 +22,6 @@
>  
>  extern int mem_init_done;
>  
> -/*
> - * Remap an arbitrary physical address space into the kernel virtual
> - * address space. Needed when the kernel wants to access high addresses
> - * directly.
> - *
> - * 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 *__ref ioremap(phys_addr_t addr, unsigned long size)
> -{
> -	phys_addr_t p;
> -	unsigned long v;
> -	unsigned long offset, last_addr;
> -	struct vm_struct *area = NULL;
> -
> -	/* Don't allow wraparound or zero size */
> -	last_addr = addr + size - 1;
> -	if (!size || last_addr < addr)
> -		return NULL;
> -
> -	/*
> -	 * Mappings have to be page-aligned
> -	 */
> -	offset = addr & ~PAGE_MASK;
> -	p = addr & PAGE_MASK;
> -	size = PAGE_ALIGN(last_addr + 1) - p;
> -
> -	area = get_vm_area(size, VM_IOREMAP);
> -	if (!area)
> -		return NULL;
> -	v = (unsigned long)area->addr;
> -
> -	if (ioremap_page_range(v, v + size, p,
> -			__pgprot(pgprot_val(PAGE_KERNEL) | _PAGE_CI))) {
> -		vfree(area->addr);
> -		return NULL;
> -	}
> -
> -	return (void __iomem *)(offset + (char *)v);
> -}
> -EXPORT_SYMBOL(ioremap);
> -
> -void iounmap(volatile void __iomem *addr)
> -{
> -	return vfree((void *)(PAGE_MASK & (unsigned long)addr));
> -}
> -EXPORT_SYMBOL(iounmap);
> -

Hello,

Thanks for the patch, I was able to test this booting openrisc and running a few
glibc tests and see no issues.  Also the code cleanup looks good to me.

Acked-by: Stafford Horne <shorne@gmail.com>

>  /**
>   * OK, this one's a bit tricky... ioremap can get called before memory is
>   * initialized (early serial console does this) and will want to alloc a page
> -- 
> 2.34.1
> 

  reply	other threads:[~2023-07-08  0:33 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-20 13:13 [PATCH v7 00/19] mm: ioremap: Convert architectures to take GENERIC_IOREMAP way Baoquan He
2023-06-20 13:13 ` [PATCH v7 01/19] asm-generic/iomap.h: remove ARCH_HAS_IOREMAP_xx macros Baoquan He
2023-06-20 13:13 ` [PATCH v7 02/19] hexagon: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-06-21  2:15   ` kernel test robot
2023-06-21  8:50     ` Baoquan He
2023-06-21 19:08       ` Nathan Chancellor
2023-06-25  1:15         ` Baoquan He
2023-06-20 13:13 ` [PATCH v7 03/19] openrisc: mm: remove unneeded early ioremap code Baoquan He
2023-06-20 13:13 ` [PATCH v7 04/19] mm/ioremap: Define generic_ioremap_prot() and generic_iounmap() Baoquan He
2023-06-20 13:13 ` [PATCH v7 05/19] mm: ioremap: allow ARCH to have its own ioremap method definition Baoquan He
2023-06-20 13:13 ` [PATCH v7 06/19] mm/ioremap: add slab availability checking in ioremap_prot Baoquan He
2023-06-20 13:13 ` [PATCH v7 07/19] arc: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-06-20 13:13   ` Baoquan He
2023-06-20 13:13 ` [PATCH v7 08/19] ia64: " Baoquan He
2023-06-20 13:13 ` [PATCH v7 09/19] openrisc: " Baoquan He
2023-07-08  0:33   ` Stafford Horne [this message]
2023-07-09 10:11     ` Baoquan He
2023-06-20 13:13 ` [PATCH v7 10/19] s390: " Baoquan He
2023-06-21  5:43   ` kernel test robot
2023-06-21 10:41     ` Baoquan He
2023-06-21 10:46       ` Alexander Gordeev
2023-06-21 13:55         ` Baoquan He
2023-06-21 19:21       ` Nathan Chancellor
2023-06-24 12:45         ` Baoquan He
2023-07-06 15:55     ` Baoquan He
2023-06-20 13:13 ` [PATCH v7 11/19] sh: add <asm-generic/io.h> including Baoquan He
2023-06-20 13:13 ` [PATCH v7 12/19] sh: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-06-25 21:12   ` John Paul Adrian Glaubitz
2023-06-26  2:45     ` Baoquan He
2023-06-20 13:13 ` [PATCH v7 13/19] xtensa: " Baoquan He
2023-06-20 13:13 ` [PATCH v7 14/19] parisc: " Baoquan He
2023-06-20 13:13 ` [PATCH v7 15/19] mm/ioremap: Consider IOREMAP space in generic ioremap Baoquan He
2023-06-20 13:13 ` [PATCH v7 16/19] mm: move is_ioremap_addr() into new header file Baoquan He
2023-06-20 13:13 ` [PATCH v7 17/19] powerpc: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-06-20 13:13   ` Baoquan He
2023-06-20 13:13 ` [PATCH v7 18/19] arm64 : mm: add wrapper function ioremap_prot() Baoquan He
2023-06-20 13:13   ` Baoquan He
2023-06-20 13:13 ` [PATCH v7 19/19] mm: ioremap: remove unneeded ioremap_allowed and iounmap_allowed Baoquan He

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=ZKiu1hjMPHRTYBLy@antec \
    --to=shorne@gmail.com \
    --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=glaubitz@physik.fu-berlin.de \
    --cc=hch@lst.de \
    --cc=jonas@southpole.se \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nathan@kernel.org \
    --cc=openrisc@lists.librecores.org \
    --cc=rppt@kernel.org \
    --cc=schnelle@linux.ibm.com \
    --cc=stefan.kristiansson@saunalahti.fi \
    --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.