Skip to content

Commit 61b2f0b

Browse files
Merge patch series "riscv: Fix crash during early errata patching"
These are fixes, but due to the possible early boot fallout they're going in the merge window to get a bit more time to bake on linux-next. * b4-shazam-merge riscv: Move cast inside kernel_mapping_[pv]a_to_[vp]a riscv: Fix crash during early errata patching Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Palmer Dabbelt <[email protected]>
2 parents de59b6e + 583286e commit 61b2f0b

File tree

3 files changed

+18
-18
lines changed

3 files changed

+18
-18
lines changed

arch/riscv/include/asm/page.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,20 +123,20 @@ extern phys_addr_t phys_ram_base;
123123
((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) < PAGE_OFFSET + KERN_VIRT_SIZE))
124124

125125
#define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + kernel_map.va_pa_offset))
126-
#define kernel_mapping_pa_to_va(y) ({ \
127-
unsigned long _y = y; \
128-
(IS_ENABLED(CONFIG_XIP_KERNEL) && _y < phys_ram_base) ? \
129-
(void *)((unsigned long)(_y) + kernel_map.va_kernel_xip_pa_offset) : \
130-
(void *)((unsigned long)(_y) + kernel_map.va_kernel_pa_offset + XIP_OFFSET); \
126+
#define kernel_mapping_pa_to_va(y) ({ \
127+
unsigned long _y = (unsigned long)(y); \
128+
(IS_ENABLED(CONFIG_XIP_KERNEL) && _y < phys_ram_base) ? \
129+
(void *)(_y + kernel_map.va_kernel_xip_pa_offset) : \
130+
(void *)(_y + kernel_map.va_kernel_pa_offset + XIP_OFFSET); \
131131
})
132132
#define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x)
133133

134134
#define linear_mapping_va_to_pa(x) ((unsigned long)(x) - kernel_map.va_pa_offset)
135135
#define kernel_mapping_va_to_pa(y) ({ \
136-
unsigned long _y = y; \
137-
(IS_ENABLED(CONFIG_XIP_KERNEL) && _y < kernel_map.virt_addr + XIP_OFFSET) ? \
138-
((unsigned long)(_y) - kernel_map.va_kernel_xip_pa_offset) : \
139-
((unsigned long)(_y) - kernel_map.va_kernel_pa_offset - XIP_OFFSET); \
136+
unsigned long _y = (unsigned long)(y); \
137+
(IS_ENABLED(CONFIG_XIP_KERNEL) && _y < kernel_map.virt_addr + XIP_OFFSET) ? \
138+
(_y - kernel_map.va_kernel_xip_pa_offset) : \
139+
(_y - kernel_map.va_kernel_pa_offset - XIP_OFFSET); \
140140
})
141141

142142
#define __va_to_pa_nodebug(x) ({ \

arch/riscv/mm/init.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -927,15 +927,15 @@ static void __init pt_ops_set_early(void)
927927
*/
928928
static void __init pt_ops_set_fixmap(void)
929929
{
930-
pt_ops.alloc_pte = kernel_mapping_pa_to_va((uintptr_t)alloc_pte_fixmap);
931-
pt_ops.get_pte_virt = kernel_mapping_pa_to_va((uintptr_t)get_pte_virt_fixmap);
930+
pt_ops.alloc_pte = kernel_mapping_pa_to_va(alloc_pte_fixmap);
931+
pt_ops.get_pte_virt = kernel_mapping_pa_to_va(get_pte_virt_fixmap);
932932
#ifndef __PAGETABLE_PMD_FOLDED
933-
pt_ops.alloc_pmd = kernel_mapping_pa_to_va((uintptr_t)alloc_pmd_fixmap);
934-
pt_ops.get_pmd_virt = kernel_mapping_pa_to_va((uintptr_t)get_pmd_virt_fixmap);
935-
pt_ops.alloc_pud = kernel_mapping_pa_to_va((uintptr_t)alloc_pud_fixmap);
936-
pt_ops.get_pud_virt = kernel_mapping_pa_to_va((uintptr_t)get_pud_virt_fixmap);
937-
pt_ops.alloc_p4d = kernel_mapping_pa_to_va((uintptr_t)alloc_p4d_fixmap);
938-
pt_ops.get_p4d_virt = kernel_mapping_pa_to_va((uintptr_t)get_p4d_virt_fixmap);
933+
pt_ops.alloc_pmd = kernel_mapping_pa_to_va(alloc_pmd_fixmap);
934+
pt_ops.get_pmd_virt = kernel_mapping_pa_to_va(get_pmd_virt_fixmap);
935+
pt_ops.alloc_pud = kernel_mapping_pa_to_va(alloc_pud_fixmap);
936+
pt_ops.get_pud_virt = kernel_mapping_pa_to_va(get_pud_virt_fixmap);
937+
pt_ops.alloc_p4d = kernel_mapping_pa_to_va(alloc_p4d_fixmap);
938+
pt_ops.get_p4d_virt = kernel_mapping_pa_to_va(get_p4d_virt_fixmap);
939939
#endif
940940
}
941941

arch/riscv/mm/physaddr.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ EXPORT_SYMBOL(__virt_to_phys);
2222
phys_addr_t __phys_addr_symbol(unsigned long x)
2323
{
2424
unsigned long kernel_start = kernel_map.virt_addr;
25-
unsigned long kernel_end = (unsigned long)_end;
25+
unsigned long kernel_end = kernel_start + kernel_map.size;
2626

2727
/*
2828
* Boundary checking aginst the kernel image mapping.

0 commit comments

Comments
 (0)