0098-riscv-Move-cast-inside-kernel_mapping_-pv-a_to_-vp-a.patch 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. From b6af4b7f6f75904509747c08e87d91c1bb607bd4 Mon Sep 17 00:00:00 2001
  2. From: Samuel Holland <[email protected]>
  3. Date: Thu, 22 Sep 2022 00:39:36 -0500
  4. Subject: [PATCH 098/117] riscv: Move cast inside kernel_mapping_[pv]a_to_[vp]a
  5. Before commit 44c922572952 ("RISC-V: enable XIP"), these macros cast
  6. their argument to unsigned long. That commit moved the cast after an
  7. assignment to an unsigned long variable, rendering it ineffectual.
  8. Move the cast back, so we can remove the cast at each call site.
  9. Series-to: Palmer Dabbelt <[email protected]>
  10. Series-to: [email protected]
  11. Series-version: 2
  12. Reviewed-by: Alexandre Ghiti <[email protected]>
  13. Reviewed-by: Heiko Stuebner <[email protected]>
  14. Signed-off-by: Samuel Holland <[email protected]>
  15. ---
  16. arch/riscv/include/asm/page.h | 18 +++++++++---------
  17. arch/riscv/mm/init.c | 16 ++++++++--------
  18. 2 files changed, 17 insertions(+), 17 deletions(-)
  19. --- a/arch/riscv/include/asm/page.h
  20. +++ b/arch/riscv/include/asm/page.h
  21. @@ -123,20 +123,20 @@ extern phys_addr_t phys_ram_base;
  22. ((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) < PAGE_OFFSET + KERN_VIRT_SIZE))
  23. #define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + kernel_map.va_pa_offset))
  24. -#define kernel_mapping_pa_to_va(y) ({ \
  25. - unsigned long _y = y; \
  26. - (IS_ENABLED(CONFIG_XIP_KERNEL) && _y < phys_ram_base) ? \
  27. - (void *)((unsigned long)(_y) + kernel_map.va_kernel_xip_pa_offset) : \
  28. - (void *)((unsigned long)(_y) + kernel_map.va_kernel_pa_offset + XIP_OFFSET); \
  29. +#define kernel_mapping_pa_to_va(y) ({ \
  30. + unsigned long _y = (unsigned long)(y); \
  31. + (IS_ENABLED(CONFIG_XIP_KERNEL) && _y < phys_ram_base) ? \
  32. + (void *)(_y + kernel_map.va_kernel_xip_pa_offset) : \
  33. + (void *)(_y + kernel_map.va_kernel_pa_offset + XIP_OFFSET); \
  34. })
  35. #define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x)
  36. #define linear_mapping_va_to_pa(x) ((unsigned long)(x) - kernel_map.va_pa_offset)
  37. #define kernel_mapping_va_to_pa(y) ({ \
  38. - unsigned long _y = y; \
  39. - (IS_ENABLED(CONFIG_XIP_KERNEL) && _y < kernel_map.virt_addr + XIP_OFFSET) ? \
  40. - ((unsigned long)(_y) - kernel_map.va_kernel_xip_pa_offset) : \
  41. - ((unsigned long)(_y) - kernel_map.va_kernel_pa_offset - XIP_OFFSET); \
  42. + unsigned long _y = (unsigned long)(y); \
  43. + (IS_ENABLED(CONFIG_XIP_KERNEL) && _y < kernel_map.virt_addr + XIP_OFFSET) ? \
  44. + (_y - kernel_map.va_kernel_xip_pa_offset) : \
  45. + (_y - kernel_map.va_kernel_pa_offset - XIP_OFFSET); \
  46. })
  47. #define __va_to_pa_nodebug(x) ({ \
  48. --- a/arch/riscv/mm/init.c
  49. +++ b/arch/riscv/mm/init.c
  50. @@ -903,15 +903,15 @@ static void __init pt_ops_set_early(void
  51. */
  52. static void __init pt_ops_set_fixmap(void)
  53. {
  54. - pt_ops.alloc_pte = kernel_mapping_pa_to_va((uintptr_t)alloc_pte_fixmap);
  55. - pt_ops.get_pte_virt = kernel_mapping_pa_to_va((uintptr_t)get_pte_virt_fixmap);
  56. + pt_ops.alloc_pte = kernel_mapping_pa_to_va(alloc_pte_fixmap);
  57. + pt_ops.get_pte_virt = kernel_mapping_pa_to_va(get_pte_virt_fixmap);
  58. #ifndef __PAGETABLE_PMD_FOLDED
  59. - pt_ops.alloc_pmd = kernel_mapping_pa_to_va((uintptr_t)alloc_pmd_fixmap);
  60. - pt_ops.get_pmd_virt = kernel_mapping_pa_to_va((uintptr_t)get_pmd_virt_fixmap);
  61. - pt_ops.alloc_pud = kernel_mapping_pa_to_va((uintptr_t)alloc_pud_fixmap);
  62. - pt_ops.get_pud_virt = kernel_mapping_pa_to_va((uintptr_t)get_pud_virt_fixmap);
  63. - pt_ops.alloc_p4d = kernel_mapping_pa_to_va((uintptr_t)alloc_p4d_fixmap);
  64. - pt_ops.get_p4d_virt = kernel_mapping_pa_to_va((uintptr_t)get_p4d_virt_fixmap);
  65. + pt_ops.alloc_pmd = kernel_mapping_pa_to_va(alloc_pmd_fixmap);
  66. + pt_ops.get_pmd_virt = kernel_mapping_pa_to_va(get_pmd_virt_fixmap);
  67. + pt_ops.alloc_pud = kernel_mapping_pa_to_va(alloc_pud_fixmap);
  68. + pt_ops.get_pud_virt = kernel_mapping_pa_to_va(get_pud_virt_fixmap);
  69. + pt_ops.alloc_p4d = kernel_mapping_pa_to_va(alloc_p4d_fixmap);
  70. + pt_ops.get_p4d_virt = kernel_mapping_pa_to_va(get_p4d_virt_fixmap);
  71. #endif
  72. }