All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	x86@kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Arnd Bergmann <arnd@arndb.de>,
	"H. Peter Anvin" <hpa@zytor.com>, Andi Kleen <ak@linux.intel.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Andy Lutomirski <luto@amacapital.net>,
	linux-arch@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCHv2 02/29] asm-generic: introduce 5level-fixup.h
Date: Fri, 27 Jan 2017 14:30:14 +0300	[thread overview]
Message-ID: <20170127113014.GA7662@node.shutemov.name> (raw)
In-Reply-To: <0183120a-5e8b-5da9-0bad-cc0295bb8337@suse.cz>

On Fri, Jan 27, 2017 at 12:06:02PM +0100, Vlastimil Babka wrote:
> On 12/27/2016 02:53 AM, Kirill A. Shutemov wrote:
> >We are going to switch core MM to 5-level paging abstraction.
> >
> >This is preparation step which adds <asm-generic/5level-fixup.h>
> >As with 4level-fixup.h, the new header allows quickly make all
> >architectures compatible with 5-level paging in core MM.
> >
> >In long run we would like to switch architectures to properly folded p4d
> >level by using <asm-generic/pgtable-nop4d.h>, but it requires more
> >changes to arch-specific code.
> >
> >Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> >---
> > include/asm-generic/4level-fixup.h |  3 ++-
> > include/asm-generic/5level-fixup.h | 41 ++++++++++++++++++++++++++++++++++++++
> > include/linux/mm.h                 |  3 +++
> > 3 files changed, 46 insertions(+), 1 deletion(-)
> > create mode 100644 include/asm-generic/5level-fixup.h
> >
> >diff --git a/include/asm-generic/4level-fixup.h b/include/asm-generic/4level-fixup.h
> >index 5bdab6bffd23..928fd66b1271 100644
> >--- a/include/asm-generic/4level-fixup.h
> >+++ b/include/asm-generic/4level-fixup.h
> >@@ -15,7 +15,6 @@
> > 	((unlikely(pgd_none(*(pud))) && __pmd_alloc(mm, pud, address))? \
> >  		NULL: pmd_offset(pud, address))
> >
> >-#define pud_alloc(mm, pgd, address)	(pgd)
> 
> This...
> 
> > #define pud_offset(pgd, start)		(pgd)
> > #define pud_none(pud)			0
> > #define pud_bad(pud)			0
> >@@ -35,4 +34,6 @@
> > #undef  pud_addr_end
> > #define pud_addr_end(addr, end)		(end)
> >
> >+#include <asm-generic/5level-fixup.h>
> 
> ... plus this...
> 
> >+
> > #endif
> >diff --git a/include/asm-generic/5level-fixup.h b/include/asm-generic/5level-fixup.h
> >new file mode 100644
> >index 000000000000..b5ca82dc4175
> >--- /dev/null
> >+++ b/include/asm-generic/5level-fixup.h
> >@@ -0,0 +1,41 @@
> >+#ifndef _5LEVEL_FIXUP_H
> >+#define _5LEVEL_FIXUP_H
> >+
> >+#define __ARCH_HAS_5LEVEL_HACK
> >+#define __PAGETABLE_P4D_FOLDED
> >+
> >+#define P4D_SHIFT			PGDIR_SHIFT
> >+#define P4D_SIZE			PGDIR_SIZE
> >+#define P4D_MASK			PGDIR_MASK
> >+#define PTRS_PER_P4D			1
> >+
> >+#define p4d_t				pgd_t
> >+
> >+#define pud_alloc(mm, p4d, address) \
> >+	((unlikely(pgd_none(*(p4d))) && __pud_alloc(mm, p4d, address)) ? \
> >+		NULL : pud_offset(p4d, address))
> 
> ... and this, makes me wonder if that broke pud_alloc() for architectures
> that use the 4level-fixup.h. Don't those need to continue having pud_alloc()
> as (pgd)?

Okay, that's very hacky, but works:

For 4level-fixup.h case we have __PAGETABLE_PUD_FOLDED set, so
__pud_alloc() will always succeed (see <linux/mm.h>). And pud_offset()
from 4level-fixup.h always returns pgd.

I've tested this on alpha with qemu.

-- 
 Kirill A. Shutemov

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	x86@kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Arnd Bergmann <arnd@arndb.de>,
	"H. Peter Anvin" <hpa@zytor.com>, Andi Kleen <ak@linux.intel.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Andy Lutomirski <luto@amacapital.net>,
	linux-arch@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCHv2 02/29] asm-generic: introduce 5level-fixup.h
