Skip to content

Commit dd9db3b

Browse files
committed
Merge tag 's390-6.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull more s390 updates from Vasily Gorbik: - Fix machine check handler _CIF_MCCK_GUEST bit setting by adding the missing base register for relocated lowcore address - Fix build failure on older linkers by conditionally adding the -no-pie linker option only when it is supported - Fix inaccurate kernel messages in vfio-ap by providing descriptive error notifications for AP queue sharing violations - Fix PCI isolation logic by ensuring non-VF devices correctly return false in zpci_bus_is_isolated_vf() - Fix PCI DMA range map setup by using dma_direct_set_offset() to add a proper sentinel element, preventing potential overruns and translation errors - Cleanup header dependency problems with asm-offsets.c - Add fault info for unexpected low-address protection faults in user mode - Add support for HOTPLUG_SMT, replacing the arch-specific "nosmt" handling with common code handling - Use bitop functions to implement CPU flag helper functions to ensure that bits cannot get lost if modified in different contexts on a CPU - Remove unused machine_flags for the lowcore * tag 's390-6.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/vfio-ap: Fix no AP queue sharing allowed message written to kernel log s390/pci: Fix dev.dma_range_map missing sentinel element s390/mm: Dump fault info in case of low address protection fault s390/smp: Add support for HOTPLUG_SMT s390: Fix linker error when -no-pie option is unavailable s390/processor: Use bitop functions for cpu flag helper functions s390/asm-offsets: Remove ASM_OFFSETS_C s390/asm-offsets: Include ftrace_regs.h instead of ftrace.h s390/kvm: Split kvm_host header file s390/pci: Fix zpci_bus_is_isolated_vf() for non-VFs s390/lowcore: Remove unused machine_flags s390/entry: Fix setting _CIF_MCCK_GUEST with lowcore relocation
2 parents 9f867ba + d33d729 commit dd9db3b

File tree

20 files changed

+437
-412
lines changed

20 files changed

+437
-412
lines changed

Documentation/admin-guide/kernel-parameters.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4265,10 +4265,10 @@
42654265
nosmp [SMP,EARLY] Tells an SMP kernel to act as a UP kernel,
42664266
and disable the IO APIC. legacy for "maxcpus=0".
42674267

4268-
nosmt [KNL,MIPS,PPC,S390,EARLY] Disable symmetric multithreading (SMT).
4268+
nosmt [KNL,MIPS,PPC,EARLY] Disable symmetric multithreading (SMT).
42694269
Equivalent to smt=1.
42704270

4271-
[KNL,X86,PPC] Disable symmetric multithreading (SMT).
4271+
[KNL,X86,PPC,S390] Disable symmetric multithreading (SMT).
42724272
nosmt=force: Force disable SMT, cannot be undone
42734273
via the sysfs control file.
42744274

arch/s390/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ config S390
240240
select HAVE_SYSCALL_TRACEPOINTS
241241
select HAVE_VIRT_CPU_ACCOUNTING
242242
select HAVE_VIRT_CPU_ACCOUNTING_IDLE
243+
select HOTPLUG_SMT
243244
select IOMMU_HELPER if PCI
244245
select IOMMU_SUPPORT if PCI
245246
select KASAN_VMALLOC if KASAN

arch/s390/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ KBUILD_CFLAGS_MODULE += -fPIC
1515
KBUILD_AFLAGS += -m64
1616
KBUILD_CFLAGS += -m64
1717
KBUILD_CFLAGS += -fPIC
18-
LDFLAGS_vmlinux := -no-pie --emit-relocs --discard-none
18+
LDFLAGS_vmlinux := $(call ld-option,-no-pie) --emit-relocs --discard-none
1919
extra_tools := relocs
2020
aflags_dwarf := -Wa,-gdwarf-2
2121
KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__

arch/s390/include/asm/kvm_host.h

