linux-parisc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Mike Rapoport <rppt@kernel.org>
Cc: Linux MM <linux-mm@kvack.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	Arnd Bergmann <arnd@arndb.de>,
	"David S. Miller" <davem@davemloft.net>,
	Greentime Hu <green.hu@gmail.com>,
	Greg Ungerer <gerg@linux-m68k.org>, Helge Deller <deller@gmx.de>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Jeff Dike <jdike@addtoit.com>,
	"Kirill A. Shutemov" <kirill@shutemov.name>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>, Michal Simek <monstr@monstr.eu>,
	Peter Rosin <peda@axentia.se>,
	Richard Weinberger <richard@nod.at>,
	Rolf Eike Beer <eike-kernel@sf-tec.de>,
	Russell King <linux@armlinux.org.uk>,
	Sam Creasey <sammy@sammy.net>, Vincent Chen <deanbo422@gmail.com>,
	Vineet Gupta <Vineet.Gupta1@synopsys.com>,
	alpha <linux-alpha@vger.kernel.org>,
	Linux-Arch <linux-arch@vger.kernel.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	linux-c6x-dev@linux-c6x.org,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-m68k <linux-m68k@lists.linux-m68k.org>,
	Parisc List <linux-parisc@vger.kernel.org>,
	linux-um@lists.infradead.org,
	sparclinux <sparclinux@vger.kernel.org>,
	Mike Rapoport <rppt@linux.ibm.com>
Subject: Re: [PATCH v3 05/13] m68k: mm: use pgtable-nopXd instead of 4level-fixup
Date: Mon, 4 Nov 2019 09:53:34 +0100	[thread overview]
Message-ID: <CAMuHMdUG3V7uxzhbetw75vVeobeP0-bQySb3r=0V5XujUF123g@mail.gmail.com> (raw)
In-Reply-To: <1572850587-20314-6-git-send-email-rppt@kernel.org>

Hi Mike,

On Mon, Nov 4, 2019 at 7:57 AM Mike Rapoport <rppt@kernel.org> wrote:
> From: Mike Rapoport <rppt@linux.ibm.com>
> m68k has two or three levels of page tables and can use appropriate
> pgtable-nopXd and folding of the upper layers.
>
> Replace usage of include/asm-generic/4level-fixup.h and explicit
> definitions of __PAGETABLE_PxD_FOLDED in m68k with
> include/asm-generic/pgtable-nopmd.h for two-level configurations and with
> include/asm-generic/pgtable-nopud.h for three-lelve configurations and
> adjust page table manipulation macros and functions accordingly.
>
> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> Acked-by: Greg Ungerer <gerg@linux-m68k.org>

Thanks for your patch!

The build error reported for v1 by kbuild test robot when building for
sun3x is still there (m68k defconfig or sun3x_defconfig):

    arch/m68k/sun3x/dvma.c: In function ‘dvma_map_cpu’:
    arch/m68k/sun3x/dvma.c:98:33: error: passing argument 2 of
‘pmd_alloc’ from incompatible pointer type
[-Werror=incompatible-pointer-types]
       if((pmd = pmd_alloc(&init_mm, pgd, vaddr)) == NULL) {
                                     ^~~
    In file included from arch/m68k/sun3x/dvma.c:17:
    include/linux/mm.h:1875:61: note: expected ‘pud_t *’ {aka ‘struct
<anonymous> *’} but argument is of type ‘pgd_t *’ {aka ‘struct
<anonymous> *’}
     static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud,
unsigned long address)
                                                          ~~~~~~~^~~

This indeed boots fine on ARAnyM, which emulates on 68040.
It would be good to have some boot testing on '020/030, too.

> --- a/arch/m68k/mm/kmap.c
> +++ b/arch/m68k/mm/kmap.c