Date: Fri, 27 Jan 2017 14:30:14 +0300	[thread overview]
Message-ID: <20170127113014.GA7662@node.shutemov.name> (raw)
Message-ID: <20170127113014.6JZxrLBejzjl8DiC-0UPioDXPnS0izQUUeX6-9xG8m0@z> (raw)
In-Reply-To: <0183120a-5e8b-5da9-0bad-cc0295bb8337@suse.cz>

On Fri, Jan 27, 2017 at 12:06:02PM +0100, Vlastimil Babka wrote:
> On 12/27/2016 02:53 AM, Kirill A. Shutemov wrote:
> >We are going to switch core MM to 5-level paging abstraction.
> >
> >This is preparation step which adds <asm-generic/5level-fixup.h>
> >As with 4level-fixup.h, the new header allows quickly make all
> >architectures compatible with 5-level paging in core MM.
> >
> >In long run we would like to switch architectures to properly folded p4d
> >level by using <asm-generic/pgtable-nop4d.h>, but it requires more
> >changes to arch-specific code.
> >
> >Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> >---
> > include/asm-generic/4level-fixup.h |  3 ++-
> > include/asm-generic/5level-fixup.h | 41 ++++++++++++++++++++++++++++++++++++++
> > include/linux/mm.h                 |  3 +++
> > 3 files changed, 46 insertions(+), 1 deletion(-)
> > create mode 100644 include/asm-generic/5level-fixup.h
> >
> >diff --git a/include/asm-generic/4level-fixup.h b/include/asm-generic/4level-fixup.h
> >index 5bdab6bffd23..928fd66b1271 100644
> >--- a/include/asm-generic/4level-fixup.h
> >+++ b/include/asm-generic/4level-fixup.h
> >@@ -15,7 +15,6 @@
> > 	((unlikely(pgd_none(*(pud))) && __pmd_alloc(mm, pud, address))? \
> >  		NULL: pmd_offset(pud, address))
> >
> >-#define pud_alloc(mm, pgd, address)	(pgd)
> 
> This...
> 
> > #define pud_offset(pgd, start)		(pgd)
> > #define pud_none(pud)			0
> > #define pud_bad(pud)			0
> >@@ -35,4 +34,6 @@
> > #undef  pud_addr_end
> > #define pud_addr_end(addr, end)		(end)
> >
> >+#include <asm-generic/5level-fixup.h>
> 
> ... plus this...
> 
> >+
> > #endif
> >diff --git a/include/asm-generic/5level-fixup.h b/include/asm-generic/5level-fixup.h
> >new file mode 100644
> >index 000000000000..b5ca82dc4175
> >--- /dev/null
> >+++ b/include/asm-generic/5level-fixup.h
> >@@ -0,0 +1,41 @@
> >+#ifndef _5LEVEL_FIXUP_H
> >+#define _5LEVEL_FIXUP_H
> >+
> >+#define __ARCH_HAS_5LEVEL_HACK
> >+#define __PAGETABLE_P4D_FOLDED
> >+
> >+#define P4D_SHIFT			PGDIR_SHIFT
> >+#define P4D_SIZE			PGDIR_SIZE
> >+#define P4D_MASK			PGDIR_MASK
> >+#define PTRS_PER_P4D			1
> >+
> >+#define p4d_t				pgd_t
> >+
> >+#define pud_alloc(mm, p4d, address) \
> >+	((unlikely(pgd_none(*(p4d))) && __pud_alloc(mm, p4d, address)) ? \
> >+		NULL : pud_offset(p4d, address))
> 
> ... and this, makes me wonder if that broke pud_alloc() for architectures
> that use the 4level-fixup.h. Don't those need to continue having pud_alloc()
> as (pgd)?

Okay, that's very hacky, but works:

For 4level-fixup.h case we have __PAGETABLE_PUD_FOLDED set, so
__pud_alloc() will always succeed (see <linux/mm.h>). And pud_offset()
from 4level-fixup.h always returns pgd.

I've tested this on alpha with qemu.

-- 
 Kirill A. Shutemov

  reply	other threads:[~2017-01-27 11:30 UTC|newest]

