summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2019-06-03 08:25:18 -0400
committerHeiko Carstens <heiko.carstens@de.ibm.com>2019-06-07 04:09:37 -0400
commit67626fadd26977aca76d3540b80ce99233399cdf (patch)
tree5e19c3d97c5849ee38e5d5633515b26ade57e03e
parent753469a23b42d0c4a2b28de35826af74a4d554ab (diff)
s390: enforce CONFIG_SMP
There never have been distributions that shiped with CONFIG_SMP=n for s390. In addition the kernel currently doesn't even compile with CONFIG_SMP=n for s390. Most likely it wouldn't even work, even if we fix the compile error, since nobody tests it, since there is no use case that I can think of. Therefore simply enforce CONFIG_SMP and get rid of some more or less unused code. Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
-rw-r--r--arch/s390/Kconfig25
-rw-r--r--arch/s390/include/asm/ctl_reg.h9
-rw-r--r--arch/s390/include/asm/percpu.h2
-rw-r--r--arch/s390/include/asm/smp.h30
-rw-r--r--arch/s390/include/asm/spinlock.h4
-rw-r--r--arch/s390/include/asm/tlbflush.h17
-rw-r--r--arch/s390/kernel/Makefile2
-rw-r--r--arch/s390/kernel/dumpstack.c2
-rw-r--r--arch/s390/kernel/entry.S4
-rw-r--r--arch/s390/kernel/setup.c2
-rw-r--r--arch/s390/kernel/swsusp.S2
-rw-r--r--arch/s390/lib/Makefile3
12 files changed, 7 insertions, 95 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index e2e154051b07..bdf3b5fdea53 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -30,7 +30,7 @@ config GENERIC_BUG_RELATIVE_POINTERS
30 def_bool y 30 def_bool y
31 31
32config GENERIC_LOCKBREAK 32config GENERIC_LOCKBREAK
33 def_bool y if SMP && PREEMPT 33 def_bool y if PREEMPT
34 34
35config PGSTE 35config PGSTE
36 def_bool y if KVM 36 def_bool y if KVM
@@ -113,7 +113,6 @@ config S390
113 select DYNAMIC_FTRACE if FUNCTION_TRACER 113 select DYNAMIC_FTRACE if FUNCTION_TRACER
114 select GENERIC_CLOCKEVENTS 114 select GENERIC_CLOCKEVENTS
115 select GENERIC_CPU_AUTOPROBE 115 select GENERIC_CPU_AUTOPROBE
116 select GENERIC_CPU_DEVICES if !SMP
117 select GENERIC_CPU_VULNERABILITIES 116 select GENERIC_CPU_VULNERABILITIES
118 select GENERIC_FIND_FIRST_BIT 117 select GENERIC_FIND_FIRST_BIT
119 select GENERIC_SMP_IDLE_THREAD 118 select GENERIC_SMP_IDLE_THREAD
@@ -399,27 +398,10 @@ config SYSVIPC_COMPAT
399 398
400config SMP 399config SMP
401 def_bool y 400 def_bool y
402 prompt "Symmetric multi-processing support"
403 ---help---
404 This enables support for systems with more than one CPU. If you have
405 a system with only one CPU, like most personal computers, say N. If
406 you have a system with more than one CPU, say Y.
407
408 If you say N here, the kernel will run on uni- and multiprocessor
409 machines, but will use only one CPU of a multiprocessor machine. If
410 you say Y here, the kernel will run on many, but not all,
411 uniprocessor machines. On a uniprocessor machine, the kernel
412 will run faster if you say N here.
413
414 See also the SMP-HOWTO available at
415 <http://www.tldp.org/docs.html#howto>.
416
417 Even if you don't know what to do here, say Y.
418 401
419config NR_CPUS 402config NR_CPUS
420 int "Maximum number of CPUs (2-512)" 403 int "Maximum number of CPUs (2-512)"
421 range 2 512 404 range 2 512
422 depends on SMP
423 default "64" 405 default "64"
424 help 406 help
425 This allows you to specify the maximum number of CPUs which this 407 This allows you to specify the maximum number of CPUs which this
@@ -432,7 +414,6 @@ config NR_CPUS
432config HOTPLUG_CPU 414config HOTPLUG_CPU
433 def_bool y 415 def_bool y
434 prompt "Support for hot-pluggable CPUs" 416 prompt "Support for hot-pluggable CPUs"
435 depends on SMP
436 help 417 help
437 Say Y here to be able to turn CPUs off and on. CPUs 418 Say Y here to be able to turn CPUs off and on. CPUs
438 can be controlled through /sys/devices/system/cpu/cpu#. 419 can be controlled through /sys/devices/system/cpu/cpu#.
@@ -448,7 +429,7 @@ config NODES_SPAN_OTHER_NODES
448 429
449config NUMA 430config NUMA
450 bool "NUMA support" 431 bool "NUMA support"
451 depends on SMP && SCHED_TOPOLOGY 432 depends on SCHED_TOPOLOGY
452 default n 433 default n
453 help 434 help
454 Enable NUMA support 435 Enable NUMA support
@@ -523,7 +504,6 @@ config SCHED_DRAWER
523config SCHED_TOPOLOGY 504config SCHED_TOPOLOGY
524 def_bool y 505 def_bool y
525 prompt "Topology scheduler support" 506 prompt "Topology scheduler support"
526 depends on SMP
527 select SCHED_SMT 507 select SCHED_SMT
528 select SCHED_MC 508 select SCHED_MC
529 select SCHED_BOOK 509 select SCHED_BOOK
@@ -829,7 +809,6 @@ menu "Dump support"
829 809
830config CRASH_DUMP 810config CRASH_DUMP
831 bool "kernel crash dumps" 811 bool "kernel crash dumps"
832 depends on SMP
833 select KEXEC 812 select KEXEC
834 help 813 help
835 Generate crash dump after being started by kexec. 814 Generate crash dump after being started by kexec.
diff --git a/arch/s390/include/asm/ctl_reg.h b/arch/s390/include/asm/ctl_reg.h
index 4600453536c2..a778a0825835 100644
--- a/arch/s390/include/asm/ctl_reg.h
+++ b/arch/s390/include/asm/ctl_reg.h
@@ -112,13 +112,8 @@ union ctlreg2 {
112 }; 112 };
113}; 113};
114 114
115#ifdef CONFIG_SMP 115#define ctl_set_bit(cr, bit) smp_ctl_set_bit(cr, bit)
116# define ctl_set_bit(cr, bit) smp_ctl_set_bit(cr, bit) 116#define ctl_clear_bit(cr, bit) smp_ctl_clear_bit(cr, bit)
117# define ctl_clear_bit(cr, bit) smp_ctl_clear_bit(cr, bit)
118#else
119# define ctl_set_bit(cr, bit) __ctl_set_bit(cr, bit)
120# define ctl_clear_bit(cr, bit) __ctl_clear_bit(cr, bit)
121#endif
122 117
123#endif /* __ASSEMBLY__ */ 118#endif /* __ASSEMBLY__ */
124#endif /* __ASM_CTL_REG_H */ 119#endif /* __ASM_CTL_REG_H */
diff --git a/arch/s390/include/asm/percpu.h b/arch/s390/include/asm/percpu.h
index 0095ddb58ff6..50b4ce8cddfd 100644
--- a/arch/s390/include/asm/percpu.h
+++ b/arch/s390/include/asm/percpu.h
@@ -16,7 +16,7 @@
16 * per cpu area, use weak definitions to force the compiler to 16 * per cpu area, use weak definitions to force the compiler to
17 * generate external references. 17 * generate external references.
18 */ 18 */
19#if defined(CONFIG_SMP) && defined(MODULE) 19#if defined(MODULE)
20#define ARCH_NEEDS_WEAK_PER_CPU 20#define ARCH_NEEDS_WEAK_PER_CPU
21#endif 21#endif
22 22
diff --git a/arch/s390/include/asm/smp.h b/arch/s390/include/asm/smp.h
index 3907ead27ffa..30ba1a3f88de 100644
--- a/arch/s390/include/asm/smp.h
+++ b/arch/s390/include/asm/smp.h
@@ -9,9 +9,6 @@
9#define __ASM_SMP_H 9#define __ASM_SMP_H
10 10
11#include <asm/sigp.h> 11#include <asm/sigp.h>
12
13#ifdef CONFIG_SMP
14
15#include <asm/lowcore.h> 12#include <asm/lowcore.h>
16 13
17#define raw_smp_processor_id() (S390_lowcore.cpu_nr) 14#define raw_smp_processor_id() (S390_lowcore.cpu_nr)
@@ -40,33 +37,6 @@ extern int smp_cpu_get_polarization(int cpu);
40extern void smp_fill_possible_mask(void); 37extern void smp_fill_possible_mask(void);
41extern void smp_detect_cpus(void); 38extern void smp_detect_cpus(void);
42 39
43#else /* CONFIG_SMP */
44
45#define smp_cpu_mtid 0
46
47static inline void smp_call_ipl_cpu(void (*func)(void *), void *data)
48{
49 func(data);
50}
51
52static inline void smp_call_online_cpu(void (*func)(void *), void *data)
53{
54 func(data);
55}
56
57static inline void smp_emergency_stop(void)
58{
59}
60
61static inline int smp_find_processor_id(u16 address) { return 0; }
62static inline int smp_store_status(int cpu) { return 0; }
63static inline int smp_vcpu_scheduled(int cpu) { return 1; }
64static inline void smp_yield_cpu(int cpu) { }
65static inline void smp_fill_possible_mask(void) { }
66static inline void smp_detect_cpus(void) { }
67
68#endif /* CONFIG_SMP */
69
70static inline void smp_stop_cpu(void) 40static inline void smp_stop_cpu(void)
71{ 41{
72 u16 pcpu = stap(); 42 u16 pcpu = stap();
diff --git a/arch/s390/include/asm/spinlock.h b/arch/s390/include/asm/spinlock.h
index 0a29588aa00b..c02bff33f6c7 100644
--- a/arch/s390/include/asm/spinlock.h
+++ b/arch/s390/include/asm/spinlock.h
@@ -20,11 +20,7 @@
20 20
21extern int spin_retry; 21extern int spin_retry;
22 22
23#ifndef CONFIG_SMP
24static inline bool arch_vcpu_is_preempted(int cpu) { return false; }
25#else
26bool arch_vcpu_is_preempted(int cpu); 23bool arch_vcpu_is_preempted(int cpu);
27#endif
28 24
29#define vcpu_is_preempted arch_vcpu_is_preempted 25#define vcpu_is_preempted arch_vcpu_is_preempted
30 26
diff --git a/arch/s390/include/asm/tlbflush.h b/arch/s390/include/asm/tlbflush.h
index 8c840f0904f3..82703e03f35d 100644
--- a/arch/s390/include/asm/tlbflush.h
+++ b/arch/s390/include/asm/tlbflush.h
@@ -32,7 +32,6 @@ static inline void __tlb_flush_idte(unsigned long asce)
32 : : "a" (opt), "a" (asce) : "cc"); 32 : : "a" (opt), "a" (asce) : "cc");
33} 33}
34 34
35#ifdef CONFIG_SMP
36void smp_ptlb_all(void); 35void smp_ptlb_all(void);
37 36
38/* 37/*
@@ -83,22 +82,6 @@ static inline void __tlb_flush_kernel(void)
83 else 82 else
84 __tlb_flush_global(); 83 __tlb_flush_global();
85} 84}
86#else
87#define __tlb_flush_global() __tlb_flush_local()
88
89/*
90 * Flush TLB entries for a specific ASCE on all CPUs.
91 */
92static inline void __tlb_flush_mm(struct mm_struct *mm)
93{
94 __tlb_flush_local();
95}
96
97static inline void __tlb_flush_kernel(void)
98{
99 __tlb_flush_local();
100}
101#endif
102 85
103static inline void __tlb_flush_mm_lazy(struct mm_struct * mm) 86static inline void __tlb_flush_mm_lazy(struct mm_struct * mm)
104{ 87{
diff --git a/arch/s390/kernel/Makefile b/arch/s390/kernel/Makefile
index b0478d01a0c5..0f255b54b051 100644
--- a/arch/s390/kernel/Makefile
+++ b/arch/s390/kernel/Makefile
@@ -53,6 +53,7 @@ obj-y += sysinfo.o lgr.o os_info.o machine_kexec.o pgm_check.o
53obj-y += runtime_instr.o cache.o fpu.o dumpstack.o guarded_storage.o sthyi.o 53obj-y += runtime_instr.o cache.o fpu.o dumpstack.o guarded_storage.o sthyi.o
54obj-y += entry.o reipl.o relocate_kernel.o kdebugfs.o alternative.o 54obj-y += entry.o reipl.o relocate_kernel.o kdebugfs.o alternative.o
55obj-y += nospec-branch.o ipl_vmparm.o machine_kexec_reloc.o unwind_bc.o 55obj-y += nospec-branch.o ipl_vmparm.o machine_kexec_reloc.o unwind_bc.o
56obj-y += smp.o
56 57
57extra-y += head64.o vmlinux.lds 58extra-y += head64.o vmlinux.lds
58 59
@@ -60,7 +61,6 @@ obj-$(CONFIG_SYSFS) += nospec-sysfs.o
60CFLAGS_REMOVE_nospec-branch.o += $(CC_FLAGS_EXPOLINE) 61CFLAGS_REMOVE_nospec-branch.o += $(CC_FLAGS_EXPOLINE)
61 62
62obj-$(CONFIG_MODULES) += module.o 63obj-$(CONFIG_MODULES) += module.o
63obj-$(CONFIG_SMP) += smp.o
64obj-$(CONFIG_SCHED_TOPOLOGY) += topology.o 64obj-$(CONFIG_SCHED_TOPOLOGY) += topology.o
65obj-$(CONFIG_HIBERNATION) += suspend.o swsusp.o 65obj-$(CONFIG_HIBERNATION) += suspend.o swsusp.o
66obj-$(CONFIG_AUDIT) += audit.o 66obj-$(CONFIG_AUDIT) += audit.o
diff --git a/arch/s390/kernel/dumpstack.c b/arch/s390/kernel/dumpstack.c
index 9e87b68be21c..ac06c3949ab3 100644
--- a/arch/s390/kernel/dumpstack.c
+++ b/arch/s390/kernel/dumpstack.c
@@ -199,9 +199,7 @@ void die(struct pt_regs *regs, const char *str)
199#ifdef CONFIG_PREEMPT 199#ifdef CONFIG_PREEMPT
200 pr_cont("PREEMPT "); 200 pr_cont("PREEMPT ");
201#endif 201#endif
202#ifdef CONFIG_SMP
203 pr_cont("SMP "); 202 pr_cont("SMP ");
204#endif
205 if (debug_pagealloc_enabled()) 203 if (debug_pagealloc_enabled())
206 pr_cont("DEBUG_PAGEALLOC"); 204 pr_cont("DEBUG_PAGEALLOC");
207 pr_cont("\n"); 205 pr_cont("\n");
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index 3f4d272577d3..270d1d145761 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -986,14 +986,12 @@ ENTRY(psw_idle)
986 stg %r3,__SF_EMPTY(%r15) 986 stg %r3,__SF_EMPTY(%r15)
987 larl %r1,.Lpsw_idle_lpsw+4 987 larl %r1,.Lpsw_idle_lpsw+4
988 stg %r1,__SF_EMPTY+8(%r15) 988 stg %r1,__SF_EMPTY+8(%r15)
989#ifdef CONFIG_SMP
990 larl %r1,smp_cpu_mtid 989 larl %r1,smp_cpu_mtid
991 llgf %r1,0(%r1) 990 llgf %r1,0(%r1)
992 ltgr %r1,%r1 991 ltgr %r1,%r1
993 jz .Lpsw_idle_stcctm 992 jz .Lpsw_idle_stcctm
994 .insn rsy,0xeb0000000017,%r1,5,__SF_EMPTY+16(%r15) 993 .insn rsy,0xeb0000000017,%r1,5,__SF_EMPTY+16(%r15)
995.Lpsw_idle_stcctm: 994.Lpsw_idle_stcctm:
996#endif
997 oi __LC_CPU_FLAGS+7,_CIF_ENABLED_WAIT 995 oi __LC_CPU_FLAGS+7,_CIF_ENABLED_WAIT
998 BPON 996 BPON
999 STCK __CLOCK_IDLE_ENTER(%r2) 997 STCK __CLOCK_IDLE_ENTER(%r2)
@@ -1468,7 +1466,6 @@ ENDPROC(cleanup_critical)
1468 mvc __CLOCK_IDLE_ENTER(8,%r2),__CLOCK_IDLE_EXIT(%r2) 1466 mvc __CLOCK_IDLE_ENTER(8,%r2),__CLOCK_IDLE_EXIT(%r2)
1469 mvc __TIMER_IDLE_ENTER(8,%r2),__TIMER_IDLE_EXIT(%r2) 1467 mvc __TIMER_IDLE_ENTER(8,%r2),__TIMER_IDLE_EXIT(%r2)
14701: # calculate idle cycles 14681: # calculate idle cycles
1471#ifdef CONFIG_SMP
1472 clg %r9,BASED(.Lcleanup_idle_insn) 1469 clg %r9,BASED(.Lcleanup_idle_insn)
1473 jl 3f 1470 jl 3f
1474 larl %r1,smp_cpu_mtid 1471 larl %r1,smp_cpu_mtid
@@ -1486,7 +1483,6 @@ ENDPROC(cleanup_critical)
1486 la %r3,8(%r3) 1483 la %r3,8(%r3)
1487 la %r4,8(%r4) 1484 la %r4,8(%r4)
1488 brct %r1,2b 1485 brct %r1,2b
1489#endif
14903: # account system time going idle 14863: # account system time going idle
1491 lg %r9,__LC_STEAL_TIMER 1487 lg %r9,__LC_STEAL_TIMER
1492 alg %r9,__CLOCK_IDLE_ENTER(%r2) 1488 alg %r9,__CLOCK_IDLE_ENTER(%r2)
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index f8544d517430..2b94b0ad3588 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -461,11 +461,9 @@ static void __init setup_lowcore_dat_off(void)
461 mem_assign_absolute(S390_lowcore.restart_source, lc->restart_source); 461 mem_assign_absolute(S390_lowcore.restart_source, lc->restart_source);
462 mem_assign_absolute(S390_lowcore.restart_psw, lc->restart_psw); 462 mem_assign_absolute(S390_lowcore.restart_psw, lc->restart_psw);
463 463
464#ifdef CONFIG_SMP
465 lc->spinlock_lockval = arch_spin_lockval(0); 464 lc->spinlock_lockval = arch_spin_lockval(0);
466 lc->spinlock_index = 0; 465 lc->spinlock_index = 0;
467 arch_spin_lock_setup(0); 466 arch_spin_lock_setup(0);
468#endif
469 lc->br_r1_trampoline = 0x07f1; /* br %r1 */ 467 lc->br_r1_trampoline = 0x07f1; /* br %r1 */
470 468
471 set_prefix((u32)(unsigned long) lc); 469 set_prefix((u32)(unsigned long) lc);
diff --git a/arch/s390/kernel/swsusp.S b/arch/s390/kernel/swsusp.S
index 19a3c427801a..a7baf0b5f818 100644
--- a/arch/s390/kernel/swsusp.S
+++ b/arch/s390/kernel/swsusp.S
@@ -162,7 +162,6 @@ ENTRY(swsusp_arch_resume)
162 larl %r1,__swsusp_reset_dma 162 larl %r1,__swsusp_reset_dma
163 lg %r1,0(%r1) 163 lg %r1,0(%r1)
164 BASR_EX %r14,%r1 164 BASR_EX %r14,%r1
165#ifdef CONFIG_SMP
166 larl %r1,smp_cpu_mt_shift 165 larl %r1,smp_cpu_mt_shift
167 icm %r1,15,0(%r1) 166 icm %r1,15,0(%r1)
168 jz smt_done 167 jz smt_done
@@ -172,7 +171,6 @@ smt_loop:
172 brc 8,smt_done /* accepted */ 171 brc 8,smt_done /* accepted */
173 brc 2,smt_loop /* busy, try again */ 172 brc 2,smt_loop /* busy, try again */
174smt_done: 173smt_done:
175#endif
176 larl %r1,.Lnew_pgm_check_psw 174 larl %r1,.Lnew_pgm_check_psw
177 lpswe 0(%r1) 175 lpswe 0(%r1)
178pgm_check_entry: 176pgm_check_entry:
diff --git a/arch/s390/lib/Makefile b/arch/s390/lib/Makefile
index 5418d10dc2a8..a1ec63abfb95 100644
--- a/arch/s390/lib/Makefile
+++ b/arch/s390/lib/Makefile
@@ -3,9 +3,8 @@
3# Makefile for s390-specific library files.. 3# Makefile for s390-specific library files..
4# 4#
5 5
6lib-y += delay.o string.o uaccess.o find.o 6lib-y += delay.o string.o uaccess.o find.o spinlock.o
7obj-y += mem.o xor.o 7obj-y += mem.o xor.o
8lib-$(CONFIG_SMP) += spinlock.o
9lib-$(CONFIG_KPROBES) += probes.o 8lib-$(CONFIG_KPROBES) += probes.o
10lib-$(CONFIG_UPROBES) += probes.o 9lib-$(CONFIG_UPROBES) += probes.o
11 10