Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'powerpc-5.9-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux

Pull powerpc fixes from Michael Ellerman:
"Some more powerpc fixes for 5.9:

- Opt us out of the DEBUG_VM_PGTABLE support for now as it's causing
crashes.

- Fix a long standing bug in our DMA mask handling that was hidden
until recently, and which caused problems with some drivers.

- Fix a boot failure on systems with large amounts of RAM, and no
hugepage support and using Radix MMU, only seen in the lab.

- A few other minor fixes.

Thanks to Alexey Kardashevskiy, Aneesh Kumar K.V, Gautham R. Shenoy,
Hari Bathini, Ira Weiny, Nick Desaulniers, Shirisha Ganta, Vaibhav
Jain, and Vaidyanathan Srinivasan"

* tag 'powerpc-5.9-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
powerpc/papr_scm: Limit the readability of 'perf_stats' sysfs attribute
cpuidle: pseries: Fix CEDE latency conversion from tb to us
powerpc/dma: Fix dma_map_ops::get_required_mask
Revert "powerpc/build: vdso linker warning for orphan sections"
powerpc/mm: Remove DEBUG_VM_PGTABLE support on powerpc
selftests/powerpc: Skip PROT_SAO test in guests/LPARS
powerpc/book3s64/radix: Fix boot failure with large amount of guest memory

