diff mbox

[v3,2/5] arm64: mm: replace 'block_mappings_allowed' with 'page_mappings_only'

Message ID 1476271425-19401-3-git-send-email-ard.biesheuvel@linaro.org
State Superseded
Headers show

Commit Message

Ard Biesheuvel Oct. 12, 2016, 11:23 a.m. UTC
In preparation of adding support for contiguous PTE and PMD mappings,
let's replace 'block_mappings_allowed' with 'page_mappings_only', which
will be a more accurate description of the nature of the setting once we
add such contiguous mappings into the mix.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 arch/arm64/include/asm/mmu.h |  2 +-
 arch/arm64/kernel/efi.c      |  8 ++---
 arch/arm64/mm/mmu.c          | 32 ++++++++++----------
 3 files changed, 21 insertions(+), 21 deletions(-)

-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Comments

Mark Rutland Oct. 12, 2016, 3:07 p.m. UTC | #1
On Wed, Oct 12, 2016 at 12:23:42PM +0100, Ard Biesheuvel wrote:
> In preparation of adding support for contiguous PTE and PMD mappings,

> let's replace 'block_mappings_allowed' with 'page_mappings_only', which

> will be a more accurate description of the nature of the setting once we

> add such contiguous mappings into the mix.

> 

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>


Regardless of the contiguous bit stuff, I think this makes the code 
clearer. As far as I can tell, this is correct. So FWIW:

Reviewed-by: Mark Rutland <mark.rutland@arm.com>


Thanks,
Mark.

> ---

>  arch/arm64/include/asm/mmu.h |  2 +-

>  arch/arm64/kernel/efi.c      |  8 ++---

>  arch/arm64/mm/mmu.c          | 32 ++++++++++----------

>  3 files changed, 21 insertions(+), 21 deletions(-)

> 

> diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h

> index 8d9fce037b2f..a81454ad5455 100644

> --- a/arch/arm64/include/asm/mmu.h

> +++ b/arch/arm64/include/asm/mmu.h

> @@ -34,7 +34,7 @@ extern void __iomem *early_io_map(phys_addr_t phys, unsigned long virt);

>  extern void init_mem_pgprot(void);

>  extern void create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,

>  			       unsigned long virt, phys_addr_t size,

> -			       pgprot_t prot, bool allow_block_mappings);

> +			       pgprot_t prot, bool page_mappings_only);

>  extern void *fixmap_remap_fdt(phys_addr_t dt_phys);

>  

>  #endif

> diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c

> index ba9bee389fd5..5d17f377d905 100644

> --- a/arch/arm64/kernel/efi.c

> +++ b/arch/arm64/kernel/efi.c

> @@ -62,8 +62,8 @@ struct screen_info screen_info __section(.data);

>  int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md)

>  {

>  	pteval_t prot_val = create_mapping_protection(md);

> -	bool allow_block_mappings = (md->type != EFI_RUNTIME_SERVICES_CODE &&

> -				     md->type != EFI_RUNTIME_SERVICES_DATA);

> +	bool page_mappings_only = (md->type == EFI_RUNTIME_SERVICES_CODE ||

> +				   md->type == EFI_RUNTIME_SERVICES_DATA);

>  

>  	if (!PAGE_ALIGNED(md->phys_addr) ||

>  	    !PAGE_ALIGNED(md->num_pages << EFI_PAGE_SHIFT)) {

> @@ -76,12 +76,12 @@ int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md)

>  		 * from the MMU routines. So avoid block mappings altogether in

>  		 * that case.

>  		 */

> -		allow_block_mappings = false;

> +		page_mappings_only = true;

>  	}

>  

>  	create_pgd_mapping(mm, md->phys_addr, md->virt_addr,

>  			   md->num_pages << EFI_PAGE_SHIFT,

> -			   __pgprot(prot_val | PTE_NG), allow_block_mappings);

> +			   __pgprot(prot_val | PTE_NG), page_mappings_only);

>  	return 0;

>  }

>  

> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c

> index e1c34e5a1d7d..bf1d71b62c4f 100644

