diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-10-11 14:34:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-10-11 14:34:50 -0400 |
commit | f144c78e525542c94e0dcb171b41cc5ef7b341b3 (patch) | |
tree | a94920a3f87a11ad1875e08619a60e748b626e34 /drivers | |
parent | ef1f7a7e878e4ae37b3a78ebdeef9f911bae59df (diff) | |
parent | 6fca97a958bc3c67566aa91eafc6a5be2e66d6b3 (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: (21 commits)
[S390] dasd: fix race condition in resume code
[S390] Add EX_TABLE for addressing exception in usercopy functions.
[S390] 64-bit register support for 31-bit processes
[S390] hibernate: Use correct place for CPU address in lowcore
[S390] pm: ignore time spend in suspended state
[S390] zcrypt: Improve some comments
[S390] zcrypt: Fix sparse warning.
[S390] perf_counter: fix vdso detection
[S390] ftrace: drop nmi protection
[S390] compat: fix truncate system call wrapper
[S390] Provide arch specific mdelay implementation.
[S390] Fix enabled udelay for short delays.
[S390] cio: allow setting boxed devices offline
[S390] cio: make not operational handling consistent
[S390] cio: make disconnected handling consistent
[S390] Fix memory leak in /proc/cio_ignore
[S390] cio: channel path memory leak
[S390] module: fix memory leak in s390 module loader
[S390] Enable kmemleak on s390.
[S390] 3270 console build fix
...
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/s390/block/dasd.c | 5 | ||||
-rw-r--r-- | drivers/s390/block/dasd_eckd.c | 9 | ||||
-rw-r--r-- | drivers/s390/char/raw3270.c | 2 | ||||
-rw-r--r-- | drivers/s390/cio/blacklist.c | 13 | ||||
-rw-r--r-- | drivers/s390/cio/chp.c | 2 | ||||
-rw-r--r-- | drivers/s390/cio/device.c | 4 | ||||
-rw-r--r-- | drivers/s390/cio/device.h | 1 | ||||
-rw-r--r-- | drivers/s390/cio/device_fsm.c | 35 | ||||
-rw-r--r-- | drivers/s390/crypto/zcrypt_pcixcc.c | 13 |
9 files changed, 56 insertions, 28 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index dad0449475b6..53b8c255360a 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -2508,8 +2508,6 @@ int dasd_generic_restore_device(struct ccw_device *cdev) | |||
2508 | device->stopped &= ~DASD_UNRESUMED_PM; | 2508 | device->stopped &= ~DASD_UNRESUMED_PM; |
2509 | 2509 | ||
2510 | dasd_schedule_device_bh(device); | 2510 | dasd_schedule_device_bh(device); |
2511 | if (device->block) | ||
2512 | dasd_schedule_block_bh(device->block); | ||
2513 | 2511 | ||
2514 | if (device->discipline->restore) | 2512 | if (device->discipline->restore) |
2515 | rc = device->discipline->restore(device); | 2513 | rc = device->discipline->restore(device); |
@@ -2520,6 +2518,9 @@ int dasd_generic_restore_device(struct ccw_device *cdev) | |||
2520 | */ | 2518 | */ |
2521 | device->stopped |= DASD_UNRESUMED_PM; | 2519 | device->stopped |= DASD_UNRESUMED_PM; |
2522 | 2520 | ||
2521 | if (device->block) | ||
2522 | dasd_schedule_block_bh(device->block); | ||
2523 | |||
2523 | dasd_put_device(device); | 2524 | dasd_put_device(device); |
2524 | return 0; | 2525 | return 0; |
2525 | } | 2526 | } |
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index ab3521755588..0be7c15f45c5 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
@@ -2338,6 +2338,8 @@ static struct dasd_ccw_req *dasd_eckd_build_cp(struct dasd_device *startdev, | |||
2338 | /* Calculate number of blocks/records per track. */ | 2338 | /* Calculate number of blocks/records per track. */ |
2339 | blksize = block->bp_block; | 2339 | blksize = block->bp_block; |
2340 | blk_per_trk = recs_per_track(&private->rdc_data, 0, blksize); | 2340 | blk_per_trk = recs_per_track(&private->rdc_data, 0, blksize); |
2341 | if (blk_per_trk == 0) | ||
2342 | return ERR_PTR(-EINVAL); | ||
2341 | /* Calculate record id of first and last block. */ | 2343 | /* Calculate record id of first and last block. */ |
2342 | first_rec = first_trk = blk_rq_pos(req) >> block->s2b_shift; | 2344 | first_rec = first_trk = blk_rq_pos(req) >> block->s2b_shift; |
2343 | first_offs = sector_div(first_trk, blk_per_trk); | 2345 | first_offs = sector_div(first_trk, blk_per_trk); |
@@ -3211,6 +3213,7 @@ int dasd_eckd_pm_freeze(struct dasd_device *device) | |||
3211 | int dasd_eckd_restore_device(struct dasd_device *device) | 3213 | int dasd_eckd_restore_device(struct dasd_device *device) |
3212 | { | 3214 | { |
3213 | struct dasd_eckd_private *private; | 3215 | struct dasd_eckd_private *private; |
3216 | struct dasd_eckd_characteristics temp_rdc_data; | ||
3214 | int is_known, rc; | 3217 | int is_known, rc; |
3215 | struct dasd_uid temp_uid; | 3218 | struct dasd_uid temp_uid; |
3216 | 3219 | ||
@@ -3245,15 +3248,17 @@ int dasd_eckd_restore_device(struct dasd_device *device) | |||
3245 | dasd_eckd_read_features(device); | 3248 | dasd_eckd_read_features(device); |
3246 | 3249 | ||
3247 | /* Read Device Characteristics */ | 3250 | /* Read Device Characteristics */ |
3248 | memset(&private->rdc_data, 0, sizeof(private->rdc_data)); | ||
3249 | rc = dasd_generic_read_dev_chars(device, DASD_ECKD_MAGIC, | 3251 | rc = dasd_generic_read_dev_chars(device, DASD_ECKD_MAGIC, |
3250 | &private->rdc_data, 64); | 3252 | &temp_rdc_data, 64); |
3251 | if (rc) { | 3253 | if (rc) { |
3252 | DBF_EVENT(DBF_WARNING, | 3254 | DBF_EVENT(DBF_WARNING, |
3253 | "Read device characteristics failed, rc=%d for " | 3255 | "Read device characteristics failed, rc=%d for " |
3254 | "device: %s", rc, dev_name(&device->cdev->dev)); | 3256 | "device: %s", rc, dev_name(&device->cdev->dev)); |
3255 | goto out_err; | 3257 | goto out_err; |
3256 | } | 3258 | } |
3259 | spin_lock(get_ccwdev_lock(device->cdev)); | ||
3260 | memcpy(&private->rdc_data, &temp_rdc_data, sizeof(temp_rdc_data)); | ||
3261 | spin_unlock(get_ccwdev_lock(device->cdev)); | ||
3257 | 3262 | ||
3258 | /* add device to alias management */ | 3263 | /* add device to alias management */ |
3259 | dasd_alias_add_device(device); | 3264 | dasd_alias_add_device(device); |
diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c index d6a022f55e92..62ddf5202b79 100644 --- a/drivers/s390/char/raw3270.c +++ b/drivers/s390/char/raw3270.c | |||
@@ -1361,11 +1361,13 @@ static int raw3270_pm_start(struct ccw_device *cdev) | |||
1361 | 1361 | ||
1362 | void raw3270_pm_unfreeze(struct raw3270_view *view) | 1362 | void raw3270_pm_unfreeze(struct raw3270_view *view) |
1363 | { | 1363 | { |
1364 | #ifdef CONFIG_TN3270_CONSOLE | ||
1364 | struct raw3270 *rp; | 1365 | struct raw3270 *rp; |
1365 | 1366 | ||
1366 | rp = view->dev; | 1367 | rp = view->dev; |
1367 | if (rp && test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) | 1368 | if (rp && test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) |
1368 | ccw_device_force_console(); | 1369 | ccw_device_force_console(); |
1370 | #endif | ||
1369 | } | 1371 | } |
1370 | 1372 | ||
1371 | static struct ccw_device_id raw3270_id[] = { | 1373 | static struct ccw_device_id raw3270_id[] = { |
diff --git a/drivers/s390/cio/blacklist.c b/drivers/s390/cio/blacklist.c index 6565f027791e..7eab9ab9f406 100644 --- a/drivers/s390/cio/blacklist.c +++ b/drivers/s390/cio/blacklist.c | |||
@@ -265,13 +265,11 @@ struct ccwdev_iter { | |||
265 | static void * | 265 | static void * |
266 | cio_ignore_proc_seq_start(struct seq_file *s, loff_t *offset) | 266 | cio_ignore_proc_seq_start(struct seq_file *s, loff_t *offset) |
267 | { | 267 | { |
268 | struct ccwdev_iter *iter; | 268 | struct ccwdev_iter *iter = s->private; |
269 | 269 | ||
270 | if (*offset >= (__MAX_SUBCHANNEL + 1) * (__MAX_SSID + 1)) | 270 | if (*offset >= (__MAX_SUBCHANNEL + 1) * (__MAX_SSID + 1)) |
271 | return NULL; | 271 | return NULL; |
272 | iter = kzalloc(sizeof(struct ccwdev_iter), GFP_KERNEL); | 272 | memset(iter, 0, sizeof(*iter)); |
273 | if (!iter) | ||
274 | return ERR_PTR(-ENOMEM); | ||
275 | iter->ssid = *offset / (__MAX_SUBCHANNEL + 1); | 273 | iter->ssid = *offset / (__MAX_SUBCHANNEL + 1); |
276 | iter->devno = *offset % (__MAX_SUBCHANNEL + 1); | 274 | iter->devno = *offset % (__MAX_SUBCHANNEL + 1); |
277 | return iter; | 275 | return iter; |
@@ -280,8 +278,6 @@ cio_ignore_proc_seq_start(struct seq_file *s, loff_t *offset) | |||
280 | static void | 278 | static void |
281 | cio_ignore_proc_seq_stop(struct seq_file *s, void *it) | 279 | cio_ignore_proc_seq_stop(struct seq_file *s, void *it) |
282 | { | 280 | { |
283 | if (!IS_ERR(it)) | ||
284 | kfree(it); | ||
285 | } | 281 | } |
286 | 282 | ||
287 | static void * | 283 | static void * |
@@ -378,14 +374,15 @@ static const struct seq_operations cio_ignore_proc_seq_ops = { | |||
378 | static int | 374 | static int |
379 | cio_ignore_proc_open(struct inode *inode, struct file *file) | 375 | cio_ignore_proc_open(struct inode *inode, struct file *file) |
380 | { | 376 | { |
381 | return seq_open(file, &cio_ignore_proc_seq_ops); | 377 | return seq_open_private(file, &cio_ignore_proc_seq_ops, |
378 | sizeof(struct ccwdev_iter)); | ||
382 | } | 379 | } |
383 | 380 | ||
384 | static const struct file_operations cio_ignore_proc_fops = { | 381 | static const struct file_operations cio_ignore_proc_fops = { |
385 | .open = cio_ignore_proc_open, | 382 | .open = cio_ignore_proc_open, |
386 | .read = seq_read, | 383 | .read = seq_read, |
387 | .llseek = seq_lseek, | 384 | .llseek = seq_lseek, |
388 | .release = seq_release, | 385 | .release = seq_release_private, |
389 | .write = cio_ignore_write, | 386 | .write = cio_ignore_write, |
390 | }; | 387 | }; |
391 | 388 | ||
diff --git a/drivers/s390/cio/chp.c b/drivers/s390/cio/chp.c index 40002830d48a..8ab51608da55 100644 --- a/drivers/s390/cio/chp.c +++ b/drivers/s390/cio/chp.c | |||
@@ -393,7 +393,6 @@ int chp_new(struct chp_id chpid) | |||
393 | chp->state = 1; | 393 | chp->state = 1; |
394 | chp->dev.parent = &channel_subsystems[chpid.cssid]->device; | 394 | chp->dev.parent = &channel_subsystems[chpid.cssid]->device; |
395 | chp->dev.release = chp_release; | 395 | chp->dev.release = chp_release; |
396 | dev_set_name(&chp->dev, "chp%x.%02x", chpid.cssid, chpid.id); | ||
397 | 396 | ||
398 | /* Obtain channel path description and fill it in. */ | 397 | /* Obtain channel path description and fill it in. */ |
399 | ret = chsc_determine_base_channel_path_desc(chpid, &chp->desc); | 398 | ret = chsc_determine_base_channel_path_desc(chpid, &chp->desc); |
@@ -411,6 +410,7 @@ int chp_new(struct chp_id chpid) | |||
411 | } else { | 410 | } else { |
412 | chp->cmg = -1; | 411 | chp->cmg = -1; |
413 | } | 412 | } |
413 | dev_set_name(&chp->dev, "chp%x.%02x", chpid.cssid, chpid.id); | ||
414 | 414 | ||
415 | /* make it known to the system */ | 415 | /* make it known to the system */ |
416 | ret = device_register(&chp->dev); | 416 | ret = device_register(&chp->dev); |
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index f780bdd3a04e..2ee093ec86e4 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
@@ -1609,7 +1609,7 @@ int ccw_purge_blacklisted(void) | |||
1609 | return 0; | 1609 | return 0; |
1610 | } | 1610 | } |
1611 | 1611 | ||
1612 | static void device_set_disconnected(struct ccw_device *cdev) | 1612 | void ccw_device_set_disconnected(struct ccw_device *cdev) |
1613 | { | 1613 | { |
1614 | if (!cdev) | 1614 | if (!cdev) |
1615 | return; | 1615 | return; |
@@ -1705,7 +1705,7 @@ static int io_subchannel_sch_event(struct subchannel *sch, int slow) | |||
1705 | ccw_device_trigger_reprobe(cdev); | 1705 | ccw_device_trigger_reprobe(cdev); |
1706 | break; | 1706 | break; |
1707 | case DISC: | 1707 | case DISC: |
1708 | device_set_disconnected(cdev); | 1708 | ccw_device_set_disconnected(cdev); |
1709 | break; | 1709 | break; |
1710 | default: | 1710 | default: |
1711 | break; | 1711 | break; |
diff --git a/drivers/s390/cio/device.h b/drivers/s390/cio/device.h index ed39a2caaf47..246c6482842c 100644 --- a/drivers/s390/cio/device.h +++ b/drivers/s390/cio/device.h | |||
@@ -125,6 +125,7 @@ int ccw_device_stlck(struct ccw_device *); | |||
125 | void ccw_device_trigger_reprobe(struct ccw_device *); | 125 | void ccw_device_trigger_reprobe(struct ccw_device *); |
126 | void ccw_device_kill_io(struct ccw_device *); | 126 | void ccw_device_kill_io(struct ccw_device *); |
127 | int ccw_device_notify(struct ccw_device *, int); | 127 | int ccw_device_notify(struct ccw_device *, int); |
128 | void ccw_device_set_disconnected(struct ccw_device *cdev); | ||
128 | void ccw_device_set_notoper(struct ccw_device *cdev); | 129 | void ccw_device_set_notoper(struct ccw_device *cdev); |
129 | 130 | ||
130 | /* qdio needs this. */ | 131 | /* qdio needs this. */ |
diff --git a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c index e728ce447f6e..b9613d7df9ef 100644 --- a/drivers/s390/cio/device_fsm.c +++ b/drivers/s390/cio/device_fsm.c | |||
@@ -387,19 +387,35 @@ ccw_device_done(struct ccw_device *cdev, int state) | |||
387 | 387 | ||
388 | cdev->private->state = state; | 388 | cdev->private->state = state; |
389 | 389 | ||
390 | if (state == DEV_STATE_BOXED) { | 390 | switch (state) { |
391 | case DEV_STATE_BOXED: | ||
391 | CIO_MSG_EVENT(0, "Boxed device %04x on subchannel %04x\n", | 392 | CIO_MSG_EVENT(0, "Boxed device %04x on subchannel %04x\n", |
392 | cdev->private->dev_id.devno, sch->schid.sch_no); | 393 | cdev->private->dev_id.devno, sch->schid.sch_no); |
393 | if (cdev->online && !ccw_device_notify(cdev, CIO_BOXED)) | 394 | if (cdev->online && !ccw_device_notify(cdev, CIO_BOXED)) |
394 | ccw_device_schedule_sch_unregister(cdev); | 395 | ccw_device_schedule_sch_unregister(cdev); |
395 | cdev->private->flags.donotify = 0; | 396 | cdev->private->flags.donotify = 0; |
396 | } | 397 | break; |
397 | if (state == DEV_STATE_NOT_OPER) { | 398 | case DEV_STATE_NOT_OPER: |
398 | CIO_MSG_EVENT(0, "Device %04x gone on subchannel %04x\n", | 399 | CIO_MSG_EVENT(0, "Device %04x gone on subchannel %04x\n", |
399 | cdev->private->dev_id.devno, sch->schid.sch_no); | 400 | cdev->private->dev_id.devno, sch->schid.sch_no); |
400 | if (!ccw_device_notify(cdev, CIO_GONE)) | 401 | if (!ccw_device_notify(cdev, CIO_GONE)) |
401 | ccw_device_schedule_sch_unregister(cdev); | 402 | ccw_device_schedule_sch_unregister(cdev); |
403 | else | ||
404 | ccw_device_set_disconnected(cdev); | ||
402 | cdev->private->flags.donotify = 0; | 405 | cdev->private->flags.donotify = 0; |
406 | break; | ||
407 | case DEV_STATE_DISCONNECTED: | ||
408 | CIO_MSG_EVENT(0, "Disconnected device %04x on subchannel " | ||
409 | "%04x\n", cdev->private->dev_id.devno, | ||
410 | sch->schid.sch_no); | ||
411 | if (!ccw_device_notify(cdev, CIO_NO_PATH)) | ||
412 | ccw_device_schedule_sch_unregister(cdev); | ||
413 | else | ||
414 | ccw_device_set_disconnected(cdev); | ||
415 | cdev->private->flags.donotify = 0; | ||
416 | break; | ||
417 | default: | ||
418 | break; | ||
403 | } | 419 | } |
404 | 420 | ||
405 | if (cdev->private->flags.donotify) { | 421 | if (cdev->private->flags.donotify) { |
@@ -671,6 +687,10 @@ ccw_device_offline(struct ccw_device *cdev) | |||
671 | ccw_device_done(cdev, DEV_STATE_NOT_OPER); | 687 | ccw_device_done(cdev, DEV_STATE_NOT_OPER); |
672 | return 0; | 688 | return 0; |
673 | } | 689 | } |
690 | if (cdev->private->state == DEV_STATE_BOXED) { | ||
691 | ccw_device_done(cdev, DEV_STATE_BOXED); | ||
692 | return 0; | ||
693 | } | ||
674 | if (ccw_device_is_orphan(cdev)) { | 694 | if (ccw_device_is_orphan(cdev)) { |
675 | ccw_device_done(cdev, DEV_STATE_OFFLINE); | 695 | ccw_device_done(cdev, DEV_STATE_OFFLINE); |
676 | return 0; | 696 | return 0; |
@@ -730,11 +750,10 @@ ccw_device_recog_notoper(struct ccw_device *cdev, enum dev_event dev_event) | |||
730 | static void ccw_device_generic_notoper(struct ccw_device *cdev, | 750 | static void ccw_device_generic_notoper(struct ccw_device *cdev, |
731 | enum dev_event dev_event) | 751 | enum dev_event dev_event) |
732 | { | 752 | { |
733 | struct subchannel *sch; | 753 | if (!ccw_device_notify(cdev, CIO_GONE)) |
734 | 754 | ccw_device_schedule_sch_unregister(cdev); | |
735 | ccw_device_set_notoper(cdev); | 755 | else |
736 | sch = to_subchannel(cdev->dev.parent); | 756 | ccw_device_set_disconnected(cdev); |
737 | css_schedule_eval(sch->schid); | ||
738 | } | 757 | } |
739 | 758 | ||
740 | /* | 759 | /* |
diff --git a/drivers/s390/crypto/zcrypt_pcixcc.c b/drivers/s390/crypto/zcrypt_pcixcc.c index c20d4790258e..5677b40e4ac0 100644 --- a/drivers/s390/crypto/zcrypt_pcixcc.c +++ b/drivers/s390/crypto/zcrypt_pcixcc.c | |||
@@ -361,7 +361,7 @@ static void rng_type6CPRB_msgX(struct ap_device *ap_dev, | |||
361 | .ToCardLen1 = sizeof *msg - sizeof(msg->hdr), | 361 | .ToCardLen1 = sizeof *msg - sizeof(msg->hdr), |
362 | .FromCardLen1 = sizeof *msg - sizeof(msg->hdr), | 362 | .FromCardLen1 = sizeof *msg - sizeof(msg->hdr), |
363 | }; | 363 | }; |
364 | static struct CPRBX static_cprbx = { | 364 | static struct CPRBX local_cprbx = { |
365 | .cprb_len = 0x00dc, | 365 | .cprb_len = 0x00dc, |
366 | .cprb_ver_id = 0x02, | 366 | .cprb_ver_id = 0x02, |
367 | .func_id = {0x54, 0x32}, | 367 | .func_id = {0x54, 0x32}, |
@@ -372,7 +372,7 @@ static void rng_type6CPRB_msgX(struct ap_device *ap_dev, | |||
372 | 372 | ||
373 | msg->hdr = static_type6_hdrX; | 373 | msg->hdr = static_type6_hdrX; |
374 | msg->hdr.FromCardLen2 = random_number_length, | 374 | msg->hdr.FromCardLen2 = random_number_length, |
375 | msg->cprbx = static_cprbx; | 375 | msg->cprbx = local_cprbx; |
376 | msg->cprbx.rpl_datal = random_number_length, | 376 | msg->cprbx.rpl_datal = random_number_length, |
377 | msg->cprbx.domain = AP_QID_QUEUE(ap_dev->qid); | 377 | msg->cprbx.domain = AP_QID_QUEUE(ap_dev->qid); |
378 | memcpy(msg->function_code, msg->hdr.function_code, 0x02); | 378 | memcpy(msg->function_code, msg->hdr.function_code, 0x02); |
@@ -561,7 +561,8 @@ static int convert_response_ica(struct zcrypt_device *zdev, | |||
561 | if (msg->cprbx.cprb_ver_id == 0x02) | 561 | if (msg->cprbx.cprb_ver_id == 0x02) |
562 | return convert_type86_ica(zdev, reply, | 562 | return convert_type86_ica(zdev, reply, |
563 | outputdata, outputdatalength); | 563 | outputdata, outputdatalength); |
564 | /* no break, incorrect cprb version is an unknown response */ | 564 | /* Fall through, no break, incorrect cprb version is an unknown |
565 | * response */ | ||
565 | default: /* Unknown response type, this should NEVER EVER happen */ | 566 | default: /* Unknown response type, this should NEVER EVER happen */ |
566 | zdev->online = 0; | 567 | zdev->online = 0; |
567 | return -EAGAIN; /* repeat the request on a different device. */ | 568 | return -EAGAIN; /* repeat the request on a different device. */ |
@@ -587,7 +588,8 @@ static int convert_response_xcrb(struct zcrypt_device *zdev, | |||
587 | } | 588 | } |
588 | if (msg->cprbx.cprb_ver_id == 0x02) | 589 | if (msg->cprbx.cprb_ver_id == 0x02) |
589 | return convert_type86_xcrb(zdev, reply, xcRB); | 590 | return convert_type86_xcrb(zdev, reply, xcRB); |
590 | /* no break, incorrect cprb version is an unknown response */ | 591 | /* Fall through, no break, incorrect cprb version is an unknown |
592 | * response */ | ||
591 | default: /* Unknown response type, this should NEVER EVER happen */ | 593 | default: /* Unknown response type, this should NEVER EVER happen */ |
592 | xcRB->status = 0x0008044DL; /* HDD_InvalidParm */ | 594 | xcRB->status = 0x0008044DL; /* HDD_InvalidParm */ |
593 | zdev->online = 0; | 595 | zdev->online = 0; |
@@ -610,7 +612,8 @@ static int convert_response_rng(struct zcrypt_device *zdev, | |||
610 | return -EINVAL; | 612 | return -EINVAL; |
611 | if (msg->cprbx.cprb_ver_id == 0x02) | 613 | if (msg->cprbx.cprb_ver_id == 0x02) |
612 | return convert_type86_rng(zdev, reply, data); | 614 | return convert_type86_rng(zdev, reply, data); |
613 | /* no break, incorrect cprb version is an unknown response */ | 615 | /* Fall through, no break, incorrect cprb version is an unknown |
616 | * response */ | ||
614 | default: /* Unknown response type, this should NEVER EVER happen */ | 617 | default: /* Unknown response type, this should NEVER EVER happen */ |
615 | zdev->online = 0; | 618 | zdev->online = 0; |
616 | return -EAGAIN; /* repeat the request on a different device. */ | 619 | return -EAGAIN; /* repeat the request on a different device. */ |