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 's390-5.5-3' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 updates from Vasily Gorbik:

- Add support for KASAN_VMALLOC feature.

- Remove the last user of problematic diag 0x44 call.

- Adjust sampling interval and avoid sample data block overflow
condition on pressure in perf code.

- Prefer EOPNOTSUPP over ENOTSUPP and comments fixes.

* tag 's390-5.5-3' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
s390/kasan: add KASAN_VMALLOC support
s390: remove last diag 0x44 caller
s390/uv: use EOPNOTSUPP instead of ENOTSUPP
s390/cpum_sf: Avoid SBD overflow condition in irq handler
s390/cpum_sf: Adjust sampling interval to avoid hitting sample limits
s390/test_unwind: fix spelling mistake "reqister" -> "register"
s390/spinlock: remove confusing comment in arch_spin_lock_wait

+80 -47
+1
arch/s390/Kconfig
··· 124 124 select HAVE_ARCH_JUMP_LABEL 125 125 select HAVE_ARCH_JUMP_LABEL_RELATIVE 126 126 select HAVE_ARCH_KASAN 127 + select HAVE_ARCH_KASAN_VMALLOC 127 128 select CPU_NO_EFFICIENT_FFS if !HAVE_MARCH_Z9_109_FEATURES 128 129 select HAVE_ARCH_SECCOMP_FILTER 129 130 select HAVE_ARCH_SOFT_DIRTY
-2
arch/s390/include/asm/setup.h
··· 27 27 #define MACHINE_FLAG_DIAG9C BIT(3) 28 28 #define MACHINE_FLAG_ESOP BIT(4) 29 29 #define MACHINE_FLAG_IDTE BIT(5) 30 - #define MACHINE_FLAG_DIAG44 BIT(6) 31 30 #define MACHINE_FLAG_EDAT1 BIT(7) 32 31 #define MACHINE_FLAG_EDAT2 BIT(8) 33 32 #define MACHINE_FLAG_TOPOLOGY BIT(10) ··· 93 94 #define MACHINE_HAS_DIAG9C (S390_lowcore.machine_flags & MACHINE_FLAG_DIAG9C) 94 95 #define MACHINE_HAS_ESOP (S390_lowcore.machine_flags & MACHINE_FLAG_ESOP) 95 96 #define MACHINE_HAS_IDTE (S390_lowcore.machine_flags & MACHINE_FLAG_IDTE) 96 - #define MACHINE_HAS_DIAG44 (S390_lowcore.machine_flags & MACHINE_FLAG_DIAG44) 97 97 #define MACHINE_HAS_EDAT1 (S390_lowcore.machine_flags & MACHINE_FLAG_EDAT1) 98 98 #define MACHINE_HAS_EDAT2 (S390_lowcore.machine_flags & MACHINE_FLAG_EDAT2) 99 99 #define MACHINE_HAS_TOPOLOGY (S390_lowcore.machine_flags & MACHINE_FLAG_TOPOLOGY)
+1 -1
arch/s390/include/asm/uv.h
··· 86 86 }; 87 87 88 88 if (!is_prot_virt_guest()) 89 - return -ENOTSUPP; 89 + return -EOPNOTSUPP; 90 90 /* 91 91 * Sharing is page wise, if we encounter addresses that are 92 92 * not page aligned, we assume something went wrong. If
-16
arch/s390/kernel/early.c
··· 204 204 S390_lowcore.machine_flags |= MACHINE_FLAG_DIAG9C; 205 205 } 206 206 207 - static __init void detect_diag44(void) 208 - { 209 - int rc; 210 - 211 - diag_stat_inc(DIAG_STAT_X044); 212 - asm volatile( 213 - " diag 0,0,0x44\n" 214 - "0: la %0,0\n" 215 - "1:\n" 216 - EX_TABLE(0b,1b) 217 - : "=d" (rc) : "0" (-EOPNOTSUPP) : "cc"); 218 - if (!rc) 219 - S390_lowcore.machine_flags |= MACHINE_FLAG_DIAG44; 220 - } 221 - 222 207 static __init void detect_machine_facilities(void) 223 208 { 224 209 if (test_facility(8)) { ··· 316 331 setup_arch_string(); 317 332 setup_boot_command_line(); 318 333 detect_diag9c(); 319 - detect_diag44(); 320 334 detect_machine_facilities(); 321 335 save_vector_registers(); 322 336 setup_topology();
+16 -6
arch/s390/kernel/perf_cpum_sf.c
··· 1303 1303 */ 1304 1304 if (flush_all && done) 1305 1305 break; 1306 - 1307 - /* If an event overflow happened, discard samples by 1308 - * processing any remaining sample-data-blocks. 1309 - */ 1310 - if (event_overflow) 1311 - flush_all = 1; 1312 1306 } 1313 1307 1314 1308 /* Account sample overflows in the event hardware structure */ 1315 1309 if (sampl_overflow) 1316 1310 OVERFLOW_REG(hwc) = DIV_ROUND_UP(OVERFLOW_REG(hwc) + 1317 1311 sampl_overflow, 1 + num_sdb); 1312 + 1313 + /* Perf_event_overflow() and perf_event_account_interrupt() limit 1314 + * the interrupt rate to an upper limit. Roughly 1000 samples per 1315 + * task tick. 1316 + * Hitting this limit results in a large number 1317 + * of throttled REF_REPORT_THROTTLE entries and the samples 1318 + * are dropped. 1319 + * Slightly increase the interval to avoid hitting this limit. 1320 + */ 1321 + if (event_overflow) { 1322 + SAMPL_RATE(hwc) += DIV_ROUND_UP(SAMPL_RATE(hwc), 10); 1323 + debug_sprintf_event(sfdbg, 1, "%s: rate adjustment %ld\n", 1324 + __func__, 1325 + DIV_ROUND_UP(SAMPL_RATE(hwc), 10)); 1326 + } 1327 + 1318 1328 if (sampl_overflow || event_overflow) 1319 1329 debug_sprintf_event(sfdbg, 4, "%s: " 1320 1330 "overflows: sample %llu event %llu"
+5 -8
arch/s390/kernel/smp.c
··· 413 413 414 414 void smp_yield_cpu(int cpu) 415 415 { 416 - if (MACHINE_HAS_DIAG9C) { 417 - diag_stat_inc_norecursion(DIAG_STAT_X09C); 418 - asm volatile("diag %0,0,0x9c" 419 - : : "d" (pcpu_devices[cpu].address)); 420 - } else if (MACHINE_HAS_DIAG44 && !smp_cpu_mtid) { 421 - diag_stat_inc_norecursion(DIAG_STAT_X044); 422 - asm volatile("diag 0,0,0x44"); 423 - } 416 + if (!MACHINE_HAS_DIAG9C) 417 + return; 418 + diag_stat_inc_norecursion(DIAG_STAT_X09C); 419 + asm volatile("diag %0,0,0x9c" 420 + : : "d" (pcpu_devices[cpu].address)); 424 421 } 425 422 426 423 /*
-1
arch/s390/lib/spinlock.c
··· 242 242 243 243 void arch_spin_lock_wait(arch_spinlock_t *lp) 244 244 { 245 - /* Use classic spinlocks + niai if the steal time is >= 10% */ 246 245 if (test_cpu_flag(CIF_DEDICATED_CPU)) 247 246 arch_spin_lock_queued(lp); 248 247 else
+1 -1
arch/s390/lib/test_unwind.c
··· 238 238 { 239 239 preempt_disable(); 240 240 if (register_external_irq(EXT_IRQ_CLK_COMP, unwindme_irq_handler)) { 241 - pr_info("Couldn't reqister external interrupt handler"); 241 + pr_info("Couldn't register external interrupt handler"); 242 242 return -1; 243 243 } 244 244 u->task = current;
+56 -12
arch/s390/mm/kasan_init.c
··· 82 82 enum populate_mode { 83 83 POPULATE_ONE2ONE, 84 84 POPULATE_MAP, 85 - POPULATE_ZERO_SHADOW 85 + POPULATE_ZERO_SHADOW, 86 + POPULATE_SHALLOW 86 87 }; 87 88 static void __init kasan_early_vmemmap_populate(unsigned long address, 88 89 unsigned long end, ··· 117 116 pgd_populate(&init_mm, pg_dir, p4_dir); 118 117 } 119 118 119 + if (IS_ENABLED(CONFIG_KASAN_S390_4_LEVEL_PAGING) && 120 + mode == POPULATE_SHALLOW) { 121 + address = (address + P4D_SIZE) & P4D_MASK; 122 + continue; 123 + } 124 + 120 125 p4_dir = p4d_offset(pg_dir, address); 121 126 if (p4d_none(*p4_dir)) { 122 127 if (mode == POPULATE_ZERO_SHADOW && ··· 135 128 } 136 129 pu_dir = kasan_early_crst_alloc(_REGION3_ENTRY_EMPTY); 137 130 p4d_populate(&init_mm, p4_dir, pu_dir); 131 + } 132 + 133 + if (!IS_ENABLED(CONFIG_KASAN_S390_4_LEVEL_PAGING) && 134 + mode == POPULATE_SHALLOW) { 135 + address = (address + PUD_SIZE) & PUD_MASK; 136 + continue; 138 137 } 139 138 140 139 pu_dir = pud_offset(p4_dir, address); ··· 207 194 case POPULATE_ZERO_SHADOW: 208 195 page = kasan_early_shadow_page; 209 196 pte_val(*pt_dir) = __pa(page) | pgt_prot_zero; 197 + break; 198 + case POPULATE_SHALLOW: 199 + /* should never happen */ 210 200 break; 211 201 } 212 202 } ··· 329 313 init_mm.pgd = early_pg_dir; 330 314 /* 331 315 * Current memory layout: 332 - * +- 0 -------------+ +- shadow start -+ 333 - * | 1:1 ram mapping | /| 1/8 ram | 334 - * +- end of ram ----+ / +----------------+ 335 - * | ... gap ... |/ | kasan | 336 - * +- shadow start --+ | zero | 337 - * | 1/8 addr space | | page | 338 - * +- shadow end -+ | mapping | 339 - * | ... gap ... |\ | (untracked) | 340 - * +- modules vaddr -+ \ +----------------+ 341 - * | 2Gb | \| unmapped | allocated per module 342 - * +-----------------+ +- shadow end ---+ 316 + * +- 0 -------------+ +- shadow start -+ 317 + * | 1:1 ram mapping | /| 1/8 ram | 318 + * | | / | | 319 + * +- end of ram ----+ / +----------------+ 320 + * | ... gap ... | / | | 321 + * | |/ | kasan | 322 + * +- shadow start --+ | zero | 323 + * | 1/8 addr space | | page | 324 + * +- shadow end -+ | mapping | 325 + * | ... gap ... |\ | (untracked) | 326 + * +- vmalloc area -+ \ | | 327 + * | vmalloc_size | \ | | 328 + * +- modules vaddr -+ \ +----------------+ 329 + * | 2Gb | \| unmapped | allocated per module 330 + * +-----------------+ +- shadow end ---+ 331 + * 332 + * Current memory layout (KASAN_VMALLOC): 333 + * +- 0 -------------+ +- shadow start -+ 334 + * | 1:1 ram mapping | /| 1/8 ram | 335 + * | | / | | 336 + * +- end of ram ----+ / +----------------+ 337 + * | ... gap ... | / | kasan | 338 + * | |/ | zero | 339 + * +- shadow start --+ | page | 340 + * | 1/8 addr space | | mapping | 341 + * +- shadow end -+ | (untracked) | 342 + * | ... gap ... |\ | | 343 + * +- vmalloc area -+ \ +- vmalloc area -+ 344 + * | vmalloc_size | \ |shallow populate| 345 + * +- modules vaddr -+ \ +- modules area -+ 346 + * | 2Gb | \|shallow populate| 347 + * +-----------------+ +- shadow end ---+ 343 348 */ 344 349 /* populate kasan shadow (for identity mapping and zero page mapping) */ 345 350 kasan_early_vmemmap_populate(__sha(0), __sha(memsize), POPULATE_MAP); 346 351 if (IS_ENABLED(CONFIG_MODULES)) 347 352 untracked_mem_end = vmax - MODULES_LEN; 353 + if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) { 354 + untracked_mem_end = vmax - vmalloc_size - MODULES_LEN; 355 + /* shallowly populate kasan shadow for vmalloc and modules */ 356 + kasan_early_vmemmap_populate(__sha(untracked_mem_end), 357 + __sha(vmax), POPULATE_SHALLOW); 358 + } 359 + /* populate kasan shadow for untracked memory */ 348 360 kasan_early_vmemmap_populate(__sha(max_physmem_end), 349 361 __sha(untracked_mem_end), 350 362 POPULATE_ZERO_SHADOW);