> --- a/arch/arm64/mm/mmu.c

> +++ b/arch/arm64/mm/mmu.c

> @@ -139,7 +139,7 @@ static void alloc_init_pte(pmd_t *pmd, unsigned long addr,

>  static void alloc_init_pmd(pud_t *pud, unsigned long addr, unsigned long end,

>  				  phys_addr_t phys, pgprot_t prot,

>  				  phys_addr_t (*pgtable_alloc)(void),

> -				  bool allow_block_mappings)

> +				  bool page_mappings_only)

>  {

>  	pmd_t *pmd;

>  	unsigned long next;

> @@ -166,7 +166,7 @@ static void alloc_init_pmd(pud_t *pud, unsigned long addr, unsigned long end,

>  

>  		/* try section mapping first */

>  		if (((addr | next | phys) & ~SECTION_MASK) == 0 &&

> -		      allow_block_mappings) {

> +		      !page_mappings_only) {

>  			pmd_set_huge(pmd, phys, prot);

>  

>  			/*

> @@ -204,7 +204,7 @@ static inline bool use_1G_block(unsigned long addr, unsigned long next,

>  static void alloc_init_pud(pgd_t *pgd, unsigned long addr, unsigned long end,

>  				  phys_addr_t phys, pgprot_t prot,

>  				  phys_addr_t (*pgtable_alloc)(void),

> -				  bool allow_block_mappings)

> +				  bool page_mappings_only)

>  {

>  	pud_t *pud;

>  	unsigned long next;

> @@ -226,7 +226,7 @@ static void alloc_init_pud(pgd_t *pgd, unsigned long addr, unsigned long end,

>  		/*

>  		 * For 4K granule only, attempt to put down a 1GB block

>  		 */

> -		if (use_1G_block(addr, next, phys) && allow_block_mappings) {

> +		if (use_1G_block(addr, next, phys) && !page_mappings_only) {

>  			pud_set_huge(pud, phys, prot);

>  

>  			/*

> @@ -238,7 +238,7 @@ static void alloc_init_pud(pgd_t *pgd, unsigned long addr, unsigned long end,

>  				~modifiable_attr_mask) != 0);

>  		} else {

>  			alloc_init_pmd(pud, addr, next, phys, prot,

> -				       pgtable_alloc, allow_block_mappings);

> +				       pgtable_alloc, page_mappings_only);

>  

>  			BUG_ON(pud_val(old_pud) != 0 &&

>  			       pud_val(old_pud) != pud_val(*pud));

> @@ -253,7 +253,7 @@ static void __create_pgd_mapping(pgd_t *pgdir, phys_addr_t phys,

>  				 unsigned long virt, phys_addr_t size,

>  				 pgprot_t prot,

>  				 phys_addr_t (*pgtable_alloc)(void),

> -				 bool allow_block_mappings)

> +				 bool page_mappings_only)

>  {

>  	unsigned long addr, length, end, next;

>  	pgd_t *pgd = pgd_offset_raw(pgdir, virt);

> @@ -273,7 +273,7 @@ static void __create_pgd_mapping(pgd_t *pgdir, phys_addr_t phys,

>  	do {

>  		next = pgd_addr_end(addr, end);

>  		alloc_init_pud(pgd, addr, next, phys, prot, pgtable_alloc,

> -			       allow_block_mappings);

> +			       page_mappings_only);

>  		phys += next - addr;

>  	} while (pgd++, addr = next, addr != end);

>  }

> @@ -302,17 +302,17 @@ static void __init create_mapping_noalloc(phys_addr_t phys, unsigned long virt,

>  			&phys, virt);

>  		return;

>  	}

> -	__create_pgd_mapping(init_mm.pgd, phys, virt, size, prot, NULL, true);

> +	__create_pgd_mapping(init_mm.pgd, phys, virt, size, prot, NULL, false);

>  }

>  

>  void __init create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,

>  			       unsigned long virt, phys_addr_t size,

> -			       pgprot_t prot, bool allow_block_mappings)

> +			       pgprot_t prot, bool page_mappings_only)

>  {

>  	BUG_ON(mm == &init_mm);

>  

>  	__create_pgd_mapping(mm->pgd, phys, virt, size, prot,

> -			     pgd_pgtable_alloc, allow_block_mappings);

> +			     pgd_pgtable_alloc, page_mappings_only);

>  }

>  

>  static void create_mapping_late(phys_addr_t phys, unsigned long virt,

> @@ -325,7 +325,7 @@ static void create_mapping_late(phys_addr_t phys, unsigned long virt,

>  	}

>  

>  	__create_pgd_mapping(init_mm.pgd, phys, virt, size, prot,

> -			     NULL, !debug_pagealloc_enabled());

> +			     NULL, debug_pagealloc_enabled());

>  }

>  

>  static void __init __map_memblock(pgd_t *pgd, phys_addr_t start, phys_addr_t end)

> @@ -343,7 +343,7 @@ static void __init __map_memblock(pgd_t *pgd, phys_addr_t start, phys_addr_t end

>  		__create_pgd_mapping(pgd, start, __phys_to_virt(start),

>  				     end - start, PAGE_KERNEL,

>  				     early_pgtable_alloc,

> -				     !debug_pagealloc_enabled());

> +				     debug_pagealloc_enabled());

>  		return;

>  	}

>  

> @@ -356,13 +356,13 @@ static void __init __map_memblock(pgd_t *pgd, phys_addr_t start, phys_addr_t end

>  				     __phys_to_virt(start),

>  				     kernel_start - start, PAGE_KERNEL,

>  				     early_pgtable_alloc,

> -				     !debug_pagealloc_enabled());

> +				     debug_pagealloc_enabled());

>  	if (kernel_end < end)

>  		__create_pgd_mapping(pgd, kernel_end,

>  				     __phys_to_virt(kernel_end),

>  				     end - kernel_end, PAGE_KERNEL,

>  				     early_pgtable_alloc,

> -				     !debug_pagealloc_enabled());

> +				     debug_pagealloc_enabled());

>  

>  	/*

>  	 * Map the linear alias of the [_text, __init_begin) interval as

> @@ -372,7 +372,7 @@ static void __init __map_memblock(pgd_t *pgd, phys_addr_t start, phys_addr_t end

>  	 */

>  	__create_pgd_mapping(pgd, kernel_start, __phys_to_virt(kernel_start),

>  			     kernel_end - kernel_start, PAGE_KERNEL_RO,

> -			     early_pgtable_alloc, !debug_pagealloc_enabled());

> +			     early_pgtable_alloc, debug_pagealloc_enabled());

>  }

>  

>  static void __init map_mem(pgd_t *pgd)

> @@ -422,7 +422,7 @@ static void __init map_kernel_segment(pgd_t *pgd, void *va_start, void *va_end,

>  	BUG_ON(!PAGE_ALIGNED(size));

>  

>  	__create_pgd_mapping(pgd, pa_start, (unsigned long)va_start, size, prot,

> -			     early_pgtable_alloc, !debug_pagealloc_enabled());

> +			     early_pgtable_alloc, debug_pagealloc_enabled());

>  

>  	vma->addr	= va_start;

>  	vma->phys_addr	= pa_start;

> -- 

> 2.7.4

> 


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff mbox

Patch

diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h
index 8d9fce037b2f..a81454ad5455 100644
--- a/arch/arm64/include/asm/mmu.h
+++ b/arch/arm64/include/asm/mmu.h
@@ -34,7 +34,7 @@  extern void __iomem *early_io_map(phys_addr_t phys, unsigned long virt);
 extern void init_mem_pgprot(void);
 extern void create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,
 			       unsigned long virt, phys_addr_t size,
-			       pgprot_t prot, bool allow_block_mappings);
+			       pgprot_t prot, bool page_mappings_only);
 extern void *fixmap_remap_fdt(phys_addr_t dt_phys);
 
 #endif
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
index ba9bee389fd5..5d17f377d905 100644
--- a/arch/arm64/kernel/efi.c
+++ b/arch/arm64/kernel/efi.c
@@ -62,8 +62,8 @@  struct screen_info screen_info __section(.data);
 int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md)
 {
 	pteval_t prot_val = create_mapping_protection(md);
-	bool allow_block_mappings = (md->type != EFI_RUNTIME_SERVICES_CODE &&
-				     md->type != EFI_RUNTIME_SERVICES_DATA);
+	bool page_mappings_only = (md->type == EFI_RUNTIME_SERVICES_CODE ||
+				   md->type == EFI_RUNTIME_SERVICES_DATA);
 
 	if (!PAGE_ALIGNED(md->phys_addr) ||
 	    !PAGE_ALIGNED(md->num_pages << EFI_PAGE_SHIFT)) {
@@ -76,12 +76,12 @@  int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md)
 		 * from the MMU routines. So avoid block mappings altogether in
 		 * that case.
 		 */
-		allow_block_mappings = false;
+		page_mappings_only = true;
 	}
 
 	create_pgd_mapping(mm, md->phys_addr, md->virt_addr,
 			   md->num_pages << EFI_PAGE_SHIFT,
-			   __pgprot(prot_val | PTE_NG), allow_block_mappings);
+			   __pgprot(prot_val | PTE_NG), page_mappings_only);
 	return 0;
 }
 
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index e1c34e5a1d7d..bf1d71b62c4f 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -139,7 +139,7 @@  static void alloc_init_pte(pmd_t *pmd, unsigned long addr,
 static void alloc_init_pmd(pud_t *pud, unsigned long addr, unsigned long end,
 				  phys_addr_t phys, pgprot_t prot,
 				  phys_addr_t (*pgtable_alloc)(void),
-				  bool allow_block_mappings)
+				  bool page_mappings_only)
 {
 	pmd_t *pmd;
 	unsigned long next;
@@ -166,7 +166,7 @@  static void alloc_init_pmd(pud_t *pud, unsigned long addr, unsigned long end,
 
 		/* try section mapping first */
 		if (((addr | next | phys) & ~SECTION_MASK) == 0 &&
-		      allow_block_mappings) {
+		      !page_mappings_only) {
 			pmd_set_huge(pmd, phys, prot);
 
 			/*
@@ -204,7 +204,7 @@  static inline bool use_1G_block(unsigned long addr, unsigned long next,
 static void alloc_init_pud(pgd_t *pgd, unsigned long addr, unsigned long end,
 				  phys_addr_t phys, pgprot_t prot,
 				  phys_addr_t (*pgtable_alloc)(void),
-				  bool allow_block_mappings)
+				  bool page_mappings_only)
 {
 	pud_t *pud;
 	unsigned long next;
@@ -226,7 +226,7 @@  static void alloc_init_pud(pgd_t *pgd, unsigned long addr, unsigned long end,
 		/*
 		 * For 4K granule only, attempt to put down a 1GB block
 		 */
-		if (use_1G_block(addr, next, phys) && allow_block_mappings) {
+		if (use_1G_block(addr, next, phys) && !page_mappings_only) {
 			pud_set_huge(pud, phys, prot);
 
 			/*
@@ -238,7 +238,7 @@  static void alloc_init_pud(pgd_t *pgd, unsigned long addr, unsigned long end,
 				~modifiable_attr_mask) != 0);
 		} else {
 			alloc_init_pmd(pud, addr, next, phys, prot,
-				       pgtable_alloc, allow_block_mappings);
+				       pgtable_alloc, page_mappings_only);
 
 			BUG_ON(pud_val(old_pud) != 0 &&
 			       pud_val(old_pud) != pud_val(*pud));
@@ -253,7 +253,7 @@  static void __create_pgd_mapping(pgd_t *pgdir, phys_addr_t phys,
 				 unsigned long virt, phys_addr_t size,
 				 pgprot_t prot,
 				 phys_addr_t (*pgtable_alloc)(void),
-				 bool allow_block_mappings)
+				 bool page_mappings_only)
 {
 	unsigned long addr, length, end, next;
 	pgd_t *pgd = pgd_offset_raw(pgdir, virt);
@@ -273,7 +273,7 @@  static void __create_pgd_mapping(pgd_t *pgdir, phys_addr_t phys,
 	do {
 		next = pgd_addr_end(addr, end);
 		alloc_init_pud(pgd, addr, next, phys, prot, pgtable_alloc,
-			       allow_block_mappings);
+			       page_mappings_only);
 		phys += next - addr;
 	} while (pgd++, addr = next, addr != end);
 }
@@ -302,17 +302,17 @@  static void __init create_mapping_noalloc(phys_addr_t phys, unsigned long virt,
 			&phys, virt);
 		return;
 	}
-	__create_pgd_mapping(init_mm.pgd, phys, virt, size, prot, NULL, true);
+	__create_pgd_mapping(init_mm.pgd, phys, virt, size, prot, NULL, false);
 }
 
 void __init create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,
 			       unsigned long virt, phys_addr_t size,
-			       pgprot_t prot, bool allow_block_mappings)
+			       pgprot_t prot, bool page_mappings_only)
 {
 	BUG_ON(mm == &init_mm);
 
 	__create_pgd_mapping(mm->pgd, phys, virt, size, prot,
-			     pgd_pgtable_alloc, allow_block_mappings);
+			     pgd_pgtable_alloc, page_mappings_only);
 }
 
 static void create_mapping_late(phys_addr_t phys, unsigned long virt,
@@ -325,7 +325,7 @@  static void create_mapping_late(phys_addr_t phys, unsigned long virt,
 	}
 
 	__create_pgd_mapping(init_mm.pgd, phys, virt, size, prot,
-			     NULL, !debug_pagealloc_enabled());
+			     NULL, debug_pagealloc_enabled());
 }
 
 static void __init __map_memblock(pgd_t *pgd, phys_addr_t start, phys_addr_t end)
@@ -343,7 +343,7 @@  static void __init __map_memblock(pgd_t *pgd, phys_addr_t start, phys_addr_t end
 		__create_pgd_mapping(pgd, start, __phys_to_virt(start),
 				     end - start, PAGE_KERNEL,
 				     early_pgtable_alloc,
-				     !debug_pagealloc_enabled());
+				     debug_pagealloc_enabled());
 		return;
 	}
 
@@ -356,13 +356,13 @@  static void __init __map_memblock(pgd_t *pgd, phys_addr_t start, phys_addr_t end
 				     __phys_to_virt(start),
 				     kernel_start - start, PAGE_KERNEL,
 				     early_pgtable_alloc,
-				     !debug_pagealloc_enabled());
+				     debug_pagealloc_enabled());
 	if (kernel_end < end)
 		__create_pgd_mapping(pgd, kernel_end,
 				     __phys_to_virt(kernel_end),
 				     end - kernel_end, PAGE_KERNEL,
 				     early_pgtable_alloc,
-				     !debug_pagealloc_enabled());
+				     debug_pagealloc_enabled());
 
 	/*
 	 * Map the linear alias of the [_text, __init_begin) interval as
@@ -372,7 +372,7 @@  static void __init __map_memblock(pgd_t *pgd, phys_addr_t start, phys_addr_t end
 	 */
 	__create_pgd_mapping(pgd, kernel_start, __phys_to_virt(kernel_start),
 			     kernel_end - kernel_start, PAGE_KERNEL_RO,
-			     early_pgtable_alloc, !debug_pagealloc_enabled());
+			     early_pgtable_alloc, debug_pagealloc_enabled());
 }
 
 static void __init map_mem(pgd_t *pgd)
@@ -422,7 +422,7 @@  static void __init map_kernel_segment(pgd_t *pgd, void *va_start, void *va_end,
 	BUG_ON(!PAGE_ALIGNED(size));
 
 	__create_pgd_mapping(pgd, pa_start, (unsigned long)va_start, size, prot,
-			     early_pgtable_alloc, !debug_pagealloc_enabled());
+			     early_pgtable_alloc, debug_pagealloc_enabled());
 
 	vma->addr	= va_start;
 	vma->phys_addr	= pa_start;