Commit 1c7d0c3a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull s390 updates from Vasily Gorbik:

 - Remove restrictions on PAI NNPA and crypto counters, enabling
   concurrent per-task and system-wide sampling and counting events

 - Switch to GENERIC_CPU_DEVICES by setting up the CPU present mask in
   the architecture code and letting the generic code handle CPU
   bring-up

 - Add support for the diag204 busy indication facility to prevent
   undesirable blocking during hypervisor logical CPU utilization
   queries. Implement results caching

 - Improve the handling of Store Data SCLP events by suppressing
   unnecessary warning, preventing buffer release in I/O during
   failures, and adding timeout handling for Store Data requests to
   address potential firmware issues

 - Provide optimized __arch_hweight*() implementations

 - Remove the unnecessary CPU KOBJ_CHANGE uevents generated during
   topology updates, as they are unused and also not present on other
   architectures

 - Cleanup atomic_ops, optimize __atomic_set() for small values and
   __atomic_cmpxchg_bool() for compilers supporting flag output
   constraint

 - Couple of cleanups for KVM:
     - Move and improve KVM struct definitions for DAT tables from
       gaccess.c to a new header
     - Pass the asce as parameter to sie64a()

 - Make the crdte() and cspg() page table handling wrappers return a
   boolean to indicate success, like the other existing "compare and
   swap" wrappers

 - Add documentation for HWCAP flags

 - Switch to obtaining total RAM pages from memblock instead of
   totalram_pages() during mm init, to ensure correct calculation of
   zero page size, when defer_init is enabled

 - Refactor lowcore access and switch to using the get_lowcore()
   function instead of the S390_lowcore macro

 - Cleanups for PG_arch_1 and folio handling in UV and hugetlb code

 - Add missing MODULE_DESCRIPTION() macros

 - Fix VM_FAULT_HWPOISON handling in do_exception()

* tag 's390-6.11-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (54 commits)
  s390/mm: Fix VM_FAULT_HWPOISON handling in do_exception()
  s390/kvm: Move bitfields for dat tables
  s390/entry: Pass the asce as parameter to sie64a()
  s390/sthyi: Use cached data when diag is busy
  s390/sthyi: Move diag operations
  s390/hypfs_diag: Diag204 busy loop
  s390/diag: Add busy-indication-facility requirements
  s390/diag: Diag204 add busy return errno
  s390/diag: Return errno's from diag204
  s390/sclp: Diag204 busy indication facility detection
  s390/atomic_ops: Make use of flag output constraint
  s390/atomic_ops: Improve __atomic_set() for small values
  s390/atomic_ops: Use symbolic names
  s390/smp: Switch to GENERIC_CPU_DEVICES
  s390/hwcaps: Add documentation for HWCAP flags
  s390/pgtable: Make crdte() and cspg() return a value
  s390/topology: Remove CPU KOBJ_CHANGE uevents
  s390/sclp: Add timeout to Store Data requests
  s390/sclp: Prevent release of buffer in I/O
  s390/sclp: Suppress unnecessary Store Data warning
  ...
parents dde1a0e1 df39038c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ config ARCH_PROC_KCORE_TEXT
	def_bool y

config GENERIC_HWEIGHT
	def_bool y
	def_bool !HAVE_MARCH_Z196_FEATURES

config GENERIC_BUG
	def_bool y if BUG
@@ -142,6 +142,7 @@ config S390
	select FUNCTION_ALIGNMENT_8B if CC_IS_GCC
	select FUNCTION_ALIGNMENT_16B if !CC_IS_GCC
	select GENERIC_ALLOCATOR
	select GENERIC_CPU_DEVICES
	select GENERIC_CPU_AUTOPROBE
	select GENERIC_CPU_VULNERABILITIES
	select GENERIC_ENTRY
+2 −2
Original line number Diff line number Diff line
@@ -51,11 +51,11 @@ static inline int __diag308(unsigned long subcode, void *addr)
		: [r1] "+&d" (r1.pair),
		  [reg1] "=&d" (reg1),
		  [reg2] "=&a" (reg2),
		  "+Q" (S390_lowcore.program_new_psw),
		  "+Q" (get_lowcore()->program_new_psw),
		  "=Q" (old)
		: [subcode] "d" (subcode),
		  [psw_old] "a" (&old),
		  [psw_pgm] "a" (&S390_lowcore.program_new_psw)
		  [psw_pgm] "a" (&get_lowcore()->program_new_psw)
		: "cc", "memory");
	return r1.odd;
}
+1 −1
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ int read_ipl_report(void)
	 * the IPL parameter list, then align the address to a double
	 * word boundary.
	 */
	tmp = (unsigned long) S390_lowcore.ipl_parmblock_ptr;
	tmp = (unsigned long)get_lowcore()->ipl_parmblock_ptr;
	pl_hdr = (struct ipl_pl_hdr *) tmp;
	tmp = (tmp + pl_hdr->len + 7) & -8UL;
	rl_hdr = (struct ipl_rl_hdr *) tmp;
