1 /* 2 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> 3 * Horst Hummel <Horst.Hummel@de.ibm.com> 4 * Carsten Otte <Cotte@de.ibm.com> 5 * Martin Schwidefsky <schwidefsky@de.ibm.com> 6 * Bugreports.to..: <Linux390@de.ibm.com> 7 * Copyright IBM Corp. 1999, 2009 8 */ 9 10 #define KMSG_COMPONENT "dasd" 11 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt 12 13 #include <linux/kmod.h> 14 #include <linux/init.h> 15 #include <linux/interrupt.h> 16 #include <linux/ctype.h> 17 #include <linux/major.h> 18 #include <linux/slab.h> 19 #include <linux/hdreg.h> 20 #include <linux/async.h> 21 #include <linux/mutex.h> 22 #include <linux/debugfs.h> 23 #include <linux/seq_file.h> 24 #include <linux/vmalloc.h> 25 26 #include <asm/ccwdev.h> 27 #include <asm/ebcdic.h> 28 #include <asm/idals.h> 29 #include <asm/itcw.h> 30 #include <asm/diag.h> 31 32 /* This is ugly... */ 33 #define PRINTK_HEADER "dasd:" 34 35 #include "dasd_int.h" 36 /* 37 * SECTION: Constant definitions to be used within this file 38 */ 39 #define DASD_CHANQ_MAX_SIZE 4 40 41 #define DASD_DIAG_MOD "dasd_diag_mod" 42 43 /* 44 * SECTION: exported variables of dasd.c 45 */ 46 debug_info_t *dasd_debug_area; 47 EXPORT_SYMBOL(dasd_debug_area); 48 static struct dentry *dasd_debugfs_root_entry; 49 struct dasd_discipline *dasd_diag_discipline_pointer; 50 EXPORT_SYMBOL(dasd_diag_discipline_pointer); 51 void dasd_int_handler(struct ccw_device *, unsigned long, struct irb *); 52 53 MODULE_AUTHOR("Holger Smolinski <Holger.Smolinski@de.ibm.com>"); 54 MODULE_DESCRIPTION("Linux on S/390 DASD device driver," 55 " Copyright IBM Corp. 2000"); 56 MODULE_SUPPORTED_DEVICE("dasd"); 57 MODULE_LICENSE("GPL"); 58 59 /* 60 * SECTION: prototypes for static functions of dasd.c 61 */ 62 static int dasd_alloc_queue(struct dasd_block *); 63 static void dasd_setup_queue(struct dasd_block *); 64 static void dasd_free_queue(struct dasd_block *); 65 static int dasd_flush_block_queue(struct dasd_block *); 66 static void dasd_device_tasklet(struct dasd_device *); 67 static void dasd_block_tasklet(struct dasd_block *); 68 static void do_kick_device(struct work_struct *); 69 static void do_restore_device(struct work_struct *); 70 static void do_reload_device(struct work_struct *); 71 static void do_requeue_requests(struct work_struct *); 72 static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *); 73 static void dasd_device_timeout(unsigned long); 74 static void dasd_block_timeout(unsigned long); 75 static void __dasd_process_erp(struct dasd_device *, struct dasd_ccw_req *); 76 static void dasd_profile_init(struct dasd_profile *, struct dentry *); 77 static void dasd_profile_exit(struct dasd_profile *); 78 static void dasd_hosts_init(struct dentry *, struct dasd_device *); 79 static void dasd_hosts_exit(struct dasd_device *); 80 81 /* 82 * SECTION: Operations on the device structure. 83 */ 84 static wait_queue_head_t dasd_init_waitq; 85 static wait_queue_head_t dasd_flush_wq; 86 static wait_queue_head_t generic_waitq; 87 static wait_queue_head_t shutdown_waitq; 88 89 /* 90 * Allocate memory for a new device structure. 91 */ 92 struct dasd_device *dasd_alloc_device(void) 93 { 94 struct dasd_device *device; 95 96 device = kzalloc(sizeof(struct dasd_device), GFP_ATOMIC); 97 if (!device) 98 return ERR_PTR(-ENOMEM); 99 100 /* Get two pages for normal block device operations. */ 101 device->ccw_mem = (void *) __get_free_pages(GFP_ATOMIC | GFP_DMA, 1); 102 if (!device->ccw_mem) { 103 kfree(device); 104 return ERR_PTR(-ENOMEM); 105 } 106 /* Get one page for error recovery. */ 107 device->erp_mem = (void *) get_zeroed_page(GFP_ATOMIC | GFP_DMA); 108 if (!device->erp_mem) { 109 free_pages((unsigned long) device->ccw_mem, 1); 110 kfree(device); 111 return ERR_PTR(-ENOMEM); 112 } 113 114 dasd_init_chunklist(&device->ccw_chunks, device->ccw_mem, PAGE_SIZE*2); 115 dasd_init_chunklist(&device->erp_chunks, device->erp_mem, PAGE_SIZE); 116 spin_lock_init(&device->mem_lock); 117 atomic_set(&device->tasklet_scheduled, 0); 118 tasklet_init(&device->tasklet, 119 (void (*)(unsigned long)) dasd_device_tasklet, 120 (unsigned long) device); 121 INIT_LIST_HEAD(&device->ccw_queue); 122 init_timer(&device->timer); 123 device->timer.function = dasd_device_timeout; 124 device->timer.data = (unsigned long) device; 125 INIT_WORK(&device->kick_work, do_kick_device); 126 INIT_WORK(&device->restore_device, do_restore_device); 127 INIT_WORK(&device->reload_device, do_reload_device); 128 INIT_WORK(&device->requeue_requests, do_requeue_requests); 129 device->state = DASD_STATE_NEW; 130 device->target = DASD_STATE_NEW; 131 mutex_init(&device->state_mutex); 132 spin_lock_init(&device->profile.lock); 133 return device; 134 } 135 136 /* 137 * Free memory of a device structure. 138 */ 139 void dasd_free_device(struct dasd_device *device) 140 { 141 kfree(device->private); 142 free_page((unsigned long) device->erp_mem); 143 free_pages((unsigned long) device->ccw_mem, 1); 144 kfree(device); 145 } 146 147 /* 148 * Allocate memory for a new device structure. 149 */ 150 struct dasd_block *dasd_alloc_block(void) 151 { 152 struct dasd_block *block; 153 154 block = kzalloc(sizeof(*block), GFP_ATOMIC); 155 if (!block) 156 return ERR_PTR(-ENOMEM); 157 /* open_count = 0 means device online but not in use */ 158 atomic_set(&block->open_count, -1); 159 160 atomic_set(&block->tasklet_scheduled, 0); 161 tasklet_init(&block->tasklet, 162 (void (*)(unsigned long)) dasd_block_tasklet, 163 (unsigned long) block); 164 INIT_LIST_HEAD(&block->ccw_queue); 165 spin_lock_init(&block->queue_lock); 166 init_timer(&block->timer); 167 block->timer.function = dasd_block_timeout; 168 block->timer.data = (unsigned long) block; 169 spin_lock_init(&block->profile.lock); 170 171 return block; 172 } 173 EXPORT_SYMBOL_GPL(dasd_alloc_block); 174 175 /* 176 * Free memory of a device structure. 177 */ 178 void dasd_free_block(struct dasd_block *block) 179 { 180 kfree(block); 181 } 182 EXPORT_SYMBOL_GPL(dasd_free_block); 183 184 /* 185 * Make a new device known to the system. 186 */ 187 static int dasd_state_new_to_known(struct dasd_device *device) 188 { 189 int rc; 190 191 /* 192 * As long as the device is not in state DASD_STATE_NEW we want to 193 * keep the reference count > 0. 194 */ 195 dasd_get_device(device); 196 197 if (device->block) { 198 rc = dasd_alloc_queue(device->block); 199 if (rc) { 200 dasd_put_device(device); 201 return rc; 202 } 203 } 204 device->state = DASD_STATE_KNOWN; 205 return 0; 206 } 207 208 /* 209 * Let the system forget about a device. 210 */ 211 static int dasd_state_known_to_new(struct dasd_device *device) 212 { 213 /* Disable extended error reporting for this device. */ 214 dasd_eer_disable(device); 215 device->state = DASD_STATE_NEW; 216 217 if (device->block) 218 dasd_free_queue(device->block); 219 220 /* Give up reference we took in dasd_state_new_to_known. */ 221 dasd_put_device(device); 222 return 0; 223 } 224 225 static struct dentry *dasd_debugfs_setup(const char *name, 226 struct dentry *base_dentry) 227 { 228 struct dentry *pde; 229 230 if (!base_dentry) 231 return NULL; 232 pde = debugfs_create_dir(name, base_dentry); 233 if (!pde || IS_ERR(pde)) 234 return NULL; 235 return pde; 236 } 237 238 /* 239 * Request the irq line for the device. 240 */ 241 static int dasd_state_known_to_basic(struct dasd_device *device) 242 { 243 struct dasd_block *block = device->block; 244 int rc = 0; 245 246 /* Allocate and register gendisk structure. */ 247 if (block) { 248 rc = dasd_gendisk_alloc(block); 249 if (rc) 250 return rc; 251 block->debugfs_dentry = 252 dasd_debugfs_setup(block->gdp->disk_name, 253 dasd_debugfs_root_entry); 254 dasd_profile_init(&block->profile, block->debugfs_dentry); 255 if (dasd_global_profile_level == DASD_PROFILE_ON) 256 dasd_profile_on(&device->block->profile); 257 } 258 device->debugfs_dentry = 259 dasd_debugfs_setup(dev_name(&device->cdev->dev), 260 dasd_debugfs_root_entry); 261 dasd_profile_init(&device->profile, device->debugfs_dentry); 262 dasd_hosts_init(device->debugfs_dentry, device); 263 264 /* register 'device' debug area, used for all DBF_DEV_XXX calls */ 265 device->debug_area = debug_register(dev_name(&device->cdev->dev), 4, 1, 266 8 * sizeof(long)); 267 debug_register_view(device->debug_area, &debug_sprintf_view); 268 debug_set_level(device->debug_area, DBF_WARNING); 269 DBF_DEV_EVENT(DBF_EMERG, device, "%s", "debug area created"); 270 271 device->state = DASD_STATE_BASIC; 272 273 return rc; 274 } 275 276 /* 277 * Release the irq line for the device. Terminate any running i/o. 278 */ 279 static int dasd_state_basic_to_known(struct dasd_device *device) 280 { 281 int rc; 282 283 if (device->discipline->basic_to_known) { 284 rc = device->discipline->basic_to_known(device); 285 if (rc) 286 return rc; 287 } 288 289 if (device->block) { 290 dasd_profile_exit(&device->block->profile); 291 debugfs_remove(device->block->debugfs_dentry); 292 dasd_gendisk_free(device->block); 293 dasd_block_clear_timer(device->block); 294 } 295 rc = dasd_flush_device_queue(device); 296 if (rc) 297 return rc; 298 dasd_device_clear_timer(device); 299 dasd_profile_exit(&device->profile); 300 dasd_hosts_exit(device); 301 debugfs_remove(device->debugfs_dentry); 302 DBF_DEV_EVENT(DBF_EMERG, device, "%p debug area deleted", device); 303 if (device->debug_area != NULL) { 304 debug_unregister(device->debug_area); 305 device->debug_area = NULL; 306 } 307 device->state = DASD_STATE_KNOWN; 308 return 0; 309 } 310 311 /* 312 * Do the initial analysis. The do_analysis function may return 313 * -EAGAIN in which case the device keeps the state DASD_STATE_BASIC 314 * until the discipline decides to continue the startup sequence 315 * by calling the function dasd_change_state. The eckd disciplines 316 * uses this to start a ccw that detects the format. The completion 317 * interrupt for this detection ccw uses the kernel event daemon to 318 * trigger the call to dasd_change_state. All this is done in the 319 * discipline code, see dasd_eckd.c. 320 * After the analysis ccw is done (do_analysis returned 0) the block 321 * device is setup. 322 * In case the analysis returns an error, the device setup is stopped 323 * (a fake disk was already added to allow formatting). 324 */ 325 static int dasd_state_basic_to_ready(struct dasd_device *device) 326 { 327 int rc; 328 struct dasd_block *block; 329 struct gendisk *disk; 330 331 rc = 0; 332 block = device->block; 333 /* make disk known with correct capacity */ 334 if (block) { 335 if (block->base->discipline->do_analysis != NULL) 336 rc = block->base->discipline->do_analysis(block); 337 if (rc) { 338 if (rc != -EAGAIN) { 339 device->state = DASD_STATE_UNFMT; 340 disk = device->block->gdp; 341 kobject_uevent(&disk_to_dev(disk)->kobj, 342 KOBJ_CHANGE); 343 goto out; 344 } 345 return rc; 346 } 347 dasd_setup_queue(block); 348 set_capacity(block->gdp, 349 block->blocks << block->s2b_shift); 350 device->state = DASD_STATE_READY; 351 rc = dasd_scan_partitions(block); 352 if (rc) { 353 device->state = DASD_STATE_BASIC; 354 return rc; 355 } 356 } else { 357 device->state = DASD_STATE_READY; 358 } 359 out: 360 if (device->discipline->basic_to_ready) 361 rc = device->discipline->basic_to_ready(device); 362 return rc; 363 } 364 365 static inline 366 int _wait_for_empty_queues(struct dasd_device *device) 367 { 368 if (device->block) 369 return list_empty(&device->ccw_queue) && 370 list_empty(&device->block->ccw_queue); 371 else 372 return list_empty(&device->ccw_queue); 373 } 374 375 /* 376 * Remove device from block device layer. Destroy dirty buffers. 377 * Forget format information. Check if the target level is basic 378 * and if it is create fake disk for formatting. 379 */ 380 static int dasd_state_ready_to_basic(struct dasd_device *device) 381 { 382 int rc; 383 384 device->state = DASD_STATE_BASIC; 385 if (device->block) { 386 struct dasd_block *block = device->block; 387 rc = dasd_flush_block_queue(block); 388 if (rc) { 389 device->state = DASD_STATE_READY; 390 return rc; 391 } 392 dasd_destroy_partitions(block); 393 block->blocks = 0; 394 block->bp_block = 0; 395 block->s2b_shift = 0; 396 } 397 return 0; 398 } 399 400 /* 401 * Back to basic. 402 */ 403 static int dasd_state_unfmt_to_basic(struct dasd_device *device) 404 { 405 device->state = DASD_STATE_BASIC; 406 return 0; 407 } 408 409 /* 410 * Make the device online and schedule the bottom half to start 411 * the requeueing of requests from the linux request queue to the 412 * ccw queue. 413 */ 414 static int 415 dasd_state_ready_to_online(struct dasd_device * device) 416 { 417 struct gendisk *disk; 418 struct disk_part_iter piter; 419 struct hd_struct *part; 420 421 device->state = DASD_STATE_ONLINE; 422 if (device->block) { 423 dasd_schedule_block_bh(device->block); 424 if ((device->features & DASD_FEATURE_USERAW)) { 425 disk = device->block->gdp; 426 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); 427 return 0; 428 } 429 disk = device->block->bdev->bd_disk; 430 disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0); 431 while ((part = disk_part_iter_next(&piter))) 432 kobject_uevent(&part_to_dev(part)->kobj, KOBJ_CHANGE); 433 disk_part_iter_exit(&piter); 434 } 435 return 0; 436 } 437 438 /* 439 * Stop the requeueing of requests again. 440 */ 441 static int dasd_state_online_to_ready(struct dasd_device *device) 442 { 443 int rc; 444 struct gendisk *disk; 445 struct disk_part_iter piter; 446 struct hd_struct *part; 447 448 if (device->discipline->online_to_ready) { 449 rc = device->discipline->online_to_ready(device); 450 if (rc) 451 return rc; 452 } 453 454 device->state = DASD_STATE_READY; 455 if (device->block && !(device->features & DASD_FEATURE_USERAW)) { 456 disk = device->block->bdev->bd_disk; 457 disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0); 458 while ((part = disk_part_iter_next(&piter))) 459 kobject_uevent(&part_to_dev(part)->kobj, KOBJ_CHANGE); 460 disk_part_iter_exit(&piter); 461 } 462 return 0; 463 } 464 465 /* 466 * Device startup state changes. 467 */ 468 static int dasd_increase_state(struct dasd_device *device) 469 { 470 int rc; 471 472 rc = 0; 473 if (device->state == DASD_STATE_NEW && 474 device->target >= DASD_STATE_KNOWN) 475 rc = dasd_state_new_to_known(device); 476 477 if (!rc && 478 device->state == DASD_STATE_KNOWN && 479 device->target >= DASD_STATE_BASIC) 480 rc = dasd_state_known_to_basic(device); 481 482 if (!rc && 483 device->state == DASD_STATE_BASIC && 484 device->target >= DASD_STATE_READY) 485 rc = dasd_state_basic_to_ready(device); 486 487 if (!rc && 488 device->state == DASD_STATE_UNFMT && 489 device->target > DASD_STATE_UNFMT) 490 rc = -EPERM; 491 492 if (!rc && 493 device->state == DASD_STATE_READY && 494 device->target >= DASD_STATE_ONLINE) 495 rc = dasd_state_ready_to_online(device); 496 497 return rc; 498 } 499 500 /* 501 * Device shutdown state changes. 502 */ 503 static int dasd_decrease_state(struct dasd_device *device) 504 { 505 int rc; 506 507 rc = 0; 508 if (device->state == DASD_STATE_ONLINE && 509 device->target <= DASD_STATE_READY) 510 rc = dasd_state_online_to_ready(device); 511 512 if (!rc && 513 device->state == DASD_STATE_READY && 514 device->target <= DASD_STATE_BASIC) 515 rc = dasd_state_ready_to_basic(device); 516 517 if (!rc && 518 device->state == DASD_STATE_UNFMT && 519 device->target <= DASD_STATE_BASIC) 520 rc = dasd_state_unfmt_to_basic(device); 521 522 if (!rc && 523 device->state == DASD_STATE_BASIC && 524 device->target <= DASD_STATE_KNOWN) 525 rc = dasd_state_basic_to_known(device); 526 527 if (!rc && 528 device->state == DASD_STATE_KNOWN && 529 device->target <= DASD_STATE_NEW) 530 rc = dasd_state_known_to_new(device); 531 532 return rc; 533 } 534 535 /* 536 * This is the main startup/shutdown routine. 537 */ 538 static void dasd_change_state(struct dasd_device *device) 539 { 540 int rc; 541 542 if (device->state == device->target) 543 /* Already where we want to go today... */ 544 return; 545 if (device->state < device->target) 546 rc = dasd_increase_state(device); 547 else 548 rc = dasd_decrease_state(device); 549 if (rc == -EAGAIN) 550 return; 551 if (rc) 552 device->target = device->state; 553 554 /* let user-space know that the device status changed */ 555 kobject_uevent(&device->cdev->dev.kobj, KOBJ_CHANGE); 556 557 if (device->state == device->target) 558 wake_up(&dasd_init_waitq); 559 } 560 561 /* 562 * Kick starter for devices that did not complete the startup/shutdown 563 * procedure or were sleeping because of a pending state. 564 * dasd_kick_device will schedule a call do do_kick_device to the kernel 565 * event daemon. 566 */ 567 static void do_kick_device(struct work_struct *work) 568 { 569 struct dasd_device *device = container_of(work, struct dasd_device, kick_work); 570 mutex_lock(&device->state_mutex); 571 dasd_change_state(device); 572 mutex_unlock(&device->state_mutex); 573 dasd_schedule_device_bh(device); 574 dasd_put_device(device); 575 } 576 577 void dasd_kick_device(struct dasd_device *device) 578 { 579 dasd_get_device(device); 580 /* queue call to dasd_kick_device to the kernel event daemon. */ 581 if (!schedule_work(&device->kick_work)) 582 dasd_put_device(device); 583 } 584 EXPORT_SYMBOL(dasd_kick_device); 585 586 /* 587 * dasd_reload_device will schedule a call do do_reload_device to the kernel 588 * event daemon. 589 */ 590 static void do_reload_device(struct work_struct *work) 591 { 592 struct dasd_device *device = container_of(work, struct dasd_device, 593 reload_device); 594 device->discipline->reload(device); 595 dasd_put_device(device); 596 } 597 598 void dasd_reload_device(struct dasd_device *device) 599 { 600 dasd_get_device(device); 601 /* queue call to dasd_reload_device to the kernel event daemon. */ 602 if (!schedule_work(&device->reload_device)) 603 dasd_put_device(device); 604 } 605 EXPORT_SYMBOL(dasd_reload_device); 606 607 /* 608 * dasd_restore_device will schedule a call do do_restore_device to the kernel 609 * event daemon. 610 */ 611 static void do_restore_device(struct work_struct *work) 612 { 613 struct dasd_device *device = container_of(work, struct dasd_device, 614 restore_device); 615 device->cdev->drv->restore(device->cdev); 616 dasd_put_device(device); 617 } 618 619 void dasd_restore_device(struct dasd_device *device) 620 { 621 dasd_get_device(device); 622 /* queue call to dasd_restore_device to the kernel event daemon. */ 623 if (!schedule_work(&device->restore_device)) 624 dasd_put_device(device); 625 } 626 627 /* 628 * Set the target state for a device and starts the state change. 629 */ 630 void dasd_set_target_state(struct dasd_device *device, int target) 631 { 632 dasd_get_device(device); 633 mutex_lock(&device->state_mutex); 634 /* If we are in probeonly mode stop at DASD_STATE_READY. */ 635 if (dasd_probeonly && target > DASD_STATE_READY) 636 target = DASD_STATE_READY; 637 if (device->target != target) { 638 if (device->state == target) 639 wake_up(&dasd_init_waitq); 640 device->target = target; 641 } 642 if (device->state != device->target) 643 dasd_change_state(device); 644 mutex_unlock(&device->state_mutex); 645 dasd_put_device(device); 646 } 647 EXPORT_SYMBOL(dasd_set_target_state); 648 649 /* 650 * Enable devices with device numbers in [from..to]. 651 */ 652 static inline int _wait_for_device(struct dasd_device *device) 653 { 654 return (device->state == device->target); 655 } 656 657 void dasd_enable_device(struct dasd_device *device) 658 { 659 dasd_set_target_state(device, DASD_STATE_ONLINE); 660 if (device->state <= DASD_STATE_KNOWN) 661 /* No discipline for device found. */ 662 dasd_set_target_state(device, DASD_STATE_NEW); 663 /* Now wait for the devices to come up. */ 664 wait_event(dasd_init_waitq, _wait_for_device(device)); 665 666 dasd_reload_device(device); 667 if (device->discipline->kick_validate) 668 device->discipline->kick_validate(device); 669 } 670 EXPORT_SYMBOL(dasd_enable_device); 671 672 /* 673 * SECTION: device operation (interrupt handler, start i/o, term i/o ...) 674 */ 675 676 unsigned int dasd_global_profile_level = DASD_PROFILE_OFF; 677 678 #ifdef CONFIG_DASD_PROFILE 679 struct dasd_profile dasd_global_profile = { 680 .lock = __SPIN_LOCK_UNLOCKED(dasd_global_profile.lock), 681 }; 682 static struct dentry *dasd_debugfs_global_entry; 683 684 /* 685 * Add profiling information for cqr before execution. 686 */ 687 static void dasd_profile_start(struct dasd_block *block, 688 struct dasd_ccw_req *cqr, 689 struct request *req) 690 { 691 struct list_head *l; 692 unsigned int counter; 693 struct dasd_device *device; 694 695 /* count the length of the chanq for statistics */ 696 counter = 0; 697 if (dasd_global_profile_level || block->profile.data) 698 list_for_each(l, &block->ccw_queue) 699 if (++counter >= 31) 700 break; 701 702 spin_lock(&dasd_global_profile.lock); 703 if (dasd_global_profile.data) { 704 dasd_global_profile.data->dasd_io_nr_req[counter]++; 705 if (rq_data_dir(req) == READ) 706 dasd_global_profile.data->dasd_read_nr_req[counter]++; 707 } 708 spin_unlock(&dasd_global_profile.lock); 709 710 spin_lock(&block->profile.lock); 711 if (block->profile.data) { 712 block->profile.data->dasd_io_nr_req[counter]++; 713 if (rq_data_dir(req) == READ) 714 block->profile.data->dasd_read_nr_req[counter]++; 715 } 716 spin_unlock(&block->profile.lock); 717 718 /* 719 * We count the request for the start device, even though it may run on 720 * some other device due to error recovery. This way we make sure that 721 * we count each request only once. 722 */ 723 device = cqr->startdev; 724 if (device->profile.data) { 725 counter = 1; /* request is not yet queued on the start device */ 726 list_for_each(l, &device->ccw_queue) 727 if (++counter >= 31) 728 break; 729 } 730 spin_lock(&device->profile.lock); 731 if (device->profile.data) { 732 device->profile.data->dasd_io_nr_req[counter]++; 733 if (rq_data_dir(req) == READ) 734 device->profile.data->dasd_read_nr_req[counter]++; 735 } 736 spin_unlock(&device->profile.lock); 737 } 738 739 /* 740 * Add profiling information for cqr after execution. 741 */ 742 743 #define dasd_profile_counter(value, index) \ 744 { \ 745 for (index = 0; index < 31 && value >> (2+index); index++) \ 746 ; \ 747 } 748 749 static void dasd_profile_end_add_data(struct dasd_profile_info *data, 750 int is_alias, 751 int is_tpm, 752 int is_read, 753 long sectors, 754 int sectors_ind, 755 int tottime_ind, 756 int tottimeps_ind, 757 int strtime_ind, 758 int irqtime_ind, 759 int irqtimeps_ind, 760 int endtime_ind) 761 { 762 /* in case of an overflow, reset the whole profile */ 763 if (data->dasd_io_reqs == UINT_MAX) { 764 memset(data, 0, sizeof(*data)); 765 getnstimeofday(&data->starttod); 766 } 767 data->dasd_io_reqs++; 768 data->dasd_io_sects += sectors; 769 if (is_alias) 770 data->dasd_io_alias++; 771 if (is_tpm) 772 data->dasd_io_tpm++; 773 774 data->dasd_io_secs[sectors_ind]++; 775 data->dasd_io_times[tottime_ind]++; 776 data->dasd_io_timps[tottimeps_ind]++; 777 data->dasd_io_time1[strtime_ind]++; 778 data->dasd_io_time2[irqtime_ind]++; 779 data->dasd_io_time2ps[irqtimeps_ind]++; 780 data->dasd_io_time3[endtime_ind]++; 781 782 if (is_read) { 783 data->dasd_read_reqs++; 784 data->dasd_read_sects += sectors; 785 if (is_alias) 786 data->dasd_read_alias++; 787 if (is_tpm) 788 data->dasd_read_tpm++; 789 data->dasd_read_secs[sectors_ind]++; 790 data->dasd_read_times[tottime_ind]++; 791 data->dasd_read_time1[strtime_ind]++; 792 data->dasd_read_time2[irqtime_ind]++; 793 data->dasd_read_time3[endtime_ind]++; 794 } 795 } 796 797 static void dasd_profile_end(struct dasd_block *block, 798 struct dasd_ccw_req *cqr, 799 struct request *req) 800 { 801 unsigned long strtime, irqtime, endtime, tottime; 802 unsigned long tottimeps, sectors; 803 struct dasd_device *device; 804 int sectors_ind, tottime_ind, tottimeps_ind, strtime_ind; 805 int irqtime_ind, irqtimeps_ind, endtime_ind; 806 struct dasd_profile_info *data; 807 808 device = cqr->startdev; 809 if (!(dasd_global_profile_level || 810 block->profile.data || 811 device->profile.data)) 812 return; 813 814 sectors = blk_rq_sectors(req); 815 if (!cqr->buildclk || !cqr->startclk || 816 !cqr->stopclk || !cqr->endclk || 817 !sectors) 818 return; 819 820 strtime = ((cqr->startclk - cqr->buildclk) >> 12); 821 irqtime = ((cqr->stopclk - cqr->startclk) >> 12); 822 endtime = ((cqr->endclk - cqr->stopclk) >> 12); 823 tottime = ((cqr->endclk - cqr->buildclk) >> 12); 824 tottimeps = tottime / sectors; 825 826 dasd_profile_counter(sectors, sectors_ind); 827 dasd_profile_counter(tottime, tottime_ind); 828 dasd_profile_counter(tottimeps, tottimeps_ind); 829 dasd_profile_counter(strtime, strtime_ind); 830 dasd_profile_counter(irqtime, irqtime_ind); 831 dasd_profile_counter(irqtime / sectors, irqtimeps_ind); 832 dasd_profile_counter(endtime, endtime_ind); 833 834 spin_lock(&dasd_global_profile.lock); 835 if (dasd_global_profile.data) { 836 data = dasd_global_profile.data; 837 data->dasd_sum_times += tottime; 838 data->dasd_sum_time_str += strtime; 839 data->dasd_sum_time_irq += irqtime; 840 data->dasd_sum_time_end += endtime; 841 dasd_profile_end_add_data(dasd_global_profile.data, 842 cqr->startdev != block->base, 843 cqr->cpmode == 1, 844 rq_data_dir(req) == READ, 845 sectors, sectors_ind, tottime_ind, 846 tottimeps_ind, strtime_ind, 847 irqtime_ind, irqtimeps_ind, 848 endtime_ind); 849 } 850 spin_unlock(&dasd_global_profile.lock); 851 852 spin_lock(&block->profile.lock); 853 if (block->profile.data) { 854 data = block->profile.data; 855 data->dasd_sum_times += tottime; 856 data->dasd_sum_time_str += strtime; 857 data->dasd_sum_time_irq += irqtime; 858 data->dasd_sum_time_end += endtime; 859 dasd_profile_end_add_data(block->profile.data, 860 cqr->startdev != block->base, 861 cqr->cpmode == 1, 862 rq_data_dir(req) == READ, 863 sectors, sectors_ind, tottime_ind, 864 tottimeps_ind, strtime_ind, 865 irqtime_ind, irqtimeps_ind, 866 endtime_ind); 867 } 868 spin_unlock(&block->profile.lock); 869 870 spin_lock(&device->profile.lock); 871 if (device->profile.data) { 872 data = device->profile.data; 873 data->dasd_sum_times += tottime; 874 data->dasd_sum_time_str += strtime; 875 data->dasd_sum_time_irq += irqtime; 876 data->dasd_sum_time_end += endtime; 877 dasd_profile_end_add_data(device->profile.data, 878 cqr->startdev != block->base, 879 cqr->cpmode == 1, 880 rq_data_dir(req) == READ, 881 sectors, sectors_ind, tottime_ind, 882 tottimeps_ind, strtime_ind, 883 irqtime_ind, irqtimeps_ind, 884 endtime_ind); 885 } 886 spin_unlock(&device->profile.lock); 887 } 888 889 void dasd_profile_reset(struct dasd_profile *profile) 890 { 891 struct dasd_profile_info *data; 892 893 spin_lock_bh(&profile->lock); 894 data = profile->data; 895 if (!data) { 896 spin_unlock_bh(&profile->lock); 897 return; 898 } 899 memset(data, 0, sizeof(*data)); 900 getnstimeofday(&data->starttod); 901 spin_unlock_bh(&profile->lock); 902 } 903 904 int dasd_profile_on(struct dasd_profile *profile) 905 { 906 struct dasd_profile_info *data; 907 908 data = kzalloc(sizeof(*data), GFP_KERNEL); 909 if (!data) 910 return -ENOMEM; 911 spin_lock_bh(&profile->lock); 912 if (profile->data) { 913 spin_unlock_bh(&profile->lock); 914 kfree(data); 915 return 0; 916 } 917 getnstimeofday(&data->starttod); 918 profile->data = data; 919 spin_unlock_bh(&profile->lock); 920 return 0; 921 } 922 923 void dasd_profile_off(struct dasd_profile *profile) 924 { 925 spin_lock_bh(&profile->lock); 926 kfree(profile->data); 927 profile->data = NULL; 928 spin_unlock_bh(&profile->lock); 929 } 930 931 char *dasd_get_user_string(const char __user *user_buf, size_t user_len) 932 { 933 char *buffer; 934 935 buffer = vmalloc(user_len + 1); 936 if (buffer == NULL) 937 return ERR_PTR(-ENOMEM); 938 if (copy_from_user(buffer, user_buf, user_len) != 0) { 939 vfree(buffer); 940 return ERR_PTR(-EFAULT); 941 } 942 /* got the string, now strip linefeed. */ 943 if (buffer[user_len - 1] == '\n') 944 buffer[user_len - 1] = 0; 945 else 946 buffer[user_len] = 0; 947 return buffer; 948 } 949 950 static ssize_t dasd_stats_write(struct file *file, 951 const char __user *user_buf, 952 size_t user_len, loff_t *pos) 953 { 954 char *buffer, *str; 955 int rc; 956 struct seq_file *m = (struct seq_file *)file->private_data; 957 struct dasd_profile *prof = m->private; 958 959 if (user_len > 65536) 960 user_len = 65536; 961 buffer = dasd_get_user_string(user_buf, user_len); 962 if (IS_ERR(buffer)) 963 return PTR_ERR(buffer); 964 965 str = skip_spaces(buffer); 966 rc = user_len; 967 if (strncmp(str, "reset", 5) == 0) { 968 dasd_profile_reset(prof); 969 } else if (strncmp(str, "on", 2) == 0) { 970 rc = dasd_profile_on(prof); 971 if (rc) 972 goto out; 973 rc = user_len; 974 if (prof == &dasd_global_profile) { 975 dasd_profile_reset(prof); 976 dasd_global_profile_level = DASD_PROFILE_GLOBAL_ONLY; 977 } 978 } else if (strncmp(str, "off", 3) == 0) { 979 if (prof == &dasd_global_profile) 980 dasd_global_profile_level = DASD_PROFILE_OFF; 981 dasd_profile_off(prof); 982 } else 983 rc = -EINVAL; 984 out: 985 vfree(buffer); 986 return rc; 987 } 988 989 static void dasd_stats_array(struct seq_file *m, unsigned int *array) 990 { 991 int i; 992 993 for (i = 0; i < 32; i++) 994 seq_printf(m, "%u ", array[i]); 995 seq_putc(m, '\n'); 996 } 997 998 static void dasd_stats_seq_print(struct seq_file *m, 999 struct dasd_profile_info *data) 1000 { 1001 seq_printf(m, "start_time %ld.%09ld\n", 1002 data->starttod.tv_sec, data->starttod.tv_nsec); 1003 seq_printf(m, "total_requests %u\n", data->dasd_io_reqs); 1004 seq_printf(m, "total_sectors %u\n", data->dasd_io_sects); 1005 seq_printf(m, "total_pav %u\n", data->dasd_io_alias); 1006 seq_printf(m, "total_hpf %u\n", data->dasd_io_tpm); 1007 seq_printf(m, "avg_total %lu\n", data->dasd_io_reqs ? 1008 data->dasd_sum_times / data->dasd_io_reqs : 0UL); 1009 seq_printf(m, "avg_build_to_ssch %lu\n", data->dasd_io_reqs ? 1010 data->dasd_sum_time_str / data->dasd_io_reqs : 0UL); 1011 seq_printf(m, "avg_ssch_to_irq %lu\n", data->dasd_io_reqs ? 1012 data->dasd_sum_time_irq / data->dasd_io_reqs : 0UL); 1013 seq_printf(m, "avg_irq_to_end %lu\n", data->dasd_io_reqs ? 1014 data->dasd_sum_time_end / data->dasd_io_reqs : 0UL); 1015 seq_puts(m, "histogram_sectors "); 1016 dasd_stats_array(m, data->dasd_io_secs); 1017 seq_puts(m, "histogram_io_times "); 1018 dasd_stats_array(m, data->dasd_io_times); 1019 seq_puts(m, "histogram_io_times_weighted "); 1020 dasd_stats_array(m, data->dasd_io_timps); 1021 seq_puts(m, "histogram_time_build_to_ssch "); 1022 dasd_stats_array(m, data->dasd_io_time1); 1023 seq_puts(m, "histogram_time_ssch_to_irq "); 1024 dasd_stats_array(m, data->dasd_io_time2); 1025 seq_puts(m, "histogram_time_ssch_to_irq_weighted "); 1026 dasd_stats_array(m, data->dasd_io_time2ps); 1027 seq_puts(m, "histogram_time_irq_to_end "); 1028 dasd_stats_array(m, data->dasd_io_time3); 1029 seq_puts(m, "histogram_ccw_queue_length "); 1030 dasd_stats_array(m, data->dasd_io_nr_req); 1031 seq_printf(m, "total_read_requests %u\n", data->dasd_read_reqs); 1032 seq_printf(m, "total_read_sectors %u\n", data->dasd_read_sects); 1033 seq_printf(m, "total_read_pav %u\n", data->dasd_read_alias); 1034 seq_printf(m, "total_read_hpf %u\n", data->dasd_read_tpm); 1035 seq_puts(m, "histogram_read_sectors "); 1036 dasd_stats_array(m, data->dasd_read_secs); 1037 seq_puts(m, "histogram_read_times "); 1038 dasd_stats_array(m, data->dasd_read_times); 1039 seq_puts(m, "histogram_read_time_build_to_ssch "); 1040 dasd_stats_array(m, data->dasd_read_time1); 1041 seq_puts(m, "histogram_read_time_ssch_to_irq "); 1042 dasd_stats_array(m, data->dasd_read_time2); 1043 seq_puts(m, "histogram_read_time_irq_to_end "); 1044 dasd_stats_array(m, data->dasd_read_time3); 1045 seq_puts(m, "histogram_read_ccw_queue_length "); 1046 dasd_stats_array(m, data->dasd_read_nr_req); 1047 } 1048 1049 static int dasd_stats_show(struct seq_file *m, void *v) 1050 { 1051 struct dasd_profile *profile; 1052 struct dasd_profile_info *data; 1053 1054 profile = m->private; 1055 spin_lock_bh(&profile->lock); 1056 data = profile->data; 1057 if (!data) { 1058 spin_unlock_bh(&profile->lock); 1059 seq_puts(m, "disabled\n"); 1060 return 0; 1061 } 1062 dasd_stats_seq_print(m, data); 1063 spin_unlock_bh(&profile->lock); 1064 return 0; 1065 } 1066 1067 static int dasd_stats_open(struct inode *inode, struct file *file) 1068 { 1069 struct dasd_profile *profile = inode->i_private; 1070 return single_open(file, dasd_stats_show, profile); 1071 } 1072 1073 static const struct file_operations dasd_stats_raw_fops = { 1074 .owner = THIS_MODULE, 1075 .open = dasd_stats_open, 1076 .read = seq_read, 1077 .llseek = seq_lseek, 1078 .release = single_release, 1079 .write = dasd_stats_write, 1080 }; 1081 1082 static void dasd_profile_init(struct dasd_profile *profile, 1083 struct dentry *base_dentry) 1084 { 1085 umode_t mode; 1086 struct dentry *pde; 1087 1088 if (!base_dentry) 1089 return; 1090 profile->dentry = NULL; 1091 profile->data = NULL; 1092 mode = (S_IRUSR | S_IWUSR | S_IFREG); 1093 pde = debugfs_create_file("statistics", mode, base_dentry, 1094 profile, &dasd_stats_raw_fops); 1095 if (pde && !IS_ERR(pde)) 1096 profile->dentry = pde; 1097 return; 1098 } 1099 1100 static void dasd_profile_exit(struct dasd_profile *profile) 1101 { 1102 dasd_profile_off(profile); 1103 debugfs_remove(profile->dentry); 1104 profile->dentry = NULL; 1105 } 1106 1107 static void dasd_statistics_removeroot(void) 1108 { 1109 dasd_global_profile_level = DASD_PROFILE_OFF; 1110 dasd_profile_exit(&dasd_global_profile); 1111 debugfs_remove(dasd_debugfs_global_entry); 1112 debugfs_remove(dasd_debugfs_root_entry); 1113 } 1114 1115 static void dasd_statistics_createroot(void) 1116 { 1117 struct dentry *pde; 1118 1119 dasd_debugfs_root_entry = NULL; 1120 pde = debugfs_create_dir("dasd", NULL); 1121 if (!pde || IS_ERR(pde)) 1122 goto error; 1123 dasd_debugfs_root_entry = pde; 1124 pde = debugfs_create_dir("global", dasd_debugfs_root_entry); 1125 if (!pde || IS_ERR(pde)) 1126 goto error; 1127 dasd_debugfs_global_entry = pde; 1128 dasd_profile_init(&dasd_global_profile, dasd_debugfs_global_entry); 1129 return; 1130 1131 error: 1132 DBF_EVENT(DBF_ERR, "%s", 1133 "Creation of the dasd debugfs interface failed"); 1134 dasd_statistics_removeroot(); 1135 return; 1136 } 1137 1138 #else 1139 #define dasd_profile_start(block, cqr, req) do {} while (0) 1140 #define dasd_profile_end(block, cqr, req) do {} while (0) 1141 1142 static void dasd_statistics_createroot(void) 1143 { 1144 return; 1145 } 1146 1147 static void dasd_statistics_removeroot(void) 1148 { 1149 return; 1150 } 1151 1152 int dasd_stats_generic_show(struct seq_file *m, void *v) 1153 { 1154 seq_puts(m, "Statistics are not activated in this kernel\n"); 1155 return 0; 1156 } 1157 1158 static void dasd_profile_init(struct dasd_profile *profile, 1159 struct dentry *base_dentry) 1160 { 1161 return; 1162 } 1163 1164 static void dasd_profile_exit(struct dasd_profile *profile) 1165 { 1166 return; 1167 } 1168 1169 int dasd_profile_on(struct dasd_profile *profile) 1170 { 1171 return 0; 1172 } 1173 1174 #endif /* CONFIG_DASD_PROFILE */ 1175 1176 static int dasd_hosts_show(struct seq_file *m, void *v) 1177 { 1178 struct dasd_device *device; 1179 int rc = -EOPNOTSUPP; 1180 1181 device = m->private; 1182 dasd_get_device(device); 1183 1184 if (device->discipline->hosts_print) 1185 rc = device->discipline->hosts_print(device, m); 1186 1187 dasd_put_device(device); 1188 return rc; 1189 } 1190 1191 static int dasd_hosts_open(struct inode *inode, struct file *file) 1192 { 1193 struct dasd_device *device = inode->i_private; 1194 1195 return single_open(file, dasd_hosts_show, device); 1196 } 1197 1198 static const struct file_operations dasd_hosts_fops = { 1199 .owner = THIS_MODULE, 1200 .open = dasd_hosts_open, 1201 .read = seq_read, 1202 .llseek = seq_lseek, 1203 .release = single_release, 1204 }; 1205 1206 static void dasd_hosts_exit(struct dasd_device *device) 1207 { 1208 debugfs_remove(device->hosts_dentry); 1209 device->hosts_dentry = NULL; 1210 } 1211 1212 static void dasd_hosts_init(struct dentry *base_dentry, 1213 struct dasd_device *device) 1214 { 1215 struct dentry *pde; 1216 umode_t mode; 1217 1218 if (!base_dentry) 1219 return; 1220 1221 mode = S_IRUSR | S_IFREG; 1222 pde = debugfs_create_file("host_access_list", mode, base_dentry, 1223 device, &dasd_hosts_fops); 1224 if (pde && !IS_ERR(pde)) 1225 device->hosts_dentry = pde; 1226 } 1227 1228 /* 1229 * Allocate memory for a channel program with 'cplength' channel 1230 * command words and 'datasize' additional space. There are two 1231 * variantes: 1) dasd_kmalloc_request uses kmalloc to get the needed 1232 * memory and 2) dasd_smalloc_request uses the static ccw memory 1233 * that gets allocated for each device. 1234 */ 1235 struct dasd_ccw_req *dasd_kmalloc_request(int magic, int cplength, 1236 int datasize, 1237 struct dasd_device *device) 1238 { 1239 struct dasd_ccw_req *cqr; 1240 1241 /* Sanity checks */ 1242 BUG_ON(datasize > PAGE_SIZE || 1243 (cplength*sizeof(struct ccw1)) > PAGE_SIZE); 1244 1245 cqr = kzalloc(sizeof(struct dasd_ccw_req), GFP_ATOMIC); 1246 if (cqr == NULL) 1247 return ERR_PTR(-ENOMEM); 1248 cqr->cpaddr = NULL; 1249 if (cplength > 0) { 1250 cqr->cpaddr = kcalloc(cplength, sizeof(struct ccw1), 1251 GFP_ATOMIC | GFP_DMA); 1252 if (cqr->cpaddr == NULL) { 1253 kfree(cqr); 1254 return ERR_PTR(-ENOMEM); 1255 } 1256 } 1257 cqr->data = NULL; 1258 if (datasize > 0) { 1259 cqr->data = kzalloc(datasize, GFP_ATOMIC | GFP_DMA); 1260 if (cqr->data == NULL) { 1261 kfree(cqr->cpaddr); 1262 kfree(cqr); 1263 return ERR_PTR(-ENOMEM); 1264 } 1265 } 1266 cqr->magic = magic; 1267 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); 1268 dasd_get_device(device); 1269 return cqr; 1270 } 1271 EXPORT_SYMBOL(dasd_kmalloc_request); 1272 1273 struct dasd_ccw_req *dasd_smalloc_request(int magic, int cplength, 1274 int datasize, 1275 struct dasd_device *device) 1276 { 1277 unsigned long flags; 1278 struct dasd_ccw_req *cqr; 1279 char *data; 1280 int size; 1281 1282 size = (sizeof(struct dasd_ccw_req) + 7L) & -8L; 1283 if (cplength > 0) 1284 size += cplength * sizeof(struct ccw1); 1285 if (datasize > 0) 1286 size += datasize; 1287 spin_lock_irqsave(&device->mem_lock, flags); 1288 cqr = (struct dasd_ccw_req *) 1289 dasd_alloc_chunk(&device->ccw_chunks, size); 1290 spin_unlock_irqrestore(&device->mem_lock, flags); 1291 if (cqr == NULL) 1292 return ERR_PTR(-ENOMEM); 1293 memset(cqr, 0, sizeof(struct dasd_ccw_req)); 1294 data = (char *) cqr + ((sizeof(struct dasd_ccw_req) + 7L) & -8L); 1295 cqr->cpaddr = NULL; 1296 if (cplength > 0) { 1297 cqr->cpaddr = (struct ccw1 *) data; 1298 data += cplength*sizeof(struct ccw1); 1299 memset(cqr->cpaddr, 0, cplength*sizeof(struct ccw1)); 1300 } 1301 cqr->data = NULL; 1302 if (datasize > 0) { 1303 cqr->data = data; 1304 memset(cqr->data, 0, datasize); 1305 } 1306 cqr->magic = magic; 1307 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); 1308 dasd_get_device(device); 1309 return cqr; 1310 } 1311 EXPORT_SYMBOL(dasd_smalloc_request); 1312 1313 /* 1314 * Free memory of a channel program. This function needs to free all the 1315 * idal lists that might have been created by dasd_set_cda and the 1316 * struct dasd_ccw_req itself. 1317 */ 1318 void dasd_kfree_request(struct dasd_ccw_req *cqr, struct dasd_device *device) 1319 { 1320 struct ccw1 *ccw; 1321 1322 /* Clear any idals used for the request. */ 1323 ccw = cqr->cpaddr; 1324 do { 1325 clear_normalized_cda(ccw); 1326 } while (ccw++->flags & (CCW_FLAG_CC | CCW_FLAG_DC)); 1327 kfree(cqr->cpaddr); 1328 kfree(cqr->data); 1329 kfree(cqr); 1330 dasd_put_device(device); 1331 } 1332 EXPORT_SYMBOL(dasd_kfree_request); 1333 1334 void dasd_sfree_request(struct dasd_ccw_req *cqr, struct dasd_device *device) 1335 { 1336 unsigned long flags; 1337 1338 spin_lock_irqsave(&device->mem_lock, flags); 1339 dasd_free_chunk(&device->ccw_chunks, cqr); 1340 spin_unlock_irqrestore(&device->mem_lock, flags); 1341 dasd_put_device(device); 1342 } 1343 EXPORT_SYMBOL(dasd_sfree_request); 1344 1345 /* 1346 * Check discipline magic in cqr. 1347 */ 1348 static inline int dasd_check_cqr(struct dasd_ccw_req *cqr) 1349 { 1350 struct dasd_device *device; 1351 1352 if (cqr == NULL) 1353 return -EINVAL; 1354 device = cqr->startdev; 1355 if (strncmp((char *) &cqr->magic, device->discipline->ebcname, 4)) { 1356 DBF_DEV_EVENT(DBF_WARNING, device, 1357 " dasd_ccw_req 0x%08x magic doesn't match" 1358 " discipline 0x%08x", 1359 cqr->magic, 1360 *(unsigned int *) device->discipline->name); 1361 return -EINVAL; 1362 } 1363 return 0; 1364 } 1365 1366 /* 1367 * Terminate the current i/o and set the request to clear_pending. 1368 * Timer keeps device runnig. 1369 * ccw_device_clear can fail if the i/o subsystem 1370 * is in a bad mood. 1371 */ 1372 int dasd_term_IO(struct dasd_ccw_req *cqr) 1373 { 1374 struct dasd_device *device; 1375 int retries, rc; 1376 char errorstring[ERRORLENGTH]; 1377 1378 /* Check the cqr */ 1379 rc = dasd_check_cqr(cqr); 1380 if (rc) 1381 return rc; 1382 retries = 0; 1383 device = (struct dasd_device *) cqr->startdev; 1384 while ((retries < 5) && (cqr->status == DASD_CQR_IN_IO)) { 1385 rc = ccw_device_clear(device->cdev, (long) cqr); 1386 switch (rc) { 1387 case 0: /* termination successful */ 1388 cqr->status = DASD_CQR_CLEAR_PENDING; 1389 cqr->stopclk = get_tod_clock(); 1390 cqr->starttime = 0; 1391 DBF_DEV_EVENT(DBF_DEBUG, device, 1392 "terminate cqr %p successful", 1393 cqr); 1394 break; 1395 case -ENODEV: 1396 DBF_DEV_EVENT(DBF_ERR, device, "%s", 1397 "device gone, retry"); 1398 break; 1399 case -EIO: 1400 DBF_DEV_EVENT(DBF_ERR, device, "%s", 1401 "I/O error, retry"); 1402 break; 1403 case -EINVAL: 1404 /* 1405 * device not valid so no I/O could be running 1406 * handle CQR as termination successful 1407 */ 1408 cqr->status = DASD_CQR_CLEARED; 1409 cqr->stopclk = get_tod_clock(); 1410 cqr->starttime = 0; 1411 /* no retries for invalid devices */ 1412 cqr->retries = -1; 1413 DBF_DEV_EVENT(DBF_ERR, device, "%s", 1414 "EINVAL, handle as terminated"); 1415 /* fake rc to success */ 1416 rc = 0; 1417 break; 1418 case -EBUSY: 1419 DBF_DEV_EVENT(DBF_ERR, device, "%s", 1420 "device busy, retry later"); 1421 break; 1422 default: 1423 /* internal error 10 - unknown rc*/ 1424 snprintf(errorstring, ERRORLENGTH, "10 %d", rc); 1425 dev_err(&device->cdev->dev, "An error occurred in the " 1426 "DASD device driver, reason=%s\n", errorstring); 1427 BUG(); 1428 break; 1429 } 1430 retries++; 1431 } 1432 dasd_schedule_device_bh(device); 1433 return rc; 1434 } 1435 EXPORT_SYMBOL(dasd_term_IO); 1436 1437 /* 1438 * Start the i/o. This start_IO can fail if the channel is really busy. 1439 * In that case set up a timer to start the request later. 1440 */ 1441 int dasd_start_IO(struct dasd_ccw_req *cqr) 1442 { 1443 struct dasd_device *device; 1444 int rc; 1445 char errorstring[ERRORLENGTH]; 1446 1447 /* Check the cqr */ 1448 rc = dasd_check_cqr(cqr); 1449 if (rc) { 1450 cqr->intrc = rc; 1451 return rc; 1452 } 1453 device = (struct dasd_device *) cqr->startdev; 1454 if (((cqr->block && 1455 test_bit(DASD_FLAG_LOCK_STOLEN, &cqr->block->base->flags)) || 1456 test_bit(DASD_FLAG_LOCK_STOLEN, &device->flags)) && 1457 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) { 1458 DBF_DEV_EVENT(DBF_DEBUG, device, "start_IO: return request %p " 1459 "because of stolen lock", cqr); 1460 cqr->status = DASD_CQR_ERROR; 1461 cqr->intrc = -EPERM; 1462 return -EPERM; 1463 } 1464 if (cqr->retries < 0) { 1465 /* internal error 14 - start_IO run out of retries */ 1466 sprintf(errorstring, "14 %p", cqr); 1467 dev_err(&device->cdev->dev, "An error occurred in the DASD " 1468 "device driver, reason=%s\n", errorstring); 1469 cqr->status = DASD_CQR_ERROR; 1470 return -EIO; 1471 } 1472 cqr->startclk = get_tod_clock(); 1473 cqr->starttime = jiffies; 1474 cqr->retries--; 1475 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) { 1476 cqr->lpm &= dasd_path_get_opm(device); 1477 if (!cqr->lpm) 1478 cqr->lpm = dasd_path_get_opm(device); 1479 } 1480 if (cqr->cpmode == 1) { 1481 rc = ccw_device_tm_start(device->cdev, cqr->cpaddr, 1482 (long) cqr, cqr->lpm); 1483 } else { 1484 rc = ccw_device_start(device->cdev, cqr->cpaddr, 1485 (long) cqr, cqr->lpm, 0); 1486 } 1487 switch (rc) { 1488 case 0: 1489 cqr->status = DASD_CQR_IN_IO; 1490 break; 1491 case -EBUSY: 1492 DBF_DEV_EVENT(DBF_WARNING, device, "%s", 1493 "start_IO: device busy, retry later"); 1494 break; 1495 case -ETIMEDOUT: 1496 DBF_DEV_EVENT(DBF_WARNING, device, "%s", 1497 "start_IO: request timeout, retry later"); 1498 break; 1499 case -EACCES: 1500 /* -EACCES indicates that the request used only a subset of the 1501 * available paths and all these paths are gone. If the lpm of 1502 * this request was only a subset of the opm (e.g. the ppm) then 1503 * we just do a retry with all available paths. 1504 * If we already use the full opm, something is amiss, and we 1505 * need a full path verification. 1506 */ 1507 if (test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) { 1508 DBF_DEV_EVENT(DBF_WARNING, device, 1509 "start_IO: selected paths gone (%x)", 1510 cqr->lpm); 1511 } else if (cqr->lpm != dasd_path_get_opm(device)) { 1512 cqr->lpm = dasd_path_get_opm(device); 1513 DBF_DEV_EVENT(DBF_DEBUG, device, "%s", 1514 "start_IO: selected paths gone," 1515 " retry on all paths"); 1516 } else { 1517 DBF_DEV_EVENT(DBF_WARNING, device, "%s", 1518 "start_IO: all paths in opm gone," 1519 " do path verification"); 1520 dasd_generic_last_path_gone(device); 1521 dasd_path_no_path(device); 1522 dasd_path_set_tbvpm(device, 1523 ccw_device_get_path_mask( 1524 device->cdev)); 1525 } 1526 break; 1527 case -ENODEV: 1528 DBF_DEV_EVENT(DBF_WARNING, device, "%s", 1529 "start_IO: -ENODEV device gone, retry"); 1530 break; 1531 case -EIO: 1532 DBF_DEV_EVENT(DBF_WARNING, device, "%s", 1533 "start_IO: -EIO device gone, retry"); 1534 break; 1535 case -EINVAL: 1536 /* most likely caused in power management context */ 1537 DBF_DEV_EVENT(DBF_WARNING, device, "%s", 1538 "start_IO: -EINVAL device currently " 1539 "not accessible"); 1540 break; 1541 default: 1542 /* internal error 11 - unknown rc */ 1543 snprintf(errorstring, ERRORLENGTH, "11 %d", rc); 1544 dev_err(&device->cdev->dev, 1545 "An error occurred in the DASD device driver, " 1546 "reason=%s\n", errorstring); 1547 BUG(); 1548 break; 1549 } 1550 cqr->intrc = rc; 1551 return rc; 1552 } 1553 EXPORT_SYMBOL(dasd_start_IO); 1554 1555 /* 1556 * Timeout function for dasd devices. This is used for different purposes 1557 * 1) missing interrupt handler for normal operation 1558 * 2) delayed start of request where start_IO failed with -EBUSY 1559 * 3) timeout for missing state change interrupts 1560 * The head of the ccw queue will have status DASD_CQR_IN_IO for 1), 1561 * DASD_CQR_QUEUED for 2) and 3). 1562 */ 1563 static void dasd_device_timeout(unsigned long ptr) 1564 { 1565 unsigned long flags; 1566 struct dasd_device *device; 1567 1568 device = (struct dasd_device *) ptr; 1569 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); 1570 /* re-activate request queue */ 1571 dasd_device_remove_stop_bits(device, DASD_STOPPED_PENDING); 1572 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); 1573 dasd_schedule_device_bh(device); 1574 } 1575 1576 /* 1577 * Setup timeout for a device in jiffies. 1578 */ 1579 void dasd_device_set_timer(struct dasd_device *device, int expires) 1580 { 1581 if (expires == 0) 1582 del_timer(&device->timer); 1583 else 1584 mod_timer(&device->timer, jiffies + expires); 1585 } 1586 EXPORT_SYMBOL(dasd_device_set_timer); 1587 1588 /* 1589 * Clear timeout for a device. 1590 */ 1591 void dasd_device_clear_timer(struct dasd_device *device) 1592 { 1593 del_timer(&device->timer); 1594 } 1595 EXPORT_SYMBOL(dasd_device_clear_timer); 1596 1597 static void dasd_handle_killed_request(struct ccw_device *cdev, 1598 unsigned long intparm) 1599 { 1600 struct dasd_ccw_req *cqr; 1601 struct dasd_device *device; 1602 1603 if (!intparm) 1604 return; 1605 cqr = (struct dasd_ccw_req *) intparm; 1606 if (cqr->status != DASD_CQR_IN_IO) { 1607 DBF_EVENT_DEVID(DBF_DEBUG, cdev, 1608 "invalid status in handle_killed_request: " 1609 "%02x", cqr->status); 1610 return; 1611 } 1612 1613 device = dasd_device_from_cdev_locked(cdev); 1614 if (IS_ERR(device)) { 1615 DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", 1616 "unable to get device from cdev"); 1617 return; 1618 } 1619 1620 if (!cqr->startdev || 1621 device != cqr->startdev || 1622 strncmp(cqr->startdev->discipline->ebcname, 1623 (char *) &cqr->magic, 4)) { 1624 DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", 1625 "invalid device in request"); 1626 dasd_put_device(device); 1627 return; 1628 } 1629 1630 /* Schedule request to be retried. */ 1631 cqr->status = DASD_CQR_QUEUED; 1632 1633 dasd_device_clear_timer(device); 1634 dasd_schedule_device_bh(device); 1635 dasd_put_device(device); 1636 } 1637 1638 void dasd_generic_handle_state_change(struct dasd_device *device) 1639 { 1640 /* First of all start sense subsystem status request. */ 1641 dasd_eer_snss(device); 1642 1643 dasd_device_remove_stop_bits(device, DASD_STOPPED_PENDING); 1644 dasd_schedule_device_bh(device); 1645 if (device->block) { 1646 dasd_schedule_block_bh(device->block); 1647 if (device->block->request_queue) 1648 blk_mq_run_hw_queues(device->block->request_queue, 1649 true); 1650 } 1651 } 1652 EXPORT_SYMBOL_GPL(dasd_generic_handle_state_change); 1653 1654 static int dasd_check_hpf_error(struct irb *irb) 1655 { 1656 return (scsw_tm_is_valid_schxs(&irb->scsw) && 1657 (irb->scsw.tm.sesq == SCSW_SESQ_DEV_NOFCX || 1658 irb->scsw.tm.sesq == SCSW_SESQ_PATH_NOFCX)); 1659 } 1660 1661 /* 1662 * Interrupt handler for "normal" ssch-io based dasd devices. 1663 */ 1664 void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm, 1665 struct irb *irb) 1666 { 1667 struct dasd_ccw_req *cqr, *next; 1668 struct dasd_device *device; 1669 unsigned long now; 1670 int nrf_suppressed = 0; 1671 int fp_suppressed = 0; 1672 u8 *sense = NULL; 1673 int expires; 1674 1675 cqr = (struct dasd_ccw_req *) intparm; 1676 if (IS_ERR(irb)) { 1677 switch (PTR_ERR(irb)) { 1678 case -EIO: 1679 if (cqr && cqr->status == DASD_CQR_CLEAR_PENDING) { 1680 device = cqr->startdev; 1681 cqr->status = DASD_CQR_CLEARED; 1682 dasd_device_clear_timer(device); 1683 wake_up(&dasd_flush_wq); 1684 dasd_schedule_device_bh(device); 1685 return; 1686 } 1687 break; 1688 case -ETIMEDOUT: 1689 DBF_EVENT_DEVID(DBF_WARNING, cdev, "%s: " 1690 "request timed out\n", __func__); 1691 break; 1692 default: 1693 DBF_EVENT_DEVID(DBF_WARNING, cdev, "%s: " 1694 "unknown error %ld\n", __func__, 1695 PTR_ERR(irb)); 1696 } 1697 dasd_handle_killed_request(cdev, intparm); 1698 return; 1699 } 1700 1701 now = get_tod_clock(); 1702 /* check for conditions that should be handled immediately */ 1703 if (!cqr || 1704 !(scsw_dstat(&irb->scsw) == (DEV_STAT_CHN_END | DEV_STAT_DEV_END) && 1705 scsw_cstat(&irb->scsw) == 0)) { 1706 if (cqr) 1707 memcpy(&cqr->irb, irb, sizeof(*irb)); 1708 device = dasd_device_from_cdev_locked(cdev); 1709 if (IS_ERR(device)) 1710 return; 1711 /* ignore unsolicited interrupts for DIAG discipline */ 1712 if (device->discipline == dasd_diag_discipline_pointer) { 1713 dasd_put_device(device); 1714 return; 1715 } 1716 1717 /* 1718 * In some cases 'File Protected' or 'No Record Found' errors 1719 * might be expected and debug log messages for the 1720 * corresponding interrupts shouldn't be written then. 1721 * Check if either of the according suppress bits is set. 1722 */ 1723 sense = dasd_get_sense(irb); 1724 if (sense) { 1725 fp_suppressed = (sense[1] & SNS1_FILE_PROTECTED) && 1726 test_bit(DASD_CQR_SUPPRESS_FP, &cqr->flags); 1727 nrf_suppressed = (sense[1] & SNS1_NO_REC_FOUND) && 1728 test_bit(DASD_CQR_SUPPRESS_NRF, &cqr->flags); 1729 } 1730 if (!(fp_suppressed || nrf_suppressed)) 1731 device->discipline->dump_sense_dbf(device, irb, "int"); 1732 1733 if (device->features & DASD_FEATURE_ERPLOG) 1734 device->discipline->dump_sense(device, cqr, irb); 1735 device->discipline->check_for_device_change(device, cqr, irb); 1736 dasd_put_device(device); 1737 } 1738 1739 /* check for for attention message */ 1740 if (scsw_dstat(&irb->scsw) & DEV_STAT_ATTENTION) { 1741 device = dasd_device_from_cdev_locked(cdev); 1742 if (!IS_ERR(device)) { 1743 device->discipline->check_attention(device, 1744 irb->esw.esw1.lpum); 1745 dasd_put_device(device); 1746 } 1747 } 1748 1749 if (!cqr) 1750 return; 1751 1752 device = (struct dasd_device *) cqr->startdev; 1753 if (!device || 1754 strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) { 1755 DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", 1756 "invalid device in request"); 1757 return; 1758 } 1759 1760 /* Check for clear pending */ 1761 if (cqr->status == DASD_CQR_CLEAR_PENDING && 1762 scsw_fctl(&irb->scsw) & SCSW_FCTL_CLEAR_FUNC) { 1763 cqr->status = DASD_CQR_CLEARED; 1764 dasd_device_clear_timer(device); 1765 wake_up(&dasd_flush_wq); 1766 dasd_schedule_device_bh(device); 1767 return; 1768 } 1769 1770 /* check status - the request might have been killed by dyn detach */ 1771 if (cqr->status != DASD_CQR_IN_IO) { 1772 DBF_DEV_EVENT(DBF_DEBUG, device, "invalid status: bus_id %s, " 1773 "status %02x", dev_name(&cdev->dev), cqr->status); 1774 return; 1775 } 1776 1777 next = NULL; 1778 expires = 0; 1779 if (scsw_dstat(&irb->scsw) == (DEV_STAT_CHN_END | DEV_STAT_DEV_END) && 1780 scsw_cstat(&irb->scsw) == 0) { 1781 /* request was completed successfully */ 1782 cqr->status = DASD_CQR_SUCCESS; 1783 cqr->stopclk = now; 1784 /* Start first request on queue if possible -> fast_io. */ 1785 if (cqr->devlist.next != &device->ccw_queue) { 1786 next = list_entry(cqr->devlist.next, 1787 struct dasd_ccw_req, devlist); 1788 } 1789 } else { /* error */ 1790 /* check for HPF error 1791 * call discipline function to requeue all requests 1792 * and disable HPF accordingly 1793 */ 1794 if (cqr->cpmode && dasd_check_hpf_error(irb) && 1795 device->discipline->handle_hpf_error) 1796 device->discipline->handle_hpf_error(device, irb); 1797 /* 1798 * If we don't want complex ERP for this request, then just 1799 * reset this and retry it in the fastpath 1800 */ 1801 if (!test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags) && 1802 cqr->retries > 0) { 1803 if (cqr->lpm == dasd_path_get_opm(device)) 1804 DBF_DEV_EVENT(DBF_DEBUG, device, 1805 "default ERP in fastpath " 1806 "(%i retries left)", 1807 cqr->retries); 1808 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) 1809 cqr->lpm = dasd_path_get_opm(device); 1810 cqr->status = DASD_CQR_QUEUED; 1811 next = cqr; 1812 } else 1813 cqr->status = DASD_CQR_ERROR; 1814 } 1815 if (next && (next->status == DASD_CQR_QUEUED) && 1816 (!device->stopped)) { 1817 if (device->discipline->start_IO(next) == 0) 1818 expires = next->expires; 1819 } 1820 if (expires != 0) 1821 dasd_device_set_timer(device, expires); 1822 else 1823 dasd_device_clear_timer(device); 1824 dasd_schedule_device_bh(device); 1825 } 1826 EXPORT_SYMBOL(dasd_int_handler); 1827 1828 enum uc_todo dasd_generic_uc_handler(struct ccw_device *cdev, struct irb *irb) 1829 { 1830 struct dasd_device *device; 1831 1832 device = dasd_device_from_cdev_locked(cdev); 1833 1834 if (IS_ERR(device)) 1835 goto out; 1836 if (test_bit(DASD_FLAG_OFFLINE, &device->flags) || 1837 device->state != device->target || 1838 !device->discipline->check_for_device_change){ 1839 dasd_put_device(device); 1840 goto out; 1841 } 1842 if (device->discipline->dump_sense_dbf) 1843 device->discipline->dump_sense_dbf(device, irb, "uc"); 1844 device->discipline->check_for_device_change(device, NULL, irb); 1845 dasd_put_device(device); 1846 out: 1847 return UC_TODO_RETRY; 1848 } 1849 EXPORT_SYMBOL_GPL(dasd_generic_uc_handler); 1850 1851 /* 1852 * If we have an error on a dasd_block layer request then we cancel 1853 * and return all further requests from the same dasd_block as well. 1854 */ 1855 static void __dasd_device_recovery(struct dasd_device *device, 1856 struct dasd_ccw_req *ref_cqr) 1857 { 1858 struct list_head *l, *n; 1859 struct dasd_ccw_req *cqr; 1860 1861 /* 1862 * only requeue request that came from the dasd_block layer 1863 */ 1864 if (!ref_cqr->block) 1865 return; 1866 1867 list_for_each_safe(l, n, &device->ccw_queue) { 1868 cqr = list_entry(l, struct dasd_ccw_req, devlist); 1869 if (cqr->status == DASD_CQR_QUEUED && 1870 ref_cqr->block == cqr->block) { 1871 cqr->status = DASD_CQR_CLEARED; 1872 } 1873 } 1874 }; 1875 1876 /* 1877 * Remove those ccw requests from the queue that need to be returned 1878 * to the upper layer. 1879 */ 1880 static void __dasd_device_process_ccw_queue(struct dasd_device *device, 1881 struct list_head *final_queue) 1882 { 1883 struct list_head *l, *n; 1884 struct dasd_ccw_req *cqr; 1885 1886 /* Process request with final status. */ 1887 list_for_each_safe(l, n, &device->ccw_queue) { 1888 cqr = list_entry(l, struct dasd_ccw_req, devlist); 1889 1890 /* Skip any non-final request. */ 1891 if (cqr->status == DASD_CQR_QUEUED || 1892 cqr->status == DASD_CQR_IN_IO || 1893 cqr->status == DASD_CQR_CLEAR_PENDING) 1894 continue; 1895 if (cqr->status == DASD_CQR_ERROR) { 1896 __dasd_device_recovery(device, cqr); 1897 } 1898 /* Rechain finished requests to final queue */ 1899 list_move_tail(&cqr->devlist, final_queue); 1900 } 1901 } 1902 1903 /* 1904 * the cqrs from the final queue are returned to the upper layer 1905 * by setting a dasd_block state and calling the callback function 1906 */ 1907 static void __dasd_device_process_final_queue(struct dasd_device *device, 1908 struct list_head *final_queue) 1909 { 1910 struct list_head *l, *n; 1911 struct dasd_ccw_req *cqr; 1912 struct dasd_block *block; 1913 void (*callback)(struct dasd_ccw_req *, void *data); 1914 void *callback_data; 1915 char errorstring[ERRORLENGTH]; 1916 1917 list_for_each_safe(l, n, final_queue) { 1918 cqr = list_entry(l, struct dasd_ccw_req, devlist); 1919 list_del_init(&cqr->devlist); 1920 block = cqr->block; 1921 callback = cqr->callback; 1922 callback_data = cqr->callback_data; 1923 if (block) 1924 spin_lock_bh(&block->queue_lock); 1925 switch (cqr->status) { 1926 case DASD_CQR_SUCCESS: 1927 cqr->status = DASD_CQR_DONE; 1928 break; 1929 case DASD_CQR_ERROR: 1930 cqr->status = DASD_CQR_NEED_ERP; 1931 break; 1932 case DASD_CQR_CLEARED: 1933 cqr->status = DASD_CQR_TERMINATED; 1934 break; 1935 default: 1936 /* internal error 12 - wrong cqr status*/ 1937 snprintf(errorstring, ERRORLENGTH, "12 %p %x02", cqr, cqr->status); 1938 dev_err(&device->cdev->dev, 1939 "An error occurred in the DASD device driver, " 1940 "reason=%s\n", errorstring); 1941 BUG(); 1942 } 1943 if (cqr->callback != NULL) 1944 (callback)(cqr, callback_data); 1945 if (block) 1946 spin_unlock_bh(&block->queue_lock); 1947 } 1948 } 1949 1950 /* 1951 * Take a look at the first request on the ccw queue and check 1952 * if it reached its expire time. If so, terminate the IO. 1953 */ 1954 static void __dasd_device_check_expire(struct dasd_device *device) 1955 { 1956 struct dasd_ccw_req *cqr; 1957 1958 if (list_empty(&device->ccw_queue)) 1959 return; 1960 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist); 1961 if ((cqr->status == DASD_CQR_IN_IO && cqr->expires != 0) && 1962 (time_after_eq(jiffies, cqr->expires + cqr->starttime))) { 1963 if (test_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags)) { 1964 /* 1965 * IO in safe offline processing should not 1966 * run out of retries 1967 */ 1968 cqr->retries++; 1969 } 1970 if (device->discipline->term_IO(cqr) != 0) { 1971 /* Hmpf, try again in 5 sec */ 1972 dev_err(&device->cdev->dev, 1973 "cqr %p timed out (%lus) but cannot be " 1974 "ended, retrying in 5 s\n", 1975 cqr, (cqr->expires/HZ)); 1976 cqr->expires += 5*HZ; 1977 dasd_device_set_timer(device, 5*HZ); 1978 } else { 1979 dev_err(&device->cdev->dev, 1980 "cqr %p timed out (%lus), %i retries " 1981 "remaining\n", cqr, (cqr->expires/HZ), 1982 cqr->retries); 1983 } 1984 } 1985 } 1986 1987 /* 1988 * return 1 when device is not eligible for IO 1989 */ 1990 static int __dasd_device_is_unusable(struct dasd_device *device, 1991 struct dasd_ccw_req *cqr) 1992 { 1993 int mask = ~(DASD_STOPPED_DC_WAIT | DASD_UNRESUMED_PM); 1994 1995 if (test_bit(DASD_FLAG_OFFLINE, &device->flags) && 1996 !test_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags)) { 1997 /* 1998 * dasd is being set offline 1999 * but it is no safe offline where we have to allow I/O 2000 */ 2001 return 1; 2002 } 2003 if (device->stopped) { 2004 if (device->stopped & mask) { 2005 /* stopped and CQR will not change that. */ 2006 return 1; 2007 } 2008 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) { 2009 /* CQR is not able to change device to 2010 * operational. */ 2011 return 1; 2012 } 2013 /* CQR required to get device operational. */ 2014 } 2015 return 0; 2016 } 2017 2018 /* 2019 * Take a look at the first request on the ccw queue and check 2020 * if it needs to be started. 2021 */ 2022 static void __dasd_device_start_head(struct dasd_device *device) 2023 { 2024 struct dasd_ccw_req *cqr; 2025 int rc; 2026 2027 if (list_empty(&device->ccw_queue)) 2028 return; 2029 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist); 2030 if (cqr->status != DASD_CQR_QUEUED) 2031 return; 2032 /* if device is not usable return request to upper layer */ 2033 if (__dasd_device_is_unusable(device, cqr)) { 2034 cqr->intrc = -EAGAIN; 2035 cqr->status = DASD_CQR_CLEARED; 2036 dasd_schedule_device_bh(device); 2037 return; 2038 } 2039 2040 rc = device->discipline->start_IO(cqr); 2041 if (rc == 0) 2042 dasd_device_set_timer(device, cqr->expires); 2043 else if (rc == -EACCES) { 2044 dasd_schedule_device_bh(device); 2045 } else 2046 /* Hmpf, try again in 1/2 sec */ 2047 dasd_device_set_timer(device, 50); 2048 } 2049 2050 static void __dasd_device_check_path_events(struct dasd_device *device) 2051 { 2052 int rc; 2053 2054 if (!dasd_path_get_tbvpm(device)) 2055 return; 2056 2057 if (device->stopped & 2058 ~(DASD_STOPPED_DC_WAIT | DASD_UNRESUMED_PM)) 2059 return; 2060 rc = device->discipline->verify_path(device, 2061 dasd_path_get_tbvpm(device)); 2062 if (rc) 2063 dasd_device_set_timer(device, 50); 2064 else 2065 dasd_path_clear_all_verify(device); 2066 }; 2067 2068 /* 2069 * Go through all request on the dasd_device request queue, 2070 * terminate them on the cdev if necessary, and return them to the 2071 * submitting layer via callback. 2072 * Note: 2073 * Make sure that all 'submitting layers' still exist when 2074 * this function is called!. In other words, when 'device' is a base 2075 * device then all block layer requests must have been removed before 2076 * via dasd_flush_block_queue. 2077 */ 2078 int dasd_flush_device_queue(struct dasd_device *device) 2079 { 2080 struct dasd_ccw_req *cqr, *n; 2081 int rc; 2082 struct list_head flush_queue; 2083 2084 INIT_LIST_HEAD(&flush_queue); 2085 spin_lock_irq(get_ccwdev_lock(device->cdev)); 2086 rc = 0; 2087 list_for_each_entry_safe(cqr, n, &device->ccw_queue, devlist) { 2088 /* Check status and move request to flush_queue */ 2089 switch (cqr->status) { 2090 case DASD_CQR_IN_IO: 2091 rc = device->discipline->term_IO(cqr); 2092 if (rc) { 2093 /* unable to terminate requeust */ 2094 dev_err(&device->cdev->dev, 2095 "Flushing the DASD request queue " 2096 "failed for request %p\n", cqr); 2097 /* stop flush processing */ 2098 goto finished; 2099 } 2100 break; 2101 case DASD_CQR_QUEUED: 2102 cqr->stopclk = get_tod_clock(); 2103 cqr->status = DASD_CQR_CLEARED; 2104 break; 2105 default: /* no need to modify the others */ 2106 break; 2107 } 2108 list_move_tail(&cqr->devlist, &flush_queue); 2109 } 2110 finished: 2111 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 2112 /* 2113 * After this point all requests must be in state CLEAR_PENDING, 2114 * CLEARED, SUCCESS or ERROR. Now wait for CLEAR_PENDING to become 2115 * one of the others. 2116 */ 2117 list_for_each_entry_safe(cqr, n, &flush_queue, devlist) 2118 wait_event(dasd_flush_wq, 2119 (cqr->status != DASD_CQR_CLEAR_PENDING)); 2120 /* 2121 * Now set each request back to TERMINATED, DONE or NEED_ERP 2122 * and call the callback function of flushed requests 2123 */ 2124 __dasd_device_process_final_queue(device, &flush_queue); 2125 return rc; 2126 } 2127 EXPORT_SYMBOL_GPL(dasd_flush_device_queue); 2128 2129 /* 2130 * Acquire the device lock and process queues for the device. 2131 */ 2132 static void dasd_device_tasklet(struct dasd_device *device) 2133 { 2134 struct list_head final_queue; 2135 2136 atomic_set (&device->tasklet_scheduled, 0); 2137 INIT_LIST_HEAD(&final_queue); 2138 spin_lock_irq(get_ccwdev_lock(device->cdev)); 2139 /* Check expire time of first request on the ccw queue. */ 2140 __dasd_device_check_expire(device); 2141 /* find final requests on ccw queue */ 2142 __dasd_device_process_ccw_queue(device, &final_queue); 2143 __dasd_device_check_path_events(device); 2144 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 2145 /* Now call the callback function of requests with final status */ 2146 __dasd_device_process_final_queue(device, &final_queue); 2147 spin_lock_irq(get_ccwdev_lock(device->cdev)); 2148 /* Now check if the head of the ccw queue needs to be started. */ 2149 __dasd_device_start_head(device); 2150 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 2151 if (waitqueue_active(&shutdown_waitq)) 2152 wake_up(&shutdown_waitq); 2153 dasd_put_device(device); 2154 } 2155 2156 /* 2157 * Schedules a call to dasd_tasklet over the device tasklet. 2158 */ 2159 void dasd_schedule_device_bh(struct dasd_device *device) 2160 { 2161 /* Protect against rescheduling. */ 2162 if (atomic_cmpxchg (&device->tasklet_scheduled, 0, 1) != 0) 2163 return; 2164 dasd_get_device(device); 2165 tasklet_hi_schedule(&device->tasklet); 2166 } 2167 EXPORT_SYMBOL(dasd_schedule_device_bh); 2168 2169 void dasd_device_set_stop_bits(struct dasd_device *device, int bits) 2170 { 2171 device->stopped |= bits; 2172 } 2173 EXPORT_SYMBOL_GPL(dasd_device_set_stop_bits); 2174 2175 void dasd_device_remove_stop_bits(struct dasd_device *device, int bits) 2176 { 2177 device->stopped &= ~bits; 2178 if (!device->stopped) 2179 wake_up(&generic_waitq); 2180 } 2181 EXPORT_SYMBOL_GPL(dasd_device_remove_stop_bits); 2182 2183 /* 2184 * Queue a request to the head of the device ccw_queue. 2185 * Start the I/O if possible. 2186 */ 2187 void dasd_add_request_head(struct dasd_ccw_req *cqr) 2188 { 2189 struct dasd_device *device; 2190 unsigned long flags; 2191 2192 device = cqr->startdev; 2193 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); 2194 cqr->status = DASD_CQR_QUEUED; 2195 list_add(&cqr->devlist, &device->ccw_queue); 2196 /* let the bh start the request to keep them in order */ 2197 dasd_schedule_device_bh(device); 2198 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); 2199 } 2200 EXPORT_SYMBOL(dasd_add_request_head); 2201 2202 /* 2203 * Queue a request to the tail of the device ccw_queue. 2204 * Start the I/O if possible. 2205 */ 2206 void dasd_add_request_tail(struct dasd_ccw_req *cqr) 2207 { 2208 struct dasd_device *device; 2209 unsigned long flags; 2210 2211 device = cqr->startdev; 2212 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); 2213 cqr->status = DASD_CQR_QUEUED; 2214 list_add_tail(&cqr->devlist, &device->ccw_queue); 2215 /* let the bh start the request to keep them in order */ 2216 dasd_schedule_device_bh(device); 2217 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); 2218 } 2219 EXPORT_SYMBOL(dasd_add_request_tail); 2220 2221 /* 2222 * Wakeup helper for the 'sleep_on' functions. 2223 */ 2224 void dasd_wakeup_cb(struct dasd_ccw_req *cqr, void *data) 2225 { 2226 spin_lock_irq(get_ccwdev_lock(cqr->startdev->cdev)); 2227 cqr->callback_data = DASD_SLEEPON_END_TAG; 2228 spin_unlock_irq(get_ccwdev_lock(cqr->startdev->cdev)); 2229 wake_up(&generic_waitq); 2230 } 2231 EXPORT_SYMBOL_GPL(dasd_wakeup_cb); 2232 2233 static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr) 2234 { 2235 struct dasd_device *device; 2236 int rc; 2237 2238 device = cqr->startdev; 2239 spin_lock_irq(get_ccwdev_lock(device->cdev)); 2240 rc = (cqr->callback_data == DASD_SLEEPON_END_TAG); 2241 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 2242 return rc; 2243 } 2244 2245 /* 2246 * checks if error recovery is necessary, returns 1 if yes, 0 otherwise. 2247 */ 2248 static int __dasd_sleep_on_erp(struct dasd_ccw_req *cqr) 2249 { 2250 struct dasd_device *device; 2251 dasd_erp_fn_t erp_fn; 2252 2253 if (cqr->status == DASD_CQR_FILLED) 2254 return 0; 2255 device = cqr->startdev; 2256 if (test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags)) { 2257 if (cqr->status == DASD_CQR_TERMINATED) { 2258 device->discipline->handle_terminated_request(cqr); 2259 return 1; 2260 } 2261 if (cqr->status == DASD_CQR_NEED_ERP) { 2262 erp_fn = device->discipline->erp_action(cqr); 2263 erp_fn(cqr); 2264 return 1; 2265 } 2266 if (cqr->status == DASD_CQR_FAILED) 2267 dasd_log_sense(cqr, &cqr->irb); 2268 if (cqr->refers) { 2269 __dasd_process_erp(device, cqr); 2270 return 1; 2271 } 2272 } 2273 return 0; 2274 } 2275 2276 static int __dasd_sleep_on_loop_condition(struct dasd_ccw_req *cqr) 2277 { 2278 if (test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags)) { 2279 if (cqr->refers) /* erp is not done yet */ 2280 return 1; 2281 return ((cqr->status != DASD_CQR_DONE) && 2282 (cqr->status != DASD_CQR_FAILED)); 2283 } else 2284 return (cqr->status == DASD_CQR_FILLED); 2285 } 2286 2287 static int _dasd_sleep_on(struct dasd_ccw_req *maincqr, int interruptible) 2288 { 2289 struct dasd_device *device; 2290 int rc; 2291 struct list_head ccw_queue; 2292 struct dasd_ccw_req *cqr; 2293 2294 INIT_LIST_HEAD(&ccw_queue); 2295 maincqr->status = DASD_CQR_FILLED; 2296 device = maincqr->startdev; 2297 list_add(&maincqr->blocklist, &ccw_queue); 2298 for (cqr = maincqr; __dasd_sleep_on_loop_condition(cqr); 2299 cqr = list_first_entry(&ccw_queue, 2300 struct dasd_ccw_req, blocklist)) { 2301 2302 if (__dasd_sleep_on_erp(cqr)) 2303 continue; 2304 if (cqr->status != DASD_CQR_FILLED) /* could be failed */ 2305 continue; 2306 if (test_bit(DASD_FLAG_LOCK_STOLEN, &device->flags) && 2307 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) { 2308 cqr->status = DASD_CQR_FAILED; 2309 cqr->intrc = -EPERM; 2310 continue; 2311 } 2312 /* Non-temporary stop condition will trigger fail fast */ 2313 if (device->stopped & ~DASD_STOPPED_PENDING && 2314 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) && 2315 (!dasd_eer_enabled(device))) { 2316 cqr->status = DASD_CQR_FAILED; 2317 cqr->intrc = -ENOLINK; 2318 continue; 2319 } 2320 /* 2321 * Don't try to start requests if device is in 2322 * offline processing, it might wait forever 2323 */ 2324 if (test_bit(DASD_FLAG_OFFLINE, &device->flags)) { 2325 cqr->status = DASD_CQR_FAILED; 2326 cqr->intrc = -ENODEV; 2327 continue; 2328 } 2329 /* 2330 * Don't try to start requests if device is stopped 2331 * except path verification requests 2332 */ 2333 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) { 2334 if (interruptible) { 2335 rc = wait_event_interruptible( 2336 generic_waitq, !(device->stopped)); 2337 if (rc == -ERESTARTSYS) { 2338 cqr->status = DASD_CQR_FAILED; 2339 maincqr->intrc = rc; 2340 continue; 2341 } 2342 } else 2343 wait_event(generic_waitq, !(device->stopped)); 2344 } 2345 if (!cqr->callback) 2346 cqr->callback = dasd_wakeup_cb; 2347 2348 cqr->callback_data = DASD_SLEEPON_START_TAG; 2349 dasd_add_request_tail(cqr); 2350 if (interruptible) { 2351 rc = wait_event_interruptible( 2352 generic_waitq, _wait_for_wakeup(cqr)); 2353 if (rc == -ERESTARTSYS) { 2354 dasd_cancel_req(cqr); 2355 /* wait (non-interruptible) for final status */ 2356 wait_event(generic_waitq, 2357 _wait_for_wakeup(cqr)); 2358 cqr->status = DASD_CQR_FAILED; 2359 maincqr->intrc = rc; 2360 continue; 2361 } 2362 } else 2363 wait_event(generic_waitq, _wait_for_wakeup(cqr)); 2364 } 2365 2366 maincqr->endclk = get_tod_clock(); 2367 if ((maincqr->status != DASD_CQR_DONE) && 2368 (maincqr->intrc != -ERESTARTSYS)) 2369 dasd_log_sense(maincqr, &maincqr->irb); 2370 if (maincqr->status == DASD_CQR_DONE) 2371 rc = 0; 2372 else if (maincqr->intrc) 2373 rc = maincqr->intrc; 2374 else 2375 rc = -EIO; 2376 return rc; 2377 } 2378 2379 static inline int _wait_for_wakeup_queue(struct list_head *ccw_queue) 2380 { 2381 struct dasd_ccw_req *cqr; 2382 2383 list_for_each_entry(cqr, ccw_queue, blocklist) { 2384 if (cqr->callback_data != DASD_SLEEPON_END_TAG) 2385 return 0; 2386 } 2387 2388 return 1; 2389 } 2390 2391 static int _dasd_sleep_on_queue(struct list_head *ccw_queue, int interruptible) 2392 { 2393 struct dasd_device *device; 2394 struct dasd_ccw_req *cqr, *n; 2395 u8 *sense = NULL; 2396 int rc; 2397 2398 retry: 2399 list_for_each_entry_safe(cqr, n, ccw_queue, blocklist) { 2400 device = cqr->startdev; 2401 if (cqr->status != DASD_CQR_FILLED) /*could be failed*/ 2402 continue; 2403 2404 if (test_bit(DASD_FLAG_LOCK_STOLEN, &device->flags) && 2405 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) { 2406 cqr->status = DASD_CQR_FAILED; 2407 cqr->intrc = -EPERM; 2408 continue; 2409 } 2410 /*Non-temporary stop condition will trigger fail fast*/ 2411 if (device->stopped & ~DASD_STOPPED_PENDING && 2412 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) && 2413 !dasd_eer_enabled(device)) { 2414 cqr->status = DASD_CQR_FAILED; 2415 cqr->intrc = -EAGAIN; 2416 continue; 2417 } 2418 2419 /*Don't try to start requests if device is stopped*/ 2420 if (interruptible) { 2421 rc = wait_event_interruptible( 2422 generic_waitq, !device->stopped); 2423 if (rc == -ERESTARTSYS) { 2424 cqr->status = DASD_CQR_FAILED; 2425 cqr->intrc = rc; 2426 continue; 2427 } 2428 } else 2429 wait_event(generic_waitq, !(device->stopped)); 2430 2431 if (!cqr->callback) 2432 cqr->callback = dasd_wakeup_cb; 2433 cqr->callback_data = DASD_SLEEPON_START_TAG; 2434 dasd_add_request_tail(cqr); 2435 } 2436 2437 wait_event(generic_waitq, _wait_for_wakeup_queue(ccw_queue)); 2438 2439 rc = 0; 2440 list_for_each_entry_safe(cqr, n, ccw_queue, blocklist) { 2441 /* 2442 * In some cases the 'File Protected' or 'Incorrect Length' 2443 * error might be expected and error recovery would be 2444 * unnecessary in these cases. Check if the according suppress 2445 * bit is set. 2446 */ 2447 sense = dasd_get_sense(&cqr->irb); 2448 if (sense && sense[1] & SNS1_FILE_PROTECTED && 2449 test_bit(DASD_CQR_SUPPRESS_FP, &cqr->flags)) 2450 continue; 2451 if (scsw_cstat(&cqr->irb.scsw) == 0x40 && 2452 test_bit(DASD_CQR_SUPPRESS_IL, &cqr->flags)) 2453 continue; 2454 2455 /* 2456 * for alias devices simplify error recovery and 2457 * return to upper layer 2458 * do not skip ERP requests 2459 */ 2460 if (cqr->startdev != cqr->basedev && !cqr->refers && 2461 (cqr->status == DASD_CQR_TERMINATED || 2462 cqr->status == DASD_CQR_NEED_ERP)) 2463 return -EAGAIN; 2464 2465 /* normal recovery for basedev IO */ 2466 if (__dasd_sleep_on_erp(cqr)) 2467 /* handle erp first */ 2468 goto retry; 2469 } 2470 2471 return 0; 2472 } 2473 2474 /* 2475 * Queue a request to the tail of the device ccw_queue and wait for 2476 * it's completion. 2477 */ 2478 int dasd_sleep_on(struct dasd_ccw_req *cqr) 2479 { 2480 return _dasd_sleep_on(cqr, 0); 2481 } 2482 EXPORT_SYMBOL(dasd_sleep_on); 2483 2484 /* 2485 * Start requests from a ccw_queue and wait for their completion. 2486 */ 2487 int dasd_sleep_on_queue(struct list_head *ccw_queue) 2488 { 2489 return _dasd_sleep_on_queue(ccw_queue, 0); 2490 } 2491 EXPORT_SYMBOL(dasd_sleep_on_queue); 2492 2493 /* 2494 * Queue a request to the tail of the device ccw_queue and wait 2495 * interruptible for it's completion. 2496 */ 2497 int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr) 2498 { 2499 return _dasd_sleep_on(cqr, 1); 2500 } 2501 EXPORT_SYMBOL(dasd_sleep_on_interruptible); 2502 2503 /* 2504 * Whoa nelly now it gets really hairy. For some functions (e.g. steal lock 2505 * for eckd devices) the currently running request has to be terminated 2506 * and be put back to status queued, before the special request is added 2507 * to the head of the queue. Then the special request is waited on normally. 2508 */ 2509 static inline int _dasd_term_running_cqr(struct dasd_device *device) 2510 { 2511 struct dasd_ccw_req *cqr; 2512 int rc; 2513 2514 if (list_empty(&device->ccw_queue)) 2515 return 0; 2516 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist); 2517 rc = device->discipline->term_IO(cqr); 2518 if (!rc) 2519 /* 2520 * CQR terminated because a more important request is pending. 2521 * Undo decreasing of retry counter because this is 2522 * not an error case. 2523 */ 2524 cqr->retries++; 2525 return rc; 2526 } 2527 2528 int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) 2529 { 2530 struct dasd_device *device; 2531 int rc; 2532 2533 device = cqr->startdev; 2534 if (test_bit(DASD_FLAG_LOCK_STOLEN, &device->flags) && 2535 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) { 2536 cqr->status = DASD_CQR_FAILED; 2537 cqr->intrc = -EPERM; 2538 return -EIO; 2539 } 2540 spin_lock_irq(get_ccwdev_lock(device->cdev)); 2541 rc = _dasd_term_running_cqr(device); 2542 if (rc) { 2543 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 2544 return rc; 2545 } 2546 cqr->callback = dasd_wakeup_cb; 2547 cqr->callback_data = DASD_SLEEPON_START_TAG; 2548 cqr->status = DASD_CQR_QUEUED; 2549 /* 2550 * add new request as second 2551 * first the terminated cqr needs to be finished 2552 */ 2553 list_add(&cqr->devlist, device->ccw_queue.next); 2554 2555 /* let the bh start the request to keep them in order */ 2556 dasd_schedule_device_bh(device); 2557 2558 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 2559 2560 wait_event(generic_waitq, _wait_for_wakeup(cqr)); 2561 2562 if (cqr->status == DASD_CQR_DONE) 2563 rc = 0; 2564 else if (cqr->intrc) 2565 rc = cqr->intrc; 2566 else 2567 rc = -EIO; 2568 2569 /* kick tasklets */ 2570 dasd_schedule_device_bh(device); 2571 if (device->block) 2572 dasd_schedule_block_bh(device->block); 2573 2574 return rc; 2575 } 2576 EXPORT_SYMBOL(dasd_sleep_on_immediatly); 2577 2578 /* 2579 * Cancels a request that was started with dasd_sleep_on_req. 2580 * This is useful to timeout requests. The request will be 2581 * terminated if it is currently in i/o. 2582 * Returns 0 if request termination was successful 2583 * negative error code if termination failed 2584 * Cancellation of a request is an asynchronous operation! The calling 2585 * function has to wait until the request is properly returned via callback. 2586 */ 2587 int dasd_cancel_req(struct dasd_ccw_req *cqr) 2588 { 2589 struct dasd_device *device = cqr->startdev; 2590 unsigned long flags; 2591 int rc; 2592 2593 rc = 0; 2594 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); 2595 switch (cqr->status) { 2596 case DASD_CQR_QUEUED: 2597 /* request was not started - just set to cleared */ 2598 cqr->status = DASD_CQR_CLEARED; 2599 if (cqr->callback_data == DASD_SLEEPON_START_TAG) 2600 cqr->callback_data = DASD_SLEEPON_END_TAG; 2601 break; 2602 case DASD_CQR_IN_IO: 2603 /* request in IO - terminate IO and release again */ 2604 rc = device->discipline->term_IO(cqr); 2605 if (rc) { 2606 dev_err(&device->cdev->dev, 2607 "Cancelling request %p failed with rc=%d\n", 2608 cqr, rc); 2609 } else { 2610 cqr->stopclk = get_tod_clock(); 2611 } 2612 break; 2613 default: /* already finished or clear pending - do nothing */ 2614 break; 2615 } 2616 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); 2617 dasd_schedule_device_bh(device); 2618 return rc; 2619 } 2620 EXPORT_SYMBOL(dasd_cancel_req); 2621 2622 /* 2623 * SECTION: Operations of the dasd_block layer. 2624 */ 2625 2626 /* 2627 * Timeout function for dasd_block. This is used when the block layer 2628 * is waiting for something that may not come reliably, (e.g. a state 2629 * change interrupt) 2630 */ 2631 static void dasd_block_timeout(unsigned long ptr) 2632 { 2633 unsigned long flags; 2634 struct dasd_block *block; 2635 2636 block = (struct dasd_block *) ptr; 2637 spin_lock_irqsave(get_ccwdev_lock(block->base->cdev), flags); 2638 /* re-activate request queue */ 2639 dasd_device_remove_stop_bits(block->base, DASD_STOPPED_PENDING); 2640 spin_unlock_irqrestore(get_ccwdev_lock(block->base->cdev), flags); 2641 dasd_schedule_block_bh(block); 2642 blk_mq_run_hw_queues(block->request_queue, true); 2643 } 2644 2645 /* 2646 * Setup timeout for a dasd_block in jiffies. 2647 */ 2648 void dasd_block_set_timer(struct dasd_block *block, int expires) 2649 { 2650 if (expires == 0) 2651 del_timer(&block->timer); 2652 else 2653 mod_timer(&block->timer, jiffies + expires); 2654 } 2655 EXPORT_SYMBOL(dasd_block_set_timer); 2656 2657 /* 2658 * Clear timeout for a dasd_block. 2659 */ 2660 void dasd_block_clear_timer(struct dasd_block *block) 2661 { 2662 del_timer(&block->timer); 2663 } 2664 EXPORT_SYMBOL(dasd_block_clear_timer); 2665 2666 /* 2667 * Process finished error recovery ccw. 2668 */ 2669 static void __dasd_process_erp(struct dasd_device *device, 2670 struct dasd_ccw_req *cqr) 2671 { 2672 dasd_erp_fn_t erp_fn; 2673 2674 if (cqr->status == DASD_CQR_DONE) 2675 DBF_DEV_EVENT(DBF_NOTICE, device, "%s", "ERP successful"); 2676 else 2677 dev_err(&device->cdev->dev, "ERP failed for the DASD\n"); 2678 erp_fn = device->discipline->erp_postaction(cqr); 2679 erp_fn(cqr); 2680 } 2681 2682 static void __dasd_cleanup_cqr(struct dasd_ccw_req *cqr) 2683 { 2684 struct request *req; 2685 blk_status_t error = BLK_STS_OK; 2686 int status; 2687 2688 req = (struct request *) cqr->callback_data; 2689 dasd_profile_end(cqr->block, cqr, req); 2690 2691 status = cqr->block->base->discipline->free_cp(cqr, req); 2692 if (status < 0) 2693 error = errno_to_blk_status(status); 2694 else if (status == 0) { 2695 switch (cqr->intrc) { 2696 case -EPERM: 2697 error = BLK_STS_NEXUS; 2698 break; 2699 case -ENOLINK: 2700 error = BLK_STS_TRANSPORT; 2701 break; 2702 case -ETIMEDOUT: 2703 error = BLK_STS_TIMEOUT; 2704 break; 2705 default: 2706 error = BLK_STS_IOERR; 2707 break; 2708 } 2709 } 2710 2711 /* 2712 * We need to take care for ETIMEDOUT errors here since the 2713 * complete callback does not get called in this case. 2714 * Take care of all errors here and avoid additional code to 2715 * transfer the error value to the complete callback. 2716 */ 2717 if (error) { 2718 blk_mq_end_request(req, error); 2719 blk_mq_run_hw_queues(req->q, true); 2720 } else { 2721 blk_mq_complete_request(req); 2722 } 2723 } 2724 2725 /* 2726 * Process ccw request queue. 2727 */ 2728 static void __dasd_process_block_ccw_queue(struct dasd_block *block, 2729 struct list_head *final_queue) 2730 { 2731 struct list_head *l, *n; 2732 struct dasd_ccw_req *cqr; 2733 dasd_erp_fn_t erp_fn; 2734 unsigned long flags; 2735 struct dasd_device *base = block->base; 2736 2737 restart: 2738 /* Process request with final status. */ 2739 list_for_each_safe(l, n, &block->ccw_queue) { 2740 cqr = list_entry(l, struct dasd_ccw_req, blocklist); 2741 if (cqr->status != DASD_CQR_DONE && 2742 cqr->status != DASD_CQR_FAILED && 2743 cqr->status != DASD_CQR_NEED_ERP && 2744 cqr->status != DASD_CQR_TERMINATED) 2745 continue; 2746 2747 if (cqr->status == DASD_CQR_TERMINATED) { 2748 base->discipline->handle_terminated_request(cqr); 2749 goto restart; 2750 } 2751 2752 /* Process requests that may be recovered */ 2753 if (cqr->status == DASD_CQR_NEED_ERP) { 2754 erp_fn = base->discipline->erp_action(cqr); 2755 if (IS_ERR(erp_fn(cqr))) 2756 continue; 2757 goto restart; 2758 } 2759 2760 /* log sense for fatal error */ 2761 if (cqr->status == DASD_CQR_FAILED) { 2762 dasd_log_sense(cqr, &cqr->irb); 2763 } 2764 2765 /* First of all call extended error reporting. */ 2766 if (dasd_eer_enabled(base) && 2767 cqr->status == DASD_CQR_FAILED) { 2768 dasd_eer_write(base, cqr, DASD_EER_FATALERROR); 2769 2770 /* restart request */ 2771 cqr->status = DASD_CQR_FILLED; 2772 cqr->retries = 255; 2773 spin_lock_irqsave(get_ccwdev_lock(base->cdev), flags); 2774 dasd_device_set_stop_bits(base, DASD_STOPPED_QUIESCE); 2775 spin_unlock_irqrestore(get_ccwdev_lock(base->cdev), 2776 flags); 2777 goto restart; 2778 } 2779 2780 /* Process finished ERP request. */ 2781 if (cqr->refers) { 2782 __dasd_process_erp(base, cqr); 2783 goto restart; 2784 } 2785 2786 /* Rechain finished requests to final queue */ 2787 cqr->endclk = get_tod_clock(); 2788 list_move_tail(&cqr->blocklist, final_queue); 2789 } 2790 } 2791 2792 static void dasd_return_cqr_cb(struct dasd_ccw_req *cqr, void *data) 2793 { 2794 dasd_schedule_block_bh(cqr->block); 2795 } 2796 2797 static void __dasd_block_start_head(struct dasd_block *block) 2798 { 2799 struct dasd_ccw_req *cqr; 2800 2801 if (list_empty(&block->ccw_queue)) 2802 return; 2803 /* We allways begin with the first requests on the queue, as some 2804 * of previously started requests have to be enqueued on a 2805 * dasd_device again for error recovery. 2806 */ 2807 list_for_each_entry(cqr, &block->ccw_queue, blocklist) { 2808 if (cqr->status != DASD_CQR_FILLED) 2809 continue; 2810 if (test_bit(DASD_FLAG_LOCK_STOLEN, &block->base->flags) && 2811 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) { 2812 cqr->status = DASD_CQR_FAILED; 2813 cqr->intrc = -EPERM; 2814 dasd_schedule_block_bh(block); 2815 continue; 2816 } 2817 /* Non-temporary stop condition will trigger fail fast */ 2818 if (block->base->stopped & ~DASD_STOPPED_PENDING && 2819 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) && 2820 (!dasd_eer_enabled(block->base))) { 2821 cqr->status = DASD_CQR_FAILED; 2822 cqr->intrc = -ENOLINK; 2823 dasd_schedule_block_bh(block); 2824 continue; 2825 } 2826 /* Don't try to start requests if device is stopped */ 2827 if (block->base->stopped) 2828 return; 2829 2830 /* just a fail safe check, should not happen */ 2831 if (!cqr->startdev) 2832 cqr->startdev = block->base; 2833 2834 /* make sure that the requests we submit find their way back */ 2835 cqr->callback = dasd_return_cqr_cb; 2836 2837 dasd_add_request_tail(cqr); 2838 } 2839 } 2840 2841 /* 2842 * Central dasd_block layer routine. Takes requests from the generic 2843 * block layer request queue, creates ccw requests, enqueues them on 2844 * a dasd_device and processes ccw requests that have been returned. 2845 */ 2846 static void dasd_block_tasklet(struct dasd_block *block) 2847 { 2848 struct list_head final_queue; 2849 struct list_head *l, *n; 2850 struct dasd_ccw_req *cqr; 2851 struct dasd_queue *dq; 2852 2853 atomic_set(&block->tasklet_scheduled, 0); 2854 INIT_LIST_HEAD(&final_queue); 2855 spin_lock_irq(&block->queue_lock); 2856 /* Finish off requests on ccw queue */ 2857 __dasd_process_block_ccw_queue(block, &final_queue); 2858 spin_unlock_irq(&block->queue_lock); 2859 2860 /* Now call the callback function of requests with final status */ 2861 list_for_each_safe(l, n, &final_queue) { 2862 cqr = list_entry(l, struct dasd_ccw_req, blocklist); 2863 dq = cqr->dq; 2864 spin_lock_irq(&dq->lock); 2865 list_del_init(&cqr->blocklist); 2866 __dasd_cleanup_cqr(cqr); 2867 spin_unlock_irq(&dq->lock); 2868 } 2869 2870 spin_lock_irq(&block->queue_lock); 2871 /* Now check if the head of the ccw queue needs to be started. */ 2872 __dasd_block_start_head(block); 2873 spin_unlock_irq(&block->queue_lock); 2874 2875 if (waitqueue_active(&shutdown_waitq)) 2876 wake_up(&shutdown_waitq); 2877 dasd_put_device(block->base); 2878 } 2879 2880 static void _dasd_wake_block_flush_cb(struct dasd_ccw_req *cqr, void *data) 2881 { 2882 wake_up(&dasd_flush_wq); 2883 } 2884 2885 /* 2886 * Requeue a request back to the block request queue 2887 * only works for block requests 2888 */ 2889 static int _dasd_requeue_request(struct dasd_ccw_req *cqr) 2890 { 2891 struct dasd_block *block = cqr->block; 2892 struct request *req; 2893 2894 if (!block) 2895 return -EINVAL; 2896 spin_lock_irq(&cqr->dq->lock); 2897 req = (struct request *) cqr->callback_data; 2898 blk_mq_requeue_request(req, false); 2899 spin_unlock_irq(&cqr->dq->lock); 2900 2901 return 0; 2902 } 2903 2904 /* 2905 * Go through all request on the dasd_block request queue, cancel them 2906 * on the respective dasd_device, and return them to the generic 2907 * block layer. 2908 */ 2909 static int dasd_flush_block_queue(struct dasd_block *block) 2910 { 2911 struct dasd_ccw_req *cqr, *n; 2912 int rc, i; 2913 struct list_head flush_queue; 2914 unsigned long flags; 2915 2916 INIT_LIST_HEAD(&flush_queue); 2917 spin_lock_bh(&block->queue_lock); 2918 rc = 0; 2919 restart: 2920 list_for_each_entry_safe(cqr, n, &block->ccw_queue, blocklist) { 2921 /* if this request currently owned by a dasd_device cancel it */ 2922 if (cqr->status >= DASD_CQR_QUEUED) 2923 rc = dasd_cancel_req(cqr); 2924 if (rc < 0) 2925 break; 2926 /* Rechain request (including erp chain) so it won't be 2927 * touched by the dasd_block_tasklet anymore. 2928 * Replace the callback so we notice when the request 2929 * is returned from the dasd_device layer. 2930 */ 2931 cqr->callback = _dasd_wake_block_flush_cb; 2932 for (i = 0; cqr != NULL; cqr = cqr->refers, i++) 2933 list_move_tail(&cqr->blocklist, &flush_queue); 2934 if (i > 1) 2935 /* moved more than one request - need to restart */ 2936 goto restart; 2937 } 2938 spin_unlock_bh(&block->queue_lock); 2939 /* Now call the callback function of flushed requests */ 2940 restart_cb: 2941 list_for_each_entry_safe(cqr, n, &flush_queue, blocklist) { 2942 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED)); 2943 /* Process finished ERP request. */ 2944 if (cqr->refers) { 2945 spin_lock_bh(&block->queue_lock); 2946 __dasd_process_erp(block->base, cqr); 2947 spin_unlock_bh(&block->queue_lock); 2948 /* restart list_for_xx loop since dasd_process_erp 2949 * might remove multiple elements */ 2950 goto restart_cb; 2951 } 2952 /* call the callback function */ 2953 spin_lock_irqsave(&cqr->dq->lock, flags); 2954 cqr->endclk = get_tod_clock(); 2955 list_del_init(&cqr->blocklist); 2956 __dasd_cleanup_cqr(cqr); 2957 spin_unlock_irqrestore(&cqr->dq->lock, flags); 2958 } 2959 return rc; 2960 } 2961 2962 /* 2963 * Schedules a call to dasd_tasklet over the device tasklet. 2964 */ 2965 void dasd_schedule_block_bh(struct dasd_block *block) 2966 { 2967 /* Protect against rescheduling. */ 2968 if (atomic_cmpxchg(&block->tasklet_scheduled, 0, 1) != 0) 2969 return; 2970 /* life cycle of block is bound to it's base device */ 2971 dasd_get_device(block->base); 2972 tasklet_hi_schedule(&block->tasklet); 2973 } 2974 EXPORT_SYMBOL(dasd_schedule_block_bh); 2975 2976 2977 /* 2978 * SECTION: external block device operations 2979 * (request queue handling, open, release, etc.) 2980 */ 2981 2982 /* 2983 * Dasd request queue function. Called from ll_rw_blk.c 2984 */ 2985 static blk_status_t do_dasd_request(struct blk_mq_hw_ctx *hctx, 2986 const struct blk_mq_queue_data *qd) 2987 { 2988 struct dasd_block *block = hctx->queue->queuedata; 2989 struct dasd_queue *dq = hctx->driver_data; 2990 struct request *req = qd->rq; 2991 struct dasd_device *basedev; 2992 struct dasd_ccw_req *cqr; 2993 blk_status_t rc = BLK_STS_OK; 2994 2995 basedev = block->base; 2996 spin_lock_irq(&dq->lock); 2997 if (basedev->state < DASD_STATE_READY) { 2998 DBF_DEV_EVENT(DBF_ERR, basedev, 2999 "device not ready for request %p", req); 3000 rc = BLK_STS_IOERR; 3001 goto out; 3002 } 3003 3004 /* 3005 * if device is stopped do not fetch new requests 3006 * except failfast is active which will let requests fail 3007 * immediately in __dasd_block_start_head() 3008 */ 3009 if (basedev->stopped && !(basedev->features & DASD_FEATURE_FAILFAST)) { 3010 DBF_DEV_EVENT(DBF_ERR, basedev, 3011 "device stopped request %p", req); 3012 rc = BLK_STS_RESOURCE; 3013 goto out; 3014 } 3015 3016 if (basedev->features & DASD_FEATURE_READONLY && 3017 rq_data_dir(req) == WRITE) { 3018 DBF_DEV_EVENT(DBF_ERR, basedev, 3019 "Rejecting write request %p", req); 3020 rc = BLK_STS_IOERR; 3021 goto out; 3022 } 3023 3024 if (test_bit(DASD_FLAG_ABORTALL, &basedev->flags) && 3025 (basedev->features & DASD_FEATURE_FAILFAST || 3026 blk_noretry_request(req))) { 3027 DBF_DEV_EVENT(DBF_ERR, basedev, 3028 "Rejecting failfast request %p", req); 3029 rc = BLK_STS_IOERR; 3030 goto out; 3031 } 3032 3033 cqr = basedev->discipline->build_cp(basedev, block, req); 3034 if (IS_ERR(cqr)) { 3035 if (PTR_ERR(cqr) == -EBUSY || 3036 PTR_ERR(cqr) == -ENOMEM || 3037 PTR_ERR(cqr) == -EAGAIN) { 3038 rc = BLK_STS_RESOURCE; 3039 goto out; 3040 } 3041 DBF_DEV_EVENT(DBF_ERR, basedev, 3042 "CCW creation failed (rc=%ld) on request %p", 3043 PTR_ERR(cqr), req); 3044 rc = BLK_STS_IOERR; 3045 goto out; 3046 } 3047 /* 3048 * Note: callback is set to dasd_return_cqr_cb in 3049 * __dasd_block_start_head to cover erp requests as well 3050 */ 3051 cqr->callback_data = req; 3052 cqr->status = DASD_CQR_FILLED; 3053 cqr->dq = dq; 3054 req->completion_data = cqr; 3055 blk_mq_start_request(req); 3056 spin_lock(&block->queue_lock); 3057 list_add_tail(&cqr->blocklist, &block->ccw_queue); 3058 INIT_LIST_HEAD(&cqr->devlist); 3059 dasd_profile_start(block, cqr, req); 3060 dasd_schedule_block_bh(block); 3061 spin_unlock(&block->queue_lock); 3062 3063 out: 3064 spin_unlock_irq(&dq->lock); 3065 return rc; 3066 } 3067 3068 /* 3069 * Block timeout callback, called from the block layer 3070 * 3071 * Return values: 3072 * BLK_EH_RESET_TIMER if the request should be left running 3073 * BLK_EH_NOT_HANDLED if the request is handled or terminated 3074 * by the driver. 3075 */ 3076 enum blk_eh_timer_return dasd_times_out(struct request *req, bool reserved) 3077 { 3078 struct dasd_ccw_req *cqr = req->completion_data; 3079 struct dasd_block *block = req->q->queuedata; 3080 struct dasd_device *device; 3081 unsigned long flags; 3082 int rc = 0; 3083 3084 if (!cqr) 3085 return BLK_EH_NOT_HANDLED; 3086 3087 spin_lock_irqsave(&cqr->dq->lock, flags); 3088 device = cqr->startdev ? cqr->startdev : block->base; 3089 if (!device->blk_timeout) { 3090 spin_unlock_irqrestore(&cqr->dq->lock, flags); 3091 return BLK_EH_RESET_TIMER; 3092 } 3093 DBF_DEV_EVENT(DBF_WARNING, device, 3094 " dasd_times_out cqr %p status %x", 3095 cqr, cqr->status); 3096 3097 spin_lock(&block->queue_lock); 3098 spin_lock(get_ccwdev_lock(device->cdev)); 3099 cqr->retries = -1; 3100 cqr->intrc = -ETIMEDOUT; 3101 if (cqr->status >= DASD_CQR_QUEUED) { 3102 spin_unlock(get_ccwdev_lock(device->cdev)); 3103 rc = dasd_cancel_req(cqr); 3104 } else if (cqr->status == DASD_CQR_FILLED || 3105 cqr->status == DASD_CQR_NEED_ERP) { 3106 cqr->status = DASD_CQR_TERMINATED; 3107 spin_unlock(get_ccwdev_lock(device->cdev)); 3108 } else if (cqr->status == DASD_CQR_IN_ERP) { 3109 struct dasd_ccw_req *searchcqr, *nextcqr, *tmpcqr; 3110 3111 list_for_each_entry_safe(searchcqr, nextcqr, 3112 &block->ccw_queue, blocklist) { 3113 tmpcqr = searchcqr; 3114 while (tmpcqr->refers) 3115 tmpcqr = tmpcqr->refers; 3116 if (tmpcqr != cqr) 3117 continue; 3118 /* searchcqr is an ERP request for cqr */ 3119 searchcqr->retries = -1; 3120 searchcqr->intrc = -ETIMEDOUT; 3121 if (searchcqr->status >= DASD_CQR_QUEUED) { 3122 spin_unlock(get_ccwdev_lock(device->cdev)); 3123 rc = dasd_cancel_req(searchcqr); 3124 spin_lock(get_ccwdev_lock(device->cdev)); 3125 } else if ((searchcqr->status == DASD_CQR_FILLED) || 3126 (searchcqr->status == DASD_CQR_NEED_ERP)) { 3127 searchcqr->status = DASD_CQR_TERMINATED; 3128 rc = 0; 3129 } else if (searchcqr->status == DASD_CQR_IN_ERP) { 3130 /* 3131 * Shouldn't happen; most recent ERP 3132 * request is at the front of queue 3133 */ 3134 continue; 3135 } 3136 break; 3137 } 3138 spin_unlock(get_ccwdev_lock(device->cdev)); 3139 } 3140 dasd_schedule_block_bh(block); 3141 spin_unlock(&block->queue_lock); 3142 spin_unlock_irqrestore(&cqr->dq->lock, flags); 3143 3144 return rc ? BLK_EH_RESET_TIMER : BLK_EH_NOT_HANDLED; 3145 } 3146 3147 static int dasd_init_hctx(struct blk_mq_hw_ctx *hctx, void *data, 3148 unsigned int idx) 3149 { 3150 struct dasd_queue *dq = kzalloc(sizeof(*dq), GFP_KERNEL); 3151 3152 if (!dq) 3153 return -ENOMEM; 3154 3155 spin_lock_init(&dq->lock); 3156 hctx->driver_data = dq; 3157 3158 return 0; 3159 } 3160 3161 static void dasd_exit_hctx(struct blk_mq_hw_ctx *hctx, unsigned int idx) 3162 { 3163 kfree(hctx->driver_data); 3164 hctx->driver_data = NULL; 3165 } 3166 3167 static void dasd_request_done(struct request *req) 3168 { 3169 blk_mq_end_request(req, 0); 3170 blk_mq_run_hw_queues(req->q, true); 3171 } 3172 3173 static struct blk_mq_ops dasd_mq_ops = { 3174 .queue_rq = do_dasd_request, 3175 .complete = dasd_request_done, 3176 .timeout = dasd_times_out, 3177 .init_hctx = dasd_init_hctx, 3178 .exit_hctx = dasd_exit_hctx, 3179 }; 3180 3181 /* 3182 * Allocate and initialize request queue and default I/O scheduler. 3183 */ 3184 static int dasd_alloc_queue(struct dasd_block *block) 3185 { 3186 int rc; 3187 3188 block->tag_set.ops = &dasd_mq_ops; 3189 block->tag_set.nr_hw_queues = DASD_NR_HW_QUEUES; 3190 block->tag_set.queue_depth = DASD_MAX_LCU_DEV * DASD_REQ_PER_DEV; 3191 block->tag_set.flags = BLK_MQ_F_SHOULD_MERGE; 3192 3193 rc = blk_mq_alloc_tag_set(&block->tag_set); 3194 if (rc) 3195 return rc; 3196 3197 block->request_queue = blk_mq_init_queue(&block->tag_set); 3198 if (IS_ERR(block->request_queue)) 3199 return PTR_ERR(block->request_queue); 3200 3201 block->request_queue->queuedata = block; 3202 3203 return 0; 3204 } 3205 3206 /* 3207 * Allocate and initialize request queue. 3208 */ 3209 static void dasd_setup_queue(struct dasd_block *block) 3210 { 3211 unsigned int logical_block_size = block->bp_block; 3212 struct request_queue *q = block->request_queue; 3213 unsigned int max_bytes, max_discard_sectors; 3214 int max; 3215 3216 if (block->base->features & DASD_FEATURE_USERAW) { 3217 /* 3218 * the max_blocks value for raw_track access is 256 3219 * it is higher than the native ECKD value because we 3220 * only need one ccw per track 3221 * so the max_hw_sectors are 3222 * 2048 x 512B = 1024kB = 16 tracks 3223 */ 3224 max = 2048; 3225 } else { 3226 max = block->base->discipline->max_blocks << block->s2b_shift; 3227 } 3228 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, q); 3229 q->limits.max_dev_sectors = max; 3230 blk_queue_logical_block_size(q, logical_block_size); 3231 blk_queue_max_hw_sectors(q, max); 3232 blk_queue_max_segments(q, USHRT_MAX); 3233 /* with page sized segments we can translate each segement into 3234 * one idaw/tidaw 3235 */ 3236 blk_queue_max_segment_size(q, PAGE_SIZE); 3237 blk_queue_segment_boundary(q, PAGE_SIZE - 1); 3238 3239 /* Only activate blocklayer discard support for devices that support it */ 3240 if (block->base->features & DASD_FEATURE_DISCARD) { 3241 q->limits.discard_granularity = logical_block_size; 3242 q->limits.discard_alignment = PAGE_SIZE; 3243 3244 /* Calculate max_discard_sectors and make it PAGE aligned */ 3245 max_bytes = USHRT_MAX * logical_block_size; 3246 max_bytes = ALIGN(max_bytes, PAGE_SIZE) - PAGE_SIZE; 3247 max_discard_sectors = max_bytes / logical_block_size; 3248 3249 blk_queue_max_discard_sectors(q, max_discard_sectors); 3250 blk_queue_max_write_zeroes_sectors(q, max_discard_sectors); 3251 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, q); 3252 } 3253 } 3254 3255 /* 3256 * Deactivate and free request queue. 3257 */ 3258 static void dasd_free_queue(struct dasd_block *block) 3259 { 3260 if (block->request_queue) { 3261 blk_cleanup_queue(block->request_queue); 3262 blk_mq_free_tag_set(&block->tag_set); 3263 block->request_queue = NULL; 3264 } 3265 } 3266 3267 static int dasd_open(struct block_device *bdev, fmode_t mode) 3268 { 3269 struct dasd_device *base; 3270 int rc; 3271 3272 base = dasd_device_from_gendisk(bdev->bd_disk); 3273 if (!base) 3274 return -ENODEV; 3275 3276 atomic_inc(&base->block->open_count); 3277 if (test_bit(DASD_FLAG_OFFLINE, &base->flags)) { 3278 rc = -ENODEV; 3279 goto unlock; 3280 } 3281 3282 if (!try_module_get(base->discipline->owner)) { 3283 rc = -EINVAL; 3284 goto unlock; 3285 } 3286 3287 if (dasd_probeonly) { 3288 dev_info(&base->cdev->dev, 3289 "Accessing the DASD failed because it is in " 3290 "probeonly mode\n"); 3291 rc = -EPERM; 3292 goto out; 3293 } 3294 3295 if (base->state <= DASD_STATE_BASIC) { 3296 DBF_DEV_EVENT(DBF_ERR, base, " %s", 3297 " Cannot open unrecognized device"); 3298 rc = -ENODEV; 3299 goto out; 3300 } 3301 3302 if ((mode & FMODE_WRITE) && 3303 (test_bit(DASD_FLAG_DEVICE_RO, &base->flags) || 3304 (base->features & DASD_FEATURE_READONLY))) { 3305 rc = -EROFS; 3306 goto out; 3307 } 3308 3309 dasd_put_device(base); 3310 return 0; 3311 3312 out: 3313 module_put(base->discipline->owner); 3314 unlock: 3315 atomic_dec(&base->block->open_count); 3316 dasd_put_device(base); 3317 return rc; 3318 } 3319 3320 static void dasd_release(struct gendisk *disk, fmode_t mode) 3321 { 3322 struct dasd_device *base = dasd_device_from_gendisk(disk); 3323 if (base) { 3324 atomic_dec(&base->block->open_count); 3325 module_put(base->discipline->owner); 3326 dasd_put_device(base); 3327 } 3328 } 3329 3330 /* 3331 * Return disk geometry. 3332 */ 3333 static int dasd_getgeo(struct block_device *bdev, struct hd_geometry *geo) 3334 { 3335 struct dasd_device *base; 3336 3337 base = dasd_device_from_gendisk(bdev->bd_disk); 3338 if (!base) 3339 return -ENODEV; 3340 3341 if (!base->discipline || 3342 !base->discipline->fill_geometry) { 3343 dasd_put_device(base); 3344 return -EINVAL; 3345 } 3346 base->discipline->fill_geometry(base->block, geo); 3347 geo->start = get_start_sect(bdev) >> base->block->s2b_shift; 3348 dasd_put_device(base); 3349 return 0; 3350 } 3351 3352 const struct block_device_operations 3353 dasd_device_operations = { 3354 .owner = THIS_MODULE, 3355 .open = dasd_open, 3356 .release = dasd_release, 3357 .ioctl = dasd_ioctl, 3358 .compat_ioctl = dasd_ioctl, 3359 .getgeo = dasd_getgeo, 3360 }; 3361 3362 /******************************************************************************* 3363 * end of block device operations 3364 */ 3365 3366 static void 3367 dasd_exit(void) 3368 { 3369 #ifdef CONFIG_PROC_FS 3370 dasd_proc_exit(); 3371 #endif 3372 dasd_eer_exit(); 3373 if (dasd_page_cache != NULL) { 3374 kmem_cache_destroy(dasd_page_cache); 3375 dasd_page_cache = NULL; 3376 } 3377 dasd_gendisk_exit(); 3378 dasd_devmap_exit(); 3379 if (dasd_debug_area != NULL) { 3380 debug_unregister(dasd_debug_area); 3381 dasd_debug_area = NULL; 3382 } 3383 dasd_statistics_removeroot(); 3384 } 3385 3386 /* 3387 * SECTION: common functions for ccw_driver use 3388 */ 3389 3390 /* 3391 * Is the device read-only? 3392 * Note that this function does not report the setting of the 3393 * readonly device attribute, but how it is configured in z/VM. 3394 */ 3395 int dasd_device_is_ro(struct dasd_device *device) 3396 { 3397 struct ccw_dev_id dev_id; 3398 struct diag210 diag_data; 3399 int rc; 3400 3401 if (!MACHINE_IS_VM) 3402 return 0; 3403 ccw_device_get_id(device->cdev, &dev_id); 3404 memset(&diag_data, 0, sizeof(diag_data)); 3405 diag_data.vrdcdvno = dev_id.devno; 3406 diag_data.vrdclen = sizeof(diag_data); 3407 rc = diag210(&diag_data); 3408 if (rc == 0 || rc == 2) { 3409 return diag_data.vrdcvfla & 0x80; 3410 } else { 3411 DBF_EVENT(DBF_WARNING, "diag210 failed for dev=%04x with rc=%d", 3412 dev_id.devno, rc); 3413 return 0; 3414 } 3415 } 3416 EXPORT_SYMBOL_GPL(dasd_device_is_ro); 3417 3418 static void dasd_generic_auto_online(void *data, async_cookie_t cookie) 3419 { 3420 struct ccw_device *cdev = data; 3421 int ret; 3422 3423 ret = ccw_device_set_online(cdev); 3424 if (ret) 3425 pr_warn("%s: Setting the DASD online failed with rc=%d\n", 3426 dev_name(&cdev->dev), ret); 3427 } 3428 3429 /* 3430 * Initial attempt at a probe function. this can be simplified once 3431 * the other detection code is gone. 3432 */ 3433 int dasd_generic_probe(struct ccw_device *cdev, 3434 struct dasd_discipline *discipline) 3435 { 3436 int ret; 3437 3438 ret = dasd_add_sysfs_files(cdev); 3439 if (ret) { 3440 DBF_EVENT_DEVID(DBF_WARNING, cdev, "%s", 3441 "dasd_generic_probe: could not add " 3442 "sysfs entries"); 3443 return ret; 3444 } 3445 cdev->handler = &dasd_int_handler; 3446 3447 /* 3448 * Automatically online either all dasd devices (dasd_autodetect) 3449 * or all devices specified with dasd= parameters during 3450 * initial probe. 3451 */ 3452 if ((dasd_get_feature(cdev, DASD_FEATURE_INITIAL_ONLINE) > 0 ) || 3453 (dasd_autodetect && dasd_busid_known(dev_name(&cdev->dev)) != 0)) 3454 async_schedule(dasd_generic_auto_online, cdev); 3455 return 0; 3456 } 3457 EXPORT_SYMBOL_GPL(dasd_generic_probe); 3458 3459 void dasd_generic_free_discipline(struct dasd_device *device) 3460 { 3461 /* Forget the discipline information. */ 3462 if (device->discipline) { 3463 if (device->discipline->uncheck_device) 3464 device->discipline->uncheck_device(device); 3465 module_put(device->discipline->owner); 3466 device->discipline = NULL; 3467 } 3468 if (device->base_discipline) { 3469 module_put(device->base_discipline->owner); 3470 device->base_discipline = NULL; 3471 } 3472 } 3473 EXPORT_SYMBOL_GPL(dasd_generic_free_discipline); 3474 3475 /* 3476 * This will one day be called from a global not_oper handler. 3477 * It is also used by driver_unregister during module unload. 3478 */ 3479 void dasd_generic_remove(struct ccw_device *cdev) 3480 { 3481 struct dasd_device *device; 3482 struct dasd_block *block; 3483 3484 cdev->handler = NULL; 3485 3486 device = dasd_device_from_cdev(cdev); 3487 if (IS_ERR(device)) { 3488 dasd_remove_sysfs_files(cdev); 3489 return; 3490 } 3491 if (test_and_set_bit(DASD_FLAG_OFFLINE, &device->flags) && 3492 !test_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags)) { 3493 /* Already doing offline processing */ 3494 dasd_put_device(device); 3495 dasd_remove_sysfs_files(cdev); 3496 return; 3497 } 3498 /* 3499 * This device is removed unconditionally. Set offline 3500 * flag to prevent dasd_open from opening it while it is 3501 * no quite down yet. 3502 */ 3503 dasd_set_target_state(device, DASD_STATE_NEW); 3504 /* dasd_delete_device destroys the device reference. */ 3505 block = device->block; 3506 dasd_delete_device(device); 3507 /* 3508 * life cycle of block is bound to device, so delete it after 3509 * device was safely removed 3510 */ 3511 if (block) 3512 dasd_free_block(block); 3513 3514 dasd_remove_sysfs_files(cdev); 3515 } 3516 EXPORT_SYMBOL_GPL(dasd_generic_remove); 3517 3518 /* 3519 * Activate a device. This is called from dasd_{eckd,fba}_probe() when either 3520 * the device is detected for the first time and is supposed to be used 3521 * or the user has started activation through sysfs. 3522 */ 3523 int dasd_generic_set_online(struct ccw_device *cdev, 3524 struct dasd_discipline *base_discipline) 3525 { 3526 struct dasd_discipline *discipline; 3527 struct dasd_device *device; 3528 int rc; 3529 3530 /* first online clears initial online feature flag */ 3531 dasd_set_feature(cdev, DASD_FEATURE_INITIAL_ONLINE, 0); 3532 device = dasd_create_device(cdev); 3533 if (IS_ERR(device)) 3534 return PTR_ERR(device); 3535 3536 discipline = base_discipline; 3537 if (device->features & DASD_FEATURE_USEDIAG) { 3538 if (!dasd_diag_discipline_pointer) { 3539 /* Try to load the required module. */ 3540 rc = request_module(DASD_DIAG_MOD); 3541 if (rc) { 3542 pr_warn("%s Setting the DASD online failed " 3543 "because the required module %s " 3544 "could not be loaded (rc=%d)\n", 3545 dev_name(&cdev->dev), DASD_DIAG_MOD, 3546 rc); 3547 dasd_delete_device(device); 3548 return -ENODEV; 3549 } 3550 } 3551 /* Module init could have failed, so check again here after 3552 * request_module(). */ 3553 if (!dasd_diag_discipline_pointer) { 3554 pr_warn("%s Setting the DASD online failed because of missing DIAG discipline\n", 3555 dev_name(&cdev->dev)); 3556 dasd_delete_device(device); 3557 return -ENODEV; 3558 } 3559 discipline = dasd_diag_discipline_pointer; 3560 } 3561 if (!try_module_get(base_discipline->owner)) { 3562 dasd_delete_device(device); 3563 return -EINVAL; 3564 } 3565 if (!try_module_get(discipline->owner)) { 3566 module_put(base_discipline->owner); 3567 dasd_delete_device(device); 3568 return -EINVAL; 3569 } 3570 device->base_discipline = base_discipline; 3571 device->discipline = discipline; 3572 3573 /* check_device will allocate block device if necessary */ 3574 rc = discipline->check_device(device); 3575 if (rc) { 3576 pr_warn("%s Setting the DASD online with discipline %s failed with rc=%i\n", 3577 dev_name(&cdev->dev), discipline->name, rc); 3578 module_put(discipline->owner); 3579 module_put(base_discipline->owner); 3580 dasd_delete_device(device); 3581 return rc; 3582 } 3583 3584 dasd_set_target_state(device, DASD_STATE_ONLINE); 3585 if (device->state <= DASD_STATE_KNOWN) { 3586 pr_warn("%s Setting the DASD online failed because of a missing discipline\n", 3587 dev_name(&cdev->dev)); 3588 rc = -ENODEV; 3589 dasd_set_target_state(device, DASD_STATE_NEW); 3590 if (device->block) 3591 dasd_free_block(device->block); 3592 dasd_delete_device(device); 3593 } else 3594 pr_debug("dasd_generic device %s found\n", 3595 dev_name(&cdev->dev)); 3596 3597 wait_event(dasd_init_waitq, _wait_for_device(device)); 3598 3599 dasd_put_device(device); 3600 return rc; 3601 } 3602 EXPORT_SYMBOL_GPL(dasd_generic_set_online); 3603 3604 int dasd_generic_set_offline(struct ccw_device *cdev) 3605 { 3606 struct dasd_device *device; 3607 struct dasd_block *block; 3608 int max_count, open_count, rc; 3609 unsigned long flags; 3610 3611 rc = 0; 3612 spin_lock_irqsave(get_ccwdev_lock(cdev), flags); 3613 device = dasd_device_from_cdev_locked(cdev); 3614 if (IS_ERR(device)) { 3615 spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags); 3616 return PTR_ERR(device); 3617 } 3618 3619 /* 3620 * We must make sure that this device is currently not in use. 3621 * The open_count is increased for every opener, that includes 3622 * the blkdev_get in dasd_scan_partitions. We are only interested 3623 * in the other openers. 3624 */ 3625 if (device->block) { 3626 max_count = device->block->bdev ? 0 : -1; 3627 open_count = atomic_read(&device->block->open_count); 3628 if (open_count > max_count) { 3629 if (open_count > 0) 3630 pr_warn("%s: The DASD cannot be set offline with open count %i\n", 3631 dev_name(&cdev->dev), open_count); 3632 else 3633 pr_warn("%s: The DASD cannot be set offline while it is in use\n", 3634 dev_name(&cdev->dev)); 3635 rc = -EBUSY; 3636 goto out_err; 3637 } 3638 } 3639 3640 /* 3641 * Test if the offline processing is already running and exit if so. 3642 * If a safe offline is being processed this could only be a normal 3643 * offline that should be able to overtake the safe offline and 3644 * cancel any I/O we do not want to wait for any longer 3645 */ 3646 if (test_bit(DASD_FLAG_OFFLINE, &device->flags)) { 3647 if (test_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags)) { 3648 clear_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, 3649 &device->flags); 3650 } else { 3651 rc = -EBUSY; 3652 goto out_err; 3653 } 3654 } 3655 set_bit(DASD_FLAG_OFFLINE, &device->flags); 3656 3657 /* 3658 * if safe_offline is called set safe_offline_running flag and 3659 * clear safe_offline so that a call to normal offline 3660 * can overrun safe_offline processing 3661 */ 3662 if (test_and_clear_bit(DASD_FLAG_SAFE_OFFLINE, &device->flags) && 3663 !test_and_set_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags)) { 3664 /* need to unlock here to wait for outstanding I/O */ 3665 spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags); 3666 /* 3667 * If we want to set the device safe offline all IO operations 3668 * should be finished before continuing the offline process 3669 * so sync bdev first and then wait for our queues to become 3670 * empty 3671 */ 3672 if (device->block) { 3673 rc = fsync_bdev(device->block->bdev); 3674 if (rc != 0) 3675 goto interrupted; 3676 } 3677 dasd_schedule_device_bh(device); 3678 rc = wait_event_interruptible(shutdown_waitq, 3679 _wait_for_empty_queues(device)); 3680 if (rc != 0) 3681 goto interrupted; 3682 3683 /* 3684 * check if a normal offline process overtook the offline 3685 * processing in this case simply do nothing beside returning 3686 * that we got interrupted 3687 * otherwise mark safe offline as not running any longer and 3688 * continue with normal offline 3689 */ 3690 spin_lock_irqsave(get_ccwdev_lock(cdev), flags); 3691 if (!test_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags)) { 3692 rc = -ERESTARTSYS; 3693 goto out_err; 3694 } 3695 clear_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags); 3696 } 3697 spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags); 3698 3699 dasd_set_target_state(device, DASD_STATE_NEW); 3700 /* dasd_delete_device destroys the device reference. */ 3701 block = device->block; 3702 dasd_delete_device(device); 3703 /* 3704 * life cycle of block is bound to device, so delete it after 3705 * device was safely removed 3706 */ 3707 if (block) 3708 dasd_free_block(block); 3709 3710 return 0; 3711 3712 interrupted: 3713 /* interrupted by signal */ 3714 spin_lock_irqsave(get_ccwdev_lock(cdev), flags); 3715 clear_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags); 3716 clear_bit(DASD_FLAG_OFFLINE, &device->flags); 3717 out_err: 3718 dasd_put_device(device); 3719 spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags); 3720 return rc; 3721 } 3722 EXPORT_SYMBOL_GPL(dasd_generic_set_offline); 3723 3724 int dasd_generic_last_path_gone(struct dasd_device *device) 3725 { 3726 struct dasd_ccw_req *cqr; 3727 3728 dev_warn(&device->cdev->dev, "No operational channel path is left " 3729 "for the device\n"); 3730 DBF_DEV_EVENT(DBF_WARNING, device, "%s", "last path gone"); 3731 /* First of all call extended error reporting. */ 3732 dasd_eer_write(device, NULL, DASD_EER_NOPATH); 3733 3734 if (device->state < DASD_STATE_BASIC) 3735 return 0; 3736 /* Device is active. We want to keep it. */ 3737 list_for_each_entry(cqr, &device->ccw_queue, devlist) 3738 if ((cqr->status == DASD_CQR_IN_IO) || 3739 (cqr->status == DASD_CQR_CLEAR_PENDING)) { 3740 cqr->status = DASD_CQR_QUEUED; 3741 cqr->retries++; 3742 } 3743 dasd_device_set_stop_bits(device, DASD_STOPPED_DC_WAIT); 3744 dasd_device_clear_timer(device); 3745 dasd_schedule_device_bh(device); 3746 return 1; 3747 } 3748 EXPORT_SYMBOL_GPL(dasd_generic_last_path_gone); 3749 3750 int dasd_generic_path_operational(struct dasd_device *device) 3751 { 3752 dev_info(&device->cdev->dev, "A channel path to the device has become " 3753 "operational\n"); 3754 DBF_DEV_EVENT(DBF_WARNING, device, "%s", "path operational"); 3755 dasd_device_remove_stop_bits(device, DASD_STOPPED_DC_WAIT); 3756 if (device->stopped & DASD_UNRESUMED_PM) { 3757 dasd_device_remove_stop_bits(device, DASD_UNRESUMED_PM); 3758 dasd_restore_device(device); 3759 return 1; 3760 } 3761 dasd_schedule_device_bh(device); 3762 if (device->block) { 3763 dasd_schedule_block_bh(device->block); 3764 if (device->block->request_queue) 3765 blk_mq_run_hw_queues(device->block->request_queue, 3766 true); 3767 } 3768 3769 if (!device->stopped) 3770 wake_up(&generic_waitq); 3771 3772 return 1; 3773 } 3774 EXPORT_SYMBOL_GPL(dasd_generic_path_operational); 3775 3776 int dasd_generic_notify(struct ccw_device *cdev, int event) 3777 { 3778 struct dasd_device *device; 3779 int ret; 3780 3781 device = dasd_device_from_cdev_locked(cdev); 3782 if (IS_ERR(device)) 3783 return 0; 3784 ret = 0; 3785 switch (event) { 3786 case CIO_GONE: 3787 case CIO_BOXED: 3788 case CIO_NO_PATH: 3789 dasd_path_no_path(device); 3790 ret = dasd_generic_last_path_gone(device); 3791 break; 3792 case CIO_OPER: 3793 ret = 1; 3794 if (dasd_path_get_opm(device)) 3795 ret = dasd_generic_path_operational(device); 3796 break; 3797 } 3798 dasd_put_device(device); 3799 return ret; 3800 } 3801 EXPORT_SYMBOL_GPL(dasd_generic_notify); 3802 3803 void dasd_generic_path_event(struct ccw_device *cdev, int *path_event) 3804 { 3805 struct dasd_device *device; 3806 int chp, oldopm, hpfpm, ifccpm; 3807 3808 device = dasd_device_from_cdev_locked(cdev); 3809 if (IS_ERR(device)) 3810 return; 3811 3812 oldopm = dasd_path_get_opm(device); 3813 for (chp = 0; chp < 8; chp++) { 3814 if (path_event[chp] & PE_PATH_GONE) { 3815 dasd_path_notoper(device, chp); 3816 } 3817 if (path_event[chp] & PE_PATH_AVAILABLE) { 3818 dasd_path_available(device, chp); 3819 dasd_schedule_device_bh(device); 3820 } 3821 if (path_event[chp] & PE_PATHGROUP_ESTABLISHED) { 3822 if (!dasd_path_is_operational(device, chp) && 3823 !dasd_path_need_verify(device, chp)) { 3824 /* 3825 * we can not establish a pathgroup on an 3826 * unavailable path, so trigger a path 3827 * verification first 3828 */ 3829 dasd_path_available(device, chp); 3830 dasd_schedule_device_bh(device); 3831 } 3832 DBF_DEV_EVENT(DBF_WARNING, device, "%s", 3833 "Pathgroup re-established\n"); 3834 if (device->discipline->kick_validate) 3835 device->discipline->kick_validate(device); 3836 } 3837 } 3838 hpfpm = dasd_path_get_hpfpm(device); 3839 ifccpm = dasd_path_get_ifccpm(device); 3840 if (!dasd_path_get_opm(device) && hpfpm) { 3841 /* 3842 * device has no operational paths but at least one path is 3843 * disabled due to HPF errors 3844 * disable HPF at all and use the path(s) again 3845 */ 3846 if (device->discipline->disable_hpf) 3847 device->discipline->disable_hpf(device); 3848 dasd_device_set_stop_bits(device, DASD_STOPPED_NOT_ACC); 3849 dasd_path_set_tbvpm(device, hpfpm); 3850 dasd_schedule_device_bh(device); 3851 dasd_schedule_requeue(device); 3852 } else if (!dasd_path_get_opm(device) && ifccpm) { 3853 /* 3854 * device has no operational paths but at least one path is 3855 * disabled due to IFCC errors 3856 * trigger path verification on paths with IFCC errors 3857 */ 3858 dasd_path_set_tbvpm(device, ifccpm); 3859 dasd_schedule_device_bh(device); 3860 } 3861 if (oldopm && !dasd_path_get_opm(device) && !hpfpm && !ifccpm) { 3862 dev_warn(&device->cdev->dev, 3863 "No verified channel paths remain for the device\n"); 3864 DBF_DEV_EVENT(DBF_WARNING, device, 3865 "%s", "last verified path gone"); 3866 dasd_eer_write(device, NULL, DASD_EER_NOPATH); 3867 dasd_device_set_stop_bits(device, 3868 DASD_STOPPED_DC_WAIT); 3869 } 3870 dasd_put_device(device); 3871 } 3872 EXPORT_SYMBOL_GPL(dasd_generic_path_event); 3873 3874 int dasd_generic_verify_path(struct dasd_device *device, __u8 lpm) 3875 { 3876 if (!dasd_path_get_opm(device) && lpm) { 3877 dasd_path_set_opm(device, lpm); 3878 dasd_generic_path_operational(device); 3879 } else 3880 dasd_path_add_opm(device, lpm); 3881 return 0; 3882 } 3883 EXPORT_SYMBOL_GPL(dasd_generic_verify_path); 3884 3885 /* 3886 * clear active requests and requeue them to block layer if possible 3887 */ 3888 static int dasd_generic_requeue_all_requests(struct dasd_device *device) 3889 { 3890 struct list_head requeue_queue; 3891 struct dasd_ccw_req *cqr, *n; 3892 struct dasd_ccw_req *refers; 3893 int rc; 3894 3895 INIT_LIST_HEAD(&requeue_queue); 3896 spin_lock_irq(get_ccwdev_lock(device->cdev)); 3897 rc = 0; 3898 list_for_each_entry_safe(cqr, n, &device->ccw_queue, devlist) { 3899 /* Check status and move request to flush_queue */ 3900 if (cqr->status == DASD_CQR_IN_IO) { 3901 rc = device->discipline->term_IO(cqr); 3902 if (rc) { 3903 /* unable to terminate requeust */ 3904 dev_err(&device->cdev->dev, 3905 "Unable to terminate request %p " 3906 "on suspend\n", cqr); 3907 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 3908 dasd_put_device(device); 3909 return rc; 3910 } 3911 } 3912 list_move_tail(&cqr->devlist, &requeue_queue); 3913 } 3914 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 3915 3916 list_for_each_entry_safe(cqr, n, &requeue_queue, devlist) { 3917 wait_event(dasd_flush_wq, 3918 (cqr->status != DASD_CQR_CLEAR_PENDING)); 3919 3920 /* mark sleepon requests as ended */ 3921 if (cqr->callback_data == DASD_SLEEPON_START_TAG) 3922 cqr->callback_data = DASD_SLEEPON_END_TAG; 3923 3924 /* remove requests from device and block queue */ 3925 list_del_init(&cqr->devlist); 3926 while (cqr->refers != NULL) { 3927 refers = cqr->refers; 3928 /* remove the request from the block queue */ 3929 list_del(&cqr->blocklist); 3930 /* free the finished erp request */ 3931 dasd_free_erp_request(cqr, cqr->memdev); 3932 cqr = refers; 3933 } 3934 3935 /* 3936 * requeue requests to blocklayer will only work 3937 * for block device requests 3938 */ 3939 if (_dasd_requeue_request(cqr)) 3940 continue; 3941 3942 if (cqr->block) 3943 list_del_init(&cqr->blocklist); 3944 cqr->block->base->discipline->free_cp( 3945 cqr, (struct request *) cqr->callback_data); 3946 } 3947 3948 /* 3949 * if requests remain then they are internal request 3950 * and go back to the device queue 3951 */ 3952 if (!list_empty(&requeue_queue)) { 3953 /* move freeze_queue to start of the ccw_queue */ 3954 spin_lock_irq(get_ccwdev_lock(device->cdev)); 3955 list_splice_tail(&requeue_queue, &device->ccw_queue); 3956 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 3957 } 3958 /* wake up generic waitqueue for eventually ended sleepon requests */ 3959 wake_up(&generic_waitq); 3960 return rc; 3961 } 3962 3963 static void do_requeue_requests(struct work_struct *work) 3964 { 3965 struct dasd_device *device = container_of(work, struct dasd_device, 3966 requeue_requests); 3967 dasd_generic_requeue_all_requests(device); 3968 dasd_device_remove_stop_bits(device, DASD_STOPPED_NOT_ACC); 3969 if (device->block) 3970 dasd_schedule_block_bh(device->block); 3971 dasd_put_device(device); 3972 } 3973 3974 void dasd_schedule_requeue(struct dasd_device *device) 3975 { 3976 dasd_get_device(device); 3977 /* queue call to dasd_reload_device to the kernel event daemon. */ 3978 if (!schedule_work(&device->requeue_requests)) 3979 dasd_put_device(device); 3980 } 3981 EXPORT_SYMBOL(dasd_schedule_requeue); 3982 3983 int dasd_generic_pm_freeze(struct ccw_device *cdev) 3984 { 3985 struct dasd_device *device = dasd_device_from_cdev(cdev); 3986 3987 if (IS_ERR(device)) 3988 return PTR_ERR(device); 3989 3990 /* mark device as suspended */ 3991 set_bit(DASD_FLAG_SUSPENDED, &device->flags); 3992 3993 if (device->discipline->freeze) 3994 device->discipline->freeze(device); 3995 3996 /* disallow new I/O */ 3997 dasd_device_set_stop_bits(device, DASD_STOPPED_PM); 3998 3999 return dasd_generic_requeue_all_requests(device); 4000 } 4001 EXPORT_SYMBOL_GPL(dasd_generic_pm_freeze); 4002 4003 int dasd_generic_restore_device(struct ccw_device *cdev) 4004 { 4005 struct dasd_device *device = dasd_device_from_cdev(cdev); 4006 int rc = 0; 4007 4008 if (IS_ERR(device)) 4009 return PTR_ERR(device); 4010 4011 /* allow new IO again */ 4012 dasd_device_remove_stop_bits(device, 4013 (DASD_STOPPED_PM | DASD_UNRESUMED_PM)); 4014 4015 dasd_schedule_device_bh(device); 4016 4017 /* 4018 * call discipline restore function 4019 * if device is stopped do nothing e.g. for disconnected devices 4020 */ 4021 if (device->discipline->restore && !(device->stopped)) 4022 rc = device->discipline->restore(device); 4023 if (rc || device->stopped) 4024 /* 4025 * if the resume failed for the DASD we put it in 4026 * an UNRESUMED stop state 4027 */ 4028 device->stopped |= DASD_UNRESUMED_PM; 4029 4030 if (device->block) { 4031 dasd_schedule_block_bh(device->block); 4032 if (device->block->request_queue) 4033 blk_mq_run_hw_queues(device->block->request_queue, 4034 true); 4035 } 4036 4037 clear_bit(DASD_FLAG_SUSPENDED, &device->flags); 4038 dasd_put_device(device); 4039 return 0; 4040 } 4041 EXPORT_SYMBOL_GPL(dasd_generic_restore_device); 4042 4043 static struct dasd_ccw_req *dasd_generic_build_rdc(struct dasd_device *device, 4044 void *rdc_buffer, 4045 int rdc_buffer_size, 4046 int magic) 4047 { 4048 struct dasd_ccw_req *cqr; 4049 struct ccw1 *ccw; 4050 unsigned long *idaw; 4051 4052 cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device); 4053 4054 if (IS_ERR(cqr)) { 4055 /* internal error 13 - Allocating the RDC request failed*/ 4056 dev_err(&device->cdev->dev, 4057 "An error occurred in the DASD device driver, " 4058 "reason=%s\n", "13"); 4059 return cqr; 4060 } 4061 4062 ccw = cqr->cpaddr; 4063 ccw->cmd_code = CCW_CMD_RDC; 4064 if (idal_is_needed(rdc_buffer, rdc_buffer_size)) { 4065 idaw = (unsigned long *) (cqr->data); 4066 ccw->cda = (__u32)(addr_t) idaw; 4067 ccw->flags = CCW_FLAG_IDA; 4068 idaw = idal_create_words(idaw, rdc_buffer, rdc_buffer_size); 4069 } else { 4070 ccw->cda = (__u32)(addr_t) rdc_buffer; 4071 ccw->flags = 0; 4072 } 4073 4074 ccw->count = rdc_buffer_size; 4075 cqr->startdev = device; 4076 cqr->memdev = device; 4077 cqr->expires = 10*HZ; 4078 cqr->retries = 256; 4079 cqr->buildclk = get_tod_clock(); 4080 cqr->status = DASD_CQR_FILLED; 4081 return cqr; 4082 } 4083 4084 4085 int dasd_generic_read_dev_chars(struct dasd_device *device, int magic, 4086 void *rdc_buffer, int rdc_buffer_size) 4087 { 4088 int ret; 4089 struct dasd_ccw_req *cqr; 4090 4091 cqr = dasd_generic_build_rdc(device, rdc_buffer, rdc_buffer_size, 4092 magic); 4093 if (IS_ERR(cqr)) 4094 return PTR_ERR(cqr); 4095 4096 ret = dasd_sleep_on(cqr); 4097 dasd_sfree_request(cqr, cqr->memdev); 4098 return ret; 4099 } 4100 EXPORT_SYMBOL_GPL(dasd_generic_read_dev_chars); 4101 4102 /* 4103 * In command mode and transport mode we need to look for sense 4104 * data in different places. The sense data itself is allways 4105 * an array of 32 bytes, so we can unify the sense data access 4106 * for both modes. 4107 */ 4108 char *dasd_get_sense(struct irb *irb) 4109 { 4110 struct tsb *tsb = NULL; 4111 char *sense = NULL; 4112 4113 if (scsw_is_tm(&irb->scsw) && (irb->scsw.tm.fcxs == 0x01)) { 4114 if (irb->scsw.tm.tcw) 4115 tsb = tcw_get_tsb((struct tcw *)(unsigned long) 4116 irb->scsw.tm.tcw); 4117 if (tsb && tsb->length == 64 && tsb->flags) 4118 switch (tsb->flags & 0x07) { 4119 case 1: /* tsa_iostat */ 4120 sense = tsb->tsa.iostat.sense; 4121 break; 4122 case 2: /* tsa_ddpc */ 4123 sense = tsb->tsa.ddpc.sense; 4124 break; 4125 default: 4126 /* currently we don't use interrogate data */ 4127 break; 4128 } 4129 } else if (irb->esw.esw0.erw.cons) { 4130 sense = irb->ecw; 4131 } 4132 return sense; 4133 } 4134 EXPORT_SYMBOL_GPL(dasd_get_sense); 4135 4136 void dasd_generic_shutdown(struct ccw_device *cdev) 4137 { 4138 struct dasd_device *device; 4139 4140 device = dasd_device_from_cdev(cdev); 4141 if (IS_ERR(device)) 4142 return; 4143 4144 if (device->block) 4145 dasd_schedule_block_bh(device->block); 4146 4147 dasd_schedule_device_bh(device); 4148 4149 wait_event(shutdown_waitq, _wait_for_empty_queues(device)); 4150 } 4151 EXPORT_SYMBOL_GPL(dasd_generic_shutdown); 4152 4153 static int __init dasd_init(void) 4154 { 4155 int rc; 4156 4157 init_waitqueue_head(&dasd_init_waitq); 4158 init_waitqueue_head(&dasd_flush_wq); 4159 init_waitqueue_head(&generic_waitq); 4160 init_waitqueue_head(&shutdown_waitq); 4161 4162 /* register 'common' DASD debug area, used for all DBF_XXX calls */ 4163 dasd_debug_area = debug_register("dasd", 1, 1, 8 * sizeof(long)); 4164 if (dasd_debug_area == NULL) { 4165 rc = -ENOMEM; 4166 goto failed; 4167 } 4168 debug_register_view(dasd_debug_area, &debug_sprintf_view); 4169 debug_set_level(dasd_debug_area, DBF_WARNING); 4170 4171 DBF_EVENT(DBF_EMERG, "%s", "debug area created"); 4172 4173 dasd_diag_discipline_pointer = NULL; 4174 4175 dasd_statistics_createroot(); 4176 4177 rc = dasd_devmap_init(); 4178 if (rc) 4179 goto failed; 4180 rc = dasd_gendisk_init(); 4181 if (rc) 4182 goto failed; 4183 rc = dasd_parse(); 4184 if (rc) 4185 goto failed; 4186 rc = dasd_eer_init(); 4187 if (rc) 4188 goto failed; 4189 #ifdef CONFIG_PROC_FS 4190 rc = dasd_proc_init(); 4191 if (rc) 4192 goto failed; 4193 #endif 4194 4195 return 0; 4196 failed: 4197 pr_info("The DASD device driver could not be initialized\n"); 4198 dasd_exit(); 4199 return rc; 4200 } 4201 4202 module_init(dasd_init); 4203 module_exit(dasd_exit); 4204