aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi/zfcp_fsf.c
diff options
context:
space:
mode:
authorSwen Schillig <swen@vnet.ibm.com>2009-08-18 09:43:18 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-09-05 09:49:24 -0400
commit42428f747a8a0db9c6de03e105932316defad65d (patch)
tree84cd4b28678c94e5c6780517f89e803121cd73a7 /drivers/s390/scsi/zfcp_fsf.c
parent4544683a4b1d4e65ccca8c736bac56a195a5206b (diff)
[SCSI] zfcp: Separate qdio attributes from zfcp_fsf_req
Split all qdio related attributes out of zfcp_fsf_req and put it in new structure. Signed-off-by: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/s390/scsi/zfcp_fsf.c')
-rw-r--r--drivers/s390/scsi/zfcp_fsf.c79
1 files changed, 42 insertions, 37 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index 5b73f989a629..e88b7804780b 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -720,12 +720,12 @@ static struct zfcp_fsf_req *zfcp_fsf_req_create(struct zfcp_adapter *adapter,
720 req->adapter = adapter; 720 req->adapter = adapter;
721 req->fsf_command = fsf_cmd; 721 req->fsf_command = fsf_cmd;
722 req->req_id = adapter->req_no; 722 req->req_id = adapter->req_no;
723 req->sbal_number = 1; 723 req->queue_req.sbal_number = 1;
724 req->sbal_first = req_q->first; 724 req->queue_req.sbal_first = req_q->first;
725 req->sbal_last = req_q->first; 725 req->queue_req.sbal_last = req_q->first;
726 req->sbale_curr = 1; 726 req->queue_req.sbale_curr = 1;
727 727
728 sbale = zfcp_qdio_sbale_req(req); 728 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
729 sbale[0].addr = (void *) req->req_id; 729 sbale[0].addr = (void *) req->req_id;
730 sbale[0].flags |= SBAL_FLAGS0_COMMAND; 730 sbale[0].flags |= SBAL_FLAGS0_COMMAND;
731 731
@@ -774,9 +774,9 @@ static int zfcp_fsf_req_send(struct zfcp_fsf_req *req)
774 list_add_tail(&req->list, &adapter->req_list[idx]); 774 list_add_tail(&req->list, &adapter->req_list[idx]);
775 spin_unlock_irqrestore(&adapter->req_list_lock, flags); 775 spin_unlock_irqrestore(&adapter->req_list_lock, flags);
776 776
777 req->qdio_outb_usage = atomic_read(&adapter->req_q.count); 777 req->queue_req.qdio_outb_usage = atomic_read(&adapter->req_q.count);
778 req->issued = get_clock(); 778 req->issued = get_clock();
779 if (zfcp_qdio_send(req)) { 779 if (zfcp_qdio_send(adapter, &req->queue_req)) {
780 del_timer(&req->timer); 780 del_timer(&req->timer);
781 spin_lock_irqsave(&adapter->req_list_lock, flags); 781 spin_lock_irqsave(&adapter->req_list_lock, flags);
782 /* lookup request again, list might have changed */ 782 /* lookup request again, list might have changed */
@@ -819,9 +819,9 @@ int zfcp_fsf_status_read(struct zfcp_adapter *adapter)
819 goto out; 819 goto out;
820 } 820 }
821 821
822 sbale = zfcp_qdio_sbale_req(req); 822 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
823 sbale[2].flags |= SBAL_FLAGS_LAST_ENTRY; 823 sbale[2].flags |= SBAL_FLAGS_LAST_ENTRY;
824 req->sbale_curr = 2; 824 req->queue_req.sbale_curr = 2;
825 825
826 sr_buf = mempool_alloc(adapter->pool.status_read_data, GFP_ATOMIC); 826 sr_buf = mempool_alloc(adapter->pool.status_read_data, GFP_ATOMIC);
827 if (!sr_buf) { 827 if (!sr_buf) {
@@ -830,7 +830,7 @@ int zfcp_fsf_status_read(struct zfcp_adapter *adapter)
830 } 830 }
831 memset(sr_buf, 0, sizeof(*sr_buf)); 831 memset(sr_buf, 0, sizeof(*sr_buf));
832 req->data = sr_buf; 832 req->data = sr_buf;
833 sbale = zfcp_qdio_sbale_curr(req); 833 sbale = zfcp_qdio_sbale_curr(adapter, &req->queue_req);
834 sbale->addr = (void *) sr_buf; 834 sbale->addr = (void *) sr_buf;
835 sbale->length = sizeof(*sr_buf); 835 sbale->length = sizeof(*sr_buf);
836 836
@@ -929,7 +929,7 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command(unsigned long old_req_id,
929 ZFCP_STATUS_COMMON_UNBLOCKED))) 929 ZFCP_STATUS_COMMON_UNBLOCKED)))
930 goto out_error_free; 930 goto out_error_free;
931 931
932 sbale = zfcp_qdio_sbale_req(req); 932 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
933 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 933 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
934 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 934 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
935 935
@@ -1023,8 +1023,10 @@ static int zfcp_fsf_setup_ct_els_sbals(struct zfcp_fsf_req *req,
1023 struct scatterlist *sg_resp, 1023 struct scatterlist *sg_resp,
1024 int max_sbals) 1024 int max_sbals)
1025{ 1025{
1026 struct qdio_buffer_element *sbale = zfcp_qdio_sbale_req(req); 1026 struct zfcp_adapter *adapter = req->adapter;
1027 u32 feat = req->adapter->adapter_features; 1027 struct qdio_buffer_element *sbale = zfcp_qdio_sbale_req(adapter,
1028 &req->queue_req);
1029 u32 feat = adapter->adapter_features;
1028 int bytes; 1030 int bytes;
1029 1031
1030 if (!(feat & FSF_FEATURE_ELS_CT_CHAINED_SBALS)) { 1032 if (!(feat & FSF_FEATURE_ELS_CT_CHAINED_SBALS)) {
@@ -1041,14 +1043,16 @@ static int zfcp_fsf_setup_ct_els_sbals(struct zfcp_fsf_req *req,
1041 return 0; 1043 return 0;
1042 } 1044 }
1043 1045
1044 bytes = zfcp_qdio_sbals_from_sg(req, SBAL_FLAGS0_TYPE_WRITE_READ, 1046 bytes = zfcp_qdio_sbals_from_sg(adapter, &req->queue_req,
1047 SBAL_FLAGS0_TYPE_WRITE_READ,
1045 sg_req, max_sbals); 1048 sg_req, max_sbals);
1046 if (bytes <= 0) 1049 if (bytes <= 0)
1047 return -EIO; 1050 return -EIO;
1048 req->qtcb->bottom.support.req_buf_length = bytes; 1051 req->qtcb->bottom.support.req_buf_length = bytes;
1049 req->sbale_curr = ZFCP_LAST_SBALE_PER_SBAL; 1052 req->queue_req.sbale_curr = ZFCP_LAST_SBALE_PER_SBAL;
1050 1053
1051 bytes = zfcp_qdio_sbals_from_sg(req, SBAL_FLAGS0_TYPE_WRITE_READ, 1054 bytes = zfcp_qdio_sbals_from_sg(adapter, &req->queue_req,
1055 SBAL_FLAGS0_TYPE_WRITE_READ,
1052 sg_resp, max_sbals); 1056 sg_resp, max_sbals);
1053 if (bytes <= 0) 1057 if (bytes <= 0)
1054 return -EIO; 1058 return -EIO;
@@ -1241,7 +1245,7 @@ int zfcp_fsf_exchange_config_data(struct zfcp_erp_action *erp_action)
1241 } 1245 }
1242 1246
1243 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 1247 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1244 sbale = zfcp_qdio_sbale_req(req); 1248 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1245 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1249 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1246 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1250 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1247 1251
@@ -1283,7 +1287,7 @@ int zfcp_fsf_exchange_config_data_sync(struct zfcp_adapter *adapter,
1283 goto out_unlock; 1287 goto out_unlock;
1284 } 1288 }
1285 1289
1286 sbale = zfcp_qdio_sbale_req(req); 1290 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1287 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1291 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1288 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1292 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1289 req->handler = zfcp_fsf_exchange_config_data_handler; 1293 req->handler = zfcp_fsf_exchange_config_data_handler;
@@ -1339,7 +1343,7 @@ int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action)
1339 } 1343 }
1340 1344
1341 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 1345 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1342 sbale = zfcp_qdio_sbale_req(req); 1346 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1343 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1347 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1344 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1348 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1345 1349
@@ -1388,7 +1392,7 @@ int zfcp_fsf_exchange_port_data_sync(struct zfcp_adapter *adapter,
1388 if (data) 1392 if (data)
1389 req->data = data; 1393 req->data = data;
1390 1394
1391 sbale = zfcp_qdio_sbale_req(req); 1395 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1392 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1396 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1393 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1397 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1394 1398
@@ -1509,7 +1513,7 @@ int zfcp_fsf_open_port(struct zfcp_erp_action *erp_action)
1509 } 1513 }
1510 1514
1511 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 1515 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1512 sbale = zfcp_qdio_sbale_req(req); 1516 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1513 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1517 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1514 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1518 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1515 1519
@@ -1579,7 +1583,7 @@ int zfcp_fsf_close_port(struct zfcp_erp_action *erp_action)
1579 } 1583 }
1580 1584
1581 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 1585 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1582 sbale = zfcp_qdio_sbale_req(req); 1586 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1583 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1587 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1584 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1588 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1585 1589
@@ -1656,7 +1660,7 @@ int zfcp_fsf_open_wka_port(struct zfcp_wka_port *wka_port)
1656 } 1660 }
1657 1661
1658 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 1662 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1659 sbale = zfcp_qdio_sbale_req(req); 1663 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1660 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1664 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1661 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1665 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1662 1666
@@ -1711,7 +1715,7 @@ int zfcp_fsf_close_wka_port(struct zfcp_wka_port *wka_port)
1711 } 1715 }
1712 1716
1713 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 1717 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1714 sbale = zfcp_qdio_sbale_req(req); 1718 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1715 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1719 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1716 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1720 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1717 1721
@@ -1803,7 +1807,7 @@ int zfcp_fsf_close_physical_port(struct zfcp_erp_action *erp_action)
1803 } 1807 }
1804 1808
1805 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 1809 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1806 sbale = zfcp_qdio_sbale_req(req); 1810 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1807 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1811 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1808 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1812 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1809 1813
@@ -1976,7 +1980,7 @@ int zfcp_fsf_open_unit(struct zfcp_erp_action *erp_action)
1976 } 1980 }
1977 1981
1978 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 1982 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1979 sbale = zfcp_qdio_sbale_req(req); 1983 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
1980 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 1984 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1981 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 1985 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1982 1986
@@ -2063,7 +2067,7 @@ int zfcp_fsf_close_unit(struct zfcp_erp_action *erp_action)
2063 } 2067 }
2064 2068
2065 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; 2069 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
2066 sbale = zfcp_qdio_sbale_req(req); 2070 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
2067 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ; 2071 sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
2068 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 2072 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
2069 2073
@@ -2140,8 +2144,8 @@ static void zfcp_fsf_trace_latency(struct zfcp_fsf_req *fsf_req)
2140 } 2144 }
2141 if (fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR) 2145 if (fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR)
2142 trace.flags |= ZFCP_BLK_REQ_ERROR; 2146 trace.flags |= ZFCP_BLK_REQ_ERROR;
2143 trace.inb_usage = fsf_req->qdio_inb_usage; 2147 trace.inb_usage = fsf_req->queue_req.qdio_inb_usage;
2144 trace.outb_usage = fsf_req->qdio_outb_usage; 2148 trace.outb_usage = fsf_req->queue_req.qdio_outb_usage;
2145 2149
2146 blk_add_driver_data(req->q, req, &trace, sizeof(trace)); 2150 blk_add_driver_data(req->q, req, &trace, sizeof(trace));
2147} 2151}
@@ -2420,11 +2424,11 @@ int zfcp_fsf_send_fcp_command_task(struct zfcp_unit *unit,
2420 req->qtcb->bottom.io.fcp_cmnd_length = sizeof(struct fcp_cmnd_iu) + 2424 req->qtcb->bottom.io.fcp_cmnd_length = sizeof(struct fcp_cmnd_iu) +
2421 fcp_cmnd_iu->add_fcp_cdb_length + sizeof(u32); 2425 fcp_cmnd_iu->add_fcp_cdb_length + sizeof(u32);
2422 2426
2423 real_bytes = zfcp_qdio_sbals_from_sg(req, sbtype, 2427 real_bytes = zfcp_qdio_sbals_from_sg(adapter, &req->queue_req, sbtype,
2424 scsi_sglist(scsi_cmnd), 2428 scsi_sglist(scsi_cmnd),
2425 FSF_MAX_SBALS_PER_REQ); 2429 FSF_MAX_SBALS_PER_REQ);
2426 if (unlikely(real_bytes < 0)) { 2430 if (unlikely(real_bytes < 0)) {
2427 if (req->sbal_number >= FSF_MAX_SBALS_PER_REQ) { 2431 if (req->queue_req.sbal_number >= FSF_MAX_SBALS_PER_REQ) {
2428 dev_err(&adapter->ccw_device->dev, 2432 dev_err(&adapter->ccw_device->dev,
2429 "Oversize data package, unit 0x%016Lx " 2433 "Oversize data package, unit 0x%016Lx "
2430 "on port 0x%016Lx closed\n", 2434 "on port 0x%016Lx closed\n",
@@ -2492,7 +2496,7 @@ struct zfcp_fsf_req *zfcp_fsf_send_fcp_ctm(struct zfcp_unit *unit, u8 tm_flags)
2492 req->qtcb->bottom.io.fcp_cmnd_length = sizeof(struct fcp_cmnd_iu) + 2496 req->qtcb->bottom.io.fcp_cmnd_length = sizeof(struct fcp_cmnd_iu) +
2493 sizeof(u32); 2497 sizeof(u32);
2494 2498
2495 sbale = zfcp_qdio_sbale_req(req); 2499 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
2496 sbale[0].flags |= SBAL_FLAGS0_TYPE_WRITE; 2500 sbale[0].flags |= SBAL_FLAGS0_TYPE_WRITE;
2497 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; 2501 sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
2498 2502
@@ -2555,15 +2559,15 @@ struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *adapter,
2555 2559
2556 req->handler = zfcp_fsf_control_file_handler; 2560 req->handler = zfcp_fsf_control_file_handler;
2557 2561
2558 sbale = zfcp_qdio_sbale_req(req); 2562 sbale = zfcp_qdio_sbale_req(adapter, &req->queue_req);
2559 sbale[0].flags |= direction; 2563 sbale[0].flags |= direction;
2560 2564
2561 bottom = &req->qtcb->bottom.support; 2565 bottom = &req->qtcb->bottom.support;
2562 bottom->operation_subtype = FSF_CFDC_OPERATION_SUBTYPE; 2566 bottom->operation_subtype = FSF_CFDC_OPERATION_SUBTYPE;
2563 bottom->option = fsf_cfdc->option; 2567 bottom->option = fsf_cfdc->option;
2564 2568
2565 bytes = zfcp_qdio_sbals_from_sg(req, direction, fsf_cfdc->sg, 2569 bytes = zfcp_qdio_sbals_from_sg(adapter, &req->queue_req, direction,
2566 FSF_MAX_SBALS_PER_REQ); 2570 fsf_cfdc->sg, FSF_MAX_SBALS_PER_REQ);
2567 if (bytes != ZFCP_CFDC_MAX_SIZE) { 2571 if (bytes != ZFCP_CFDC_MAX_SIZE) {
2568 zfcp_fsf_req_free(req); 2572 zfcp_fsf_req_free(req);
2569 goto out; 2573 goto out;
@@ -2612,8 +2616,9 @@ void zfcp_fsf_reqid_check(struct zfcp_adapter *adapter, int sbal_idx)
2612 list_del(&fsf_req->list); 2616 list_del(&fsf_req->list);
2613 spin_unlock_irqrestore(&adapter->req_list_lock, flags); 2617 spin_unlock_irqrestore(&adapter->req_list_lock, flags);
2614 2618
2615 fsf_req->sbal_response = sbal_idx; 2619 fsf_req->queue_req.sbal_response = sbal_idx;
2616 fsf_req->qdio_inb_usage = atomic_read(&adapter->resp_q.count); 2620 fsf_req->queue_req.qdio_inb_usage =
2621 atomic_read(&adapter->resp_q.count);
2617 zfcp_fsf_req_complete(fsf_req); 2622 zfcp_fsf_req_complete(fsf_req);
2618 2623
2619 if (likely(sbale->flags & SBAL_FLAGS_LAST_ENTRY)) 2624 if (likely(sbale->flags & SBAL_FLAGS_LAST_ENTRY))