Lines changed: 1 addition & 338 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,13 @@
2020
#include <linux/module.h>
2121
#include <linux/pci.h>
2222
#include <linux/mmu_notifier.h>
23+
#include <asm/kvm_host_types.h>
2324
#include <asm/debug.h>
2425
#include <asm/cpu.h>
2526
#include <asm/fpu.h>
2627
#include <asm/isc.h>
2728
#include <asm/guarded_storage.h>
2829

29-
#define KVM_S390_BSCA_CPU_SLOTS 64
30-
#define KVM_S390_ESCA_CPU_SLOTS 248
3130
#define KVM_MAX_VCPUS 255
3231

3332
#define KVM_INTERNAL_MEM_SLOTS 1
@@ -51,342 +50,6 @@
5150
#define KVM_REQ_REFRESH_GUEST_PREFIX \
5251
KVM_ARCH_REQ_FLAGS(6, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
5352

54-
#define SIGP_CTRL_C 0x80
55-
#define SIGP_CTRL_SCN_MASK 0x3f
56-
57-
union bsca_sigp_ctrl {
58-
__u8 value;
59-
struct {
60-
__u8 c : 1;
61-
__u8 r : 1;
62-
__u8 scn : 6;
63-
};
64-
};
65-
66-
union esca_sigp_ctrl {
67-
__u16 value;
68-
struct {
69-
__u8 c : 1;
70-
__u8 reserved: 7;
71-
__u8 scn;
72-
};
73-
};
74-
75-
struct esca_entry {
76-
union esca_sigp_ctrl sigp_ctrl;
77-
__u16 reserved1[3];
78-
__u64 sda;
79-
__u64 reserved2[6];
80-
};
81-
82-
struct bsca_entry {
83-
__u8 reserved0;
84-
union bsca_sigp_ctrl sigp_ctrl;
85-
__u16 reserved[3];
86-
__u64 sda;
87-
__u64 reserved2[2];
88-
};
89-
90-
union ipte_control {
91-
unsigned long val;
92-
struct {
93-
unsigned long k : 1;
94-
unsigned long kh : 31;
95-
unsigned long kg : 32;
96-
};
97-
};
98-
99-
/*
100-
* Utility is defined as two bytes but having it four bytes wide
101-
* generates more efficient code. Since the following bytes are
102-
* reserved this makes no functional difference.
103-
*/
104-
union sca_utility {
105-
__u32 val;
106-
struct {
107-
__u32 mtcr : 1;
108-
__u32 : 31;
109-
};
110-
};
111-
112-
struct bsca_block {
113-
union ipte_control ipte_control;
114-
__u64 reserved[5];
115-
__u64 mcn;
116-
union sca_utility utility;
117-
__u8 reserved2[4];
118-
struct bsca_entry cpu[KVM_S390_BSCA_CPU_SLOTS];
119-
};
120-
121-
struct esca_block {
122-
union ipte_control ipte_control;
123-
__u64 reserved1[6];
124-
union sca_utility utility;
125-
__u8 reserved2[4];
126-
__u64 mcn[4];
127-
__u64 reserved3[20];
128-
struct esca_entry cpu[KVM_S390_ESCA_CPU_SLOTS];
129-
};
130-
131-
/*
132-
* This struct is used to store some machine check info from lowcore
133-
* for machine checks that happen while the guest is running.
134-
* This info in host's lowcore might be overwritten by a second machine
135-
* check from host when host is in the machine check's high-level handling.
136-
* The size is 24 bytes.
137-
*/
138-
struct mcck_volatile_info {
139-
__u64 mcic;
140-
__u64 failing_storage_address;
141-
__u32 ext_damage_code;
142-
__u32 reserved;
143-
};
144-
145-
#define CR0_INITIAL_MASK (CR0_UNUSED_56 | CR0_INTERRUPT_KEY_SUBMASK | \
146-
CR0_MEASUREMENT_ALERT_SUBMASK)
147-
#define CR14_INITIAL_MASK (CR14_UNUSED_32 | CR14_UNUSED_33 | \
148-
CR14_EXTERNAL_DAMAGE_SUBMASK)
149-
150-
#define SIDAD_SIZE_MASK 0xff
151-
#define sida_addr(sie_block) phys_to_virt((sie_block)->sidad & PAGE_MASK)
152-
#define sida_size(sie_block) \
153-
((((sie_block)->sidad & SIDAD_SIZE_MASK) + 1) * PAGE_SIZE)
154-
155-
#define CPUSTAT_STOPPED 0x80000000
156-
#define CPUSTAT_WAIT 0x10000000
157-
#define CPUSTAT_ECALL_PEND 0x08000000
158-
#define CPUSTAT_STOP_INT 0x04000000
159-
#define CPUSTAT_IO_INT 0x02000000
160-
#define CPUSTAT_EXT_INT 0x01000000
161-
#define CPUSTAT_RUNNING 0x00800000
162-
#define CPUSTAT_RETAINED 0x00400000
163-
#define CPUSTAT_TIMING_SUB 0x00020000
164-
#define CPUSTAT_SIE_SUB 0x00010000
165-
#define CPUSTAT_RRF 0x00008000
166-
#define CPUSTAT_SLSV 0x00004000
167-
#define CPUSTAT_SLSR 0x00002000
168-
#define CPUSTAT_ZARCH 0x00000800
169-
#define CPUSTAT_MCDS 0x00000100
170-
#define CPUSTAT_KSS 0x00000200
171-
#define CPUSTAT_SM 0x00000080
172-
#define CPUSTAT_IBS 0x00000040
173-
#define CPUSTAT_GED2 0x00000010
174-
#define CPUSTAT_G 0x00000008
175-
#define CPUSTAT_GED 0x00000004
176-
#define CPUSTAT_J 0x00000002
177-
#define CPUSTAT_P 0x00000001
178-
179-
struct kvm_s390_sie_block {
180-
atomic_t cpuflags; /* 0x0000 */
181-
__u32 : 1; /* 0x0004 */
182-
__u32 prefix : 18;
183-
__u32 : 1;
184-
__u32 ibc : 12;
185-
__u8 reserved08[4]; /* 0x0008 */
186-
#define PROG_IN_SIE (1<<0)
187-
__u32 prog0c; /* 0x000c */
188-
union {
189-
__u8 reserved10[16]; /* 0x0010 */
190-
struct {
191-
__u64 pv_handle_cpu;
192-
__u64 pv_handle_config;
193-
};
194-
};
195-
#define PROG_BLOCK_SIE (1<<0)
196-
#define PROG_REQUEST (1<<1)
197-
atomic_t prog20; /* 0x0020 */
198-
__u8 reserved24[4]; /* 0x0024 */
199-
__u64 cputm; /* 0x0028 */
200-
__u64 ckc; /* 0x0030 */
201-
__u64 epoch; /* 0x0038 */
202-
__u32 svcc; /* 0x0040 */
203-
#define LCTL_CR0 0x8000
204-
#define LCTL_CR6 0x0200
205-
#define LCTL_CR9 0x0040
206-
#define LCTL_CR10 0x0020
207-
#define LCTL_CR11 0x0010
208-
#define LCTL_CR14 0x0002
209-
__u16 lctl; /* 0x0044 */
210-
__s16 icpua; /* 0x0046 */
211-
#define ICTL_OPEREXC 0x80000000
212-
#define ICTL_PINT 0x20000000
213-
#define ICTL_LPSW 0x00400000
214-
#define ICTL_STCTL 0x00040000
215-
#define ICTL_ISKE 0x00004000
216-
#define ICTL_SSKE 0x00002000
217-
#define ICTL_RRBE 0x00001000
218-
#define ICTL_TPROT 0x00000200
219-
__u32 ictl; /* 0x0048 */
220-
#define ECA_CEI 0x80000000
221-
#define ECA_IB 0x40000000
222-
#define ECA_SIGPI 0x10000000
223-
#define ECA_MVPGI 0x01000000
224-
#define ECA_AIV 0x00200000
225-
#define ECA_VX 0x00020000
226-
#define ECA_PROTEXCI 0x00002000
227-
#define ECA_APIE 0x00000008
228-
#define ECA_SII 0x00000001
229-
__u32 eca; /* 0x004c */
230-
#define ICPT_INST 0x04
231-
#define ICPT_PROGI 0x08
232-
#define ICPT_INSTPROGI 0x0C
233-
#define ICPT_EXTREQ 0x10
234-
#define ICPT_EXTINT 0x14
235-
#define ICPT_IOREQ 0x18
236-
#define ICPT_WAIT 0x1c
237-
#define ICPT_VALIDITY 0x20
238-
#define ICPT_STOP 0x28
239-
#define ICPT_OPEREXC 0x2C
240-
#define ICPT_PARTEXEC 0x38
241-
#define ICPT_IOINST 0x40
242-
#define ICPT_KSS 0x5c
243-
#define ICPT_MCHKREQ 0x60
244-
#define ICPT_INT_ENABLE 0x64
245-
#define ICPT_PV_INSTR 0x68
246-
#define ICPT_PV_NOTIFY 0x6c
247-
#define ICPT_PV_PREF 0x70
248-
__u8 icptcode; /* 0x0050 */
249-
__u8 icptstatus; /* 0x0051 */
250-
__u16 ihcpu; /* 0x0052 */
251-
__u8 reserved54; /* 0x0054 */
252-
#define IICTL_CODE_NONE 0x00
253-
#define IICTL_CODE_MCHK 0x01
254-
#define IICTL_CODE_EXT 0x02
255-
#define IICTL_CODE_IO 0x03
256-
#define IICTL_CODE_RESTART 0x04
257-
#define IICTL_CODE_SPECIFICATION 0x10
258-
#define IICTL_CODE_OPERAND 0x11
259-
__u8 iictl; /* 0x0055 */
260-
__u16 ipa; /* 0x0056 */
261-
__u32 ipb; /* 0x0058 */
262-
__u32 scaoh; /* 0x005c */
263-
#define FPF_BPBC 0x20
264-
__u8 fpf; /* 0x0060 */
265-
#define ECB_GS 0x40
266-
#define ECB_TE 0x10
267-
#define ECB_SPECI 0x08
268-
#define ECB_SRSI 0x04
269-
#define ECB_HOSTPROTINT 0x02
270-
#define ECB_PTF 0x01
271-
__u8 ecb; /* 0x0061 */
272-
#define ECB2_CMMA 0x80
273-
#define ECB2_IEP 0x20
274-
#define ECB2_PFMFI 0x08
275-
#define ECB2_ESCA 0x04
276-
#define ECB2_ZPCI_LSI 0x02
277-
__u8 ecb2; /* 0x0062 */
278-
#define ECB3_AISI 0x20
279-
#define ECB3_AISII 0x10
280-
#define ECB3_DEA 0x08
281-
#define ECB3_AES 0x04
282-
#define ECB3_RI 0x01
283-
__u8 ecb3; /* 0x0063 */
284-
#define ESCA_SCAOL_MASK ~0x3fU
285-
__u32 scaol; /* 0x0064 */
286-
__u8 sdf; /* 0x0068 */
287-
__u8 epdx; /* 0x0069 */
288-
__u8 cpnc; /* 0x006a */
289-
__u8 reserved6b; /* 0x006b */
290-
__u32 todpr; /* 0x006c */
291-
#define GISA_FORMAT1 0x00000001
292-
__u32 gd; /* 0x0070 */
293-
__u8 reserved74[12]; /* 0x0074 */
294-
__u64 mso; /* 0x0080 */
295-
__u64 msl; /* 0x0088 */
296-
psw_t gpsw; /* 0x0090 */
297-
__u64 gg14; /* 0x00a0 */
298-
__u64 gg15; /* 0x00a8 */
299-
__u8 reservedb0[8]; /* 0x00b0 */
300-
#define HPID_KVM 0x4
301-
#define HPID_VSIE 0x5
302-
__u8 hpid; /* 0x00b8 */
303-
__u8 reservedb9[7]; /* 0x00b9 */
304-
union {
305-
struct {
306-
__u32 eiparams; /* 0x00c0 */
307-
__u16 extcpuaddr; /* 0x00c4 */
308-
__u16 eic; /* 0x00c6 */
309-
};
310-
__u64 mcic; /* 0x00c0 */
311-
} __packed;
312-
__u32 reservedc8; /* 0x00c8 */
313-
union {
314-
struct {
315-
__u16 pgmilc; /* 0x00cc */
316-
__u16 iprcc; /* 0x00ce */
317-
};
318-
__u32 edc; /* 0x00cc */
319-
} __packed;
320-
union {
321-
struct {
322-
__u32 dxc; /* 0x00d0 */
323-
__u16 mcn; /* 0x00d4 */
324-
__u8 perc; /* 0x00d6 */
325-
__u8 peratmid; /* 0x00d7 */
326-
};
327-
__u64 faddr; /* 0x00d0 */
328-
} __packed;
329-
__u64 peraddr; /* 0x00d8 */
330-
__u8 eai; /* 0x00e0 */
331-
__u8 peraid; /* 0x00e1 */
332-
__u8 oai; /* 0x00e2 */
333-
__u8 armid; /* 0x00e3 */
334-
__u8 reservede4[4]; /* 0x00e4 */
335-
union {
336-
__u64 tecmc; /* 0x00e8 */
337-
struct {
338-
__u16 subchannel_id; /* 0x00e8 */
339-
__u16 subchannel_nr; /* 0x00ea */
340-
__u32 io_int_parm; /* 0x00ec */
341-
__u32 io_int_word; /* 0x00f0 */
342-
};
343-
} __packed;
344-
__u8 reservedf4[8]; /* 0x00f4 */
345-
#define CRYCB_FORMAT_MASK 0x00000003
346-
#define CRYCB_FORMAT0 0x00000000
347-
#define CRYCB_FORMAT1 0x00000001
348-
#define CRYCB_FORMAT2 0x00000003
349-
__u32 crycbd; /* 0x00fc */
350-
__u64 gcr[16]; /* 0x0100 */
351-
union {
352-
__u64 gbea; /* 0x0180 */
353-
__u64 sidad;
354-
};
355-
__u8 reserved188[8]; /* 0x0188 */
356-
__u64 sdnxo; /* 0x0190 */
357-
__u8 reserved198[8]; /* 0x0198 */
358-
__u32 fac; /* 0x01a0 */
359-
__u8 reserved1a4[20]; /* 0x01a4 */
360-
__u64 cbrlo; /* 0x01b8 */
361-
__u8 reserved1c0[8]; /* 0x01c0 */
362-
#define ECD_HOSTREGMGMT 0x20000000
363-
#define ECD_MEF 0x08000000
364-
#define ECD_ETOKENF 0x02000000
365-
#define ECD_ECC 0x00200000
366-
#define ECD_HMAC 0x00004000
367-
__u32 ecd; /* 0x01c8 */
368-
__u8 reserved1cc[18]; /* 0x01cc */
369-
__u64 pp; /* 0x01de */
370-
__u8 reserved1e6[2]; /* 0x01e6 */
371-
__u64 itdba; /* 0x01e8 */
372-
__u64 riccbd; /* 0x01f0 */
373-
__u64 gvrd; /* 0x01f8 */
374-
} __packed __aligned(512);
375-
376-
struct kvm_s390_itdb {
377-
__u8 data[256];
378-
};
379-
380-
struct sie_page {
381-
struct kvm_s390_sie_block sie_block;
382-
struct mcck_volatile_info mcck_info; /* 0x0200 */
383-
__u8 reserved218[360]; /* 0x0218 */
384-
__u64 pv_grregs[16]; /* 0x0380 */
385-
__u8 reserved400[512]; /* 0x0400 */
386-
struct kvm_s390_itdb itdb; /* 0x0600 */
387-
__u8 reserved700[2304]; /* 0x0700 */
388-
};
389-
39053
struct kvm_vcpu_stat {
39154
struct kvm_vcpu_stat_generic generic;
39255
u64 exit_userspace;

0 commit comments

Comments
 (0)