+9 −9
Original line number Diff line number Diff line
@@ -145,22 +145,22 @@ void print_stacktrace(unsigned long sp)

void print_pgm_check_info(void)
{
	unsigned long *gpregs = (unsigned long *)S390_lowcore.gpregs_save_area;
	struct psw_bits *psw = &psw_bits(S390_lowcore.psw_save_area);
	unsigned long *gpregs = (unsigned long *)get_lowcore()->gpregs_save_area;
	struct psw_bits *psw = &psw_bits(get_lowcore()->psw_save_area);

	decompressor_printk("Linux version %s\n", kernel_version);
	if (!is_prot_virt_guest() && early_command_line[0])
		decompressor_printk("Kernel command line: %s\n", early_command_line);
	decompressor_printk("Kernel fault: interruption code %04x ilc:%x\n",
			    S390_lowcore.pgm_code, S390_lowcore.pgm_ilc >> 1);
			    get_lowcore()->pgm_code, get_lowcore()->pgm_ilc >> 1);
	if (kaslr_enabled()) {
		decompressor_printk("Kernel random base: %lx\n", __kaslr_offset);
		decompressor_printk("Kernel random base phys: %lx\n", __kaslr_offset_phys);
	}
	decompressor_printk("PSW : %016lx %016lx (%pS)\n",
			    S390_lowcore.psw_save_area.mask,
			    S390_lowcore.psw_save_area.addr,
			    (void *)S390_lowcore.psw_save_area.addr);
			    get_lowcore()->psw_save_area.mask,
			    get_lowcore()->psw_save_area.addr,
			    (void *)get_lowcore()->psw_save_area.addr);
	decompressor_printk(
		"      R:%x T:%x IO:%x EX:%x Key:%x M:%x W:%x P:%x AS:%x CC:%x PM:%x RI:%x EA:%x\n",
		psw->per, psw->dat, psw->io, psw->ext, psw->key, psw->mcheck,
@@ -174,8 +174,8 @@ void print_pgm_check_info(void)
			    gpregs[8], gpregs[9], gpregs[10], gpregs[11]);
	decompressor_printk("      %016lx %016lx %016lx %016lx\n",
			    gpregs[12], gpregs[13], gpregs[14], gpregs[15]);
	print_stacktrace(S390_lowcore.gpregs_save_area[15]);
	print_stacktrace(get_lowcore()->gpregs_save_area[15]);
	decompressor_printk("Last Breaking-Event-Address:\n");
	decompressor_printk(" [<%016lx>] %pS\n", (unsigned long)S390_lowcore.pgm_last_break,
			    (void *)S390_lowcore.pgm_last_break);
	decompressor_printk(" [<%016lx>] %pS\n", (unsigned long)get_lowcore()->pgm_last_break,
			    (void *)get_lowcore()->pgm_last_break);
}
+4 −4
Original line number Diff line number Diff line
@@ -81,11 +81,11 @@ static int __diag260(unsigned long rx1, unsigned long rx2)
		  [reg2] "=&a" (reg2),
		  [rc] "+&d" (rc),
		  [ry] "+&d" (ry),
		  "+Q" (S390_lowcore.program_new_psw),
		  "+Q" (get_lowcore()->program_new_psw),
		  "=Q" (old)
		: [rx] "d" (rx.pair),
		  [psw_old] "a" (&old),
		  [psw_pgm] "a" (&S390_lowcore.program_new_psw)
		  [psw_pgm] "a" (&get_lowcore()->program_new_psw)
		: "cc", "memory");
	return rc == 0 ? ry : -1;
}
@@ -129,10 +129,10 @@ static int tprot(unsigned long addr)
		: [reg1] "=&d" (reg1),
		  [reg2] "=&a" (reg2),
		  [rc] "+&d" (rc),
		  "=Q" (S390_lowcore.program_new_psw.addr),
		  "=Q" (get_lowcore()->program_new_psw.addr),
		  "=Q" (old)
		: [psw_old] "a" (&old),
		  [psw_pgm] "a" (&S390_lowcore.program_new_psw),
		  [psw_pgm] "a" (&get_lowcore()->program_new_psw),
		  [addr] "a" (addr)
		: "cc", "memory");
	return rc;
Loading