• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/s390/block/

Lines Matching refs:cqr

487  * Add profiling information for cqr before execution.
490 dasd_profile_start(struct dasd_device *device, struct dasd_ccw_req * cqr,
509 * Add profiling information for cqr after execution.
512 dasd_profile_end(struct dasd_device *device, struct dasd_ccw_req * cqr,
522 if (!cqr->buildclk || !cqr->startclk ||
523 !cqr->stopclk || !cqr->endclk ||
527 strtime = ((cqr->startclk - cqr->buildclk) >> 12);
528 irqtime = ((cqr->stopclk - cqr->startclk) >> 12);
529 endtime = ((cqr->endclk - cqr->stopclk) >> 12);
530 tottime = ((cqr->endclk - cqr->buildclk) >> 12);
554 #define dasd_profile_start(device, cqr, req) do {} while (0)
555 #define dasd_profile_end(device, cqr, req) do {} while (0)
569 struct dasd_ccw_req *cqr;
575 cqr = kzalloc(sizeof(struct dasd_ccw_req), GFP_ATOMIC);
576 if (cqr == NULL)
578 cqr->cpaddr = NULL;
580 cqr->cpaddr = kcalloc(cplength, sizeof(struct ccw1),
582 if (cqr->cpaddr == NULL) {
583 kfree(cqr);
587 cqr->data = NULL;
589 cqr->data = kzalloc(datasize, GFP_ATOMIC | GFP_DMA);
590 if (cqr->data == NULL) {
591 kfree(cqr->cpaddr);
592 kfree(cqr);
596 strncpy((char *) &cqr->magic, magic, 4);
597 ASCEBC((char *) &cqr->magic, 4);
598 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
600 return cqr;
608 struct dasd_ccw_req *cqr;
622 cqr = (struct dasd_ccw_req *)
625 if (cqr == NULL)
627 memset(cqr, 0, sizeof(struct dasd_ccw_req));
628 data = (char *) cqr + ((sizeof(struct dasd_ccw_req) + 7L) & -8L);
629 cqr->cpaddr = NULL;
631 cqr->cpaddr = (struct ccw1 *) data;
633 memset(cqr->cpaddr, 0, cplength*sizeof(struct ccw1));
635 cqr->data = NULL;
637 cqr->data = data;
638 memset(cqr->data, 0, datasize);
640 strncpy((char *) &cqr->magic, magic, 4);
641 ASCEBC((char *) &cqr->magic, 4);
642 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
644 return cqr;
653 dasd_kfree_request(struct dasd_ccw_req * cqr, struct dasd_device * device)
659 ccw = cqr->cpaddr;
664 kfree(cqr->cpaddr);
665 kfree(cqr->data);
666 kfree(cqr);
671 dasd_sfree_request(struct dasd_ccw_req * cqr, struct dasd_device * device)
676 dasd_free_chunk(&device->ccw_chunks, cqr);
682 * Check discipline magic in cqr.
685 dasd_check_cqr(struct dasd_ccw_req *cqr)
689 if (cqr == NULL)
691 device = cqr->device;
692 if (strncmp((char *) &cqr->magic, device->discipline->ebcname, 4)) {
696 cqr->magic,
710 dasd_term_IO(struct dasd_ccw_req * cqr)
715 /* Check the cqr */
716 rc = dasd_check_cqr(cqr);
720 device = (struct dasd_device *) cqr->device;
721 while ((retries < 5) && (cqr->status == DASD_CQR_IN_IO)) {
722 rc = ccw_device_clear(device->cdev, (long) cqr);
725 cqr->retries--;
726 cqr->status = DASD_CQR_CLEAR;
727 cqr->stopclk = get_clock();
728 cqr->starttime = 0;
730 "terminate cqr %p successful",
731 cqr);
765 dasd_start_IO(struct dasd_ccw_req * cqr)
770 /* Check the cqr */
771 rc = dasd_check_cqr(cqr);
774 device = (struct dasd_device *) cqr->device;
775 if (cqr->retries < 0) {
778 cqr, cqr->status, cqr->retries);
779 cqr->status = DASD_CQR_FAILED;
782 cqr->startclk = get_clock();
783 cqr->starttime = jiffies;
784 cqr->retries--;
785 rc = ccw_device_start(device->cdev, cqr->cpaddr, (long) cqr,
786 cqr->lpm, 0);
789 cqr->status = DASD_CQR_IN_IO;
792 cqr);
808 cqr->lpm = LPM_ANYPATH;
884 struct dasd_ccw_req *cqr;
887 cqr = (struct dasd_ccw_req *) intparm;
888 if (cqr->status != DASD_CQR_IN_IO) {
892 cdev->dev.bus_id, cqr->status);
896 device = (struct dasd_device *) cqr->device;
899 strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
906 cqr->status = DASD_CQR_QUEUED;
916 struct dasd_ccw_req *cqr;
926 cqr = list_entry(l, struct dasd_ccw_req, list);
927 if (cqr->status == DASD_CQR_IN_IO) {
928 cqr->status = DASD_CQR_QUEUED;
942 struct dasd_ccw_req *cqr, *next;
982 cqr = (struct dasd_ccw_req *) intparm;
985 if (cqr == NULL) {
992 device = (struct dasd_device *) cqr->device;
994 strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
1001 if (cqr->status == DASD_CQR_CLEAR &&
1003 cqr->status = DASD_CQR_QUEUED;
1011 if (cqr->status != DASD_CQR_IN_IO) {
1014 cdev->dev.bus_id, cqr->status);
1017 DBF_DEV_EVENT(DBF_DEBUG, device, "Int: CS/DS 0x%04x for cqr %p",
1018 ((irb->scsw.cstat << 8) | irb->scsw.dstat), cqr);
1028 era = device->discipline->examine_error(cqr, irb);
1035 cqr->status = DASD_CQR_DONE;
1036 cqr->stopclk = now;
1038 if (cqr->list.next != &device->ccw_queue) {
1039 next = list_entry(cqr->list.next,
1052 memcpy(&cqr->irb, irb, sizeof (struct irb));
1055 dasd_log_sense(cqr, irb);
1059 cqr->status = DASD_CQR_FAILED;
1060 cqr->stopclk = now;
1063 cqr->status = DASD_CQR_ERROR;
1092 __dasd_process_erp(struct dasd_device *device, struct dasd_ccw_req *cqr)
1096 if (cqr->status == DASD_CQR_DONE)
1100 erp_fn = device->discipline->erp_postaction(cqr);
1101 erp_fn(cqr);
1112 struct dasd_ccw_req *cqr;
1118 cqr = list_entry(l, struct dasd_ccw_req, list);
1120 if (cqr->status != DASD_CQR_DONE &&
1121 cqr->status != DASD_CQR_FAILED &&
1122 cqr->status != DASD_CQR_ERROR)
1125 if (cqr->status == DASD_CQR_ERROR) {
1126 if (cqr->irb.scsw.fctl & SCSW_FCTL_HALT_FUNC) {
1127 cqr->status = DASD_CQR_FAILED;
1128 cqr->stopclk = get_clock();
1130 if (cqr->irb.esw.esw0.erw.cons &&
1132 &cqr->flags)) {
1134 erp_action(cqr);
1135 erp_fn(cqr);
1137 dasd_default_erp_action(cqr);
1144 cqr->status == DASD_CQR_FAILED) {
1145 dasd_eer_write(device, cqr, DASD_EER_FATALERROR);
1148 cqr->status = DASD_CQR_QUEUED;
1149 cqr->retries = 255;
1155 if (cqr->refers) {
1156 __dasd_process_erp(device, cqr);
1161 cqr->endclk = get_clock();
1162 list_move_tail(&cqr->list, final_queue);
1167 dasd_end_request_cb(struct dasd_ccw_req * cqr, void *data)
1174 device = cqr->device;
1175 dasd_profile_end(device, cqr, req);
1176 status = cqr->device->discipline->free_cp(cqr,req);
1191 struct dasd_ccw_req *cqr;
1211 list_for_each_entry(cqr, &device->ccw_queue, list)
1212 if (cqr->status == DASD_CQR_QUEUED)
1233 cqr = device->discipline->build_cp(device, req);
1234 if (IS_ERR(cqr)) {
1235 if (PTR_ERR(cqr) == -ENOMEM)
1237 if (PTR_ERR(cqr) == -EAGAIN) {
1253 PTR_ERR(cqr), req);
1258 cqr->callback = dasd_end_request_cb;
1259 cqr->callback_data = (void *) req;
1260 cqr->status = DASD_CQR_QUEUED;
1262 list_add_tail(&cqr->list, &device->ccw_queue);
1263 dasd_profile_start(device, cqr, req);
1275 struct dasd_ccw_req *cqr;
1279 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, list);
1280 if ((cqr->status == DASD_CQR_IN_IO && cqr->expires != 0) &&
1281 (time_after_eq(jiffies, cqr->expires + cqr->starttime))) {
1282 if (device->discipline->term_IO(cqr) != 0) {
1287 "for cqr %p, termination failed, "
1289 (cqr->expires/HZ), cqr);
1293 "for cqr %p (%i retries left)",
1294 (cqr->expires/HZ), cqr, cqr->retries);
1306 struct dasd_ccw_req *cqr;
1311 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, list);
1312 if (cqr->status != DASD_CQR_QUEUED)
1316 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
1318 cqr->status = DASD_CQR_FAILED;
1326 rc = device->discipline->start_IO(cqr);
1328 dasd_set_timer(device, cqr->expires);
1337 _wait_for_clear(struct dasd_ccw_req *cqr)
1339 return (cqr->status == DASD_CQR_QUEUED);
1345 * Take care of the erp-chain (chained via cqr->refers) and remove either
1356 struct dasd_ccw_req *cqr, *orig, *n;
1365 list_for_each_entry_safe(cqr, n, &device->ccw_queue, list) {
1367 for (orig = cqr; orig->refers != NULL; orig = orig->refers);
1370 if (all == 0 && cqr->callback != dasd_end_request_cb &&
1375 switch (cqr->status) {
1377 rc = device->discipline->term_IO(cqr);
1383 cqr);
1391 cqr->stopclk = get_clock();
1392 cqr->status = DASD_CQR_FAILED;
1398 for (i = 0; cqr != NULL; cqr = cqr->refers, i++) {
1399 cqr->endclk = get_clock();
1400 list_move_tail(&cqr->list, &flush_queue);
1411 list_for_each_entry_safe(cqr, n, &flush_queue, list) {
1412 if (cqr->status == DASD_CQR_CLEAR) {
1414 wait_event(dasd_flush_wq, _wait_for_clear(cqr));
1415 cqr->status = DASD_CQR_FAILED;
1418 if (cqr->refers) {
1419 __dasd_process_erp(device, cqr);
1425 cqr->endclk = get_clock();
1426 if (cqr->callback != NULL)
1427 (cqr->callback)(cqr, cqr->callback_data);
1440 struct dasd_ccw_req *cqr;
1452 cqr = list_entry(l, struct dasd_ccw_req, list);
1453 list_del_init(&cqr->list);
1454 if (cqr->callback != NULL)
1455 (cqr->callback)(cqr, cqr->callback_data);
1525 dasd_wakeup_cb(struct dasd_ccw_req *cqr, void *data)
1531 _wait_for_wakeup(struct dasd_ccw_req *cqr)
1536 device = cqr->device;
1538 rc = ((cqr->status == DASD_CQR_DONE ||
1539 cqr->status == DASD_CQR_FAILED) &&
1540 list_empty(&cqr->list));
1549 dasd_sleep_on(struct dasd_ccw_req * cqr)
1555 device = cqr->device;
1559 cqr->callback = dasd_wakeup_cb;
1560 cqr->callback_data = (void *) &wait_q;
1561 cqr->status = DASD_CQR_QUEUED;
1562 list_add_tail(&cqr->list, &device->ccw_queue);
1569 wait_event(wait_q, _wait_for_wakeup(cqr));
1572 rc = (cqr->status == DASD_CQR_FAILED) ? -EIO : 0;
1581 dasd_sleep_on_interruptible(struct dasd_ccw_req * cqr)
1587 device = cqr->device;
1591 cqr->callback = dasd_wakeup_cb;
1592 cqr->callback_data = (void *) &wait_q;
1593 cqr->status = DASD_CQR_QUEUED;
1594 list_add_tail(&cqr->list, &device->ccw_queue);
1602 rc = wait_event_interruptible(wait_q, _wait_for_wakeup(cqr));
1605 rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO;
1609 switch (cqr->status) {
1611 /* terminate runnig cqr */
1613 cqr->retries = -1;
1614 device->discipline->term_IO(cqr);
1618 wait_event(wait_q, _wait_for_wakeup(cqr));
1620 rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO;
1626 list_del_init(&cqr->list);
1631 /* cqr with 'non-interruptable' status - just wait */
1648 struct dasd_ccw_req *cqr;
1652 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, list);
1653 return device->discipline->term_IO(cqr);
1657 dasd_sleep_on_immediatly(struct dasd_ccw_req * cqr)
1663 device = cqr->device;
1672 cqr->callback = dasd_wakeup_cb;
1673 cqr->callback_data = (void *) &wait_q;
1674 cqr->status = DASD_CQR_QUEUED;
1675 list_add(&cqr->list, &device->ccw_queue);
1682 wait_event(wait_q, _wait_for_wakeup(cqr));
1685 rc = (cqr->status == DASD_CQR_FAILED) ? -EIO : 0;
1696 dasd_cancel_req(struct dasd_ccw_req *cqr)
1698 struct dasd_device *device = cqr->device;
1704 switch (cqr->status) {
1707 cqr->status = DASD_CQR_FAILED;
1711 if (device->discipline->term_IO(cqr) != 0)
1714 cqr->status = DASD_CQR_FAILED;
1715 cqr->stopclk = get_clock();
1725 cqr->status);
2127 struct dasd_ccw_req *cqr;
2146 list_for_each_entry(cqr, &device->ccw_queue, list)
2147 if (cqr->status == DASD_CQR_IN_IO)
2148 cqr->status = DASD_CQR_FAILED;
2151 list_for_each_entry(cqr, &device->ccw_queue, list)
2152 if (cqr->status == DASD_CQR_IN_IO) {
2153 cqr->status = DASD_CQR_QUEUED;
2154 cqr->retries++;
2178 struct dasd_ccw_req *cqr;
2181 cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device);
2183 if (IS_ERR(cqr)) {
2186 return cqr;
2189 ccw = cqr->cpaddr;
2194 cqr->device = device;
2195 cqr->expires = 10*HZ;
2196 clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
2197 cqr->retries = 2;
2198 cqr->buildclk = get_clock();
2199 cqr->status = DASD_CQR_FILLED;
2200 return cqr;
2208 struct dasd_ccw_req *cqr;
2210 cqr = dasd_generic_build_rdc(device, *rdc_buffer, rdc_buffer_size,
2212 if (IS_ERR(cqr))
2213 return PTR_ERR(cqr);
2215 ret = dasd_sleep_on(cqr);
2216 dasd_sfree_request(cqr, cqr->device);