Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=028cf917b258b11286437a1b96e64030f94fd46d
Commit:     028cf917b258b11286437a1b96e64030f94fd46d
Parent:     86b22470f68528c68cb25dbd58886040e1917494
Author:     Ursula Braun <[EMAIL PROTECTED]>
AuthorDate: Fri Dec 15 17:18:14 2006 +0100
Committer:  Martin Schwidefsky <[EMAIL PROTECTED]>
CommitDate: Fri Dec 15 17:18:14 2006 +0100

    [S390] Hipersocket multicast queue: make sure outbound handler is called
    
    A HiperSocket multicast queue works asynchronously. When sending
    buffers, the buffer state change from PRIMED to EMPTY may happen
    delayed. Reschedule the checking for changes in the outbound queue,
    if there are still PRIMED buffers.
    
    Signed-off-by: Ursula Braun <[EMAIL PROTECTED]>
    Signed-off-by: Martin Schwidefsky <[EMAIL PROTECTED]>
---
 drivers/s390/cio/qdio.c |   13 ++++++++-----
 include/asm-s390/qdio.h |    1 +
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c
index 9d4ea44..6fd1940 100644
--- a/drivers/s390/cio/qdio.c
+++ b/drivers/s390/cio/qdio.c
@@ -979,12 +979,11 @@ __qdio_outbound_processing(struct qdio_q *q)
 
        if (q->is_iqdio_q) {
                /* 
-                * for asynchronous queues, we better check, if the fill
-                * level is too high. for synchronous queues, the fill
-                * level will never be that high. 
+                * for asynchronous queues, we better check, if the sent
+                * buffer is already switched from PRIMED to EMPTY.
                 */
-               if (atomic_read(&q->number_of_buffers_used)>
-                   IQDIO_FILL_LEVEL_TO_POLL)
+               if ((q->queue_type == QDIO_IQDIO_QFMT_ASYNCH) &&
+                   !qdio_is_outbound_q_done(q))
                        qdio_mark_q(q);
 
        } else if (!q->hydra_gives_outbound_pcis)
@@ -1825,6 +1824,10 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device 
*cdev,
                        q->sbal[j]=*(outbound_sbals_array++);
 
                 q->queue_type=q_format;
+               if ((q->queue_type == QDIO_IQDIO_QFMT) &&
+                   (no_output_qs > 1) &&
+                   (i == no_output_qs-1))
+                       q->queue_type = QDIO_IQDIO_QFMT_ASYNCH;
                q->int_parm=int_parm;
                q->is_input_q=0;
                q->schid = irq_ptr->schid;
diff --git a/include/asm-s390/qdio.h b/include/asm-s390/qdio.h
index 7189c79..127f72e 100644
--- a/include/asm-s390/qdio.h
+++ b/include/asm-s390/qdio.h
@@ -34,6 +34,7 @@
 #define QDIO_QETH_QFMT 0
 #define QDIO_ZFCP_QFMT 1
 #define QDIO_IQDIO_QFMT 2
+#define QDIO_IQDIO_QFMT_ASYNCH 3
 
 struct qdio_buffer_element{
        unsigned int flags;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to