> @@ -196,17 +198,21 @@ void __iomem *__ioremap(unsigned long physaddr, unsigned long size, int cachefla
>                         printk ("\npa=%#lx va=%#lx ", physaddr, virtaddr);
>  #endif
>                 pgd_dir = pgd_offset_k(virtaddr);
> -               pmd_dir = pmd_alloc(&init_mm, pgd_dir, virtaddr);
> +               p4d_dir = p4d_offset(pgd_dir, virtaddr);
> +               pud_dir = pud_offset(p4d_dir, virtaddr);
> +               pmd_dir = pmd_alloc(&init_mm, pud_dir, virtaddr);
>                 if (!pmd_dir) {
>                         printk("ioremap: no mem for pmd_dir\n");
>                         return NULL;
>                 }
>
>                 if (CPU_IS_020_OR_030) {
> +#if CONFIG_PGTABLE_LEVELS == 3

This check puzzled me a bit: when we get here, CONFIG_PGTABLE_LEVELS is
always true.
However, the check cannot be removed, as the code it protects fails to compile
when building for Coldfire.

Perhaps this can be made more clear by reverting the order?
I.e.

    #if CONFIG_PGTABLE_LEVELS == 3
            if (CPU_IS_020_OR_030) {
                    ...
            } else
    #endif
            {

Or is there some better way?

>                         pmd_dir->pmd[(virtaddr/PTRTREESIZE) & 15] = physaddr;
>                         physaddr += PTRTREESIZE;
>                         virtaddr += PTRTREESIZE;
>                         size -= PTRTREESIZE;
> +#endif
>                 } else {
>                         pte_dir = pte_alloc_kernel(pmd_dir, virtaddr);
>                         if (!pte_dir) {
> @@ -258,19 +264,24 @@ void __iounmap(void *addr, unsigned long size)
>  {
>         unsigned long virtaddr = (unsigned long)addr;
>         pgd_t *pgd_dir;
> +       p4d_t *p4d_dir;
> +       pud_t *pud_dir;
>         pmd_t *pmd_dir;
>         pte_t *pte_dir;
>
>         while ((long)size > 0) {
>                 pgd_dir = pgd_offset_k(virtaddr);
> -               if (pgd_bad(*pgd_dir)) {
> -                       printk("iounmap: bad pgd(%08lx)\n", pgd_val(*pgd_dir));
> -                       pgd_clear(pgd_dir);
> +               p4d_dir = p4d_offset(pgd_dir, virtaddr);
> +               pud_dir = pud_offset(p4d_dir, virtaddr);
> +               if (pud_bad(*pud_dir)) {
> +                       printk("iounmap: bad pgd(%08lx)\n", pud_val(*pud_dir));
> +                       pud_clear(pud_dir);
>                         return;
>                 }
> -               pmd_dir = pmd_offset(pgd_dir, virtaddr);
> +               pmd_dir = pmd_offset(pud_dir, virtaddr);
>
>                 if (CPU_IS_020_OR_030) {
> +#if CONFIG_PGTABLE_LEVELS == 3

Likewise.

>                         int pmd_off = (virtaddr/PTRTREESIZE) & 15;
>                         int pmd_type = pmd_dir->pmd[pmd_off] & _DESCTYPE_MASK;
>

> @@ -341,14 +355,17 @@ void kernel_set_cachemode(void *addr, unsigned long size, int cmode)
>
>         while ((long)size > 0) {
>                 pgd_dir = pgd_offset_k(virtaddr);
> -               if (pgd_bad(*pgd_dir)) {
> -                       printk("iocachemode: bad pgd(%08lx)\n", pgd_val(*pgd_dir));
> -                       pgd_clear(pgd_dir);
> +               p4d_dir = p4d_offset(pgd_dir, virtaddr);
> +               pud_dir = pud_offset(p4d_dir, virtaddr);
> +               if (pud_bad(*pud_dir)) {
> +                       printk("iocachemode: bad pud(%08lx)\n", pud_val(*pud_dir));
> +                       pud_clear(pud_dir);
>                         return;
>                 }
> -               pmd_dir = pmd_offset(pgd_dir, virtaddr);
> +               pmd_dir = pmd_offset(pud_dir, virtaddr);
>
>                 if (CPU_IS_020_OR_030) {
> +#if CONFIG_PGTABLE_LEVELS == 3

Likewise

>                         int pmd_off = (virtaddr/PTRTREESIZE) & 15;
>
>                         if ((pmd_dir->pmd[pmd_off] & _DESCTYPE_MASK) == _PAGE_PRESENT) {

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

  reply	other threads:[~2019-11-04  8:53 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-04  6:56 [PATCH v3 00/13] mm: remove __ARCH_HAS_4LEVEL_HACK Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 01/13] alpha: use pgtable-nopud instead of 4level-fixup Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 02/13] arm: nommu: " Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 03/13] c6x: " Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 04/13] m68k: nommu: " Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 05/13] m68k: mm: use pgtable-nopXd " Mike Rapoport
2019-11-04  8:53   ` Geert Uytterhoeven [this message]
2019-11-04  9:47     ` Mike Rapoport
2019-11-04  9:53       ` Geert Uytterhoeven
2019-11-06  7:28         ` Michael Schmitz
2019-11-08  4:29         ` Michael Schmitz
2019-11-08  8:32           ` Geert Uytterhoeven
2019-11-04  6:56 ` [PATCH v3 06/13] microblaze: use pgtable-nopmd " Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 07/13] nds32: " Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 08/13] parisc: use pgtable-nopXd " Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 09/13] parisc/hugetlb: " Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 10/13] sparc32: use pgtable-nopud " Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 11/13] um: remove unused pxx_offset_proc() and addr_pte() functions Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 12/13] um: add support for folded p4d page tables Mike Rapoport
2019-11-04  6:56 ` [PATCH v3 13/13] mm: remove __ARCH_HAS_4LEVEL_HACK and include/asm-generic/4level-fixup.h Mike Rapoport
2019-11-04  9:11   ` Arnd Bergmann
2019-11-04 10:02     ` Mike Rapoport

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='CAMuHMdUG3V7uxzhbetw75vVeobeP0-bQySb3r=0V5XujUF123g@mail.gmail.com' \
    --to=geert@linux-m68k.org \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=Vineet.Gupta1@synopsys.com \
    --cc=akpm@linux-foundation.org \
    --cc=anton.ivanov@cambridgegreys.com \
    --cc=arnd@arndb.de \
    --cc=davem@davemloft.net \
    --cc=deanbo422@gmail.com \
    --cc=deller@gmx.de \
    --cc=eike-kernel@sf-tec.de \
    --cc=gerg@linux-m68k.org \
    --cc=green.hu@gmail.com \
    --cc=jdike@addtoit.com \
    --cc=kirill@shutemov.name \
    --cc=linux-alpha@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-c6x-dev@linux-c6x.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=linux-um@lists.infradead.org \
    --cc=linux@armlinux.org.uk \
    --cc=mattst88@gmail.com \
    --cc=monstr@monstr.eu \
    --cc=msalter@redhat.com \
    --cc=peda@axentia.se \
    --cc=richard@nod.at \
    --cc=rppt@kernel.org \
    --cc=rppt@linux.ibm.com \
    --cc=sammy@sammy.net \
    --cc=sparclinux@vger.kernel.org \
    --cc=torvalds@linux-foundation.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).