Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1598866 > unrolled thread

[PATCH 19/26] x86/kasan: extend to support 5-level paging

Started by"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
First post2017-03-13 07:00 +0100
Last post2017-03-13 08:30 +0100
Articles 2 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 19/26] x86/kasan: extend to support 5-level paging "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> - 2017-03-13 07:00 +0100
    Re: [PATCH 19/26] x86/kasan: extend to support 5-level paging Dmitry Vyukov <dvyukov@google.com> - 2017-03-13 08:30 +0100

#1598866 — [PATCH 19/26] x86/kasan: extend to support 5-level paging

From"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Date2017-03-13 07:00 +0100
Subject[PATCH 19/26] x86/kasan: extend to support 5-level paging
Message-ID<tkrbs-4j8-13@gated-at.bofh.it>
This patch bring support for non-folded additional page table level.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Dmitry Vyukov <dvyukov@google.com
---
 arch/x86/mm/kasan_init_64.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c
index 733f8ba6a01f..bcabc56e0dc4 100644
--- a/arch/x86/mm/kasan_init_64.c
+++ b/arch/x86/mm/kasan_init_64.c
@@ -50,8 +50,18 @@ static void __init kasan_map_early_shadow(pgd_t *pgd)
 	unsigned long end = KASAN_SHADOW_END;
 
 	for (i = pgd_index(start); start < end; i++) {
-		pgd[i] = __pgd(__pa_nodebug(kasan_zero_pud)
-				| _KERNPG_TABLE);
+		switch (CONFIG_PGTABLE_LEVELS) {
+		case 4:
+			pgd[i] = __pgd(__pa_nodebug(kasan_zero_pud) |
+					_KERNPG_TABLE);
+			break;
+		case 5:
+			pgd[i] = __pgd(__pa_nodebug(kasan_zero_p4d) |
+					_KERNPG_TABLE);
+			break;
+		default:
+			BUILD_BUG();
+		}
 		start += PGDIR_SIZE;
 	}
 }
@@ -79,6 +89,7 @@ void __init kasan_early_init(void)
 	pteval_t pte_val = __pa_nodebug(kasan_zero_page) | __PAGE_KERNEL;
 	pmdval_t pmd_val = __pa_nodebug(kasan_zero_pte) | _KERNPG_TABLE;
 	pudval_t pud_val = __pa_nodebug(kasan_zero_pmd) | _KERNPG_TABLE;
+	p4dval_t p4d_val = __pa_nodebug(kasan_zero_pud) | _KERNPG_TABLE;
 
 	for (i = 0; i < PTRS_PER_PTE; i++)
 		kasan_zero_pte[i] = __pte(pte_val);
@@ -89,6 +100,9 @@ void __init kasan_early_init(void)
 	for (i = 0; i < PTRS_PER_PUD; i++)
 		kasan_zero_pud[i] = __pud(pud_val);
 
+	for (i = 0; CONFIG_PGTABLE_LEVELS >= 5 && i < PTRS_PER_P4D; i++)
+		kasan_zero_p4d[i] = __p4d(p4d_val);
+
 	kasan_map_early_shadow(early_level4_pgt);
 	kasan_map_early_shadow(init_level4_pgt);
 }
-- 
2.11.0

[toc] | [next] | [standalone]


#1598913

FromDmitry Vyukov <dvyukov@google.com>
Date2017-03-13 08:30 +0100
Message-ID<tksAx-5ue-3@gated-at.bofh.it>
In reply to#1598866
On Mon, Mar 13, 2017 at 6:50 AM, Kirill A. Shutemov
<kirill.shutemov@linux.intel.com> wrote:
> This patch bring support for non-folded additional page table level.
>
> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> Cc: Dmitry Vyukov <dvyukov@google.com

+Andrey Ryabinin

> ---
>  arch/x86/mm/kasan_init_64.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c
> index 733f8ba6a01f..bcabc56e0dc4 100644
> --- a/arch/x86/mm/kasan_init_64.c
> +++ b/arch/x86/mm/kasan_init_64.c
> @@ -50,8 +50,18 @@ static void __init kasan_map_early_shadow(pgd_t *pgd)
>         unsigned long end = KASAN_SHADOW_END;
>
>         for (i = pgd_index(start); start < end; i++) {
> -               pgd[i] = __pgd(__pa_nodebug(kasan_zero_pud)
> -                               | _KERNPG_TABLE);
> +               switch (CONFIG_PGTABLE_LEVELS) {
> +               case 4:
> +                       pgd[i] = __pgd(__pa_nodebug(kasan_zero_pud) |
> +                                       _KERNPG_TABLE);
> +                       break;
> +               case 5:
> +                       pgd[i] = __pgd(__pa_nodebug(kasan_zero_p4d) |
> +                                       _KERNPG_TABLE);
> +                       break;
> +               default:
> +                       BUILD_BUG();
> +               }
>                 start += PGDIR_SIZE;
>         }
>  }
> @@ -79,6 +89,7 @@ void __init kasan_early_init(void)
>         pteval_t pte_val = __pa_nodebug(kasan_zero_page) | __PAGE_KERNEL;
>         pmdval_t pmd_val = __pa_nodebug(kasan_zero_pte) | _KERNPG_TABLE;
>         pudval_t pud_val = __pa_nodebug(kasan_zero_pmd) | _KERNPG_TABLE;
> +       p4dval_t p4d_val = __pa_nodebug(kasan_zero_pud) | _KERNPG_TABLE;
>
>         for (i = 0; i < PTRS_PER_PTE; i++)
>                 kasan_zero_pte[i] = __pte(pte_val);
> @@ -89,6 +100,9 @@ void __init kasan_early_init(void)
>         for (i = 0; i < PTRS_PER_PUD; i++)
>                 kasan_zero_pud[i] = __pud(pud_val);
>
> +       for (i = 0; CONFIG_PGTABLE_LEVELS >= 5 && i < PTRS_PER_P4D; i++)
> +               kasan_zero_p4d[i] = __p4d(p4d_val);
> +
>         kasan_map_early_shadow(early_level4_pgt);
>         kasan_map_early_shadow(init_level4_pgt);
>  }
> --
> 2.11.0
>

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web