• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/s390/block/

Lines Matching defs:cqr

624  * Add profiling information for cqr before execution.
627 struct dasd_ccw_req *cqr,
646 * Add profiling information for cqr after execution.
649 struct dasd_ccw_req *cqr,
659 if (!cqr->buildclk || !cqr->startclk ||
660 !cqr->stopclk || !cqr->endclk ||
664 strtime = ((cqr->startclk - cqr->buildclk) >> 12);
665 irqtime = ((cqr->stopclk - cqr->startclk) >> 12);
666 endtime = ((cqr->endclk - cqr->stopclk) >> 12);
667 tottime = ((cqr->endclk - cqr->buildclk) >> 12);
691 #define dasd_profile_start(block, cqr, req) do {} while (0)
692 #define dasd_profile_end(block, cqr, req) do {} while (0)
706 struct dasd_ccw_req *cqr;
712 cqr = kzalloc(sizeof(struct dasd_ccw_req), GFP_ATOMIC);
713 if (cqr == NULL)
715 cqr->cpaddr = NULL;
717 cqr->cpaddr = kcalloc(cplength, sizeof(struct ccw1),
719 if (cqr->cpaddr == NULL) {
720 kfree(cqr);
724 cqr->data = NULL;
726 cqr->data = kzalloc(datasize, GFP_ATOMIC | GFP_DMA);
727 if (cqr->data == NULL) {
728 kfree(cqr->cpaddr);
729 kfree(cqr);
733 cqr->magic = magic;
734 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
736 return cqr;
744 struct dasd_ccw_req *cqr;
758 cqr = (struct dasd_ccw_req *)
761 if (cqr == NULL)
763 memset(cqr, 0, sizeof(struct dasd_ccw_req));
764 data = (char *) cqr + ((sizeof(struct dasd_ccw_req) + 7L) & -8L);
765 cqr->cpaddr = NULL;
767 cqr->cpaddr = (struct ccw1 *) data;
769 memset(cqr->cpaddr, 0, cplength*sizeof(struct ccw1));
771 cqr->data = NULL;
773 cqr->data = data;
774 memset(cqr->data, 0, datasize);
776 cqr->magic = magic;
777 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
779 return cqr;
787 void dasd_kfree_request(struct dasd_ccw_req *cqr, struct dasd_device *device)
793 ccw = cqr->cpaddr;
798 kfree(cqr->cpaddr);
799 kfree(cqr->data);
800 kfree(cqr);
804 void dasd_sfree_request(struct dasd_ccw_req *cqr, struct dasd_device *device)
809 dasd_free_chunk(&device->ccw_chunks, cqr);
815 * Check discipline magic in cqr.
817 static inline int dasd_check_cqr(struct dasd_ccw_req *cqr)
821 if (cqr == NULL)
823 device = cqr->startdev;
824 if (strncmp((char *) &cqr->magic, device->discipline->ebcname, 4)) {
828 cqr->magic,
841 int dasd_term_IO(struct dasd_ccw_req *cqr)
847 /* Check the cqr */
848 rc = dasd_check_cqr(cqr);
852 device = (struct dasd_device *) cqr->startdev;
853 while ((retries < 5) && (cqr->status == DASD_CQR_IN_IO)) {
854 rc = ccw_device_clear(device->cdev, (long) cqr);
857 cqr->retries--;
858 cqr->status = DASD_CQR_CLEAR_PENDING;
859 cqr->stopclk = get_clock();
860 cqr->starttime = 0;
862 "terminate cqr %p successful",
863 cqr);
896 int dasd_start_IO(struct dasd_ccw_req *cqr)
902 /* Check the cqr */
903 rc = dasd_check_cqr(cqr);
905 cqr->intrc = rc;
908 device = (struct dasd_device *) cqr->startdev;
909 if (cqr->retries < 0) {
911 sprintf(errorstring, "14 %p", cqr);
914 cqr->status = DASD_CQR_ERROR;
917 cqr->startclk = get_clock();
918 cqr->starttime = jiffies;
919 cqr->retries--;
920 if (cqr->cpmode == 1) {
921 rc = ccw_device_tm_start(device->cdev, cqr->cpaddr,
922 (long) cqr, cqr->lpm);
924 rc = ccw_device_start(device->cdev, cqr->cpaddr,
925 (long) cqr, cqr->lpm, 0);
929 cqr->status = DASD_CQR_IN_IO;
945 cqr->lpm = LPM_ANYPATH;
973 cqr->intrc = rc;
1020 struct dasd_ccw_req *cqr;
1025 cqr = (struct dasd_ccw_req *) intparm;
1026 if (cqr->status != DASD_CQR_IN_IO) {
1029 "%02x", cqr->status);
1040 if (!cqr->startdev ||
1041 device != cqr->startdev ||
1042 strncmp(cqr->startdev->discipline->ebcname,
1043 (char *) &cqr->magic, 4)) {
1051 cqr->status = DASD_CQR_QUEUED;
1075 struct dasd_ccw_req *cqr, *next;
1100 cqr = (struct dasd_ccw_req *) intparm;
1101 if (!cqr || ((scsw_cc(&irb->scsw) == 1) &&
1104 if (cqr && cqr->status == DASD_CQR_IN_IO)
1105 cqr->status = DASD_CQR_QUEUED;
1116 device = (struct dasd_device *) cqr->startdev;
1118 strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
1125 if (cqr->status == DASD_CQR_CLEAR_PENDING &&
1127 cqr->status = DASD_CQR_CLEARED;
1135 if (cqr->status != DASD_CQR_IN_IO) {
1137 "status %02x", dev_name(&cdev->dev), cqr->status);
1146 cqr->status = DASD_CQR_SUCCESS;
1147 cqr->stopclk = now;
1149 if (cqr->devlist.next != &device->ccw_queue) {
1150 next = list_entry(cqr->devlist.next,
1154 memcpy(&cqr->irb, irb, sizeof(struct irb));
1156 dasd_log_sense_dbf(cqr, irb);
1158 dasd_log_sense(cqr, irb);
1165 if (!test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags) &&
1166 cqr->retries > 0) {
1167 if (cqr->lpm == LPM_ANYPATH)
1171 cqr->retries);
1172 cqr->lpm = LPM_ANYPATH;
1173 cqr->status = DASD_CQR_QUEUED;
1174 next = cqr;
1176 cqr->status = DASD_CQR_ERROR;
1221 struct dasd_ccw_req *cqr;
1230 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1231 if (cqr->status == DASD_CQR_QUEUED &&
1232 ref_cqr->block == cqr->block) {
1233 cqr->status = DASD_CQR_CLEARED;
1246 struct dasd_ccw_req *cqr;
1250 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1253 if (cqr->status == DASD_CQR_QUEUED ||
1254 cqr->status == DASD_CQR_IN_IO ||
1255 cqr->status == DASD_CQR_CLEAR_PENDING)
1257 if (cqr->status == DASD_CQR_ERROR) {
1258 __dasd_device_recovery(device, cqr);
1261 list_move_tail(&cqr->devlist, final_queue);
1273 struct dasd_ccw_req *cqr;
1280 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1281 list_del_init(&cqr->devlist);
1282 block = cqr->block;
1283 callback = cqr->callback;
1284 callback_data = cqr->callback_data;
1287 switch (cqr->status) {
1289 cqr->status = DASD_CQR_DONE;
1292 cqr->status = DASD_CQR_NEED_ERP;
1295 cqr->status = DASD_CQR_TERMINATED;
1298 /* internal error 12 - wrong cqr status*/
1299 snprintf(errorstring, ERRORLENGTH, "12 %p %x02", cqr, cqr->status);
1305 if (cqr->callback != NULL)
1306 (callback)(cqr, callback_data);
1318 struct dasd_ccw_req *cqr;
1322 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
1323 if ((cqr->status == DASD_CQR_IN_IO && cqr->expires != 0) &&
1324 (time_after_eq(jiffies, cqr->expires + cqr->starttime))) {
1325 if (device->discipline->term_IO(cqr) != 0) {
1328 "cqr %p timed out (%lus) but cannot be "
1330 cqr, (cqr->expires/HZ));
1331 cqr->expires += 5*HZ;
1335 "cqr %p timed out (%lus), %i retries "
1336 "remaining\n", cqr, (cqr->expires/HZ),
1337 cqr->retries);
1348 struct dasd_ccw_req *cqr;
1353 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
1354 if (cqr->status != DASD_CQR_QUEUED)
1358 cqr->status = DASD_CQR_CLEARED;
1363 rc = device->discipline->start_IO(cqr);
1365 dasd_device_set_timer(device, cqr->expires);
1385 struct dasd_ccw_req *cqr, *n;
1392 list_for_each_entry_safe(cqr, n, &device->ccw_queue, devlist) {
1394 switch (cqr->status) {
1396 rc = device->discipline->term_IO(cqr);
1401 "failed for request %p\n", cqr);
1407 cqr->stopclk = get_clock();
1408 cqr->status = DASD_CQR_CLEARED;
1413 list_move_tail(&cqr->devlist, &flush_queue);
1422 list_for_each_entry_safe(cqr, n, &flush_queue, devlist)
1424 (cqr->status != DASD_CQR_CLEAR_PENDING));
1487 void dasd_add_request_head(struct dasd_ccw_req *cqr)
1492 device = cqr->startdev;
1494 cqr->status = DASD_CQR_QUEUED;
1495 list_add(&cqr->devlist, &device->ccw_queue);
1505 void dasd_add_request_tail(struct dasd_ccw_req *cqr)
1510 device = cqr->startdev;
1512 cqr->status = DASD_CQR_QUEUED;
1513 list_add_tail(&cqr->devlist, &device->ccw_queue);
1522 static void dasd_wakeup_cb(struct dasd_ccw_req *cqr, void *data)
1524 spin_lock_irq(get_ccwdev_lock(cqr->startdev->cdev));
1525 cqr->callback_data = DASD_SLEEPON_END_TAG;
1526 spin_unlock_irq(get_ccwdev_lock(cqr->startdev->cdev));
1530 static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr)
1535 device = cqr->startdev;
1537 rc = (cqr->callback_data == DASD_SLEEPON_END_TAG);
1545 static int __dasd_sleep_on_erp(struct dasd_ccw_req *cqr)
1550 if (cqr->status == DASD_CQR_FILLED)
1552 device = cqr->startdev;
1553 if (test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags)) {
1554 if (cqr->status == DASD_CQR_TERMINATED) {
1555 device->discipline->handle_terminated_request(cqr);
1558 if (cqr->status == DASD_CQR_NEED_ERP) {
1559 erp_fn = device->discipline->erp_action(cqr);
1560 erp_fn(cqr);
1563 if (cqr->status == DASD_CQR_FAILED)
1564 dasd_log_sense(cqr, &cqr->irb);
1565 if (cqr->refers) {
1566 __dasd_process_erp(device, cqr);
1573 static int __dasd_sleep_on_loop_condition(struct dasd_ccw_req *cqr)
1575 if (test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags)) {
1576 if (cqr->refers) /* erp is not done yet */
1578 return ((cqr->status != DASD_CQR_DONE) &&
1579 (cqr->status != DASD_CQR_FAILED));
1581 return (cqr->status == DASD_CQR_FILLED);
1589 struct dasd_ccw_req *cqr;
1595 for (cqr = maincqr; __dasd_sleep_on_loop_condition(cqr);
1596 cqr = list_first_entry(&ccw_queue,
1599 if (__dasd_sleep_on_erp(cqr))
1601 if (cqr->status != DASD_CQR_FILLED) /* could be failed */
1606 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
1608 cqr->status = DASD_CQR_FAILED;
1617 cqr->status = DASD_CQR_FAILED;
1624 cqr->callback = dasd_wakeup_cb;
1625 cqr->callback_data = DASD_SLEEPON_START_TAG;
1626 dasd_add_request_tail(cqr);
1629 generic_waitq, _wait_for_wakeup(cqr));
1631 dasd_cancel_req(cqr);
1634 _wait_for_wakeup(cqr));
1635 cqr->status = DASD_CQR_FAILED;
1640 wait_event(generic_waitq, _wait_for_wakeup(cqr));
1660 int dasd_sleep_on(struct dasd_ccw_req *cqr)
1662 return _dasd_sleep_on(cqr, 0);
1669 int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr)
1671 return _dasd_sleep_on(cqr, 1);
1682 struct dasd_ccw_req *cqr;
1686 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
1687 return device->discipline->term_IO(cqr);
1690 int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr)
1695 device = cqr->startdev;
1703 cqr->callback = dasd_wakeup_cb;
1704 cqr->callback_data = DASD_SLEEPON_START_TAG;
1705 cqr->status = DASD_CQR_QUEUED;
1706 list_add(&cqr->devlist, &device->ccw_queue);
1713 wait_event(generic_waitq, _wait_for_wakeup(cqr));
1715 if (cqr->status == DASD_CQR_DONE)
1717 else if (cqr->intrc)
1718 rc = cqr->intrc;
1734 int dasd_cancel_req(struct dasd_ccw_req *cqr)
1736 struct dasd_device *device = cqr->startdev;
1742 switch (cqr->status) {
1745 cqr->status = DASD_CQR_CLEARED;
1749 rc = device->discipline->term_IO(cqr);
1753 cqr, rc);
1755 cqr->stopclk = get_clock();
1812 struct dasd_ccw_req *cqr)
1816 if (cqr->status == DASD_CQR_DONE)
1820 erp_fn = device->discipline->erp_postaction(cqr);
1821 erp_fn(cqr);
1831 struct dasd_ccw_req *cqr;
1863 cqr = basedev->discipline->build_cp(basedev, block, req);
1864 if (IS_ERR(cqr)) {
1865 if (PTR_ERR(cqr) == -EBUSY)
1867 if (PTR_ERR(cqr) == -ENOMEM)
1869 if (PTR_ERR(cqr) == -EAGAIN) {
1890 PTR_ERR(cqr), req);
1899 cqr->callback_data = (void *) req;
1900 cqr->status = DASD_CQR_FILLED;
1902 list_add_tail(&cqr->blocklist, &block->ccw_queue);
1903 dasd_profile_start(block, cqr, req);
1907 static void __dasd_cleanup_cqr(struct dasd_ccw_req *cqr)
1913 req = (struct request *) cqr->callback_data;
1914 dasd_profile_end(cqr->block, cqr, req);
1915 status = cqr->block->base->discipline->free_cp(cqr, req);
1928 struct dasd_ccw_req *cqr;
1936 cqr = list_entry(l, struct dasd_ccw_req, blocklist);
1937 if (cqr->status != DASD_CQR_DONE &&
1938 cqr->status != DASD_CQR_FAILED &&
1939 cqr->status != DASD_CQR_NEED_ERP &&
1940 cqr->status != DASD_CQR_TERMINATED)
1943 if (cqr->status == DASD_CQR_TERMINATED) {
1944 base->discipline->handle_terminated_request(cqr);
1949 if (cqr->status == DASD_CQR_NEED_ERP) {
1950 erp_fn = base->discipline->erp_action(cqr);
1951 if (IS_ERR(erp_fn(cqr)))
1957 if (cqr->status == DASD_CQR_FAILED) {
1958 dasd_log_sense(cqr, &cqr->irb);
1963 cqr->status == DASD_CQR_FAILED) {
1964 dasd_eer_write(base, cqr, DASD_EER_FATALERROR);
1967 cqr->status = DASD_CQR_FILLED;
1968 cqr->retries = 255;
1977 if (cqr->refers) {
1978 __dasd_process_erp(base, cqr);
1983 cqr->endclk = get_clock();
1984 list_move_tail(&cqr->blocklist, final_queue);
1988 static void dasd_return_cqr_cb(struct dasd_ccw_req *cqr, void *data)
1990 dasd_schedule_block_bh(cqr->block);
1995 struct dasd_ccw_req *cqr;
2003 list_for_each_entry(cqr, &block->ccw_queue, blocklist) {
2004 if (cqr->status != DASD_CQR_FILLED)
2008 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
2010 cqr->status = DASD_CQR_FAILED;
2019 if (!cqr->startdev)
2020 cqr->startdev = block->base;
2023 cqr->callback = dasd_return_cqr_cb;
2025 dasd_add_request_tail(cqr);
2038 struct dasd_ccw_req *cqr;
2049 cqr = list_entry(l, struct dasd_ccw_req, blocklist);
2050 list_del_init(&cqr->blocklist);
2051 __dasd_cleanup_cqr(cqr);
2063 static void _dasd_wake_block_flush_cb(struct dasd_ccw_req *cqr, void *data)
2075 struct dasd_ccw_req *cqr, *n;
2083 list_for_each_entry_safe(cqr, n, &block->ccw_queue, blocklist) {
2085 if (cqr->status >= DASD_CQR_QUEUED)
2086 rc = dasd_cancel_req(cqr);
2094 cqr->callback = _dasd_wake_block_flush_cb;
2095 for (i = 0; cqr != NULL; cqr = cqr->refers, i++)
2096 list_move_tail(&cqr->blocklist, &flush_queue);
2104 list_for_each_entry_safe(cqr, n, &flush_queue, blocklist) {
2105 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED));
2107 if (cqr->refers) {
2109 __dasd_process_erp(block->base, cqr);
2117 cqr->endclk = get_clock();
2118 list_del_init(&cqr->blocklist);
2119 __dasd_cleanup_cqr(cqr);
2587 struct dasd_ccw_req *cqr;
2604 list_for_each_entry(cqr, &device->ccw_queue, devlist)
2605 if (cqr->status == DASD_CQR_IN_IO) {
2606 cqr->status = DASD_CQR_QUEUED;
2607 cqr->retries++;
2634 struct dasd_ccw_req *cqr, *n;
2647 list_for_each_entry_safe(cqr, n, &device->ccw_queue, devlist) {
2649 if (cqr->status == DASD_CQR_IN_IO) {
2650 rc = device->discipline->term_IO(cqr);
2655 "on suspend\n", cqr);
2661 list_move_tail(&cqr->devlist, &freeze_queue);
2666 list_for_each_entry_safe(cqr, n, &freeze_queue, devlist) {
2668 (cqr->status != DASD_CQR_CLEAR_PENDING));
2669 if (cqr->status == DASD_CQR_CLEARED)
2670 cqr->status = DASD_CQR_QUEUED;
2725 struct dasd_ccw_req *cqr;
2729 cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device);
2731 if (IS_ERR(cqr)) {
2736 return cqr;
2739 ccw = cqr->cpaddr;
2742 idaw = (unsigned long *) (cqr->data);
2752 cqr->startdev = device;
2753 cqr->memdev = device;
2754 cqr->expires = 10*HZ;
2755 cqr->retries = 256;
2756 cqr->buildclk = get_clock();
2757 cqr->status = DASD_CQR_FILLED;
2758 return cqr;
2766 struct dasd_ccw_req *cqr;
2768 cqr = dasd_generic_build_rdc(device, rdc_buffer, rdc_buffer_size,
2770 if (IS_ERR(cqr))
2771 return PTR_ERR(cqr);
2773 ret = dasd_sleep_on(cqr);
2774 dasd_sfree_request(cqr, cqr->memdev);