aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Holzheu <holzheu@linux.vnet.ibm.com>2012-05-18 08:29:19 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2012-05-23 11:06:50 -0400
commitd7b7cdea06360d3151cc8118751b3b82519c4ce0 (patch)
treebf92c22c6e7d76df82a6f897579418cb0f49a9b6
parent6101167727932a929e37fb8a6eeb68bdbf54d58e (diff)
s390/kernel: Remove OS info init function call and diag 308 for kdump
Because of a design change for stand-alone kdump the function that was done by the OS info init function is moved to the boot loader code. This has two implications that are implemented by this patch: a) The OS info init function is no longer called by the kernel b) The diag 308 subcode 1 reset is no longer done by the kdump boot code. This is necessary because otherwise the operation that is done now by the boot loader would be reversed. For the normal kexec based kdump mechansim the reset is already done by the kdump trigger code (e.g. panic or PSW restart). Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/include/asm/os_info.h5
-rw-r--r--arch/s390/kernel/head_kdump.S7
-rw-r--r--arch/s390/kernel/os_info.c1
-rw-r--r--arch/s390/kernel/smp.c12
4 files changed, 2 insertions, 23 deletions
diff --git a/arch/s390/include/asm/os_info.h b/arch/s390/include/asm/os_info.h
index d07518af09e..295f2c4f1c9 100644
--- a/arch/s390/include/asm/os_info.h
+++ b/arch/s390/include/asm/os_info.h
@@ -13,7 +13,6 @@
13 13
14#define OS_INFO_VMCOREINFO 0 14#define OS_INFO_VMCOREINFO 0
15#define OS_INFO_REIPL_BLOCK 1 15#define OS_INFO_REIPL_BLOCK 1
16#define OS_INFO_INIT_FN 2
17 16
18struct os_info_entry { 17struct os_info_entry {
19 u64 addr; 18 u64 addr;
@@ -28,8 +27,8 @@ struct os_info {
28 u16 version_minor; 27 u16 version_minor;
29 u64 crashkernel_addr; 28 u64 crashkernel_addr;
30 u64 crashkernel_size; 29 u64 crashkernel_size;
31 struct os_info_entry entry[3]; 30 struct os_info_entry entry[2];
32 u8 reserved[4004]; 31 u8 reserved[4024];
33} __packed; 32} __packed;
34 33
35void os_info_init(void); 34void os_info_init(void);
diff --git a/arch/s390/kernel/head_kdump.S b/arch/s390/kernel/head_kdump.S
index e1ac3893e97..796c976b5fd 100644
--- a/arch/s390/kernel/head_kdump.S
+++ b/arch/s390/kernel/head_kdump.S
@@ -85,11 +85,6 @@ startup_kdump_relocated:
85 basr %r13,0 85 basr %r13,0
860: 860:
87 mvc 0(8,%r0),.Lrestart_psw-0b(%r13) # Setup restart PSW 87 mvc 0(8,%r0),.Lrestart_psw-0b(%r13) # Setup restart PSW
88 mvc 464(16,%r0),.Lpgm_psw-0b(%r13) # Setup pgm check PSW
89 lhi %r1,1 # Start new kernel
90 diag %r1,%r1,0x308 # with diag 308
91
92.Lno_diag308: # No diag 308
93 sam31 # Switch to 31 bit addr mode 88 sam31 # Switch to 31 bit addr mode
94 sr %r1,%r1 # Erase register r1 89 sr %r1,%r1 # Erase register r1
95 sr %r2,%r2 # Erase register r2 90 sr %r2,%r2 # Erase register r2
@@ -98,8 +93,6 @@ startup_kdump_relocated:
98.align 8 93.align 8
99.Lrestart_psw: 94.Lrestart_psw:
100 .long 0x00080000,0x80000000 + startup 95 .long 0x00080000,0x80000000 + startup
101.Lpgm_psw:
102 .quad 0x0000000180000000,0x0000000000000000 + .Lno_diag308
103#else 96#else
104.align 2 97.align 2
105.Lep_startup_kdump: 98.Lep_startup_kdump:
diff --git a/arch/s390/kernel/os_info.c b/arch/s390/kernel/os_info.c
index e8d6c214d49..f2fe18f3f01 100644
--- a/arch/s390/kernel/os_info.c
+++ b/arch/s390/kernel/os_info.c
@@ -138,7 +138,6 @@ static void os_info_old_init(void)
138 goto fail_free; 138 goto fail_free;
139 os_info_old_alloc(OS_INFO_VMCOREINFO, 1); 139 os_info_old_alloc(OS_INFO_VMCOREINFO, 1);
140 os_info_old_alloc(OS_INFO_REIPL_BLOCK, 1); 140 os_info_old_alloc(OS_INFO_REIPL_BLOCK, 1);
141 os_info_old_alloc(OS_INFO_INIT_FN, PAGE_SIZE);
142 pr_info("crashkernel: addr=0x%lx size=%lu\n", 141 pr_info("crashkernel: addr=0x%lx size=%lu\n",
143 (unsigned long) os_info_old->crashkernel_addr, 142 (unsigned long) os_info_old->crashkernel_addr,
144 (unsigned long) os_info_old->crashkernel_size); 143 (unsigned long) os_info_old->crashkernel_size);
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 647ba942589..9948bd09ee5 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -800,17 +800,6 @@ void __noreturn cpu_die(void)
800 800
801#endif /* CONFIG_HOTPLUG_CPU */ 801#endif /* CONFIG_HOTPLUG_CPU */
802 802
803static void smp_call_os_info_init_fn(void)
804{
805 int (*init_fn)(void);
806 unsigned long size;
807
808 init_fn = os_info_old_entry(OS_INFO_INIT_FN, &size);
809 if (!init_fn)
810 return;
811 init_fn();
812}
813
814void __init smp_prepare_cpus(unsigned int max_cpus) 803void __init smp_prepare_cpus(unsigned int max_cpus)
815{ 804{
816 /* request the 0x1201 emergency signal external interrupt */ 805 /* request the 0x1201 emergency signal external interrupt */
@@ -819,7 +808,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
819 /* request the 0x1202 external call external interrupt */ 808 /* request the 0x1202 external call external interrupt */
820 if (register_external_interrupt(0x1202, do_ext_call_interrupt) != 0) 809 if (register_external_interrupt(0x1202, do_ext_call_interrupt) != 0)
821 panic("Couldn't request external interrupt 0x1202"); 810 panic("Couldn't request external interrupt 0x1202");
822 smp_call_os_info_init_fn();
823 smp_detect_cpus(); 811 smp_detect_cpus();
824} 812}
825 813