diff options
author | Julian Wiedmann <jwi@linux.ibm.com> | 2019-08-23 11:48:47 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-08-24 16:39:18 -0700 |
commit | 7c47f5afdeef763599f1ae22d29b8c3904c58315 (patch) | |
tree | 0aa9265576bf9f2fb6fc67307a6200b0fd2809d0 /arch/s390 | |
parent | fbbdbc6473070dcb3ee1d69cf1c49ff78677d716 (diff) | |
download | linux-7c47f5afdeef763599f1ae22d29b8c3904c58315.tar.gz linux-7c47f5afdeef763599f1ae22d29b8c3904c58315.tar.bz2 linux-7c47f5afdeef763599f1ae22d29b8c3904c58315.zip |
s390/qdio: enable drivers to poll for Output completions
While commit d36deae75011 ("qdio: extend API to allow polling") enhanced
the qdio layer so that drivers can poll their Input Queues, we don't
have the corresponding infrastructure for Output Queues yet.
Factor out a helper that scans a single QDIO Queue, so that qeth can
implement TX NAPI on top of it.
While doing so, remove the duplicated tracking of the next-to-scan index
(q->first_to_check vs q->first_to_kick) in this code path.
qdio_handle_aobs() needs to move slightly upwards in the code hierarchy,
so that it's still called from the polling path.
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Acked-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/include/asm/qdio.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h index f647d565bd6d..79b4a3e9dc5d 100644 --- a/arch/s390/include/asm/qdio.h +++ b/arch/s390/include/asm/qdio.h @@ -416,6 +416,9 @@ extern int do_QDIO(struct ccw_device *, unsigned int, int, unsigned int, extern int qdio_start_irq(struct ccw_device *, int); extern int qdio_stop_irq(struct ccw_device *, int); extern int qdio_get_next_buffers(struct ccw_device *, int, int *, int *); +extern int qdio_inspect_queue(struct ccw_device *cdev, unsigned int nr, + bool is_input, unsigned int *bufnr, + unsigned int *error); extern int qdio_shutdown(struct ccw_device *, int); extern int qdio_free(struct ccw_device *); extern int qdio_get_ssqd_desc(struct ccw_device *, struct qdio_ssqd_desc *); |