diff options
| -rw-r--r-- | arch/powerpc/include/asm/mmu.h | 2 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/vdso_datapage.h | 8 | ||||
| -rw-r--r-- | arch/powerpc/kernel/cpu_setup_6xx.S | 3 | ||||
| -rw-r--r-- | arch/powerpc/kernel/head_32.S | 6 | ||||
| -rw-r--r-- | arch/powerpc/kernel/security.c | 23 | ||||
| -rw-r--r-- | arch/powerpc/kernel/vdso64/gettimeofday.S | 4 | ||||
| -rw-r--r-- | arch/powerpc/mm/hash_low_32.S | 8 |
7 files changed, 25 insertions, 29 deletions
diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h index d34ad1657d7b..598cdcdd1355 100644 --- a/arch/powerpc/include/asm/mmu.h +++ b/arch/powerpc/include/asm/mmu.h | |||
| @@ -352,7 +352,7 @@ static inline bool strict_kernel_rwx_enabled(void) | |||
| 352 | #if defined(CONFIG_SPARSEMEM_VMEMMAP) && defined(CONFIG_SPARSEMEM_EXTREME) && \ | 352 | #if defined(CONFIG_SPARSEMEM_VMEMMAP) && defined(CONFIG_SPARSEMEM_EXTREME) && \ |
| 353 | defined (CONFIG_PPC_64K_PAGES) | 353 | defined (CONFIG_PPC_64K_PAGES) |
| 354 | #define MAX_PHYSMEM_BITS 51 | 354 | #define MAX_PHYSMEM_BITS 51 |
| 355 | #else | 355 | #elif defined(CONFIG_SPARSEMEM) |
| 356 | #define MAX_PHYSMEM_BITS 46 | 356 | #define MAX_PHYSMEM_BITS 46 |
| 357 | #endif | 357 | #endif |
| 358 | 358 | ||
diff --git a/arch/powerpc/include/asm/vdso_datapage.h b/arch/powerpc/include/asm/vdso_datapage.h index 1afe90ade595..bbc06bd72b1f 100644 --- a/arch/powerpc/include/asm/vdso_datapage.h +++ b/arch/powerpc/include/asm/vdso_datapage.h | |||
| @@ -82,10 +82,10 @@ struct vdso_data { | |||
| 82 | __u32 icache_block_size; /* L1 i-cache block size */ | 82 | __u32 icache_block_size; /* L1 i-cache block size */ |
| 83 | __u32 dcache_log_block_size; /* L1 d-cache log block size */ | 83 | __u32 dcache_log_block_size; /* L1 d-cache log block size */ |
| 84 | __u32 icache_log_block_size; /* L1 i-cache log block size */ | 84 | __u32 icache_log_block_size; /* L1 i-cache log block size */ |
| 85 | __s32 wtom_clock_sec; /* Wall to monotonic clock */ | 85 | __u32 stamp_sec_fraction; /* fractional seconds of stamp_xtime */ |
| 86 | __s32 wtom_clock_nsec; | 86 | __s32 wtom_clock_nsec; /* Wall to monotonic clock nsec */ |
| 87 | struct timespec stamp_xtime; /* xtime as at tb_orig_stamp */ | 87 | __s64 wtom_clock_sec; /* Wall to monotonic clock sec */ |
| 88 | __u32 stamp_sec_fraction; /* fractional seconds of stamp_xtime */ | 88 | struct timespec stamp_xtime; /* xtime as at tb_orig_stamp */ |
| 89 | __u32 syscall_map_64[SYSCALL_MAP_SIZE]; /* map of syscalls */ | 89 | __u32 syscall_map_64[SYSCALL_MAP_SIZE]; /* map of syscalls */ |
| 90 | __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */ | 90 | __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */ |
| 91 | }; | 91 | }; |
diff --git a/arch/powerpc/kernel/cpu_setup_6xx.S b/arch/powerpc/kernel/cpu_setup_6xx.S index 6f1c11e0691f..7534ecff5e92 100644 --- a/arch/powerpc/kernel/cpu_setup_6xx.S +++ b/arch/powerpc/kernel/cpu_setup_6xx.S | |||
| @@ -24,9 +24,6 @@ BEGIN_MMU_FTR_SECTION | |||
| 24 | li r10,0 | 24 | li r10,0 |
| 25 | mtspr SPRN_SPRG_603_LRU,r10 /* init SW LRU tracking */ | 25 | mtspr SPRN_SPRG_603_LRU,r10 /* init SW LRU tracking */ |
| 26 | END_MMU_FTR_SECTION_IFSET(MMU_FTR_NEED_DTLB_SW_LRU) | 26 | END_MMU_FTR_SECTION_IFSET(MMU_FTR_NEED_DTLB_SW_LRU) |
| 27 | lis r10, (swapper_pg_dir - PAGE_OFFSET)@h | ||
| 28 | ori r10, r10, (swapper_pg_dir - PAGE_OFFSET)@l | ||
| 29 | mtspr SPRN_SPRG_PGDIR, r10 | ||
| 30 | 27 | ||
| 31 | BEGIN_FTR_SECTION | 28 | BEGIN_FTR_SECTION |
| 32 | bl __init_fpu_registers | 29 | bl __init_fpu_registers |
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index ce6a972f2584..48051c8977c5 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S | |||
| @@ -855,6 +855,9 @@ __secondary_start: | |||
| 855 | li r3,0 | 855 | li r3,0 |
| 856 | stw r3, RTAS_SP(r4) /* 0 => not in RTAS */ | 856 | stw r3, RTAS_SP(r4) /* 0 => not in RTAS */ |
| 857 | #endif | 857 | #endif |
| 858 | lis r4, (swapper_pg_dir - PAGE_OFFSET)@h | ||
| 859 | ori r4, r4, (swapper_pg_dir - PAGE_OFFSET)@l | ||
| 860 | mtspr SPRN_SPRG_PGDIR, r4 | ||
| 858 | 861 | ||
| 859 | /* enable MMU and jump to start_secondary */ | 862 | /* enable MMU and jump to start_secondary */ |
| 860 | li r4,MSR_KERNEL | 863 | li r4,MSR_KERNEL |
| @@ -942,6 +945,9 @@ start_here: | |||
| 942 | li r3,0 | 945 | li r3,0 |
| 943 | stw r3, RTAS_SP(r4) /* 0 => not in RTAS */ | 946 | stw r3, RTAS_SP(r4) /* 0 => not in RTAS */ |
| 944 | #endif | 947 | #endif |
| 948 | lis r4, (swapper_pg_dir - PAGE_OFFSET)@h | ||
| 949 | ori r4, r4, (swapper_pg_dir - PAGE_OFFSET)@l | ||
| 950 | mtspr SPRN_SPRG_PGDIR, r4 | ||
| 945 | 951 | ||
| 946 | /* stack */ | 952 | /* stack */ |
| 947 | lis r1,init_thread_union@ha | 953 | lis r1,init_thread_union@ha |
diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c index 9b8631533e02..b33bafb8fcea 100644 --- a/arch/powerpc/kernel/security.c +++ b/arch/powerpc/kernel/security.c | |||
| @@ -190,29 +190,22 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, c | |||
| 190 | bcs = security_ftr_enabled(SEC_FTR_BCCTRL_SERIALISED); | 190 | bcs = security_ftr_enabled(SEC_FTR_BCCTRL_SERIALISED); |
| 191 | ccd = security_ftr_enabled(SEC_FTR_COUNT_CACHE_DISABLED); | 191 | ccd = security_ftr_enabled(SEC_FTR_COUNT_CACHE_DISABLED); |
| 192 | 192 | ||
| 193 | if (bcs || ccd || count_cache_flush_type != COUNT_CACHE_FLUSH_NONE) { | 193 | if (bcs || ccd) { |
| 194 | bool comma = false; | ||
| 195 | seq_buf_printf(&s, "Mitigation: "); | 194 | seq_buf_printf(&s, "Mitigation: "); |
| 196 | 195 | ||
| 197 | if (bcs) { | 196 | if (bcs) |
| 198 | seq_buf_printf(&s, "Indirect branch serialisation (kernel only)"); | 197 | seq_buf_printf(&s, "Indirect branch serialisation (kernel only)"); |
| 199 | comma = true; | ||
| 200 | } | ||
| 201 | 198 | ||
| 202 | if (ccd) { | 199 | if (bcs && ccd) |
| 203 | if (comma) | ||
| 204 | seq_buf_printf(&s, ", "); | ||
| 205 | seq_buf_printf(&s, "Indirect branch cache disabled"); | ||
| 206 | comma = true; | ||
| 207 | } | ||
| 208 | |||
| 209 | if (comma) | ||
| 210 | seq_buf_printf(&s, ", "); | 200 | seq_buf_printf(&s, ", "); |
| 211 | 201 | ||
| 212 | seq_buf_printf(&s, "Software count cache flush"); | 202 | if (ccd) |
| 203 | seq_buf_printf(&s, "Indirect branch cache disabled"); | ||
| 204 | } else if (count_cache_flush_type != COUNT_CACHE_FLUSH_NONE) { | ||
| 205 | seq_buf_printf(&s, "Mitigation: Software count cache flush"); | ||
| 213 | 206 | ||
| 214 | if (count_cache_flush_type == COUNT_CACHE_FLUSH_HW) | 207 | if (count_cache_flush_type == COUNT_CACHE_FLUSH_HW) |
| 215 | seq_buf_printf(&s, "(hardware accelerated)"); | 208 | seq_buf_printf(&s, " (hardware accelerated)"); |
| 216 | } else if (btb_flush_enabled) { | 209 | } else if (btb_flush_enabled) { |
| 217 | seq_buf_printf(&s, "Mitigation: Branch predictor state flush"); | 210 | seq_buf_printf(&s, "Mitigation: Branch predictor state flush"); |
| 218 | } else { | 211 | } else { |
diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S index a4ed9edfd5f0..1f324c28705b 100644 --- a/arch/powerpc/kernel/vdso64/gettimeofday.S +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S | |||
| @@ -92,7 +92,7 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime) | |||
| 92 | * At this point, r4,r5 contain our sec/nsec values. | 92 | * At this point, r4,r5 contain our sec/nsec values. |
| 93 | */ | 93 | */ |
| 94 | 94 | ||
| 95 | lwa r6,WTOM_CLOCK_SEC(r3) | 95 | ld r6,WTOM_CLOCK_SEC(r3) |
| 96 | lwa r9,WTOM_CLOCK_NSEC(r3) | 96 | lwa r9,WTOM_CLOCK_NSEC(r3) |
| 97 | 97 | ||
| 98 | /* We now have our result in r6,r9. We create a fake dependency | 98 | /* We now have our result in r6,r9. We create a fake dependency |
| @@ -125,7 +125,7 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime) | |||
| 125 | bne cr6,75f | 125 | bne cr6,75f |
| 126 | 126 | ||
| 127 | /* CLOCK_MONOTONIC_COARSE */ | 127 | /* CLOCK_MONOTONIC_COARSE */ |
| 128 | lwa r6,WTOM_CLOCK_SEC(r3) | 128 | ld r6,WTOM_CLOCK_SEC(r3) |
| 129 | lwa r9,WTOM_CLOCK_NSEC(r3) | 129 | lwa r9,WTOM_CLOCK_NSEC(r3) |
| 130 | 130 | ||
| 131 | /* check if counter has updated */ | 131 | /* check if counter has updated */ |
diff --git a/arch/powerpc/mm/hash_low_32.S b/arch/powerpc/mm/hash_low_32.S index 1f13494efb2b..a6c491f18a04 100644 --- a/arch/powerpc/mm/hash_low_32.S +++ b/arch/powerpc/mm/hash_low_32.S | |||
| @@ -70,12 +70,12 @@ _GLOBAL(hash_page) | |||
| 70 | lis r0,KERNELBASE@h /* check if kernel address */ | 70 | lis r0,KERNELBASE@h /* check if kernel address */ |
| 71 | cmplw 0,r4,r0 | 71 | cmplw 0,r4,r0 |
| 72 | ori r3,r3,_PAGE_USER|_PAGE_PRESENT /* test low addresses as user */ | 72 | ori r3,r3,_PAGE_USER|_PAGE_PRESENT /* test low addresses as user */ |
| 73 | mfspr r5, SPRN_SPRG_PGDIR /* virt page-table root */ | 73 | mfspr r5, SPRN_SPRG_PGDIR /* phys page-table root */ |
| 74 | blt+ 112f /* assume user more likely */ | 74 | blt+ 112f /* assume user more likely */ |
| 75 | lis r5,swapper_pg_dir@ha /* if kernel address, use */ | 75 | lis r5, (swapper_pg_dir - PAGE_OFFSET)@ha /* if kernel address, use */ |
| 76 | addi r5,r5,swapper_pg_dir@l /* kernel page table */ | 76 | addi r5 ,r5 ,(swapper_pg_dir - PAGE_OFFSET)@l /* kernel page table */ |
| 77 | rlwimi r3,r9,32-12,29,29 /* MSR_PR -> _PAGE_USER */ | 77 | rlwimi r3,r9,32-12,29,29 /* MSR_PR -> _PAGE_USER */ |
| 78 | 112: tophys(r5, r5) | 78 | 112: |
| 79 | #ifndef CONFIG_PTE_64BIT | 79 | #ifndef CONFIG_PTE_64BIT |
| 80 | rlwimi r5,r4,12,20,29 /* insert top 10 bits of address */ | 80 | rlwimi r5,r4,12,20,29 /* insert top 10 bits of address */ |
| 81 | lwz r8,0(r5) /* get pmd entry */ | 81 | lwz r8,0(r5) /* get pmd entry */ |
