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 |
