Commit aecc63ae authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'sparc32-srmmu-improve-type-safety-of-__nocache_fix'



Mike Rapoport says:

====================
sparc32: srmmu: improve type safety of __nocache_fix()

As discussed at [1] the __nocache_fix() macro in sparc's SRMMU can be made
type safe and so the compiler will yell anout misuse of pXd pointers for
which the __nocache_fix() is primarily used.

The first patch is an fix of such misuse that I've discovered after adding
type cast to __nocache_fix(), but to avoid breaking bisection I've made it
the first commit.

v2: rebased on v5.8-rc2+
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 7780918b c0d5b0c7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ extern unsigned long last_valid_pfn;
extern void *srmmu_nocache_pool;
#define __nocache_pa(VADDR) (((unsigned long)VADDR) - SRMMU_NOCACHE_VADDR + __pa((unsigned long)srmmu_nocache_pool))
#define __nocache_va(PADDR) (__va((unsigned long)PADDR) - (unsigned long)srmmu_nocache_pool + SRMMU_NOCACHE_VADDR)
#define __nocache_fix(VADDR) __va(__nocache_pa(VADDR))
#define __nocache_fix(VADDR) ((__typeof__(VADDR))__va(__nocache_pa(VADDR)))

/* Accessing the MMU control register. */
unsigned int srmmu_get_mmureg(void);
+9 −9
Original line number Diff line number Diff line
@@ -689,7 +689,7 @@ static void __init srmmu_early_allocate_ptable_skeleton(unsigned long start,
		pgdp = pgd_offset_k(start);
		p4dp = p4d_offset(pgdp, start);
		pudp = pud_offset(p4dp, start);
		if (pud_none(*(pud_t *)__nocache_fix(pudp))) {
		if (pud_none(*__nocache_fix(pudp))) {
			pmdp = __srmmu_get_nocache(
			    SRMMU_PMD_TABLE_SIZE, SRMMU_PMD_TABLE_SIZE);
			if (pmdp == NULL)
@@ -698,7 +698,7 @@ static void __init srmmu_early_allocate_ptable_skeleton(unsigned long start,
			pud_set(__nocache_fix(pudp), pmdp);
		}
		pmdp = pmd_offset(__nocache_fix(pudp), start);
		if (srmmu_pmd_none(*(pmd_t *)__nocache_fix(pmdp))) {
		if (srmmu_pmd_none(*__nocache_fix(pmdp))) {
			ptep = __srmmu_get_nocache(PTE_SIZE, PTE_SIZE);
			if (ptep == NULL)
				early_pgtable_allocfail("pte");
@@ -810,11 +810,11 @@ static void __init srmmu_inherit_prom_mappings(unsigned long start,
		p4dp = p4d_offset(pgdp, start);
		pudp = pud_offset(p4dp, start);
		if (what == 2) {
			*(pgd_t *)__nocache_fix(pgdp) = __pgd(probed);
			*__nocache_fix(pgdp) = __pgd(probed);
			start += PGDIR_SIZE;
			continue;
		}
		if (pud_none(*(pud_t *)__nocache_fix(pudp))) {
		if (pud_none(*__nocache_fix(pudp))) {
			pmdp = __srmmu_get_nocache(SRMMU_PMD_TABLE_SIZE,
						   SRMMU_PMD_TABLE_SIZE);
			if (pmdp == NULL)
@@ -822,13 +822,13 @@ static void __init srmmu_inherit_prom_mappings(unsigned long start,
			memset(__nocache_fix(pmdp), 0, SRMMU_PMD_TABLE_SIZE);
			pud_set(__nocache_fix(pudp), pmdp);
		}
		pmdp = pmd_offset(__nocache_fix(pgdp), start);
		pmdp = pmd_offset(__nocache_fix(pudp), start);
		if (what == 1) {
			*(pmd_t *)__nocache_fix(pmdp) = __pmd(probed);
			start += PMD_SIZE;
			continue;
		}
		if (srmmu_pmd_none(*(pmd_t *)__nocache_fix(pmdp))) {
		if (srmmu_pmd_none(*__nocache_fix(pmdp))) {
			ptep = __srmmu_get_nocache(PTE_SIZE, PTE_SIZE);
			if (ptep == NULL)
				early_pgtable_allocfail("pte");
@@ -836,7 +836,7 @@ static void __init srmmu_inherit_prom_mappings(unsigned long start,
			pmd_set(__nocache_fix(pmdp), ptep);
		}
		ptep = pte_offset_kernel(__nocache_fix(pmdp), start);
		*(pte_t *)__nocache_fix(ptep) = __pte(probed);
		*__nocache_fix(ptep) = __pte(probed);
		start += PAGE_SIZE;
	}
}
@@ -850,7 +850,7 @@ static void __init do_large_mapping(unsigned long vaddr, unsigned long phys_base
	unsigned long big_pte;

	big_pte = KERNEL_PTE(phys_base >> 4);
	*(pgd_t *)__nocache_fix(pgdp) = __pgd(big_pte);
	*__nocache_fix(pgdp) = __pgd(big_pte);
}

/* Map sp_bank entry SP_ENTRY, starting at virtual address VBASE. */
@@ -940,7 +940,7 @@ void __init srmmu_paging_init(void)
	srmmu_ctx_table_phys = (ctxd_t *)__nocache_pa(srmmu_context_table);

	for (i = 0; i < num_contexts; i++)
		srmmu_ctxd_set((ctxd_t *)__nocache_fix(&srmmu_context_table[i]), srmmu_swapper_pg_dir);
		srmmu_ctxd_set(__nocache_fix(&srmmu_context_table[i]), srmmu_swapper_pg_dir);

	flush_cache_all();
	srmmu_set_ctable_ptr((unsigned long)srmmu_ctx_table_phys);