diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-29 11:49:18 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-29 11:49:18 -0400 |
commit | f56f44001cb5b40089deac094dbb74e5c9f64d81 (patch) | |
tree | 0fb004b475852ed87121a774de7b768bb6164156 | |
parent | 162164f7e92da970666e7492fd58644f3c1f8574 (diff) | |
parent | 9ec2708053b647969bee862902872d44a5f9b439 (diff) |
Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6:
[S390] fix kprobes single stepping
[S390] tape: fix dbf usage
[S390] dasd: provide a Sense Path Group ID ioctl
[S390] ftrace: select HAVE_C_RECORDMCOUNT
[S390] vdso: get rid of redefinition warnings
[S390] facility detection: remove unused variable
[S390] hypfs: Fix error handling in hypfs_diag initialization
[S390] topology: fix cpu masks for topology=off case
[S390] topology: add SCHED_MC config option
[S390] Kconfig: add machine type number to code generation options
[S390] Add z196 machine type to setup_hwcaps
-rw-r--r-- | arch/s390/Kconfig | 61 | ||||
-rw-r--r-- | arch/s390/hypfs/hypfs_diag.c | 19 | ||||
-rw-r--r-- | arch/s390/include/asm/dasd.h | 40 | ||||
-rw-r--r-- | arch/s390/kernel/asm-offsets.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/early.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/entry.S | 1 | ||||
-rw-r--r-- | arch/s390/kernel/entry64.S | 1 | ||||
-rw-r--r-- | arch/s390/kernel/kprobes.c | 9 | ||||
-rw-r--r-- | arch/s390/kernel/setup.c | 3 | ||||
-rw-r--r-- | arch/s390/kernel/sysinfo.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/topology.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/vdso32/clock_getres.S | 6 | ||||
-rw-r--r-- | arch/s390/kernel/vdso32/clock_gettime.S | 4 | ||||
-rw-r--r-- | arch/s390/kernel/vdso64/clock_getres.S | 6 | ||||
-rw-r--r-- | arch/s390/kernel/vdso64/clock_gettime.S | 4 | ||||
-rw-r--r-- | drivers/s390/block/dasd_eckd.c | 69 | ||||
-rw-r--r-- | drivers/s390/block/dasd_eckd.h | 1 | ||||
-rw-r--r-- | drivers/s390/char/tape_core.c | 9 | ||||
-rw-r--r-- | drivers/s390/char/tape_std.c | 4 |
19 files changed, 175 insertions, 78 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index fabb40bc4e19..e0b98e71ff47 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -80,6 +80,7 @@ config S390 | |||
80 | select HAVE_FUNCTION_TRACER | 80 | select HAVE_FUNCTION_TRACER |
81 | select HAVE_FUNCTION_TRACE_MCOUNT_TEST | 81 | select HAVE_FUNCTION_TRACE_MCOUNT_TEST |
82 | select HAVE_FTRACE_MCOUNT_RECORD | 82 | select HAVE_FTRACE_MCOUNT_RECORD |
83 | select HAVE_C_RECORDMCOUNT | ||
83 | select HAVE_SYSCALL_TRACEPOINTS | 84 | select HAVE_SYSCALL_TRACEPOINTS |
84 | select HAVE_DYNAMIC_FTRACE | 85 | select HAVE_DYNAMIC_FTRACE |
85 | select HAVE_FUNCTION_GRAPH_TRACER | 86 | select HAVE_FUNCTION_GRAPH_TRACER |
@@ -144,7 +145,7 @@ source "kernel/time/Kconfig" | |||
144 | config 64BIT | 145 | config 64BIT |
145 | bool "64 bit kernel" | 146 | bool "64 bit kernel" |
146 | help | 147 | help |
147 | Select this option if you have a 64 bit IBM zSeries machine | 148 | Select this option if you have an IBM z/Architecture machine |
148 | and want to use the 64 bit addressing mode. | 149 | and want to use the 64 bit addressing mode. |
149 | 150 | ||
150 | config 32BIT | 151 | config 32BIT |
@@ -196,9 +197,18 @@ config HOTPLUG_CPU | |||
196 | can be controlled through /sys/devices/system/cpu/cpu#. | 197 | can be controlled through /sys/devices/system/cpu/cpu#. |
197 | Say N if you want to disable CPU hotplug. | 198 | Say N if you want to disable CPU hotplug. |
198 | 199 | ||
200 | config SCHED_MC | ||
201 | def_bool y | ||
202 | prompt "Multi-core scheduler support" | ||
203 | depends on SMP | ||
204 | help | ||
205 | Multi-core scheduler support improves the CPU scheduler's decision | ||
206 | making when dealing with multi-core CPU chips at a cost of slightly | ||
207 | increased overhead in some places. | ||
208 | |||
199 | config SCHED_BOOK | 209 | config SCHED_BOOK |
200 | bool "Book scheduler support" | 210 | bool "Book scheduler support" |
201 | depends on SMP | 211 | depends on SMP && SCHED_MC |
202 | help | 212 | help |
203 | Book scheduler support improves the CPU scheduler's decision making | 213 | Book scheduler support improves the CPU scheduler's decision making |
204 | when dealing with machines that have several books. | 214 | when dealing with machines that have several books. |
@@ -208,7 +218,7 @@ config MATHEMU | |||
208 | depends on MARCH_G5 | 218 | depends on MARCH_G5 |
209 | help | 219 | help |
210 | This option is required for IEEE compliant floating point arithmetic | 220 | This option is required for IEEE compliant floating point arithmetic |
211 | on older S/390 machines. Say Y unless you know your machine doesn't | 221 | on older ESA/390 machines. Say Y unless you know your machine doesn't |
212 | need this. | 222 | need this. |
213 | 223 | ||
214 | config COMPAT | 224 | config COMPAT |
@@ -237,8 +247,8 @@ config S390_EXEC_PROTECT | |||
237 | space programs and it also selects the addressing mode option above. | 247 | space programs and it also selects the addressing mode option above. |
238 | The kernel parameter noexec=on will enable this feature and also | 248 | The kernel parameter noexec=on will enable this feature and also |
239 | switch the addressing modes, default is disabled. Enabling this (via | 249 | switch the addressing modes, default is disabled. Enabling this (via |
240 | kernel parameter) on machines earlier than IBM System z9-109 EC/BC | 250 | kernel parameter) on machines earlier than IBM System z9 this will |
241 | will reduce system performance. | 251 | reduce system performance. |
242 | 252 | ||
243 | comment "Code generation options" | 253 | comment "Code generation options" |
244 | 254 | ||
@@ -247,49 +257,46 @@ choice | |||
247 | default MARCH_G5 | 257 | default MARCH_G5 |
248 | 258 | ||
249 | config MARCH_G5 | 259 | config MARCH_G5 |
250 | bool "S/390 model G5 and G6" | 260 | bool "System/390 model G5 and G6" |
251 | depends on !64BIT | 261 | depends on !64BIT |
252 | help | 262 | help |
253 | Select this to build a 31 bit kernel that works | 263 | Select this to build a 31 bit kernel that works |
254 | on all S/390 and zSeries machines. | 264 | on all ESA/390 and z/Architecture machines. |
255 | 265 | ||
256 | config MARCH_Z900 | 266 | config MARCH_Z900 |
257 | bool "IBM eServer zSeries model z800 and z900" | 267 | bool "IBM zSeries model z800 and z900" |
258 | help | 268 | help |
259 | Select this to optimize for zSeries machines. This | 269 | Select this to enable optimizations for model z800/z900 (2064 and |
260 | will enable some optimizations that are not available | 270 | 2066 series). This will enable some optimizations that are not |
261 | on older 31 bit only CPUs. | 271 | available on older ESA/390 (31 Bit) only CPUs. |
262 | 272 | ||
263 | config MARCH_Z990 | 273 | config MARCH_Z990 |
264 | bool "IBM eServer zSeries model z890 and z990" | 274 | bool "IBM zSeries model z890 and z990" |
265 | help | 275 | help |
266 | Select this enable optimizations for model z890/z990. | 276 | Select this to enable optimizations for model z890/z990 (2084 and |
267 | This will be slightly faster but does not work on | 277 | 2086 series). The kernel will be slightly faster but will not work |
268 | older machines such as the z900. | 278 | on older machines. |
269 | 279 | ||
270 | config MARCH_Z9_109 | 280 | config MARCH_Z9_109 |
271 | bool "IBM System z9" | 281 | bool "IBM System z9" |
272 | help | 282 | help |
273 | Select this to enable optimizations for IBM System z9-109, IBM | 283 | Select this to enable optimizations for IBM System z9 (2094 and |
274 | System z9 Enterprise Class (z9 EC), and IBM System z9 Business | 284 | 2096 series). The kernel will be slightly faster but will not work |
275 | Class (z9 BC). The kernel will be slightly faster but will not | 285 | on older machines. |
276 | work on older machines such as the z990, z890, z900, and z800. | ||
277 | 286 | ||
278 | config MARCH_Z10 | 287 | config MARCH_Z10 |
279 | bool "IBM System z10" | 288 | bool "IBM System z10" |
280 | help | 289 | help |
281 | Select this to enable optimizations for IBM System z10. The | 290 | Select this to enable optimizations for IBM System z10 (2097 and |
282 | kernel will be slightly faster but will not work on older | 291 | 2098 series). The kernel will be slightly faster but will not work |
283 | machines such as the z990, z890, z900, z800, z9-109, z9-ec | 292 | on older machines. |
284 | and z9-bc. | ||
285 | 293 | ||
286 | config MARCH_Z196 | 294 | config MARCH_Z196 |
287 | bool "IBM zEnterprise 196" | 295 | bool "IBM zEnterprise 196" |
288 | help | 296 | help |
289 | Select this to enable optimizations for IBM zEnterprise 196. | 297 | Select this to enable optimizations for IBM zEnterprise 196 |
290 | The kernel will be slightly faster but will not work on older | 298 | (2817 series). The kernel will be slightly faster but will not work |
291 | machines such as the z990, z890, z900, z800, z9-109, z9-ec, | 299 | on older machines. |
292 | z9-bc, z10-ec and z10-bc. | ||
293 | 300 | ||
294 | endchoice | 301 | endchoice |
295 | 302 | ||
diff --git a/arch/s390/hypfs/hypfs_diag.c b/arch/s390/hypfs/hypfs_diag.c index 020e51c063d2..cd4a81be9cf8 100644 --- a/arch/s390/hypfs/hypfs_diag.c +++ b/arch/s390/hypfs/hypfs_diag.c | |||
@@ -638,18 +638,21 @@ __init int hypfs_diag_init(void) | |||
638 | pr_err("The hardware system does not support hypfs\n"); | 638 | pr_err("The hardware system does not support hypfs\n"); |
639 | return -ENODATA; | 639 | return -ENODATA; |
640 | } | 640 | } |
641 | rc = diag224_get_name_table(); | ||
642 | if (rc) { | ||
643 | diag204_free_buffer(); | ||
644 | pr_err("The hardware system does not provide all " | ||
645 | "functions required by hypfs\n"); | ||
646 | } | ||
647 | if (diag204_info_type == INFO_EXT) { | 641 | if (diag204_info_type == INFO_EXT) { |
648 | rc = hypfs_dbfs_init(); | 642 | rc = hypfs_dbfs_init(); |
649 | if (rc) | 643 | if (rc) |
650 | diag204_free_buffer(); | 644 | return rc; |
651 | } | 645 | } |
652 | return rc; | 646 | if (MACHINE_IS_LPAR) { |
647 | rc = diag224_get_name_table(); | ||
648 | if (rc) { | ||
649 | pr_err("The hardware system does not provide all " | ||
650 | "functions required by hypfs\n"); | ||
651 | debugfs_remove(dbfs_d204_file); | ||
652 | return rc; | ||
653 | } | ||
654 | } | ||
655 | return 0; | ||
653 | } | 656 | } |
654 | 657 | ||
655 | void hypfs_diag_exit(void) | 658 | void hypfs_diag_exit(void) |
diff --git a/arch/s390/include/asm/dasd.h b/arch/s390/include/asm/dasd.h index 218bce81ec70..b604a9186f8e 100644 --- a/arch/s390/include/asm/dasd.h +++ b/arch/s390/include/asm/dasd.h | |||
@@ -217,6 +217,25 @@ typedef struct dasd_symmio_parms { | |||
217 | int rssd_result_len; | 217 | int rssd_result_len; |
218 | } __attribute__ ((packed)) dasd_symmio_parms_t; | 218 | } __attribute__ ((packed)) dasd_symmio_parms_t; |
219 | 219 | ||
220 | /* | ||
221 | * Data returned by Sense Path Group ID (SNID) | ||
222 | */ | ||
223 | struct dasd_snid_data { | ||
224 | struct { | ||
225 | __u8 group:2; | ||
226 | __u8 reserve:2; | ||
227 | __u8 mode:1; | ||
228 | __u8 res:3; | ||
229 | } __attribute__ ((packed)) path_state; | ||
230 | __u8 pgid[11]; | ||
231 | } __attribute__ ((packed)); | ||
232 | |||
233 | struct dasd_snid_ioctl_data { | ||
234 | struct dasd_snid_data data; | ||
235 | __u8 path_mask; | ||
236 | } __attribute__ ((packed)); | ||
237 | |||
238 | |||
220 | /******************************************************************************** | 239 | /******************************************************************************** |
221 | * SECTION: Definition of IOCTLs | 240 | * SECTION: Definition of IOCTLs |
222 | * | 241 | * |
@@ -261,25 +280,10 @@ typedef struct dasd_symmio_parms { | |||
261 | /* Set Attributes (cache operations) */ | 280 | /* Set Attributes (cache operations) */ |
262 | #define BIODASDSATTR _IOW(DASD_IOCTL_LETTER,2,attrib_data_t) | 281 | #define BIODASDSATTR _IOW(DASD_IOCTL_LETTER,2,attrib_data_t) |
263 | 282 | ||
283 | /* Get Sense Path Group ID (SNID) data */ | ||
284 | #define BIODASDSNID _IOWR(DASD_IOCTL_LETTER, 1, struct dasd_snid_ioctl_data) | ||
285 | |||
264 | #define BIODASDSYMMIO _IOWR(DASD_IOCTL_LETTER, 240, dasd_symmio_parms_t) | 286 | #define BIODASDSYMMIO _IOWR(DASD_IOCTL_LETTER, 240, dasd_symmio_parms_t) |
265 | 287 | ||
266 | #endif /* DASD_H */ | 288 | #endif /* DASD_H */ |
267 | 289 | ||
268 | /* | ||
269 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
270 | * Emacs will notice this stuff at the end of the file and automatically | ||
271 | * adjust the settings for this buffer only. This must remain at the end | ||
272 | * of the file. | ||
273 | * --------------------------------------------------------------------------- | ||
274 | * Local variables: | ||
275 | * c-indent-level: 4 | ||
276 | * c-brace-imaginary-offset: 0 | ||
277 | * c-brace-offset: -4 | ||
278 | * c-argdecl-indent: 4 | ||
279 | * c-label-offset: -4 | ||
280 | * c-continued-statement-offset: 4 | ||
281 | * c-continued-brace-offset: 0 | ||
282 | * indent-tabs-mode: nil | ||
283 | * tab-width: 8 | ||
284 | * End: | ||
285 | */ | ||
diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c index f3c1b823c9a8..33982e7ce04d 100644 --- a/arch/s390/kernel/asm-offsets.c +++ b/arch/s390/kernel/asm-offsets.c | |||
@@ -66,9 +66,9 @@ int main(void) | |||
66 | DEFINE(__VDSO_ECTG_BASE, offsetof(struct vdso_per_cpu_data, ectg_timer_base)); | 66 | DEFINE(__VDSO_ECTG_BASE, offsetof(struct vdso_per_cpu_data, ectg_timer_base)); |
67 | DEFINE(__VDSO_ECTG_USER, offsetof(struct vdso_per_cpu_data, ectg_user_time)); | 67 | DEFINE(__VDSO_ECTG_USER, offsetof(struct vdso_per_cpu_data, ectg_user_time)); |
68 | /* constants used by the vdso */ | 68 | /* constants used by the vdso */ |
69 | DEFINE(CLOCK_REALTIME, CLOCK_REALTIME); | 69 | DEFINE(__CLOCK_REALTIME, CLOCK_REALTIME); |
70 | DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC); | 70 | DEFINE(__CLOCK_MONOTONIC, CLOCK_MONOTONIC); |
71 | DEFINE(CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); | 71 | DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); |
72 | BLANK(); | 72 | BLANK(); |
73 | /* constants for SIGP */ | 73 | /* constants for SIGP */ |
74 | DEFINE(__SIGP_STOP, sigp_stop); | 74 | DEFINE(__SIGP_STOP, sigp_stop); |
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c index d149609e46e6..3b7e7dddc324 100644 --- a/arch/s390/kernel/early.c +++ b/arch/s390/kernel/early.c | |||
@@ -282,8 +282,6 @@ static noinline __init void setup_facility_list(void) | |||
282 | static noinline __init void setup_hpage(void) | 282 | static noinline __init void setup_hpage(void) |
283 | { | 283 | { |
284 | #ifndef CONFIG_DEBUG_PAGEALLOC | 284 | #ifndef CONFIG_DEBUG_PAGEALLOC |
285 | unsigned int facilities; | ||
286 | |||
287 | if (!test_facility(2) || !test_facility(8)) | 285 | if (!test_facility(2) || !test_facility(8)) |
288 | return; | 286 | return; |
289 | S390_lowcore.machine_flags |= MACHINE_FLAG_HPAGE; | 287 | S390_lowcore.machine_flags |= MACHINE_FLAG_HPAGE; |
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 5efce7202984..1ecc337fb679 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S | |||
@@ -557,6 +557,7 @@ pgm_svcper: | |||
557 | # per was called from kernel, must be kprobes | 557 | # per was called from kernel, must be kprobes |
558 | # | 558 | # |
559 | kernel_per: | 559 | kernel_per: |
560 | REENABLE_IRQS | ||
560 | mvi SP_SVCNR(%r15),0xff # set trap indication to pgm check | 561 | mvi SP_SVCNR(%r15),0xff # set trap indication to pgm check |
561 | mvi SP_SVCNR+1(%r15),0xff | 562 | mvi SP_SVCNR+1(%r15),0xff |
562 | la %r2,SP_PTREGS(%r15) # address of register-save area | 563 | la %r2,SP_PTREGS(%r15) # address of register-save area |
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index a2be23922f43..8f3e802174db 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
@@ -568,6 +568,7 @@ pgm_svcper: | |||
568 | # per was called from kernel, must be kprobes | 568 | # per was called from kernel, must be kprobes |
569 | # | 569 | # |
570 | kernel_per: | 570 | kernel_per: |
571 | REENABLE_IRQS | ||
571 | xc SP_SVCNR(2,%r15),SP_SVCNR(%r15) # clear svc number | 572 | xc SP_SVCNR(2,%r15),SP_SVCNR(%r15) # clear svc number |
572 | la %r2,SP_PTREGS(%r15) # address of register-save area | 573 | la %r2,SP_PTREGS(%r15) # address of register-save area |
573 | brasl %r14,do_single_step | 574 | brasl %r14,do_single_step |
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c index 2a3d2bf6f083..d60fc4398516 100644 --- a/arch/s390/kernel/kprobes.c +++ b/arch/s390/kernel/kprobes.c | |||
@@ -316,6 +316,8 @@ static int __kprobes kprobe_handler(struct pt_regs *regs) | |||
316 | return 1; | 316 | return 1; |
317 | 317 | ||
318 | ss_probe: | 318 | ss_probe: |
319 | if (regs->psw.mask & (PSW_MASK_PER | PSW_MASK_IO)) | ||
320 | local_irq_disable(); | ||
319 | prepare_singlestep(p, regs); | 321 | prepare_singlestep(p, regs); |
320 | kcb->kprobe_status = KPROBE_HIT_SS; | 322 | kcb->kprobe_status = KPROBE_HIT_SS; |
321 | return 1; | 323 | return 1; |
@@ -463,6 +465,8 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs) | |||
463 | goto out; | 465 | goto out; |
464 | } | 466 | } |
465 | reset_current_kprobe(); | 467 | reset_current_kprobe(); |
468 | if (regs->psw.mask & (PSW_MASK_PER | PSW_MASK_IO)) | ||
469 | local_irq_enable(); | ||
466 | out: | 470 | out: |
467 | preempt_enable_no_resched(); | 471 | preempt_enable_no_resched(); |
468 | 472 | ||
@@ -502,8 +506,11 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) | |||
502 | regs->psw.mask |= kcb->kprobe_saved_imask; | 506 | regs->psw.mask |= kcb->kprobe_saved_imask; |
503 | if (kcb->kprobe_status == KPROBE_REENTER) | 507 | if (kcb->kprobe_status == KPROBE_REENTER) |
504 | restore_previous_kprobe(kcb); | 508 | restore_previous_kprobe(kcb); |
505 | else | 509 | else { |
506 | reset_current_kprobe(); | 510 | reset_current_kprobe(); |
511 | if (regs->psw.mask & (PSW_MASK_PER | PSW_MASK_IO)) | ||
512 | local_irq_enable(); | ||
513 | } | ||
507 | preempt_enable_no_resched(); | 514 | preempt_enable_no_resched(); |
508 | break; | 515 | break; |
509 | case KPROBE_HIT_ACTIVE: | 516 | case KPROBE_HIT_ACTIVE: |
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index e3ceb911dc75..6f6350826c81 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
@@ -761,6 +761,9 @@ static void __init setup_hwcaps(void) | |||
761 | case 0x2098: | 761 | case 0x2098: |
762 | strcpy(elf_platform, "z10"); | 762 | strcpy(elf_platform, "z10"); |
763 | break; | 763 | break; |
764 | case 0x2817: | ||
765 | strcpy(elf_platform, "z196"); | ||
766 | break; | ||
764 | } | 767 | } |
765 | } | 768 | } |
766 | 769 | ||
diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c index f04d93aa48ec..5c9e439bf3f6 100644 --- a/arch/s390/kernel/sysinfo.c +++ b/arch/s390/kernel/sysinfo.c | |||
@@ -106,11 +106,13 @@ static int stsi_15_1_x(struct sysinfo_15_1_x *info, char *page, int len) | |||
106 | for (i = 0; i < TOPOLOGY_NR_MAG; i++) | 106 | for (i = 0; i < TOPOLOGY_NR_MAG; i++) |
107 | len += sprintf(page + len, " %d", info->mag[i]); | 107 | len += sprintf(page + len, " %d", info->mag[i]); |
108 | len += sprintf(page + len, "\n"); | 108 | len += sprintf(page + len, "\n"); |
109 | #ifdef CONFIG_SCHED_MC | ||
109 | store_topology(info); | 110 | store_topology(info); |
110 | len += sprintf(page + len, "CPU Topology SW: "); | 111 | len += sprintf(page + len, "CPU Topology SW: "); |
111 | for (i = 0; i < TOPOLOGY_NR_MAG; i++) | 112 | for (i = 0; i < TOPOLOGY_NR_MAG; i++) |
112 | len += sprintf(page + len, " %d", info->mag[i]); | 113 | len += sprintf(page + len, " %d", info->mag[i]); |
113 | len += sprintf(page + len, "\n"); | 114 | len += sprintf(page + len, "\n"); |
115 | #endif | ||
114 | return len; | 116 | return len; |
115 | } | 117 | } |
116 | 118 | ||
diff --git a/arch/s390/kernel/topology.c b/arch/s390/kernel/topology.c index a9dee9048ee5..94b06c31fc8a 100644 --- a/arch/s390/kernel/topology.c +++ b/arch/s390/kernel/topology.c | |||
@@ -53,8 +53,10 @@ static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu) | |||
53 | cpumask_t mask; | 53 | cpumask_t mask; |
54 | 54 | ||
55 | cpus_clear(mask); | 55 | cpus_clear(mask); |
56 | if (!topology_enabled || !MACHINE_HAS_TOPOLOGY) | 56 | if (!topology_enabled || !MACHINE_HAS_TOPOLOGY) { |
57 | return cpu_possible_map; | 57 | cpumask_copy(&mask, cpumask_of(cpu)); |
58 | return mask; | ||
59 | } | ||
58 | while (info) { | 60 | while (info) { |
59 | if (cpu_isset(cpu, info->mask)) { | 61 | if (cpu_isset(cpu, info->mask)) { |
60 | mask = info->mask; | 62 | mask = info->mask; |
diff --git a/arch/s390/kernel/vdso32/clock_getres.S b/arch/s390/kernel/vdso32/clock_getres.S index 9532c4e6a9d2..36aaa25d05da 100644 --- a/arch/s390/kernel/vdso32/clock_getres.S +++ b/arch/s390/kernel/vdso32/clock_getres.S | |||
@@ -19,9 +19,9 @@ | |||
19 | .type __kernel_clock_getres,@function | 19 | .type __kernel_clock_getres,@function |
20 | __kernel_clock_getres: | 20 | __kernel_clock_getres: |
21 | .cfi_startproc | 21 | .cfi_startproc |
22 | chi %r2,CLOCK_REALTIME | 22 | chi %r2,__CLOCK_REALTIME |
23 | je 0f | 23 | je 0f |
24 | chi %r2,CLOCK_MONOTONIC | 24 | chi %r2,__CLOCK_MONOTONIC |
25 | jne 3f | 25 | jne 3f |
26 | 0: ltr %r3,%r3 | 26 | 0: ltr %r3,%r3 |
27 | jz 2f /* res == NULL */ | 27 | jz 2f /* res == NULL */ |
@@ -34,6 +34,6 @@ __kernel_clock_getres: | |||
34 | 3: lhi %r1,__NR_clock_getres /* fallback to svc */ | 34 | 3: lhi %r1,__NR_clock_getres /* fallback to svc */ |
35 | svc 0 | 35 | svc 0 |
36 | br %r14 | 36 | br %r14 |
37 | 4: .long CLOCK_REALTIME_RES | 37 | 4: .long __CLOCK_REALTIME_RES |
38 | .cfi_endproc | 38 | .cfi_endproc |
39 | .size __kernel_clock_getres,.-__kernel_clock_getres | 39 | .size __kernel_clock_getres,.-__kernel_clock_getres |
diff --git a/arch/s390/kernel/vdso32/clock_gettime.S b/arch/s390/kernel/vdso32/clock_gettime.S index 969643954273..b2224e0b974c 100644 --- a/arch/s390/kernel/vdso32/clock_gettime.S +++ b/arch/s390/kernel/vdso32/clock_gettime.S | |||
@@ -21,9 +21,9 @@ __kernel_clock_gettime: | |||
21 | .cfi_startproc | 21 | .cfi_startproc |
22 | basr %r5,0 | 22 | basr %r5,0 |
23 | 0: al %r5,21f-0b(%r5) /* get &_vdso_data */ | 23 | 0: al %r5,21f-0b(%r5) /* get &_vdso_data */ |
24 | chi %r2,CLOCK_REALTIME | 24 | chi %r2,__CLOCK_REALTIME |
25 | je 10f | 25 | je 10f |
26 | chi %r2,CLOCK_MONOTONIC | 26 | chi %r2,__CLOCK_MONOTONIC |
27 | jne 19f | 27 | jne 19f |
28 | 28 | ||
29 | /* CLOCK_MONOTONIC */ | 29 | /* CLOCK_MONOTONIC */ |
diff --git a/arch/s390/kernel/vdso64/clock_getres.S b/arch/s390/kernel/vdso64/clock_getres.S index 9ce8caafdb4e..176e1f75f9aa 100644 --- a/arch/s390/kernel/vdso64/clock_getres.S +++ b/arch/s390/kernel/vdso64/clock_getres.S | |||
@@ -19,9 +19,9 @@ | |||
19 | .type __kernel_clock_getres,@function | 19 | .type __kernel_clock_getres,@function |
20 | __kernel_clock_getres: | 20 | __kernel_clock_getres: |
21 | .cfi_startproc | 21 | .cfi_startproc |
22 | cghi %r2,CLOCK_REALTIME | 22 | cghi %r2,__CLOCK_REALTIME |
23 | je 0f | 23 | je 0f |
24 | cghi %r2,CLOCK_MONOTONIC | 24 | cghi %r2,__CLOCK_MONOTONIC |
25 | je 0f | 25 | je 0f |
26 | cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */ | 26 | cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */ |
27 | jne 2f | 27 | jne 2f |
@@ -39,6 +39,6 @@ __kernel_clock_getres: | |||
39 | 2: lghi %r1,__NR_clock_getres /* fallback to svc */ | 39 | 2: lghi %r1,__NR_clock_getres /* fallback to svc */ |
40 | svc 0 | 40 | svc 0 |
41 | br %r14 | 41 | br %r14 |
42 | 3: .quad CLOCK_REALTIME_RES | 42 | 3: .quad __CLOCK_REALTIME_RES |
43 | .cfi_endproc | 43 | .cfi_endproc |
44 | .size __kernel_clock_getres,.-__kernel_clock_getres | 44 | .size __kernel_clock_getres,.-__kernel_clock_getres |
diff --git a/arch/s390/kernel/vdso64/clock_gettime.S b/arch/s390/kernel/vdso64/clock_gettime.S index f40467884a03..d46c95ed5f19 100644 --- a/arch/s390/kernel/vdso64/clock_gettime.S +++ b/arch/s390/kernel/vdso64/clock_gettime.S | |||
@@ -20,11 +20,11 @@ | |||
20 | __kernel_clock_gettime: | 20 | __kernel_clock_gettime: |
21 | .cfi_startproc | 21 | .cfi_startproc |
22 | larl %r5,_vdso_data | 22 | larl %r5,_vdso_data |
23 | cghi %r2,CLOCK_REALTIME | 23 | cghi %r2,__CLOCK_REALTIME |
24 | je 4f | 24 | je 4f |
25 | cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */ | 25 | cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */ |
26 | je 9f | 26 | je 9f |
27 | cghi %r2,CLOCK_MONOTONIC | 27 | cghi %r2,__CLOCK_MONOTONIC |
28 | jne 12f | 28 | jne 12f |
29 | 29 | ||
30 | /* CLOCK_MONOTONIC */ | 30 | /* CLOCK_MONOTONIC */ |
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 50cf96389d2c..bf61274af3bb 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
@@ -2802,6 +2802,73 @@ dasd_eckd_steal_lock(struct dasd_device *device) | |||
2802 | } | 2802 | } |
2803 | 2803 | ||
2804 | /* | 2804 | /* |
2805 | * SNID - Sense Path Group ID | ||
2806 | * This ioctl may be used in situations where I/O is stalled due to | ||
2807 | * a reserve, so if the normal dasd_smalloc_request fails, we use the | ||
2808 | * preallocated dasd_reserve_req. | ||
2809 | */ | ||
2810 | static int dasd_eckd_snid(struct dasd_device *device, | ||
2811 | void __user *argp) | ||
2812 | { | ||
2813 | struct dasd_ccw_req *cqr; | ||
2814 | int rc; | ||
2815 | struct ccw1 *ccw; | ||
2816 | int useglobal; | ||
2817 | struct dasd_snid_ioctl_data usrparm; | ||
2818 | |||
2819 | if (!capable(CAP_SYS_ADMIN)) | ||
2820 | return -EACCES; | ||
2821 | |||
2822 | if (copy_from_user(&usrparm, argp, sizeof(usrparm))) | ||
2823 | return -EFAULT; | ||
2824 | |||
2825 | useglobal = 0; | ||
2826 | cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, | ||
2827 | sizeof(struct dasd_snid_data), device); | ||
2828 | if (IS_ERR(cqr)) { | ||
2829 | mutex_lock(&dasd_reserve_mutex); | ||
2830 | useglobal = 1; | ||
2831 | cqr = &dasd_reserve_req->cqr; | ||
2832 | memset(cqr, 0, sizeof(*cqr)); | ||
2833 | memset(&dasd_reserve_req->ccw, 0, | ||
2834 | sizeof(dasd_reserve_req->ccw)); | ||
2835 | cqr->cpaddr = &dasd_reserve_req->ccw; | ||
2836 | cqr->data = &dasd_reserve_req->data; | ||
2837 | cqr->magic = DASD_ECKD_MAGIC; | ||
2838 | } | ||
2839 | ccw = cqr->cpaddr; | ||
2840 | ccw->cmd_code = DASD_ECKD_CCW_SNID; | ||
2841 | ccw->flags |= CCW_FLAG_SLI; | ||
2842 | ccw->count = 12; | ||
2843 | ccw->cda = (__u32)(addr_t) cqr->data; | ||
2844 | cqr->startdev = device; | ||
2845 | cqr->memdev = device; | ||
2846 | clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); | ||
2847 | set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags); | ||
2848 | cqr->retries = 5; | ||
2849 | cqr->expires = 10 * HZ; | ||
2850 | cqr->buildclk = get_clock(); | ||
2851 | cqr->status = DASD_CQR_FILLED; | ||
2852 | cqr->lpm = usrparm.path_mask; | ||
2853 | |||
2854 | rc = dasd_sleep_on_immediatly(cqr); | ||
2855 | /* verify that I/O processing didn't modify the path mask */ | ||
2856 | if (!rc && usrparm.path_mask && (cqr->lpm != usrparm.path_mask)) | ||
2857 | rc = -EIO; | ||
2858 | if (!rc) { | ||
2859 | usrparm.data = *((struct dasd_snid_data *)cqr->data); | ||
2860 | if (copy_to_user(argp, &usrparm, sizeof(usrparm))) | ||
2861 | rc = -EFAULT; | ||
2862 | } | ||
2863 | |||
2864 | if (useglobal) | ||
2865 | mutex_unlock(&dasd_reserve_mutex); | ||
2866 | else | ||
2867 | dasd_sfree_request(cqr, cqr->memdev); | ||
2868 | return rc; | ||
2869 | } | ||
2870 | |||
2871 | /* | ||
2805 | * Read performance statistics | 2872 | * Read performance statistics |
2806 | */ | 2873 | */ |
2807 | static int | 2874 | static int |
@@ -3036,6 +3103,8 @@ dasd_eckd_ioctl(struct dasd_block *block, unsigned int cmd, void __user *argp) | |||
3036 | return dasd_eckd_reserve(device); | 3103 | return dasd_eckd_reserve(device); |
3037 | case BIODASDSLCK: | 3104 | case BIODASDSLCK: |
3038 | return dasd_eckd_steal_lock(device); | 3105 | return dasd_eckd_steal_lock(device); |
3106 | case BIODASDSNID: | ||
3107 | return dasd_eckd_snid(device, argp); | ||
3039 | case BIODASDSYMMIO: | 3108 | case BIODASDSYMMIO: |
3040 | return dasd_symm_io(device, argp); | 3109 | return dasd_symm_io(device, argp); |
3041 | default: | 3110 | default: |
diff --git a/drivers/s390/block/dasd_eckd.h b/drivers/s390/block/dasd_eckd.h index 0eb49655a6cd..12097c24f2f5 100644 --- a/drivers/s390/block/dasd_eckd.h +++ b/drivers/s390/block/dasd_eckd.h | |||
@@ -27,6 +27,7 @@ | |||
27 | #define DASD_ECKD_CCW_WRITE_CKD 0x1d | 27 | #define DASD_ECKD_CCW_WRITE_CKD 0x1d |
28 | #define DASD_ECKD_CCW_READ_CKD 0x1e | 28 | #define DASD_ECKD_CCW_READ_CKD 0x1e |
29 | #define DASD_ECKD_CCW_PSF 0x27 | 29 | #define DASD_ECKD_CCW_PSF 0x27 |
30 | #define DASD_ECKD_CCW_SNID 0x34 | ||
30 | #define DASD_ECKD_CCW_RSSD 0x3e | 31 | #define DASD_ECKD_CCW_RSSD 0x3e |
31 | #define DASD_ECKD_CCW_LOCATE_RECORD 0x47 | 32 | #define DASD_ECKD_CCW_LOCATE_RECORD 0x47 |
32 | #define DASD_ECKD_CCW_SNSS 0x54 | 33 | #define DASD_ECKD_CCW_SNSS 0x54 |
diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c index 29c2d73d719d..6c408670e08d 100644 --- a/drivers/s390/char/tape_core.c +++ b/drivers/s390/char/tape_core.c | |||
@@ -1077,15 +1077,14 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb) | |||
1077 | /* FIXME: What to do with the request? */ | 1077 | /* FIXME: What to do with the request? */ |
1078 | switch (PTR_ERR(irb)) { | 1078 | switch (PTR_ERR(irb)) { |
1079 | case -ETIMEDOUT: | 1079 | case -ETIMEDOUT: |
1080 | DBF_LH(1, "(%s): Request timed out\n", | 1080 | DBF_LH(1, "(%08x): Request timed out\n", |
1081 | dev_name(&cdev->dev)); | 1081 | device->cdev_id); |
1082 | case -EIO: | 1082 | case -EIO: |
1083 | __tape_end_request(device, request, -EIO); | 1083 | __tape_end_request(device, request, -EIO); |
1084 | break; | 1084 | break; |
1085 | default: | 1085 | default: |
1086 | DBF_LH(1, "(%s): Unexpected i/o error %li\n", | 1086 | DBF_LH(1, "(%08x): Unexpected i/o error %li\n", |
1087 | dev_name(&cdev->dev), | 1087 | device->cdev_id, PTR_ERR(irb)); |
1088 | PTR_ERR(irb)); | ||
1089 | } | 1088 | } |
1090 | return; | 1089 | return; |
1091 | } | 1090 | } |
diff --git a/drivers/s390/char/tape_std.c b/drivers/s390/char/tape_std.c index 03f07e5dd6e9..3c3f342149ec 100644 --- a/drivers/s390/char/tape_std.c +++ b/drivers/s390/char/tape_std.c | |||
@@ -47,8 +47,8 @@ tape_std_assign_timeout(unsigned long data) | |||
47 | device->cdev_id); | 47 | device->cdev_id); |
48 | rc = tape_cancel_io(device, request); | 48 | rc = tape_cancel_io(device, request); |
49 | if(rc) | 49 | if(rc) |
50 | DBF_EVENT(3, "(%s): Assign timeout: Cancel failed with rc = %i\n", | 50 | DBF_EVENT(3, "(%08x): Assign timeout: Cancel failed with rc = " |
51 | dev_name(&device->cdev->dev), rc); | 51 | "%i\n", device->cdev_id, rc); |
52 | } | 52 | } |
53 | 53 | ||
54 | int | 54 | int |