+39 -37
+1 -1
Documentation/features/debug/debug-vm-pgtable/arch-support.txt
··· 22 22 | nios2: | TODO | 23 23 | openrisc: | TODO | 24 24 | parisc: | TODO | 25 - | powerpc: | ok | 25 + | powerpc: | TODO | 26 26 | riscv: | ok | 27 27 | s390: | ok | 28 28 | sh: | TODO |
-1
arch/powerpc/Kconfig
··· 116 116 # 117 117 select ARCH_32BIT_OFF_T if PPC32 118 118 select ARCH_HAS_DEBUG_VIRTUAL 119 - select ARCH_HAS_DEBUG_VM_PGTABLE 120 119 select ARCH_HAS_DEVMEM_IS_ALLOWED 121 120 select ARCH_HAS_ELF_RANDOMIZE 122 121 select ARCH_HAS_FORTIFY_SOURCE
+5 -5
arch/powerpc/include/asm/book3s/64/mmu.h
··· 239 239 240 240 extern void hash__setup_initial_memory_limit(phys_addr_t first_memblock_base, 241 241 phys_addr_t first_memblock_size); 242 - extern void radix__setup_initial_memory_limit(phys_addr_t first_memblock_base, 243 - phys_addr_t first_memblock_size); 244 242 static inline void setup_initial_memory_limit(phys_addr_t first_memblock_base, 245 243 phys_addr_t first_memblock_size) 246 244 { 247 - if (early_radix_enabled()) 248 - return radix__setup_initial_memory_limit(first_memblock_base, 249 - first_memblock_size); 245 + /* 246 + * Hash has more strict restrictions. At this point we don't 247 + * know which translations we will pick. Hence go with hash 248 + * restrictions. 249 + */ 250 250 return hash__setup_initial_memory_limit(first_memblock_base, 251 251 first_memblock_size); 252 252 }
+2 -1
arch/powerpc/kernel/dma-iommu.c
··· 120 120 if (!tbl) 121 121 return 0; 122 122 123 - mask = 1ULL < (fls_long(tbl->it_offset + tbl->it_size) - 1); 123 + mask = 1ULL << (fls_long(tbl->it_offset + tbl->it_size) + 124 + tbl->it_page_shift - 1); 124 125 mask += mask - 1; 125 126 126 127 return mask;
+1 -1
arch/powerpc/kernel/vdso32/Makefile
··· 50 50 51 51 # actual build commands 52 52 quiet_cmd_vdso32ld = VDSO32L $@ 53 - cmd_vdso32ld = $(VDSOCC) $(c_flags) $(CC32FLAGS) -o $@ $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) 53 + cmd_vdso32ld = $(VDSOCC) $(c_flags) $(CC32FLAGS) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) 54 54 quiet_cmd_vdso32as = VDSO32A $@ 55 55 cmd_vdso32as = $(VDSOCC) $(a_flags) $(CC32FLAGS) -c -o $@ $< 56 56
-1
arch/powerpc/kernel/vdso32/vdso32.lds.S
··· 111 111 *(.note.GNU-stack) 112 112 *(.data .data.* .gnu.linkonce.d.* .sdata*) 113 113 *(.bss .sbss .dynbss .dynsbss) 114 - *(.glink .iplt .plt .rela*) 115 114 } 116 115 } 117 116
+1 -1
arch/powerpc/kernel/vdso64/Makefile
··· 34 34 35 35 # actual build commands 36 36 quiet_cmd_vdso64ld = VDSO64L $@ 37 - cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) 37 + cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) 38 38 39 39 # install commands for the unstripped file 40 40 quiet_cmd_vdso_install = INSTALL $@
+1 -2
arch/powerpc/kernel/vdso64/vdso64.lds.S
··· 30 30 . = ALIGN(16); 31 31 .text : { 32 32 *(.text .stub .text.* .gnu.linkonce.t.* __ftr_alt_*) 33 - *(.sfpr) 33 + *(.sfpr .glink) 34 34 } :text 35 35 PROVIDE(__etext = .); 36 36 PROVIDE(_etext = .); ··· 111 111 *(.branch_lt) 112 112 *(.data .data.* .gnu.linkonce.d.* .sdata*) 113 113 *(.bss .sbss .dynbss .dynsbss) 114 - *(.glink .iplt .plt .rela*) 115 114 } 116 115 } 117 116
-15
arch/powerpc/mm/book3s64/radix_pgtable.c
··· 734 734 } 735 735 } 736 736 737 - void radix__setup_initial_memory_limit(phys_addr_t first_memblock_base, 738 - phys_addr_t first_memblock_size) 739 - { 740 - /* 741 - * We don't currently support the first MEMBLOCK not mapping 0 742 - * physical on those processors 743 - */ 744 - BUG_ON(first_memblock_base != 0); 745 - 746 - /* 747 - * Radix mode is not limited by RMA / VRMA addressing. 748 - */ 749 - ppc64_rma_size = ULONG_MAX; 750 - } 751 - 752 737 #ifdef CONFIG_MEMORY_HOTPLUG 753 738 static void free_pte_table(pte_t *pte_start, pmd_t *pmd) 754 739 {
+9 -2
arch/powerpc/mm/init_64.c
··· 433 433 if (!(mfmsr() & MSR_HV)) 434 434 early_check_vec5(); 435 435 436 - if (early_radix_enabled()) 436 + if (early_radix_enabled()) { 437 437 radix__early_init_devtree(); 438 - else 438 + /* 439 + * We have finalized the translation we are going to use by now. 440 + * Radix mode is not limited by RMA / VRMA addressing. 441 + * Hence don't limit memblock allocations. 442 + */ 443 + ppc64_rma_size = ULONG_MAX; 444 + memblock_set_current_limit(MEMBLOCK_ALLOC_ANYWHERE); 445 + } else 439 446 hash__early_init_devtree(); 440 447 } 441 448 #endif /* CONFIG_PPC_BOOK3S_64 */
+1 -1
arch/powerpc/platforms/pseries/papr_scm.c
··· 822 822 kfree(stats); 823 823 return rc ? rc : seq_buf_used(&s); 824 824 } 825 - DEVICE_ATTR_RO(perf_stats); 825 + DEVICE_ATTR_ADMIN_RO(perf_stats); 826 826 827 827 static ssize_t flags_show(struct device *dev, 828 828 struct device_attribute *attr, char *buf)
+11 -4
drivers/cpuidle/cpuidle-pseries.c
··· 361 361 for (i = 0; i < nr_xcede_records; i++) { 362 362 struct xcede_latency_record *record = &payload->records[i]; 363 363 u64 latency_tb = be64_to_cpu(record->latency_ticks); 364 - u64 latency_us = tb_to_ns(latency_tb) / NSEC_PER_USEC; 364 + u64 latency_us = DIV_ROUND_UP_ULL(tb_to_ns(latency_tb), NSEC_PER_USEC); 365 + 366 + if (latency_us == 0) 367 + pr_warn("cpuidle: xcede record %d has an unrealistic latency of 0us.\n", i); 365 368 366 369 if (latency_us < min_latency_us) 367 370 min_latency_us = latency_us; ··· 381 378 * Perform the fix-up. 382 379 */ 383 380 if (min_latency_us < dedicated_states[1].exit_latency) { 384 - u64 cede0_latency = min_latency_us - 1; 381 + /* 382 + * We set a minimum of 1us wakeup latency for cede0 to 383 + * distinguish it from snooze 384 + */ 385 + u64 cede0_latency = 1; 385 386 386 - if (cede0_latency <= 0) 387 - cede0_latency = min_latency_us; 387 + if (min_latency_us > cede0_latency) 388 + cede0_latency = min_latency_us - 1; 388 389 389 390 dedicated_states[1].exit_latency = cede0_latency; 390 391 dedicated_states[1].target_residency = 10 * (cede0_latency);
+7 -2
tools/testing/selftests/powerpc/mm/prot_sao.c
··· 7 7 #include <stdlib.h> 8 8 #include <string.h> 9 9 #include <sys/mman.h> 10 + #include <unistd.h> 10 11 11 12 #include <asm/cputable.h> 12 13 ··· 19 18 { 20 19 char *p; 21 20 22 - /* SAO was introduced in 2.06 and removed in 3.1 */ 21 + /* 22 + * SAO was introduced in 2.06 and removed in 3.1. It's disabled in 23 + * guests/LPARs by default, so also skip if we are running in a guest. 24 + */ 23 25 SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_06) || 24 - have_hwcap2(PPC_FEATURE2_ARCH_3_1)); 26 + have_hwcap2(PPC_FEATURE2_ARCH_3_1) || 27 + access("/proc/device-tree/rtas/ibm,hypertas-functions", F_OK) == 0); 25 28 26 29 /* 27 30 * Ensure we can ask for PROT_SAO.