Commit f56f4400 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 162164f7 9ec27080
...@@ -80,6 +80,7 @@ config S390 ...@@ -80,6 +80,7 @@ config S390
select HAVE_FUNCTION_TRACER select HAVE_FUNCTION_TRACER
select HAVE_FUNCTION_TRACE_MCOUNT_TEST select HAVE_FUNCTION_TRACE_MCOUNT_TEST
select HAVE_FTRACE_MCOUNT_RECORD select HAVE_FTRACE_MCOUNT_RECORD
select HAVE_C_RECORDMCOUNT
select HAVE_SYSCALL_TRACEPOINTS select HAVE_SYSCALL_TRACEPOINTS
select HAVE_DYNAMIC_FTRACE select HAVE_DYNAMIC_FTRACE
select HAVE_FUNCTION_GRAPH_TRACER select HAVE_FUNCTION_GRAPH_TRACER
...@@ -144,7 +145,7 @@ source "kernel/time/Kconfig" ...@@ -144,7 +145,7 @@ source "kernel/time/Kconfig"
config 64BIT config 64BIT
bool "64 bit kernel" bool "64 bit kernel"
help help
Select this option if you have a 64 bit IBM zSeries machine Select this option if you have an IBM z/Architecture machine
and want to use the 64 bit addressing mode. and want to use the 64 bit addressing mode.
config 32BIT config 32BIT
...@@ -196,9 +197,18 @@ config HOTPLUG_CPU ...@@ -196,9 +197,18 @@ config HOTPLUG_CPU
can be controlled through /sys/devices/system/cpu/cpu#. can be controlled through /sys/devices/system/cpu/cpu#.
Say N if you want to disable CPU hotplug. Say N if you want to disable CPU hotplug.
config SCHED_MC
def_bool y
prompt "Multi-core scheduler support"
depends on SMP
help
Multi-core scheduler support improves the CPU scheduler's decision
making when dealing with multi-core CPU chips at a cost of slightly
increased overhead in some places.
config SCHED_BOOK config SCHED_BOOK
bool "Book scheduler support" bool "Book scheduler support"
depends on SMP depends on SMP && SCHED_MC
help help
Book scheduler support improves the CPU scheduler's decision making Book scheduler support improves the CPU scheduler's decision making
when dealing with machines that have several books. when dealing with machines that have several books.
...@@ -208,7 +218,7 @@ config MATHEMU ...@@ -208,7 +218,7 @@ config MATHEMU
depends on MARCH_G5 depends on MARCH_G5
help help
This option is required for IEEE compliant floating point arithmetic This option is required for IEEE compliant floating point arithmetic
on older S/390 machines. Say Y unless you know your machine doesn't on older ESA/390 machines. Say Y unless you know your machine doesn't
need this. need this.
config COMPAT config COMPAT
...@@ -237,8 +247,8 @@ config S390_EXEC_PROTECT ...@@ -237,8 +247,8 @@ config S390_EXEC_PROTECT
space programs and it also selects the addressing mode option above. space programs and it also selects the addressing mode option above.
The kernel parameter noexec=on will enable this feature and also The kernel parameter noexec=on will enable this feature and also
switch the addressing modes, default is disabled. Enabling this (via switch the addressing modes, default is disabled. Enabling this (via
kernel parameter) on machines earlier than IBM System z9-109 EC/BC kernel parameter) on machines earlier than IBM System z9 this will
will reduce system performance. reduce system performance.
comment "Code generation options" comment "Code generation options"
...@@ -247,49 +257,46 @@ choice ...@@ -247,49 +257,46 @@ choice
default MARCH_G5 default MARCH_G5
config MARCH_G5 config MARCH_G5
bool "S/390 model G5 and G6" bool "System/390 model G5 and G6"
depends on !64BIT depends on !64BIT
help help
Select this to build a 31 bit kernel that works Select this to build a 31 bit kernel that works
on all S/390 and zSeries machines. on all ESA/390 and z/Architecture machines.
config MARCH_Z900 config MARCH_Z900
bool "IBM eServer zSeries model z800 and z900" bool "IBM zSeries model z800 and z900"
help help
Select this to optimize for zSeries machines. This Select this to enable optimizations for model z800/z900 (2064 and
will enable some optimizations that are not available 2066 series). This will enable some optimizations that are not
on older 31 bit only CPUs. available on older ESA/390 (31 Bit) only CPUs.
config MARCH_Z990 config MARCH_Z990
bool "IBM eServer zSeries model z890 and z990" bool "IBM zSeries model z890 and z990"
help help
Select this enable optimizations for model z890/z990. Select this to enable optimizations for model z890/z990 (2084 and
This will be slightly faster but does not work on 2086 series). The kernel will be slightly faster but will not work
older machines such as the z900. on older machines.
config MARCH_Z9_109 config MARCH_Z9_109
bool "IBM System z9" bool "IBM System z9"
help help
Select this to enable optimizations for IBM System z9-109, IBM Select this to enable optimizations for IBM System z9 (2094 and
System z9 Enterprise Class (z9 EC), and IBM System z9 Business 2096 series). The kernel will be slightly faster but will not work
Class (z9 BC). The kernel will be slightly faster but will not on older machines.
work on older machines such as the z990, z890, z900, and z800.
config MARCH_Z10 config MARCH_Z10
bool "IBM System z10" bool "IBM System z10"
help help
Select this to enable optimizations for IBM System z10. The Select this to enable optimizations for IBM System z10 (2097 and
kernel will be slightly faster but will not work on older 2098 series). The kernel will be slightly faster but will not work
machines such as the z990, z890, z900, z800, z9-109, z9-ec on older machines.
and z9-bc.
config MARCH_Z196 config MARCH_Z196
bool "IBM zEnterprise 196" bool "IBM zEnterprise 196"
help help
Select this to enable optimizations for IBM zEnterprise 196. Select this to enable optimizations for IBM zEnterprise 196
The kernel will be slightly faster but will not work on older (2817 series). The kernel will be slightly faster but will not work
machines such as the z990, z890, z900, z800, z9-109, z9-ec, on older machines.
z9-bc, z10-ec and z10-bc.
endchoice endchoice
......
...@@ -638,18 +638,21 @@ __init int hypfs_diag_init(void) ...@@ -638,18 +638,21 @@ __init int hypfs_diag_init(void)
pr_err("The hardware system does not support hypfs\n"); pr_err("The hardware system does not support hypfs\n");
return -ENODATA; return -ENODATA;
} }
rc = diag224_get_name_table();
if (rc) {
diag204_free_buffer();
pr_err("The hardware system does not provide all "
"functions required by hypfs\n");
}
if (diag204_info_type == INFO_EXT) { if (diag204_info_type == INFO_EXT) {
rc = hypfs_dbfs_init(); rc = hypfs_dbfs_init();
if (rc) if (rc)
diag204_free_buffer(); return rc;
} }
return rc; if (MACHINE_IS_LPAR) {
rc = diag224_get_name_table();
if (rc) {
pr_err("The hardware system does not provide all "
"functions required by hypfs\n");
debugfs_remove(dbfs_d204_file);
return rc;
}
}
return 0;
} }
void hypfs_diag_exit(void) void hypfs_diag_exit(void)
......
...@@ -217,6 +217,25 @@ typedef struct dasd_symmio_parms { ...@@ -217,6 +217,25 @@ typedef struct dasd_symmio_parms {
int rssd_result_len; int rssd_result_len;
} __attribute__ ((packed)) dasd_symmio_parms_t; } __attribute__ ((packed)) dasd_symmio_parms_t;
/*
* Data returned by Sense Path Group ID (SNID)
*/
struct dasd_snid_data {
struct {
__u8 group:2;
__u8 reserve:2;
__u8 mode:1;
__u8 res:3;
} __attribute__ ((packed)) path_state;
__u8 pgid[11];
} __attribute__ ((packed));
struct dasd_snid_ioctl_data {
struct dasd_snid_data data;
__u8 path_mask;
} __attribute__ ((packed));
/******************************************************************************** /********************************************************************************
* SECTION: Definition of IOCTLs * SECTION: Definition of IOCTLs
* *
...@@ -261,25 +280,10 @@ typedef struct dasd_symmio_parms { ...@@ -261,25 +280,10 @@ typedef struct dasd_symmio_parms {
/* Set Attributes (cache operations) */ /* Set Attributes (cache operations) */
#define BIODASDSATTR _IOW(DASD_IOCTL_LETTER,2,attrib_data_t) #define BIODASDSATTR _IOW(DASD_IOCTL_LETTER,2,attrib_data_t)
/* Get Sense Path Group ID (SNID) data */
#define BIODASDSNID _IOWR(DASD_IOCTL_LETTER, 1, struct dasd_snid_ioctl_data)
#define BIODASDSYMMIO _IOWR(DASD_IOCTL_LETTER, 240, dasd_symmio_parms_t) #define BIODASDSYMMIO _IOWR(DASD_IOCTL_LETTER, 240, dasd_symmio_parms_t)
#endif /* DASD_H */ #endif /* DASD_H */
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-indent-level: 4
* c-brace-imaginary-offset: 0
* c-brace-offset: -4
* c-argdecl-indent: 4
* c-label-offset: -4
* c-continued-statement-offset: 4
* c-continued-brace-offset: 0
* indent-tabs-mode: nil
* tab-width: 8
* End:
*/
...@@ -66,9 +66,9 @@ int main(void) ...@@ -66,9 +66,9 @@ int main(void)
DEFINE(__VDSO_ECTG_BASE, offsetof(struct vdso_per_cpu_data, ectg_timer_base)); DEFINE(__VDSO_ECTG_BASE, offsetof(struct vdso_per_cpu_data, ectg_timer_base));
DEFINE(__VDSO_ECTG_USER, offsetof(struct vdso_per_cpu_data, ectg_user_time)); DEFINE(__VDSO_ECTG_USER, offsetof(struct vdso_per_cpu_data, ectg_user_time));
/* constants used by the vdso */ /* constants used by the vdso */
DEFINE(CLOCK_REALTIME, CLOCK_REALTIME); DEFINE(__CLOCK_REALTIME, CLOCK_REALTIME);
DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC); DEFINE(__CLOCK_MONOTONIC, CLOCK_MONOTONIC);
DEFINE(CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
BLANK(); BLANK();
/* constants for SIGP */ /* constants for SIGP */
DEFINE(__SIGP_STOP, sigp_stop); DEFINE(__SIGP_STOP, sigp_stop);
......
...@@ -282,8 +282,6 @@ static noinline __init void setup_facility_list(void) ...@@ -282,8 +282,6 @@ static noinline __init void setup_facility_list(void)
static noinline __init void setup_hpage(void) static noinline __init void setup_hpage(void)
{ {
#ifndef CONFIG_DEBUG_PAGEALLOC #ifndef CONFIG_DEBUG_PAGEALLOC
unsigned int facilities;
if (!test_facility(2) || !test_facility(8)) if (!test_facility(2) || !test_facility(8))
return; return;
S390_lowcore.machine_flags |= MACHINE_FLAG_HPAGE; S390_lowcore.machine_flags |= MACHINE_FLAG_HPAGE;
......
...@@ -557,6 +557,7 @@ pgm_svcper: ...@@ -557,6 +557,7 @@ pgm_svcper:
# per was called from kernel, must be kprobes # per was called from kernel, must be kprobes
# #
kernel_per: kernel_per:
REENABLE_IRQS
mvi SP_SVCNR(%r15),0xff # set trap indication to pgm check mvi SP_SVCNR(%r15),0xff # set trap indication to pgm check
mvi SP_SVCNR+1(%r15),0xff mvi SP_SVCNR+1(%r15),0xff
la %r2,SP_PTREGS(%r15) # address of register-save area la %r2,SP_PTREGS(%r15) # address of register-save area
......
...@@ -568,6 +568,7 @@ pgm_svcper: ...@@ -568,6 +568,7 @@ pgm_svcper:
# per was called from kernel, must be kprobes # per was called from kernel, must be kprobes
# #
kernel_per: kernel_per:
REENABLE_IRQS
xc SP_SVCNR(2,%r15),SP_SVCNR(%r15) # clear svc number xc SP_SVCNR(2,%r15),SP_SVCNR(%r15) # clear svc number
la %r2,SP_PTREGS(%r15) # address of register-save area la %r2,SP_PTREGS(%r15) # address of register-save area
brasl %r14,do_single_step brasl %r14,do_single_step
......
...@@ -316,6 +316,8 @@ static int __kprobes kprobe_handler(struct pt_regs *regs) ...@@ -316,6 +316,8 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
return 1; return 1;
ss_probe: ss_probe:
if (regs->psw.mask & (PSW_MASK_PER | PSW_MASK_IO))
local_irq_disable();
prepare_singlestep(p, regs); prepare_singlestep(p, regs);
kcb->kprobe_status = KPROBE_HIT_SS; kcb->kprobe_status = KPROBE_HIT_SS;
return 1; return 1;
...@@ -463,6 +465,8 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs) ...@@ -463,6 +465,8 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs)
goto out; goto out;
} }
reset_current_kprobe(); reset_current_kprobe();
if (regs->psw.mask & (PSW_MASK_PER | PSW_MASK_IO))
local_irq_enable();
out: out:
preempt_enable_no_resched(); preempt_enable_no_resched();
...@@ -502,8 +506,11 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) ...@@ -502,8 +506,11 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
regs->psw.mask |= kcb->kprobe_saved_imask; regs->psw.mask |= kcb->kprobe_saved_imask;
if (kcb->kprobe_status == KPROBE_REENTER) if (kcb->kprobe_status == KPROBE_REENTER)
restore_previous_kprobe(kcb); restore_previous_kprobe(kcb);
else else {
reset_current_kprobe(); reset_current_kprobe();
if (regs->psw.mask & (PSW_MASK_PER | PSW_MASK_IO))
local_irq_enable();
}
preempt_enable_no_resched(); preempt_enable_no_resched();
break; break;
case KPROBE_HIT_ACTIVE: case KPROBE_HIT_ACTIVE:
......
...@@ -761,6 +761,9 @@ static void __init setup_hwcaps(void) ...@@ -761,6 +761,9 @@ static void __init setup_hwcaps(void)
case 0x2098: case 0x2098:
strcpy(elf_platform, "z10"); strcpy(elf_platform, "z10");
break; break;
case 0x2817:
strcpy(elf_platform, "z196");
break;
} }
} }
......
...@@ -106,11 +106,13 @@ static int stsi_15_1_x(struct sysinfo_15_1_x *info, char *page, int len) ...@@ -106,11 +106,13 @@ static int stsi_15_1_x(struct sysinfo_15_1_x *info, char *page, int len)
for (i = 0; i < TOPOLOGY_NR_MAG; i++) for (i = 0; i < TOPOLOGY_NR_MAG; i++)
len += sprintf(page + len, " %d", info->mag[i]); len += sprintf(page + len, " %d", info->mag[i]);
len += sprintf(page + len, "\n"); len += sprintf(page + len, "\n");
#ifdef CONFIG_SCHED_MC
store_topology(info); store_topology(info);
len += sprintf(page + len, "CPU Topology SW: "); len += sprintf(page + len, "CPU Topology SW: ");
for (i = 0; i < TOPOLOGY_NR_MAG; i++) for (i = 0; i < TOPOLOGY_NR_MAG; i++)
len += sprintf(page + len, " %d", info->mag[i]); len += sprintf(page + len, " %d", info->mag[i]);
len += sprintf(page + len, "\n"); len += sprintf(page + len, "\n");
#endif
return len; return len;
} }
......
...@@ -53,8 +53,10 @@ static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu) ...@@ -53,8 +53,10 @@ static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu)
cpumask_t mask; cpumask_t mask;
cpus_clear(mask); cpus_clear(mask);
if (!topology_enabled || !MACHINE_HAS_TOPOLOGY) if (!topology_enabled || !MACHINE_HAS_TOPOLOGY) {
return cpu_possible_map; cpumask_copy(&mask, cpumask_of(cpu));
return mask;
}
while (info) { while (info) {
if (cpu_isset(cpu, info->mask)) { if (cpu_isset(cpu, info->mask)) {
mask = info->mask; mask = info->mask;
......
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
.type __kernel_clock_getres,@function .type __kernel_clock_getres,@function
__kernel_clock_getres: __kernel_clock_getres:
.cfi_startproc .cfi_startproc
chi %r2,CLOCK_REALTIME chi %r2,__CLOCK_REALTIME
je 0f je 0f
chi %r2,CLOCK_MONOTONIC chi %r2,__CLOCK_MONOTONIC
jne 3f jne 3f
0: ltr %r3,%r3 0: ltr %r3,%r3
jz 2f /* res == NULL */ jz 2f /* res == NULL */
...@@ -34,6 +34,6 @@ __kernel_clock_getres: ...@@ -34,6 +34,6 @@ __kernel_clock_getres:
3: lhi %r1,__NR_clock_getres /* fallback to svc */ 3: lhi %r1,__NR_clock_getres /* fallback to svc */
svc 0 svc 0
br %r14 br %r14
4: .long CLOCK_REALTIME_RES 4: .long __CLOCK_REALTIME_RES
.cfi_endproc .cfi_endproc
.size __kernel_clock_getres,.-__kernel_clock_getres .size __kernel_clock_getres,.-__kernel_clock_getres
...@@ -21,9 +21,9 @@ __kernel_clock_gettime: ...@@ -21,9 +21,9 @@ __kernel_clock_gettime:
.cfi_startproc .cfi_startproc
basr %r5,0 basr %r5,0
0: al %r5,21f-0b(%r5) /* get &_vdso_data */ 0: al %r5,21f-0b(%r5) /* get &_vdso_data */
chi %r2,CLOCK_REALTIME chi %r2,__CLOCK_REALTIME
je 10f je 10f
chi %r2,CLOCK_MONOTONIC chi %r2,__CLOCK_MONOTONIC
jne 19f jne 19f
/* CLOCK_MONOTONIC */ /* CLOCK_MONOTONIC */
......
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
.type __kernel_clock_getres,@function .type __kernel_clock_getres,@function
__kernel_clock_getres: __kernel_clock_getres:
.cfi_startproc .cfi_startproc
cghi %r2,CLOCK_REALTIME cghi %r2,__CLOCK_REALTIME
je 0f je 0f
cghi %r2,CLOCK_MONOTONIC cghi %r2,__CLOCK_MONOTONIC
je 0f je 0f
cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */ cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */
jne 2f jne 2f
...@@ -39,6 +39,6 @@ __kernel_clock_getres: ...@@ -39,6 +39,6 @@ __kernel_clock_getres:
2: lghi %r1,__NR_clock_getres /* fallback to svc */ 2: lghi %r1,__NR_clock_getres /* fallback to svc */
svc 0 svc 0
br %r14 br %r14
3: .quad CLOCK_REALTIME_RES 3: .quad __CLOCK_REALTIME_RES
.cfi_endproc .cfi_endproc
.size __kernel_clock_getres,.-__kernel_clock_getres .size __kernel_clock_getres,.-__kernel_clock_getres
...@@ -20,11 +20,11 @@ ...@@ -20,11 +20,11 @@
__kernel_clock_gettime: __kernel_clock_gettime:
.cfi_startproc .cfi_startproc
larl %r5,_vdso_data larl %r5,_vdso_data
cghi %r2,CLOCK_REALTIME cghi %r2,__CLOCK_REALTIME
je 4f je 4f
cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */ cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */
je 9f je 9f
cghi %r2,CLOCK_MONOTONIC cghi %r2,__CLOCK_MONOTONIC
jne 12f jne 12f
/* CLOCK_MONOTONIC */ /* CLOCK_MONOTONIC */
......
...@@ -2801,6 +2801,73 @@ dasd_eckd_steal_lock(struct dasd_device *device) ...@@ -2801,6 +2801,73 @@ dasd_eckd_steal_lock(struct dasd_device *device)
return rc; return rc;
} }
/*
* SNID - Sense Path Group ID
* This ioctl may be used in situations where I/O is stalled due to
* a reserve, so if the normal dasd_smalloc_request fails, we use the
* preallocated dasd_reserve_req.
*/
static int dasd_eckd_snid(struct dasd_device *device,
void __user *argp)
{
struct dasd_ccw_req *cqr;
int rc;
struct ccw1 *ccw;
int useglobal;
struct dasd_snid_ioctl_data usrparm;
if (!capable(CAP_SYS_ADMIN))
return -EACCES;
if (copy_from_user(&usrparm, argp, sizeof(usrparm)))
return -EFAULT;
useglobal = 0;
cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1,
sizeof(struct dasd_snid_data), device);
if (IS_ERR(cqr)) {
mutex_lock(&dasd_reserve_mutex);
useglobal = 1;
cqr = &dasd_reserve_req->cqr;
memset(cqr, 0, sizeof(*cqr));
memset(&dasd_reserve_req->ccw, 0,
sizeof(dasd_reserve_req->ccw));
cqr->cpaddr = &dasd_reserve_req->ccw;
cqr->data = &dasd_reserve_req->data;
cqr->magic = DASD_ECKD_MAGIC;
}
ccw = cqr->cpaddr;
ccw->cmd_code = DASD_ECKD_CCW_SNID;
ccw->flags |= CCW_FLAG_SLI;
ccw->count = 12;
ccw->cda = (__u32)(addr_t) cqr->data;
cqr->startdev = device;
cqr->memdev = device;
clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags);
cqr->retries = 5;
cqr->expires = 10 * HZ;
cqr->buildclk = get_clock();
cqr->status = DASD_CQR_FILLED;
cqr->lpm = usrparm.path_mask;
rc = dasd_sleep_on_immediatly(cqr);
/* verify that I/O processing didn't modify the path mask */
if (!rc && usrparm.path_mask && (cqr->lpm != usrparm.path_mask))
rc = -EIO;
if (!rc) {
usrparm.data = *((struct dasd_snid_data *)cqr->data);
if (copy_to_user(argp, &usrparm, sizeof(usrparm)))
rc = -EFAULT;
}
if (useglobal)
mutex_unlock(&dasd_reserve_mutex);
else
dasd_sfree_request(cqr, cqr->memdev);
return rc;
}
/* /*
* Read performance statistics * Read performance statistics
*/ */
...@@ -3036,6 +3103,8 @@ dasd_eckd_ioctl(struct dasd_block *block, unsigned int cmd, void __user *argp) ...@@ -3036,6 +3103,8 @@ dasd_eckd_ioctl(struct dasd_block *block, unsigned int cmd, void __user *argp)
return dasd_eckd_reserve(device); return dasd_eckd_reserve(device);
case BIODASDSLCK: case BIODASDSLCK:
return dasd_eckd_steal_lock(device); return dasd_eckd_steal_lock(device);
case BIODASDSNID:
return dasd_eckd_snid(device, argp);
case BIODASDSYMMIO: case BIODASDSYMMIO:
return dasd_symm_io(device, argp); return dasd_symm_io(device, argp);
default: default:
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#define DASD_ECKD_CCW_WRITE_CKD 0x1d #define DASD_ECKD_CCW_WRITE_CKD 0x1d
#define DASD_ECKD_CCW_READ_CKD 0x1e #define DASD_ECKD_CCW_READ_CKD 0x1e
#define DASD_ECKD_CCW_PSF 0x27 #define DASD_ECKD_CCW_PSF 0x27
#define DASD_ECKD_CCW_SNID 0x34
#define DASD_ECKD_CCW_RSSD 0x3e #define DASD_ECKD_CCW_RSSD 0x3e
#define DASD_ECKD_CCW_LOCATE_RECORD 0x47 #define DASD_ECKD_CCW_LOCATE_RECORD 0x47
#define DASD_ECKD_CCW_SNSS 0x54 #define DASD_ECKD_CCW_SNSS 0x54
......
...@@ -1077,15 +1077,14 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb) ...@@ -1077,15 +1077,14 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
/* FIXME: What to do with the request? */ /* FIXME: What to do with the request? */
switch (PTR_ERR(irb)) { switch (PTR_ERR(irb)) {
case -ETIMEDOUT: case -ETIMEDOUT:
DBF_LH(1, "(%s): Request timed out\n", DBF_LH(1, "(%08x): Request timed out\n",
dev_name(&cdev->dev)); device->cdev_id);
case -EIO: case -EIO:
__tape_end_request(device, request, -EIO); __tape_end_request(device, request, -EIO);
break; break;
default: default:
DBF_LH(1, "(%s): Unexpected i/o error %li\n", DBF_LH(1, "(%08x): Unexpected i/o error %li\n",
dev_name(&cdev->dev), device->cdev_id, PTR_ERR(irb));
PTR_ERR(irb));
} }
return; return;
} }
......
...@@ -47,8 +47,8 @@ tape_std_assign_timeout(unsigned long data) ...@@ -47,8 +47,8 @@ tape_std_assign_timeout(unsigned long data)
device->cdev_id); device->cdev_id);
rc = tape_cancel_io(device, request); rc = tape_cancel_io(device, request);
if(rc) if(rc)
DBF_EVENT(3, "(%s): Assign timeout: Cancel failed with rc = %i\n", DBF_EVENT(3, "(%08x): Assign timeout: Cancel failed with rc = "
dev_name(&device->cdev->dev), rc); "%i\n", device->cdev_id, rc);
} }
int int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment