* [PATCH -next v2] riscv: Enable HAVE_ARCH_HUGE_VMAP for 64BIT
@ 2021-08-31 11:50 ` Liu Shixin
0 siblings, 0 replies; 5+ messages in thread
From: Liu Shixin @ 2021-08-31 11:50 UTC (permalink / raw)
To: Jonathan Corbet, Paul Walmsley, Palmer Dabbelt, Albert Ou
Cc: linux-doc, linux-kernel, linux-riscv, Liu Shixin
This sets the HAVE_ARCH_HUGE_VMAP option. Enable pmd vmap support and
define the required page table functions(Currently, riscv has only
three-level page tables support for 64BIT).
Signed-off-by: Liu Shixin <liushixin2@huawei.com>
---
.../features/vm/huge-vmap/arch-support.txt | 2 +-
arch/riscv/Kconfig | 1 +
arch/riscv/include/asm/vmalloc.h | 12 ++++++
arch/riscv/mm/Makefile | 1 +
arch/riscv/mm/pgtable.c | 38 +++++++++++++++++++
include/linux/pgtable.h | 14 ++++++-
6 files changed, 66 insertions(+), 2 deletions(-)
create mode 100644 arch/riscv/mm/pgtable.c
diff --git a/Documentation/features/vm/huge-vmap/arch-support.txt b/Documentation/features/vm/huge-vmap/arch-support.txt
index 439fd9069b8b..0ff394acc9cf 100644
--- a/Documentation/features/vm/huge-vmap/arch-support.txt
+++ b/Documentation/features/vm/huge-vmap/arch-support.txt
@@ -22,7 +22,7 @@
| openrisc: | TODO |
| parisc: | TODO |
| powerpc: | ok |
- | riscv: | TODO |
+ | riscv: | ok |
| s390: | TODO |
| sh: | TODO |
| sparc: | TODO |
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 820313bf3a9d..48418e71dfea 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -62,6 +62,7 @@ config RISCV
select GENERIC_TIME_VSYSCALL if MMU && 64BIT
select HANDLE_DOMAIN_IRQ
select HAVE_ARCH_AUDITSYSCALL
+ select HAVE_ARCH_HUGE_VMAP if MMU && 64BIT
select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
select HAVE_ARCH_JUMP_LABEL_RELATIVE if !XIP_KERNEL
select HAVE_ARCH_KASAN if MMU && 64BIT
diff --git a/arch/riscv/include/asm/vmalloc.h b/arch/riscv/include/asm/vmalloc.h
index ff9abc00d139..8f17f421f80c 100644
--- a/arch/riscv/include/asm/vmalloc.h
+++ b/arch/riscv/include/asm/vmalloc.h
@@ -1,4 +1,16 @@
#ifndef _ASM_RISCV_VMALLOC_H
#define _ASM_RISCV_VMALLOC_H
+#ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
+
+#define IOREMAP_MAX_ORDER (PMD_SHIFT)
+
+#define arch_vmap_pmd_supported arch_vmap_pmd_supported
+static inline bool __init arch_vmap_pmd_supported(pgprot_t prot)
+{
+ return true;
+}
+
+#endif
+
#endif /* _ASM_RISCV_VMALLOC_H */
diff --git a/arch/riscv/mm/Makefile b/arch/riscv/mm/Makefile
index 7ebaef10ea1b..f932b4d69946 100644
--- a/arch/riscv/mm/Makefile
+++ b/arch/riscv/mm/Makefile
@@ -13,6 +13,7 @@ obj-y += extable.o
obj-$(CONFIG_MMU) += fault.o pageattr.o
obj-y += cacheflush.o
obj-y += context.o
+obj-y += pgtable.o
ifeq ($(CONFIG_MMU),y)
obj-$(CONFIG_SMP) += tlbflush.o
diff --git a/arch/riscv/mm/pgtable.c b/arch/riscv/mm/pgtable.c
new file mode 100644
index 000000000000..1d2182c2c508
--- /dev/null
+++ b/arch/riscv/mm/pgtable.c
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <asm/pgalloc.h>
+#include <linux/gfp.h>
+#include <linux/kernel.h>
+#include <linux/pgtable.h>
+
+#ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
+
+int pmd_set_huge(pmd_t *pmd, phys_addr_t phys, pgprot_t prot)
+{
+ pmd_t new_pmd = pfn_pmd(__phys_to_pfn(phys), prot);
+
+ set_pmd(pmd, new_pmd);
+ return 1;
+}
+
+int pmd_clear_huge(pmd_t *pmd)
+{
+ if (!pmd_leaf(READ_ONCE(*pmd)))
+ return 0;
+ pmd_clear(pmd);
+ return 1;
+}
+
+int pmd_free_pte_page(pmd_t *pmd, unsigned long addr)
+{
+ pte_t *pte;
+
+ pte = (pte_t *)pmd_page_vaddr(*pmd);
+ pmd_clear(pmd);
+
+ flush_tlb_kernel_range(addr, addr + PMD_SIZE);
+ pte_free_kernel(NULL, pte);
+ return 1;
+}
+
+#endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
index e24d2c992b11..382072c8f996 100644
--- a/include/linux/pgtable.h
+++ b/include/linux/pgtable.h
@@ -1397,9 +1397,21 @@ static inline int p4d_clear_huge(p4d_t *p4d)
}
#endif /* !__PAGETABLE_P4D_FOLDED */
+#ifndef __PAGETABLE_PUD_FOLDED
int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot);
-int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot);
int pud_clear_huge(pud_t *pud);
+#else
+static inline int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
+{
+ return 0;
+}
+static inline int pud_clear_huge(pud_t *pud)
+{
+ return 0;
+}
+#endif /* !__PAGETABLE_PUD_FOLDED */
+
+int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot);
int pmd_clear_huge(pmd_t *pmd);
int p4d_free_pud_page(p4d_t *p4d, unsigned long addr);
int pud_free_pmd_page(pud_t *pud, unsigned long addr);
--
2.18.0.huawei.25
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH -next v2] riscv: Enable HAVE_ARCH_HUGE_VMAP for 64BIT
@ 2021-08-31 11:50 ` Liu Shixin
0 siblings, 0 replies; 5+ messages in thread
From: Liu Shixin @ 2021-08-31 11:50 UTC (permalink / raw)
To: Jonathan Corbet, Paul Walmsley, Palmer Dabbelt, Albert Ou
Cc: linux-doc, linux-kernel, linux-riscv, Liu Shixin
This sets the HAVE_ARCH_HUGE_VMAP option. Enable pmd vmap support and
define the required page table functions(Currently, riscv has only
three-level page tables support for 64BIT).
Signed-off-by: Liu Shixin <liushixin2@huawei.com>
---
.../features/vm/huge-vmap/arch-support.txt | 2 +-
arch/riscv/Kconfig | 1 +
arch/riscv/include/asm/vmalloc.h | 12 ++++++
arch/riscv/mm/Makefile | 1 +
arch/riscv/mm/pgtable.c | 38 +++++++++++++++++++
include/linux/pgtable.h | 14 ++++++-
6 files changed, 66 insertions(+), 2 deletions(-)
create mode 100644 arch/riscv/mm/pgtable.c
diff --git a/Documentation/features/vm/huge-vmap/arch-support.txt b/Documentation/features/vm/huge-vmap/arch-support.txt
index 439fd9069b8b..0ff394acc9cf 100644
--- a/Documentation/features/vm/huge-vmap/arch-support.txt
+++ b/Documentation/features/vm/huge-vmap/arch-support.txt
@@ -22,7 +22,7 @@
| openrisc: | TODO |
| parisc: | TODO |
| powerpc: | ok |
- | riscv: | TODO |
+ | riscv: | ok |
| s390: | TODO |
| sh: | TODO |
| sparc: | TODO |
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 820313bf3a9d..48418e71dfea 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -62,6 +62,7 @@ config RISCV
select GENERIC_TIME_VSYSCALL if MMU && 64BIT
select HANDLE_DOMAIN_IRQ
select HAVE_ARCH_AUDITSYSCALL
+ select HAVE_ARCH_HUGE_VMAP if MMU && 64BIT
select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
select HAVE_ARCH_JUMP_LABEL_RELATIVE if !XIP_KERNEL
select HAVE_ARCH_KASAN if MMU && 64BIT
diff --git a/arch/riscv/include/asm/vmalloc.h b/arch/riscv/include/asm/vmalloc.h
index ff9abc00d139..8f17f421f80c 100644
--- a/arch/riscv/include/asm/vmalloc.h
+++ b/arch/riscv/include/asm/vmalloc.h
@@ -1,4 +1,16 @@
#ifndef _ASM_RISCV_VMALLOC_H
#define _ASM_RISCV_VMALLOC_H
+#ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
+
+#define IOREMAP_MAX_ORDER (PMD_SHIFT)
+
+#define arch_vmap_pmd_supported arch_vmap_pmd_supported
+static inline bool __init arch_vmap_pmd_supported(pgprot_t prot)
+{
+ return true;
+}
+
+#endif
+
#endif /* _ASM_RISCV_VMALLOC_H */
diff --git a/arch/riscv/mm/Makefile b/arch/riscv/mm/Makefile
index 7ebaef10ea1b..f932b4d69946 100644
--- a/arch/riscv/mm/Makefile
+++ b/arch/riscv/mm/Makefile
@@ -13,6 +13,7 @@ obj-y += extable.o
obj-$(CONFIG_MMU) += fault.o pageattr.o
obj-y += cacheflush.o
obj-y += context.o
+obj-y += pgtable.o
ifeq ($(CONFIG_MMU),y)
obj-$(CONFIG_SMP) += tlbflush.o
diff --git a/arch/riscv/mm/pgtable.c b/arch/riscv/mm/pgtable.c
new file mode 100644
index 000000000000..1d2182c2c508
--- /dev/null
+++ b/arch/riscv/mm/pgtable.c
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <asm/pgalloc.h>
+#include <linux/gfp.h>
+#include <linux/kernel.h>
+#include <linux/pgtable.h>
+
+#ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
+
+int pmd_set_huge(pmd_t *pmd, phys_addr_t phys, pgprot_t prot)
+{
+ pmd_t new_pmd = pfn_pmd(__phys_to_pfn(phys), prot);
+
+ set_pmd(pmd, new_pmd);
+ return 1;
+}
+
+int pmd_clear_huge(pmd_t *pmd)
+{
+ if (!pmd_leaf(READ_ONCE(*pmd)))
+ return 0;
+ pmd_clear(pmd);
+ return 1;
+}
+
+int pmd_free_pte_page(pmd_t *pmd, unsigned long addr)
+{
+ pte_t *pte;
+
+ pte = (pte_t *)pmd_page_vaddr(*pmd);
+ pmd_clear(pmd);
+
+ flush_tlb_kernel_range(addr, addr + PMD_SIZE);
+ pte_free_kernel(NULL, pte);
+ return 1;
+}
+
+#endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
index e24d2c992b11..382072c8f996 100644
--- a/include/linux/pgtable.h
+++ b/include/linux/pgtable.h
@@ -1397,9 +1397,21 @@ static inline int p4d_clear_huge(p4d_t *p4d)
}
#endif /* !__PAGETABLE_P4D_FOLDED */
+#ifndef __PAGETABLE_PUD_FOLDED
int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot);
-int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot);
int pud_clear_huge(pud_t *pud);
+#else
+static inline int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
+{
+ return 0;
+}
+static inline int pud_clear_huge(pud_t *pud)
+{
+ return 0;
+}
+#endif /* !__PAGETABLE_PUD_FOLDED */
+
+int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot);
int pmd_clear_huge(pmd_t *pmd);
int p4d_free_pud_page(p4d_t *p4d, unsigned long addr);
int pud_free_pmd_page(pud_t *pud, unsigned long addr);
--
2.18.0.huawei.25
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH -next v2] riscv: Enable HAVE_ARCH_HUGE_VMAP for 64BIT
2021-08-31 11:50 ` Liu Shixin
(?)
@ 2021-08-31 20:35 ` kernel test robot
-1 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2021-08-31 20:35 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 5765 bytes --]
Hi Liu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on next-20210831]
url: https://github.com/0day-ci/linux/commits/Liu-Shixin/riscv-Enable-HAVE_ARCH_HUGE_VMAP-for-64BIT/20210831-202818
base: 52c7b727581fe725f8b8a283af21fe0651c73c48
config: arm64-buildonly-randconfig-r006-20210831 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/56c97e9d9ededae88111ef9b72e88de4c0d85b29
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Liu-Shixin/riscv-Enable-HAVE_ARCH_HUGE_VMAP-for-64BIT/20210831-202818
git checkout 56c97e9d9ededae88111ef9b72e88de4c0d85b29
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/mm/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> arch/arm64/mm/mmu.c:1342:5: error: redefinition of 'pud_set_huge'
1342 | int pud_set_huge(pud_t *pudp, phys_addr_t phys, pgprot_t prot)
| ^~~~~~~~~~~~
In file included from include/linux/mm.h:33,
from include/linux/pid_namespace.h:7,
from include/linux/ptrace.h:10,
from include/linux/elfcore.h:11,
from include/linux/crash_core.h:6,
from include/linux/kexec.h:18,
from arch/arm64/mm/mmu.c:15:
include/linux/pgtable.h:1404:19: note: previous definition of 'pud_set_huge' with type 'int(pud_t *, phys_addr_t, pgprot_t)' {aka 'int(pud_t *, long long unsigned int, pgprot_t)'}
1404 | static inline int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
| ^~~~~~~~~~~~
>> arch/arm64/mm/mmu.c:1370:5: error: redefinition of 'pud_clear_huge'
1370 | int pud_clear_huge(pud_t *pudp)
| ^~~~~~~~~~~~~~
In file included from include/linux/mm.h:33,
from include/linux/pid_namespace.h:7,
from include/linux/ptrace.h:10,
from include/linux/elfcore.h:11,
from include/linux/crash_core.h:6,
from include/linux/kexec.h:18,
from arch/arm64/mm/mmu.c:15:
include/linux/pgtable.h:1408:19: note: previous definition of 'pud_clear_huge' with type 'int(pud_t *)'
1408 | static inline int pud_clear_huge(pud_t *pud)
| ^~~~~~~~~~~~~~
vim +/pud_set_huge +1342 arch/arm64/mm/mmu.c
61bd93ce801bb6 Ard Biesheuvel 2015-06-01 1341
20a004e7b017cc Will Deacon 2018-02-15 @1342 int pud_set_huge(pud_t *pudp, phys_addr_t phys, pgprot_t prot)
324420bf91f605 Ard Biesheuvel 2016-02-16 1343 {
f7f0097af67c3c Anshuman Khandual 2019-05-27 1344 pud_t new_pud = pfn_pud(__phys_to_pfn(phys), mk_pud_sect_prot(prot));
15122ee2c515a2 Will Deacon 2018-02-21 1345
82034c23fcbc23 Laura Abbott 2018-05-23 1346 /* Only allow permission changes for now */
82034c23fcbc23 Laura Abbott 2018-05-23 1347 if (!pgattr_change_is_safe(READ_ONCE(pud_val(*pudp)),
82034c23fcbc23 Laura Abbott 2018-05-23 1348 pud_val(new_pud)))
15122ee2c515a2 Will Deacon 2018-02-21 1349 return 0;
15122ee2c515a2 Will Deacon 2018-02-21 1350
87dedf7c61ab07 Anshuman Khandual 2019-05-27 1351 VM_BUG_ON(phys & ~PUD_MASK);
82034c23fcbc23 Laura Abbott 2018-05-23 1352 set_pud(pudp, new_pud);
324420bf91f605 Ard Biesheuvel 2016-02-16 1353 return 1;
324420bf91f605 Ard Biesheuvel 2016-02-16 1354 }
324420bf91f605 Ard Biesheuvel 2016-02-16 1355
20a004e7b017cc Will Deacon 2018-02-15 1356 int pmd_set_huge(pmd_t *pmdp, phys_addr_t phys, pgprot_t prot)
324420bf91f605 Ard Biesheuvel 2016-02-16 1357 {
f7f0097af67c3c Anshuman Khandual 2019-05-27 1358 pmd_t new_pmd = pfn_pmd(__phys_to_pfn(phys), mk_pmd_sect_prot(prot));
15122ee2c515a2 Will Deacon 2018-02-21 1359
82034c23fcbc23 Laura Abbott 2018-05-23 1360 /* Only allow permission changes for now */
82034c23fcbc23 Laura Abbott 2018-05-23 1361 if (!pgattr_change_is_safe(READ_ONCE(pmd_val(*pmdp)),
82034c23fcbc23 Laura Abbott 2018-05-23 1362 pmd_val(new_pmd)))
15122ee2c515a2 Will Deacon 2018-02-21 1363 return 0;
15122ee2c515a2 Will Deacon 2018-02-21 1364
87dedf7c61ab07 Anshuman Khandual 2019-05-27 1365 VM_BUG_ON(phys & ~PMD_MASK);
82034c23fcbc23 Laura Abbott 2018-05-23 1366 set_pmd(pmdp, new_pmd);
324420bf91f605 Ard Biesheuvel 2016-02-16 1367 return 1;
324420bf91f605 Ard Biesheuvel 2016-02-16 1368 }
324420bf91f605 Ard Biesheuvel 2016-02-16 1369
d8a719059b9dc9 Jonathan Marek 2021-07-21 @1370 int pud_clear_huge(pud_t *pudp)
d8a719059b9dc9 Jonathan Marek 2021-07-21 1371 {
d8a719059b9dc9 Jonathan Marek 2021-07-21 1372 if (!pud_sect(READ_ONCE(*pudp)))
d8a719059b9dc9 Jonathan Marek 2021-07-21 1373 return 0;
d8a719059b9dc9 Jonathan Marek 2021-07-21 1374 pud_clear(pudp);
d8a719059b9dc9 Jonathan Marek 2021-07-21 1375 return 1;
d8a719059b9dc9 Jonathan Marek 2021-07-21 1376 }
d8a719059b9dc9 Jonathan Marek 2021-07-21 1377
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29844 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH -next v2] riscv: Enable HAVE_ARCH_HUGE_VMAP for 64BIT
2021-08-31 11:50 ` Liu Shixin
@ 2021-09-01 6:48 ` kernel test robot
-1 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2021-09-01 6:48 UTC (permalink / raw)
To: Liu Shixin; +Cc: llvm, kbuild-all
[-- Attachment #1: Type: text/plain, Size: 8462 bytes --]
Hi Liu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on next-20210831]
url: https://github.com/0day-ci/linux/commits/Liu-Shixin/riscv-Enable-HAVE_ARCH_HUGE_VMAP-for-64BIT/20210831-202818
base: 52c7b727581fe725f8b8a283af21fe0651c73c48
config: i386-randconfig-a011-20210831 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 4b1fde8a2b681dad2ce0c082a5d6422caa06b0bc)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/56c97e9d9ededae88111ef9b72e88de4c0d85b29
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Liu-Shixin/riscv-Enable-HAVE_ARCH_HUGE_VMAP-for-64BIT/20210831-202818
git checkout 56c97e9d9ededae88111ef9b72e88de4c0d85b29
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir ARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> arch/x86/mm/pgtable.c:703:5: error: redefinition of 'pud_set_huge'
int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
^
include/linux/pgtable.h:1404:19: note: previous definition is here
static inline int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
^
>> arch/x86/mm/pgtable.c:758:5: error: redefinition of 'pud_clear_huge'
int pud_clear_huge(pud_t *pud)
^
include/linux/pgtable.h:1408:19: note: previous definition is here
static inline int pud_clear_huge(pud_t *pud)
^
2 errors generated.
vim +/pud_set_huge +703 arch/x86/mm/pgtable.c
b8504058a06bd1 Kirill A. Shutemov 2017-03-30 684
3d3ca416d9b078 Toshi Kani 2015-05-26 685 /**
3d3ca416d9b078 Toshi Kani 2015-05-26 686 * pud_set_huge - setup kernel PUD mapping
3d3ca416d9b078 Toshi Kani 2015-05-26 687 *
b73522e0c1be58 Toshi Kani 2015-05-26 688 * MTRRs can override PAT memory types with 4KiB granularity. Therefore, this
b73522e0c1be58 Toshi Kani 2015-05-26 689 * function sets up a huge page only if any of the following conditions are met:
b73522e0c1be58 Toshi Kani 2015-05-26 690 *
b73522e0c1be58 Toshi Kani 2015-05-26 691 * - MTRRs are disabled, or
b73522e0c1be58 Toshi Kani 2015-05-26 692 *
b73522e0c1be58 Toshi Kani 2015-05-26 693 * - MTRRs are enabled and the range is completely covered by a single MTRR, or
b73522e0c1be58 Toshi Kani 2015-05-26 694 *
b73522e0c1be58 Toshi Kani 2015-05-26 695 * - MTRRs are enabled and the corresponding MTRR memory type is WB, which
b73522e0c1be58 Toshi Kani 2015-05-26 696 * has no effect on the requested PAT memory type.
b73522e0c1be58 Toshi Kani 2015-05-26 697 *
b73522e0c1be58 Toshi Kani 2015-05-26 698 * Callers should try to decrease page size (1GB -> 2MB -> 4K) if the bigger
b73522e0c1be58 Toshi Kani 2015-05-26 699 * page mapping attempt fails.
3d3ca416d9b078 Toshi Kani 2015-05-26 700 *
3d3ca416d9b078 Toshi Kani 2015-05-26 701 * Returns 1 on success and 0 on failure.
3d3ca416d9b078 Toshi Kani 2015-05-26 702 */
6b6378355b9250 Toshi Kani 2015-04-14 @703 int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
6b6378355b9250 Toshi Kani 2015-04-14 704 {
b73522e0c1be58 Toshi Kani 2015-05-26 705 u8 mtrr, uniform;
6b6378355b9250 Toshi Kani 2015-04-14 706
b73522e0c1be58 Toshi Kani 2015-05-26 707 mtrr = mtrr_type_lookup(addr, addr + PUD_SIZE, &uniform);
b73522e0c1be58 Toshi Kani 2015-05-26 708 if ((mtrr != MTRR_TYPE_INVALID) && (!uniform) &&
b73522e0c1be58 Toshi Kani 2015-05-26 709 (mtrr != MTRR_TYPE_WRBACK))
6b6378355b9250 Toshi Kani 2015-04-14 710 return 0;
6b6378355b9250 Toshi Kani 2015-04-14 711
e3e288121408c3 Joerg Roedel 2018-04-11 712 /* Bail out if we are we on a populated non-leaf entry: */
e3e288121408c3 Joerg Roedel 2018-04-11 713 if (pud_present(*pud) && !pud_huge(*pud))
e3e288121408c3 Joerg Roedel 2018-04-11 714 return 0;
e3e288121408c3 Joerg Roedel 2018-04-11 715
6b6378355b9250 Toshi Kani 2015-04-14 716 set_pte((pte_t *)pud, pfn_pte(
6b6378355b9250 Toshi Kani 2015-04-14 717 (u64)addr >> PAGE_SHIFT,
d073569363d9f0 Christoph Hellwig 2020-04-08 718 __pgprot(protval_4k_2_large(pgprot_val(prot)) | _PAGE_PSE)));
6b6378355b9250 Toshi Kani 2015-04-14 719
6b6378355b9250 Toshi Kani 2015-04-14 720 return 1;
6b6378355b9250 Toshi Kani 2015-04-14 721 }
6b6378355b9250 Toshi Kani 2015-04-14 722
3d3ca416d9b078 Toshi Kani 2015-05-26 723 /**
3d3ca416d9b078 Toshi Kani 2015-05-26 724 * pmd_set_huge - setup kernel PMD mapping
3d3ca416d9b078 Toshi Kani 2015-05-26 725 *
b73522e0c1be58 Toshi Kani 2015-05-26 726 * See text over pud_set_huge() above.
3d3ca416d9b078 Toshi Kani 2015-05-26 727 *
3d3ca416d9b078 Toshi Kani 2015-05-26 728 * Returns 1 on success and 0 on failure.
3d3ca416d9b078 Toshi Kani 2015-05-26 729 */
6b6378355b9250 Toshi Kani 2015-04-14 730 int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot)
6b6378355b9250 Toshi Kani 2015-04-14 731 {
b73522e0c1be58 Toshi Kani 2015-05-26 732 u8 mtrr, uniform;
6b6378355b9250 Toshi Kani 2015-04-14 733
b73522e0c1be58 Toshi Kani 2015-05-26 734 mtrr = mtrr_type_lookup(addr, addr + PMD_SIZE, &uniform);
b73522e0c1be58 Toshi Kani 2015-05-26 735 if ((mtrr != MTRR_TYPE_INVALID) && (!uniform) &&
b73522e0c1be58 Toshi Kani 2015-05-26 736 (mtrr != MTRR_TYPE_WRBACK)) {
b73522e0c1be58 Toshi Kani 2015-05-26 737 pr_warn_once("%s: Cannot satisfy [mem %#010llx-%#010llx] with a huge-page mapping due to MTRR override.\n",
b73522e0c1be58 Toshi Kani 2015-05-26 738 __func__, addr, addr + PMD_SIZE);
6b6378355b9250 Toshi Kani 2015-04-14 739 return 0;
b73522e0c1be58 Toshi Kani 2015-05-26 740 }
6b6378355b9250 Toshi Kani 2015-04-14 741
e3e288121408c3 Joerg Roedel 2018-04-11 742 /* Bail out if we are we on a populated non-leaf entry: */
e3e288121408c3 Joerg Roedel 2018-04-11 743 if (pmd_present(*pmd) && !pmd_huge(*pmd))
e3e288121408c3 Joerg Roedel 2018-04-11 744 return 0;
e3e288121408c3 Joerg Roedel 2018-04-11 745
6b6378355b9250 Toshi Kani 2015-04-14 746 set_pte((pte_t *)pmd, pfn_pte(
6b6378355b9250 Toshi Kani 2015-04-14 747 (u64)addr >> PAGE_SHIFT,
d073569363d9f0 Christoph Hellwig 2020-04-08 748 __pgprot(protval_4k_2_large(pgprot_val(prot)) | _PAGE_PSE)));
6b6378355b9250 Toshi Kani 2015-04-14 749
6b6378355b9250 Toshi Kani 2015-04-14 750 return 1;
6b6378355b9250 Toshi Kani 2015-04-14 751 }
6b6378355b9250 Toshi Kani 2015-04-14 752
d8a719059b9dc9 Jonathan Marek 2021-07-21 753 /**
d8a719059b9dc9 Jonathan Marek 2021-07-21 754 * pud_clear_huge - clear kernel PUD mapping when it is set
d8a719059b9dc9 Jonathan Marek 2021-07-21 755 *
d8a719059b9dc9 Jonathan Marek 2021-07-21 756 * Returns 1 on success and 0 on failure (no PUD map is found).
d8a719059b9dc9 Jonathan Marek 2021-07-21 757 */
d8a719059b9dc9 Jonathan Marek 2021-07-21 @758 int pud_clear_huge(pud_t *pud)
d8a719059b9dc9 Jonathan Marek 2021-07-21 759 {
d8a719059b9dc9 Jonathan Marek 2021-07-21 760 if (pud_large(*pud)) {
d8a719059b9dc9 Jonathan Marek 2021-07-21 761 pud_clear(pud);
d8a719059b9dc9 Jonathan Marek 2021-07-21 762 return 1;
d8a719059b9dc9 Jonathan Marek 2021-07-21 763 }
d8a719059b9dc9 Jonathan Marek 2021-07-21 764
d8a719059b9dc9 Jonathan Marek 2021-07-21 765 return 0;
d8a719059b9dc9 Jonathan Marek 2021-07-21 766 }
d8a719059b9dc9 Jonathan Marek 2021-07-21 767
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 35502 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH -next v2] riscv: Enable HAVE_ARCH_HUGE_VMAP for 64BIT
@ 2021-09-01 6:48 ` kernel test robot
0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2021-09-01 6:48 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 8595 bytes --]
Hi Liu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on next-20210831]
url: https://github.com/0day-ci/linux/commits/Liu-Shixin/riscv-Enable-HAVE_ARCH_HUGE_VMAP-for-64BIT/20210831-202818
base: 52c7b727581fe725f8b8a283af21fe0651c73c48
config: i386-randconfig-a011-20210831 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 4b1fde8a2b681dad2ce0c082a5d6422caa06b0bc)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/56c97e9d9ededae88111ef9b72e88de4c0d85b29
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Liu-Shixin/riscv-Enable-HAVE_ARCH_HUGE_VMAP-for-64BIT/20210831-202818
git checkout 56c97e9d9ededae88111ef9b72e88de4c0d85b29
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir ARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> arch/x86/mm/pgtable.c:703:5: error: redefinition of 'pud_set_huge'
int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
^
include/linux/pgtable.h:1404:19: note: previous definition is here
static inline int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
^
>> arch/x86/mm/pgtable.c:758:5: error: redefinition of 'pud_clear_huge'
int pud_clear_huge(pud_t *pud)
^
include/linux/pgtable.h:1408:19: note: previous definition is here
static inline int pud_clear_huge(pud_t *pud)
^
2 errors generated.
vim +/pud_set_huge +703 arch/x86/mm/pgtable.c
b8504058a06bd1 Kirill A. Shutemov 2017-03-30 684
3d3ca416d9b078 Toshi Kani 2015-05-26 685 /**
3d3ca416d9b078 Toshi Kani 2015-05-26 686 * pud_set_huge - setup kernel PUD mapping
3d3ca416d9b078 Toshi Kani 2015-05-26 687 *
b73522e0c1be58 Toshi Kani 2015-05-26 688 * MTRRs can override PAT memory types with 4KiB granularity. Therefore, this
b73522e0c1be58 Toshi Kani 2015-05-26 689 * function sets up a huge page only if any of the following conditions are met:
b73522e0c1be58 Toshi Kani 2015-05-26 690 *
b73522e0c1be58 Toshi Kani 2015-05-26 691 * - MTRRs are disabled, or
b73522e0c1be58 Toshi Kani 2015-05-26 692 *
b73522e0c1be58 Toshi Kani 2015-05-26 693 * - MTRRs are enabled and the range is completely covered by a single MTRR, or
b73522e0c1be58 Toshi Kani 2015-05-26 694 *
b73522e0c1be58 Toshi Kani 2015-05-26 695 * - MTRRs are enabled and the corresponding MTRR memory type is WB, which
b73522e0c1be58 Toshi Kani 2015-05-26 696 * has no effect on the requested PAT memory type.
b73522e0c1be58 Toshi Kani 2015-05-26 697 *
b73522e0c1be58 Toshi Kani 2015-05-26 698 * Callers should try to decrease page size (1GB -> 2MB -> 4K) if the bigger
b73522e0c1be58 Toshi Kani 2015-05-26 699 * page mapping attempt fails.
3d3ca416d9b078 Toshi Kani 2015-05-26 700 *
3d3ca416d9b078 Toshi Kani 2015-05-26 701 * Returns 1 on success and 0 on failure.
3d3ca416d9b078 Toshi Kani 2015-05-26 702 */
6b6378355b9250 Toshi Kani 2015-04-14 @703 int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
6b6378355b9250 Toshi Kani 2015-04-14 704 {
b73522e0c1be58 Toshi Kani 2015-05-26 705 u8 mtrr, uniform;
6b6378355b9250 Toshi Kani 2015-04-14 706
b73522e0c1be58 Toshi Kani 2015-05-26 707 mtrr = mtrr_type_lookup(addr, addr + PUD_SIZE, &uniform);
b73522e0c1be58 Toshi Kani 2015-05-26 708 if ((mtrr != MTRR_TYPE_INVALID) && (!uniform) &&
b73522e0c1be58 Toshi Kani 2015-05-26 709 (mtrr != MTRR_TYPE_WRBACK))
6b6378355b9250 Toshi Kani 2015-04-14 710 return 0;
6b6378355b9250 Toshi Kani 2015-04-14 711
e3e288121408c3 Joerg Roedel 2018-04-11 712 /* Bail out if we are we on a populated non-leaf entry: */
e3e288121408c3 Joerg Roedel 2018-04-11 713 if (pud_present(*pud) && !pud_huge(*pud))
e3e288121408c3 Joerg Roedel 2018-04-11 714 return 0;
e3e288121408c3 Joerg Roedel 2018-04-11 715
6b6378355b9250 Toshi Kani 2015-04-14 716 set_pte((pte_t *)pud, pfn_pte(
6b6378355b9250 Toshi Kani 2015-04-14 717 (u64)addr >> PAGE_SHIFT,
d073569363d9f0 Christoph Hellwig 2020-04-08 718 __pgprot(protval_4k_2_large(pgprot_val(prot)) | _PAGE_PSE)));
6b6378355b9250 Toshi Kani 2015-04-14 719
6b6378355b9250 Toshi Kani 2015-04-14 720 return 1;
6b6378355b9250 Toshi Kani 2015-04-14 721 }
6b6378355b9250 Toshi Kani 2015-04-14 722
3d3ca416d9b078 Toshi Kani 2015-05-26 723 /**
3d3ca416d9b078 Toshi Kani 2015-05-26 724 * pmd_set_huge - setup kernel PMD mapping
3d3ca416d9b078 Toshi Kani 2015-05-26 725 *
b73522e0c1be58 Toshi Kani 2015-05-26 726 * See text over pud_set_huge() above.
3d3ca416d9b078 Toshi Kani 2015-05-26 727 *
3d3ca416d9b078 Toshi Kani 2015-05-26 728 * Returns 1 on success and 0 on failure.
3d3ca416d9b078 Toshi Kani 2015-05-26 729 */
6b6378355b9250 Toshi Kani 2015-04-14 730 int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot)
6b6378355b9250 Toshi Kani 2015-04-14 731 {
b73522e0c1be58 Toshi Kani 2015-05-26 732 u8 mtrr, uniform;
6b6378355b9250 Toshi Kani 2015-04-14 733
b73522e0c1be58 Toshi Kani 2015-05-26 734 mtrr = mtrr_type_lookup(addr, addr + PMD_SIZE, &uniform);
b73522e0c1be58 Toshi Kani 2015-05-26 735 if ((mtrr != MTRR_TYPE_INVALID) && (!uniform) &&
b73522e0c1be58 Toshi Kani 2015-05-26 736 (mtrr != MTRR_TYPE_WRBACK)) {
b73522e0c1be58 Toshi Kani 2015-05-26 737 pr_warn_once("%s: Cannot satisfy [mem %#010llx-%#010llx] with a huge-page mapping due to MTRR override.\n",
b73522e0c1be58 Toshi Kani 2015-05-26 738 __func__, addr, addr + PMD_SIZE);
6b6378355b9250 Toshi Kani 2015-04-14 739 return 0;
b73522e0c1be58 Toshi Kani 2015-05-26 740 }
6b6378355b9250 Toshi Kani 2015-04-14 741
e3e288121408c3 Joerg Roedel 2018-04-11 742 /* Bail out if we are we on a populated non-leaf entry: */
e3e288121408c3 Joerg Roedel 2018-04-11 743 if (pmd_present(*pmd) && !pmd_huge(*pmd))
e3e288121408c3 Joerg Roedel 2018-04-11 744 return 0;
e3e288121408c3 Joerg Roedel 2018-04-11 745
6b6378355b9250 Toshi Kani 2015-04-14 746 set_pte((pte_t *)pmd, pfn_pte(
6b6378355b9250 Toshi Kani 2015-04-14 747 (u64)addr >> PAGE_SHIFT,
d073569363d9f0 Christoph Hellwig 2020-04-08 748 __pgprot(protval_4k_2_large(pgprot_val(prot)) | _PAGE_PSE)));
6b6378355b9250 Toshi Kani 2015-04-14 749
6b6378355b9250 Toshi Kani 2015-04-14 750 return 1;
6b6378355b9250 Toshi Kani 2015-04-14 751 }
6b6378355b9250 Toshi Kani 2015-04-14 752
d8a719059b9dc9 Jonathan Marek 2021-07-21 753 /**
d8a719059b9dc9 Jonathan Marek 2021-07-21 754 * pud_clear_huge - clear kernel PUD mapping when it is set
d8a719059b9dc9 Jonathan Marek 2021-07-21 755 *
d8a719059b9dc9 Jonathan Marek 2021-07-21 756 * Returns 1 on success and 0 on failure (no PUD map is found).
d8a719059b9dc9 Jonathan Marek 2021-07-21 757 */
d8a719059b9dc9 Jonathan Marek 2021-07-21 @758 int pud_clear_huge(pud_t *pud)
d8a719059b9dc9 Jonathan Marek 2021-07-21 759 {
d8a719059b9dc9 Jonathan Marek 2021-07-21 760 if (pud_large(*pud)) {
d8a719059b9dc9 Jonathan Marek 2021-07-21 761 pud_clear(pud);
d8a719059b9dc9 Jonathan Marek 2021-07-21 762 return 1;
d8a719059b9dc9 Jonathan Marek 2021-07-21 763 }
d8a719059b9dc9 Jonathan Marek 2021-07-21 764
d8a719059b9dc9 Jonathan Marek 2021-07-21 765 return 0;
d8a719059b9dc9 Jonathan Marek 2021-07-21 766 }
d8a719059b9dc9 Jonathan Marek 2021-07-21 767
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 35502 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-09-01 6:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-31 11:50 [PATCH -next v2] riscv: Enable HAVE_ARCH_HUGE_VMAP for 64BIT Liu Shixin
2021-08-31 11:50 ` Liu Shixin
2021-08-31 20:35 ` kernel test robot
2021-09-01 6:48 ` kernel test robot
2021-09-01 6:48 ` kernel test robot
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.