Thread overview: 166+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-27  1:53 [PATCHv2 00/29] 5-level paging Kirill A. Shutemov
2016-12-27  1:53 ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 01/29] x86/cpufeature: Add 5-level paging detecton Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 02/29] asm-generic: introduce 5level-fixup.h Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2017-01-27 11:06   ` Vlastimil Babka
2017-01-27 11:06     ` Vlastimil Babka
2017-01-27 11:30     ` Kirill A. Shutemov [this message]
2017-01-27 11:30       ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 03/29] asm-generic: introduce __ARCH_USE_5LEVEL_HACK Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2017-01-27 13:24   ` Vlastimil Babka
2017-01-27 13:24     ` Vlastimil Babka
2017-01-27 13:55     ` Kirill A. Shutemov
2017-01-27 13:55       ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 04/29] arch, mm: convert all architectures to use 5level-fixup.h Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 05/29] asm-generic: introduce <asm-generic/pgtable-nop4d.h> Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 06/29] mm: convert generic code to 5-level paging Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 07/29] mm: introduce __p4d_alloc() Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 08/29] x86: basic changes into headers for 5-level paging Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 09/29] x86: trivial portion of 5-level paging conversion Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 10/29] x86/gup: add 5-level paging support Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 11/29] x86/ident_map: " Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 12/29] x86/mm: add support of p4d_t in vmalloc_fault() Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 13/29] x86/power: support p4d_t in hibernate code Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 14/29] x86/kexec: support p4d_t Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:53 ` [PATCHv2 15/29] x86: convert the rest of the code to " Kirill A. Shutemov
2016-12-27  1:53   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 16/29] x86: detect 5-level paging support Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 17/29] x86/asm: remove __VIRTUAL_MASK_SHIFT==47 assert Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 18/29] x86/mm: define virtual memory map for 5-level paging Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 19/29] x86/paravirt: make paravirt code support " Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 20/29] x86/mm: basic defines/helpers for CONFIG_X86_5LEVEL Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 21/29] x86/dump_pagetables: support 5-level paging Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 22/29] x86/mm: extend kasan to " Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 23/29] x86/espfix: " Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 24/29] x86/mm: add support of additional page table level during early boot Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 25/29] x86/mm: add sync_global_pgds() for configuration with 5-level paging Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 26/29] x86/mm: make kernel_physical_mapping_init() support " Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 27/29] x86/mm: add support for 5-level paging for KASLR Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [PATCHv2 28/29] x86: enable 5-level paging support Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54 ` [RFC, PATCHv2 29/29] mm, x86: introduce RLIMIT_VADDR Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  1:54   ` Kirill A. Shutemov
2016-12-27  2:06   ` Andy Lutomirski
2016-12-27  2:06     ` Andy Lutomirski
2016-12-27  2:24     ` Kirill A. Shutemov
2016-12-27  2:24       ` Kirill A. Shutemov
2016-12-27  2:24       ` Kirill A. Shutemov
2016-12-27  3:22       ` Andy Lutomirski
2016-12-27  3:22         ` Andy Lutomirski
2017-01-02  9:09         ` Kirill A. Shutemov
2017-01-02  9:09           ` Kirill A. Shutemov
2017-01-02  9:09           ` Kirill A. Shutemov
2016-12-29  2:53       ` Carlos O'Donell
2016-12-29  2:53         ` Carlos O'Donell
2016-12-29  2:53         ` Carlos O'Donell
2016-12-31  2:08         ` Andy Lutomirski
2016-12-31  2:08           ` Andy Lutomirski
2017-01-02  8:35           ` Kirill A. Shutemov
2017-01-02  8:35             ` Kirill A. Shutemov
2017-01-02  8:35             ` Kirill A. Shutemov
2017-01-13 20:11             ` H.J. Lu
2017-01-13 20:11               ` H.J. Lu
2017-01-02  8:44   ` Arnd Bergmann
2017-01-02  8:44     ` Arnd Bergmann
2017-01-02  8:44     ` Arnd Bergmann
2017-01-02  8:44     ` Arnd Bergmann
2017-01-03  6:08     ` Andy Lutomirski
2017-01-03  6:08       ` Andy Lutomirski
2017-01-03  6:08       ` Andy Lutomirski
2017-01-03 13:18       ` Arnd Bergmann
2017-01-03 13:18         ` Arnd Bergmann
2017-01-03 13:18         ` Arnd Bergmann
2017-01-03 13:18         ` Arnd Bergmann
2017-01-03 18:29         ` Andy Lutomirski
2017-01-03 18:29           ` Andy Lutomirski
2017-01-03 18:29           ` Andy Lutomirski
2017-01-03 22:07           ` Arnd Bergmann
2017-01-03 22:07             ` Arnd Bergmann
2017-01-03 22:07             ` Arnd Bergmann
2017-01-03 22:09             ` Andy Lutomirski
2017-01-03 22:09               ` Andy Lutomirski
2017-01-03 22:09               ` Andy Lutomirski
2017-01-04 13:55               ` Arnd Bergmann
2017-01-04 13:55                 ` Arnd Bergmann
2017-01-04 13:55                 ` Arnd Bergmann
2017-01-04 13:55                 ` Arnd Bergmann
2017-01-03 16:04       ` Kirill A. Shutemov
2017-01-03 16:04         ` Kirill A. Shutemov
2017-01-03 16:04         ` Kirill A. Shutemov
2017-01-03 16:04         ` Kirill A. Shutemov
2017-01-03 18:27         ` Andy Lutomirski
2017-01-03 18:27           ` Andy Lutomirski
2017-01-03 18:27           ` Andy Lutomirski
2017-01-04 14:19           ` Kirill A. Shutemov
2017-01-04 14:19             ` Kirill A. Shutemov
2017-01-04 14:19             ` Kirill A. Shutemov
2017-01-05 17:53             ` Andy Lutomirski
2017-01-05 17:53               ` Andy Lutomirski
2017-01-05 17:53               ` Andy Lutomirski
2017-01-05 19:13   ` Dave Hansen
2017-01-05 19:13     ` Dave Hansen
2017-01-05 19:29     ` Kirill A. Shutemov
2017-01-05 19:29       ` Kirill A. Shutemov
2017-01-05 19:39       ` Dave Hansen
2017-01-05 19:39         ` Dave Hansen
2017-01-05 20:11         ` Kirill A. Shutemov
2017-01-05 20:11           ` Kirill A. Shutemov
2017-01-05 20:14         ` Andy Lutomirski
2017-01-05 20:14           ` Andy Lutomirski
2017-01-05 20:49           ` Dave Hansen
2017-01-05 20:49             ` Dave Hansen
     [not found]             ` <978d5f1a-ec4d-f747-93fd-27ecfe10cb88-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-01-05 21:27               ` Andy Lutomirski
2017-01-05 21:27                 ` Andy Lutomirski
2017-01-05 21:27                 ` Andy Lutomirski
2017-01-05 23:17                 ` Dave Hansen
2017-01-05 23:17                   ` Dave Hansen
2017-01-11 14:29             ` Kirill A. Shutemov
2017-01-11 14:29               ` Kirill A. Shutemov
2017-01-11 18:09               ` Andy Lutomirski
2017-01-11 18:09                 ` Andy Lutomirski
2017-01-11 18:37                 ` Kirill A. Shutemov
2017-01-11 18:37                   ` Kirill A. Shutemov
2017-01-11 18:49                   ` Dave Hansen
2017-01-11 18:49                     ` Dave Hansen
2017-01-11 19:20                     ` Andy Lutomirski
2017-01-11 19:20                       ` Andy Lutomirski
2017-01-11 19:31                       ` Linus Torvalds
2017-01-11 19:31                         ` Linus Torvalds
2017-01-11 21:46                         ` Andi Kleen
2017-01-11 21:46                           ` Andi Kleen
2017-01-11 19:32                       ` Kirill A. Shutemov
2017-01-11 19:32                         ` Kirill A. Shutemov
2017-01-11 19:39                         ` Linus Torvalds
2017-01-11 19:39                           ` Linus Torvalds
     [not found]               ` <20170111142904.GD4895-sVvlyX1904swdBt8bTSxpkEMvNT87kid@public.gmane.org>
2017-01-11 18:26                 ` Dave Hansen
2017-01-11 18:26                   ` Dave Hansen
2017-01-11 18:26                   ` Dave Hansen
2017-01-05 16:57 ` [PATCHv2 00/29] 5-level paging Kirill A. Shutemov
2017-01-05 16:57   ` Kirill A. Shutemov

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=20170127113014.GA7662@node.shutemov.name \
    --to=kirill@shutemov.name \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=dave.hansen@intel.com \
    --cc=hpa@zytor.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@amacapital.net \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=vbabka@suse.cz \
    --cc=x86@kernel.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.