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 single stepped svcs with TRACE_IRQFLAGS=y [S390] zcrypt: Do not remove coprocessor for error 8/72 [S390] sclp_vt220: set initial terminal window size [S390] use set_current_state in sigsuspend [S390] irqflags: add missing types.h include [S390] dasd: fix possible NULL pointer errors
This commit is contained in:
commit
981a2edd19
11 changed files with 23 additions and 22 deletions
|
@ -1,14 +1,12 @@
|
||||||
/*
|
/*
|
||||||
* include/asm-s390/irqflags.h
|
* Copyright IBM Corp. 2006,2010
|
||||||
*
|
* Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||||
* Copyright (C) IBM Corp. 2006
|
|
||||||
* Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __ASM_IRQFLAGS_H
|
#ifndef __ASM_IRQFLAGS_H
|
||||||
#define __ASM_IRQFLAGS_H
|
#define __ASM_IRQFLAGS_H
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#include <linux/types.h>
|
||||||
|
|
||||||
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
|
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
|
||||||
|
|
||||||
|
@ -102,5 +100,4 @@ static inline int raw_irqs_disabled_flags(unsigned long flags)
|
||||||
/* For spinlocks etc */
|
/* For spinlocks etc */
|
||||||
#define raw_local_irq_save(x) ((x) = raw_local_irq_disable())
|
#define raw_local_irq_save(x) ((x) = raw_local_irq_disable())
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
|
||||||
#endif /* __ASM_IRQFLAGS_H */
|
#endif /* __ASM_IRQFLAGS_H */
|
||||||
|
|
|
@ -571,6 +571,7 @@ pgm_svcper:
|
||||||
mvc __THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID
|
mvc __THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID
|
||||||
oi __TI_flags+3(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP
|
oi __TI_flags+3(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP
|
||||||
TRACE_IRQS_ON
|
TRACE_IRQS_ON
|
||||||
|
lm %r2,%r6,SP_R2(%r15) # load svc arguments
|
||||||
stosm __SF_EMPTY(%r15),0x03 # reenable interrupts
|
stosm __SF_EMPTY(%r15),0x03 # reenable interrupts
|
||||||
b BASED(sysc_do_svc)
|
b BASED(sysc_do_svc)
|
||||||
|
|
||||||
|
|
|
@ -549,6 +549,7 @@ pgm_svcper:
|
||||||
mvc __THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID
|
mvc __THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID
|
||||||
oi __TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP
|
oi __TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP
|
||||||
TRACE_IRQS_ON
|
TRACE_IRQS_ON
|
||||||
|
lmg %r2,%r6,SP_R2(%r15) # load svc arguments
|
||||||
stosm __SF_EMPTY(%r15),0x03 # reenable interrupts
|
stosm __SF_EMPTY(%r15),0x03 # reenable interrupts
|
||||||
j sysc_do_svc
|
j sysc_do_svc
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask)
|
||||||
recalc_sigpending();
|
recalc_sigpending();
|
||||||
spin_unlock_irq(¤t->sighand->siglock);
|
spin_unlock_irq(¤t->sighand->siglock);
|
||||||
|
|
||||||
current->state = TASK_INTERRUPTIBLE;
|
set_current_state(TASK_INTERRUPTIBLE);
|
||||||
schedule();
|
schedule();
|
||||||
set_thread_flag(TIF_RESTORE_SIGMASK);
|
set_thread_flag(TIF_RESTORE_SIGMASK);
|
||||||
|
|
||||||
|
|
|
@ -1004,8 +1004,8 @@ static void dasd_handle_killed_request(struct ccw_device *cdev,
|
||||||
if (device == NULL ||
|
if (device == NULL ||
|
||||||
device != dasd_device_from_cdev_locked(cdev) ||
|
device != dasd_device_from_cdev_locked(cdev) ||
|
||||||
strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
|
strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
|
||||||
DBF_DEV_EVENT(DBF_DEBUG, device, "invalid device in request: "
|
DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s",
|
||||||
"bus_id %s", dev_name(&cdev->dev));
|
"invalid device in request");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1078,8 +1078,8 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,
|
||||||
device = (struct dasd_device *) cqr->startdev;
|
device = (struct dasd_device *) cqr->startdev;
|
||||||
if (!device ||
|
if (!device ||
|
||||||
strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
|
strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
|
||||||
DBF_DEV_EVENT(DBF_DEBUG, device, "invalid device in request: "
|
DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s",
|
||||||
"bus_id %s", dev_name(&cdev->dev));
|
"invalid device in request");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3033,7 +3033,7 @@ static void dasd_eckd_dump_sense_ccw(struct dasd_device *device,
|
||||||
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
|
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
|
||||||
" in req: %p CS: 0x%02X DS: 0x%02X CC: 0x%02X RC: %d\n",
|
" in req: %p CS: 0x%02X DS: 0x%02X CC: 0x%02X RC: %d\n",
|
||||||
req, scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw),
|
req, scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw),
|
||||||
scsw_cc(&irb->scsw), req->intrc);
|
scsw_cc(&irb->scsw), req ? req->intrc : 0);
|
||||||
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
|
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
|
||||||
" device %s: Failing CCW: %p\n",
|
" device %s: Failing CCW: %p\n",
|
||||||
dev_name(&device->cdev->dev),
|
dev_name(&device->cdev->dev),
|
||||||
|
|
|
@ -260,7 +260,7 @@ static int dasd_ioctl_information(struct dasd_block *block,
|
||||||
struct ccw_dev_id dev_id;
|
struct ccw_dev_id dev_id;
|
||||||
|
|
||||||
base = block->base;
|
base = block->base;
|
||||||
if (!base->discipline->fill_info)
|
if (!base->discipline || !base->discipline->fill_info)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
dasd_info = kzalloc(sizeof(struct dasd_information2_t), GFP_KERNEL);
|
dasd_info = kzalloc(sizeof(struct dasd_information2_t), GFP_KERNEL);
|
||||||
|
@ -303,10 +303,7 @@ static int dasd_ioctl_information(struct dasd_block *block,
|
||||||
dasd_info->features |=
|
dasd_info->features |=
|
||||||
((base->features & DASD_FEATURE_READONLY) != 0);
|
((base->features & DASD_FEATURE_READONLY) != 0);
|
||||||
|
|
||||||
if (base->discipline)
|
memcpy(dasd_info->type, base->discipline->name, 4);
|
||||||
memcpy(dasd_info->type, base->discipline->name, 4);
|
|
||||||
else
|
|
||||||
memcpy(dasd_info->type, "none", 4);
|
|
||||||
|
|
||||||
if (block->request_queue->request_fn) {
|
if (block->request_queue->request_fn) {
|
||||||
struct list_head *l;
|
struct list_head *l;
|
||||||
|
|
|
@ -72,7 +72,7 @@ dasd_devices_show(struct seq_file *m, void *v)
|
||||||
/* Print device number. */
|
/* Print device number. */
|
||||||
seq_printf(m, "%s", dev_name(&device->cdev->dev));
|
seq_printf(m, "%s", dev_name(&device->cdev->dev));
|
||||||
/* Print discipline string. */
|
/* Print discipline string. */
|
||||||
if (device != NULL && device->discipline != NULL)
|
if (device->discipline != NULL)
|
||||||
seq_printf(m, "(%s)", device->discipline->name);
|
seq_printf(m, "(%s)", device->discipline->name);
|
||||||
else
|
else
|
||||||
seq_printf(m, "(none)");
|
seq_printf(m, "(none)");
|
||||||
|
@ -92,10 +92,7 @@ dasd_devices_show(struct seq_file *m, void *v)
|
||||||
substr = (device->features & DASD_FEATURE_READONLY) ? "(ro)" : " ";
|
substr = (device->features & DASD_FEATURE_READONLY) ? "(ro)" : " ";
|
||||||
seq_printf(m, "%4s: ", substr);
|
seq_printf(m, "%4s: ", substr);
|
||||||
/* Print device status information. */
|
/* Print device status information. */
|
||||||
switch ((device != NULL) ? device->state : -1) {
|
switch (device->state) {
|
||||||
case -1:
|
|
||||||
seq_printf(m, "unknown");
|
|
||||||
break;
|
|
||||||
case DASD_STATE_NEW:
|
case DASD_STATE_NEW:
|
||||||
seq_printf(m, "new");
|
seq_printf(m, "new");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -495,6 +495,10 @@ sclp_vt220_open(struct tty_struct *tty, struct file *filp)
|
||||||
if (tty->driver_data == NULL)
|
if (tty->driver_data == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
tty->low_latency = 0;
|
tty->low_latency = 0;
|
||||||
|
if (!tty->winsize.ws_row && !tty->winsize.ws_col) {
|
||||||
|
tty->winsize.ws_row = 24;
|
||||||
|
tty->winsize.ws_col = 80;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -373,6 +373,8 @@ static int convert_type86(struct zcrypt_device *zdev,
|
||||||
zdev->max_mod_size = PCICC_MAX_MOD_SIZE_OLD;
|
zdev->max_mod_size = PCICC_MAX_MOD_SIZE_OLD;
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
|
if (service_rc == 8 && service_rs == 72)
|
||||||
|
return -EINVAL;
|
||||||
zdev->online = 0;
|
zdev->online = 0;
|
||||||
return -EAGAIN; /* repeat the request on a different device. */
|
return -EAGAIN; /* repeat the request on a different device. */
|
||||||
}
|
}
|
||||||
|
|
|
@ -470,6 +470,8 @@ static int convert_type86_ica(struct zcrypt_device *zdev,
|
||||||
}
|
}
|
||||||
if (service_rc == 12 && service_rs == 769)
|
if (service_rc == 12 && service_rs == 769)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
if (service_rc == 8 && service_rs == 72)
|
||||||
|
return -EINVAL;
|
||||||
zdev->online = 0;
|
zdev->online = 0;
|
||||||
return -EAGAIN; /* repeat the request on a different device. */
|
return -EAGAIN; /* repeat the request on a different device. */
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue