diff options
Diffstat (limited to 'drivers/s390/scsi/zfcp_qdio.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_qdio.c | 23 |
1 files changed, 3 insertions, 20 deletions
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c index c2eb94f6370f..e0a215309df0 100644 --- a/drivers/s390/scsi/zfcp_qdio.c +++ b/drivers/s390/scsi/zfcp_qdio.c | |||
@@ -11,9 +11,6 @@ | |||
11 | 11 | ||
12 | #include "zfcp_ext.h" | 12 | #include "zfcp_ext.h" |
13 | 13 | ||
14 | /* FIXME(tune): free space should be one max. SBAL chain plus what? */ | ||
15 | #define ZFCP_QDIO_PCI_INTERVAL (QDIO_MAX_BUFFERS_PER_Q \ | ||
16 | - (FSF_MAX_SBALS_PER_REQ + 4)) | ||
17 | #define QBUFF_PER_PAGE (PAGE_SIZE / sizeof(struct qdio_buffer)) | 14 | #define QBUFF_PER_PAGE (PAGE_SIZE / sizeof(struct qdio_buffer)) |
18 | 15 | ||
19 | static int zfcp_qdio_buffers_enqueue(struct qdio_buffer **sbal) | 16 | static int zfcp_qdio_buffers_enqueue(struct qdio_buffer **sbal) |
@@ -364,23 +361,12 @@ int zfcp_qdio_send(struct zfcp_fsf_req *fsf_req) | |||
364 | struct zfcp_qdio_queue *req_q = &adapter->req_q; | 361 | struct zfcp_qdio_queue *req_q = &adapter->req_q; |
365 | int first = fsf_req->sbal_first; | 362 | int first = fsf_req->sbal_first; |
366 | int count = fsf_req->sbal_number; | 363 | int count = fsf_req->sbal_number; |
367 | int retval, pci, pci_batch; | 364 | int retval; |
368 | struct qdio_buffer_element *sbale; | 365 | unsigned int qdio_flags = QDIO_FLAG_SYNC_OUTPUT; |
369 | |||
370 | /* acknowledgements for transferred buffers */ | ||
371 | pci_batch = adapter->req_q_pci_batch + count; | ||
372 | if (unlikely(pci_batch >= ZFCP_QDIO_PCI_INTERVAL)) { | ||
373 | pci_batch %= ZFCP_QDIO_PCI_INTERVAL; | ||
374 | pci = first + count - (pci_batch + 1); | ||
375 | pci %= QDIO_MAX_BUFFERS_PER_Q; | ||
376 | sbale = zfcp_qdio_sbale(req_q, pci, 0); | ||
377 | sbale->flags |= SBAL_FLAGS0_PCI; | ||
378 | } | ||
379 | 366 | ||
380 | zfcp_qdio_account(adapter); | 367 | zfcp_qdio_account(adapter); |
381 | 368 | ||
382 | retval = do_QDIO(adapter->ccw_device, QDIO_FLAG_SYNC_OUTPUT, 0, first, | 369 | retval = do_QDIO(adapter->ccw_device, qdio_flags, 0, first, count); |
383 | count); | ||
384 | if (unlikely(retval)) { | 370 | if (unlikely(retval)) { |
385 | zfcp_qdio_zero_sbals(req_q->sbal, first, count); | 371 | zfcp_qdio_zero_sbals(req_q->sbal, first, count); |
386 | return retval; | 372 | return retval; |
@@ -390,7 +376,6 @@ int zfcp_qdio_send(struct zfcp_fsf_req *fsf_req) | |||
390 | atomic_sub(count, &req_q->count); | 376 | atomic_sub(count, &req_q->count); |
391 | req_q->first += count; | 377 | req_q->first += count; |
392 | req_q->first %= QDIO_MAX_BUFFERS_PER_Q; | 378 | req_q->first %= QDIO_MAX_BUFFERS_PER_Q; |
393 | adapter->req_q_pci_batch = pci_batch; | ||
394 | return 0; | 379 | return 0; |
395 | } | 380 | } |
396 | 381 | ||
@@ -461,7 +446,6 @@ void zfcp_qdio_close(struct zfcp_adapter *adapter) | |||
461 | } | 446 | } |
462 | req_q->first = 0; | 447 | req_q->first = 0; |
463 | atomic_set(&req_q->count, 0); | 448 | atomic_set(&req_q->count, 0); |
464 | adapter->req_q_pci_batch = 0; | ||
465 | adapter->resp_q.first = 0; | 449 | adapter->resp_q.first = 0; |
466 | atomic_set(&adapter->resp_q.count, 0); | 450 | atomic_set(&adapter->resp_q.count, 0); |
467 | } | 451 | } |
@@ -499,7 +483,6 @@ int zfcp_qdio_open(struct zfcp_adapter *adapter) | |||
499 | /* set index of first avalable SBALS / number of available SBALS */ | 483 | /* set index of first avalable SBALS / number of available SBALS */ |
500 | adapter->req_q.first = 0; | 484 | adapter->req_q.first = 0; |
501 | atomic_set(&adapter->req_q.count, QDIO_MAX_BUFFERS_PER_Q); | 485 | atomic_set(&adapter->req_q.count, QDIO_MAX_BUFFERS_PER_Q); |
502 | adapter->req_q_pci_batch = 0; | ||
503 | 486 | ||
504 | return 0; | 487 | return 0; |
505 | 488 | ||