diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/s390/block/dasd.c | 13 | ||||
| -rw-r--r-- | drivers/s390/block/dasd_eckd.c | 8 | ||||
| -rw-r--r-- | drivers/s390/char/sclp_async.c | 4 | ||||
| -rw-r--r-- | drivers/s390/char/sclp_vt220.c | 30 | ||||
| -rw-r--r-- | drivers/s390/char/tape_block.c | 3 | ||||
| -rw-r--r-- | drivers/s390/cio/device.c | 9 |
6 files changed, 39 insertions, 28 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 53b8c255360a..aaccc8ecfa8f 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
| @@ -2533,6 +2533,7 @@ static struct dasd_ccw_req *dasd_generic_build_rdc(struct dasd_device *device, | |||
| 2533 | { | 2533 | { |
| 2534 | struct dasd_ccw_req *cqr; | 2534 | struct dasd_ccw_req *cqr; |
| 2535 | struct ccw1 *ccw; | 2535 | struct ccw1 *ccw; |
| 2536 | unsigned long *idaw; | ||
| 2536 | 2537 | ||
| 2537 | cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device); | 2538 | cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device); |
| 2538 | 2539 | ||
| @@ -2546,9 +2547,17 @@ static struct dasd_ccw_req *dasd_generic_build_rdc(struct dasd_device *device, | |||
| 2546 | 2547 | ||
| 2547 | ccw = cqr->cpaddr; | 2548 | ccw = cqr->cpaddr; |
| 2548 | ccw->cmd_code = CCW_CMD_RDC; | 2549 | ccw->cmd_code = CCW_CMD_RDC; |
| 2549 | ccw->cda = (__u32)(addr_t)rdc_buffer; | 2550 | if (idal_is_needed(rdc_buffer, rdc_buffer_size)) { |
| 2550 | ccw->count = rdc_buffer_size; | 2551 | idaw = (unsigned long *) (cqr->data); |
| 2552 | ccw->cda = (__u32)(addr_t) idaw; | ||
| 2553 | ccw->flags = CCW_FLAG_IDA; | ||
| 2554 | idaw = idal_create_words(idaw, rdc_buffer, rdc_buffer_size); | ||
| 2555 | } else { | ||
| 2556 | ccw->cda = (__u32)(addr_t) rdc_buffer; | ||
| 2557 | ccw->flags = 0; | ||
| 2558 | } | ||
| 2551 | 2559 | ||
| 2560 | ccw->count = rdc_buffer_size; | ||
| 2552 | cqr->startdev = device; | 2561 | cqr->startdev = device; |
| 2553 | cqr->memdev = device; | 2562 | cqr->memdev = device; |
| 2554 | cqr->expires = 10*HZ; | 2563 | cqr->expires = 10*HZ; |
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 0be7c15f45c5..417b97cd3f94 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
| @@ -3216,6 +3216,7 @@ int dasd_eckd_restore_device(struct dasd_device *device) | |||
| 3216 | struct dasd_eckd_characteristics temp_rdc_data; | 3216 | struct dasd_eckd_characteristics temp_rdc_data; |
| 3217 | int is_known, rc; | 3217 | int is_known, rc; |
| 3218 | struct dasd_uid temp_uid; | 3218 | struct dasd_uid temp_uid; |
| 3219 | unsigned long flags; | ||
| 3219 | 3220 | ||
| 3220 | private = (struct dasd_eckd_private *) device->private; | 3221 | private = (struct dasd_eckd_private *) device->private; |
| 3221 | 3222 | ||
| @@ -3228,7 +3229,8 @@ int dasd_eckd_restore_device(struct dasd_device *device) | |||
| 3228 | rc = dasd_eckd_generate_uid(device, &private->uid); | 3229 | rc = dasd_eckd_generate_uid(device, &private->uid); |
| 3229 | dasd_get_uid(device->cdev, &temp_uid); | 3230 | dasd_get_uid(device->cdev, &temp_uid); |
| 3230 | if (memcmp(&private->uid, &temp_uid, sizeof(struct dasd_uid)) != 0) | 3231 | if (memcmp(&private->uid, &temp_uid, sizeof(struct dasd_uid)) != 0) |
| 3231 | dev_err(&device->cdev->dev, "The UID of the DASD has changed\n"); | 3232 | dev_err(&device->cdev->dev, "The UID of the DASD has " |
| 3233 | "changed\n"); | ||
| 3232 | if (rc) | 3234 | if (rc) |
| 3233 | goto out_err; | 3235 | goto out_err; |
| 3234 | dasd_set_uid(device->cdev, &private->uid); | 3236 | dasd_set_uid(device->cdev, &private->uid); |
| @@ -3256,9 +3258,9 @@ int dasd_eckd_restore_device(struct dasd_device *device) | |||
| 3256 | "device: %s", rc, dev_name(&device->cdev->dev)); | 3258 | "device: %s", rc, dev_name(&device->cdev->dev)); |
| 3257 | goto out_err; | 3259 | goto out_err; |
| 3258 | } | 3260 | } |
| 3259 | spin_lock(get_ccwdev_lock(device->cdev)); | 3261 | spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); |
| 3260 | memcpy(&private->rdc_data, &temp_rdc_data, sizeof(temp_rdc_data)); | 3262 | memcpy(&private->rdc_data, &temp_rdc_data, sizeof(temp_rdc_data)); |
| 3261 | spin_unlock(get_ccwdev_lock(device->cdev)); | 3263 | spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); |
| 3262 | 3264 | ||
| 3263 | /* add device to alias management */ | 3265 | /* add device to alias management */ |
| 3264 | dasd_alias_add_device(device); | 3266 | dasd_alias_add_device(device); |
diff --git a/drivers/s390/char/sclp_async.c b/drivers/s390/char/sclp_async.c index daaec185ed36..a4f68e5b9c96 100644 --- a/drivers/s390/char/sclp_async.c +++ b/drivers/s390/char/sclp_async.c | |||
| @@ -62,7 +62,7 @@ static struct notifier_block call_home_panic_nb = { | |||
| 62 | .priority = INT_MAX, | 62 | .priority = INT_MAX, |
| 63 | }; | 63 | }; |
| 64 | 64 | ||
| 65 | static int proc_handler_callhome(ctl_table *ctl, int write, struct file *filp, | 65 | static int proc_handler_callhome(struct ctl_table *ctl, int write, |
| 66 | void __user *buffer, size_t *count, | 66 | void __user *buffer, size_t *count, |
| 67 | loff_t *ppos) | 67 | loff_t *ppos) |
| 68 | { | 68 | { |
| @@ -100,7 +100,7 @@ static struct ctl_table callhome_table[] = { | |||
| 100 | { | 100 | { |
| 101 | .procname = "callhome", | 101 | .procname = "callhome", |
| 102 | .mode = 0644, | 102 | .mode = 0644, |
| 103 | .proc_handler = &proc_handler_callhome, | 103 | .proc_handler = proc_handler_callhome, |
| 104 | }, | 104 | }, |
| 105 | { .ctl_name = 0 } | 105 | { .ctl_name = 0 } |
| 106 | }; | 106 | }; |
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c index 178724f2a4c3..b9d2a007e93b 100644 --- a/drivers/s390/char/sclp_vt220.c +++ b/drivers/s390/char/sclp_vt220.c | |||
| @@ -705,21 +705,6 @@ out_driver: | |||
| 705 | } | 705 | } |
| 706 | __initcall(sclp_vt220_tty_init); | 706 | __initcall(sclp_vt220_tty_init); |
| 707 | 707 | ||
| 708 | #ifdef CONFIG_SCLP_VT220_CONSOLE | ||
| 709 | |||
| 710 | static void | ||
| 711 | sclp_vt220_con_write(struct console *con, const char *buf, unsigned int count) | ||
| 712 | { | ||
| 713 | __sclp_vt220_write((const unsigned char *) buf, count, 1, 1, 0); | ||
| 714 | } | ||
| 715 | |||
| 716 | static struct tty_driver * | ||
| 717 | sclp_vt220_con_device(struct console *c, int *index) | ||
| 718 | { | ||
| 719 | *index = 0; | ||
| 720 | return sclp_vt220_driver; | ||
| 721 | } | ||
| 722 | |||
| 723 | static void __sclp_vt220_flush_buffer(void) | 708 | static void __sclp_vt220_flush_buffer(void) |
| 724 | { | 709 | { |
| 725 | unsigned long flags; | 710 | unsigned long flags; |
| @@ -776,6 +761,21 @@ static void sclp_vt220_pm_event_fn(struct sclp_register *reg, | |||
| 776 | } | 761 | } |
| 777 | } | 762 | } |
| 778 | 763 | ||
| 764 | #ifdef CONFIG_SCLP_VT220_CONSOLE | ||
| 765 | |||
| 766 | static void | ||
| 767 | sclp_vt220_con_write(struct console *con, const char *buf, unsigned int count) | ||
| 768 | { | ||
| 769 | __sclp_vt220_write((const unsigned char *) buf, count, 1, 1, 0); | ||
| 770 | } | ||
| 771 | |||
| 772 | static struct tty_driver * | ||
| 773 | sclp_vt220_con_device(struct console *c, int *index) | ||
| 774 | { | ||
| 775 | *index = 0; | ||
| 776 | return sclp_vt220_driver; | ||
| 777 | } | ||
| 778 | |||
| 779 | static int | 779 | static int |
| 780 | sclp_vt220_notify(struct notifier_block *self, | 780 | sclp_vt220_notify(struct notifier_block *self, |
| 781 | unsigned long event, void *data) | 781 | unsigned long event, void *data) |
diff --git a/drivers/s390/char/tape_block.c b/drivers/s390/char/tape_block.c index 64f57ef2763c..0c0705b91c28 100644 --- a/drivers/s390/char/tape_block.c +++ b/drivers/s390/char/tape_block.c | |||
| @@ -162,9 +162,10 @@ tapeblock_requeue(struct work_struct *work) { | |||
| 162 | spin_lock_irq(&device->blk_data.request_queue_lock); | 162 | spin_lock_irq(&device->blk_data.request_queue_lock); |
| 163 | while ( | 163 | while ( |
| 164 | !blk_queue_plugged(queue) && | 164 | !blk_queue_plugged(queue) && |
| 165 | (req = blk_fetch_request(queue)) && | 165 | blk_peek_request(queue) && |
| 166 | nr_queued < TAPEBLOCK_MIN_REQUEUE | 166 | nr_queued < TAPEBLOCK_MIN_REQUEUE |
| 167 | ) { | 167 | ) { |
| 168 | req = blk_fetch_request(queue); | ||
| 168 | if (rq_data_dir(req) == WRITE) { | 169 | if (rq_data_dir(req) == WRITE) { |
| 169 | DBF_EVENT(1, "TBLOCK: Rejecting write request\n"); | 170 | DBF_EVENT(1, "TBLOCK: Rejecting write request\n"); |
| 170 | spin_unlock_irq(&device->blk_data.request_queue_lock); | 171 | spin_unlock_irq(&device->blk_data.request_queue_lock); |
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 2ee093ec86e4..2490b741e16a 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
| @@ -1250,8 +1250,7 @@ static int io_subchannel_probe(struct subchannel *sch) | |||
| 1250 | unsigned long flags; | 1250 | unsigned long flags; |
| 1251 | struct ccw_dev_id dev_id; | 1251 | struct ccw_dev_id dev_id; |
| 1252 | 1252 | ||
| 1253 | cdev = sch_get_cdev(sch); | 1253 | if (cio_is_console(sch->schid)) { |
| 1254 | if (cdev) { | ||
| 1255 | rc = sysfs_create_group(&sch->dev.kobj, | 1254 | rc = sysfs_create_group(&sch->dev.kobj, |
| 1256 | &io_subchannel_attr_group); | 1255 | &io_subchannel_attr_group); |
| 1257 | if (rc) | 1256 | if (rc) |
| @@ -1260,13 +1259,13 @@ static int io_subchannel_probe(struct subchannel *sch) | |||
| 1260 | "0.%x.%04x (rc=%d)\n", | 1259 | "0.%x.%04x (rc=%d)\n", |
| 1261 | sch->schid.ssid, sch->schid.sch_no, rc); | 1260 | sch->schid.ssid, sch->schid.sch_no, rc); |
| 1262 | /* | 1261 | /* |
| 1263 | * This subchannel already has an associated ccw_device. | 1262 | * The console subchannel already has an associated ccw_device. |
| 1264 | * Throw the delayed uevent for the subchannel, register | 1263 | * Throw the delayed uevent for the subchannel, register |
| 1265 | * the ccw_device and exit. This happens for all early | 1264 | * the ccw_device and exit. |
| 1266 | * devices, e.g. the console. | ||
| 1267 | */ | 1265 | */ |
| 1268 | dev_set_uevent_suppress(&sch->dev, 0); | 1266 | dev_set_uevent_suppress(&sch->dev, 0); |
| 1269 | kobject_uevent(&sch->dev.kobj, KOBJ_ADD); | 1267 | kobject_uevent(&sch->dev.kobj, KOBJ_ADD); |
| 1268 | cdev = sch_get_cdev(sch); | ||
| 1270 | cdev->dev.groups = ccwdev_attr_groups; | 1269 | cdev->dev.groups = ccwdev_attr_groups; |
| 1271 | device_initialize(&cdev->dev); | 1270 | device_initialize(&cdev->dev); |
| 1272 | ccw_device_register(cdev); | 1271 | ccw_device_register(cdev); |
