]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
ctcm: use correct idal word list for ctcmpc
authorBelinda Thompson <belindat@us.ibm.com>
Wed, 7 Mar 2012 02:06:27 +0000 (02:06 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 8 Mar 2012 06:52:25 +0000 (22:52 -0800)
Communication Server Linux uses the ctcmpc code of the ctcm driver.
Sending problems have shown up caused by a wrong idal word list for
the first ccw. Function ctcmpc_chx_txdone() invokes the function
to prepare the idal word list without setting an appropriate length
for the first ccw, which may lead to an incomplete idal word list.
This patch sets the maximum buffer size as data length of the first
ccw. Thus correct idal word lists are guaranteed in all cases.

Signed-off-by: Belinda Thompson <belindat@us.ibm.com>
Reviewed-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/ctcm_fsms.c

index 2d602207541b20a95ed590c4186e2705cf7c077a..a69766900a17badf80952614a89182a915aba7fa 100644 (file)
@@ -1341,6 +1341,12 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg)
 
        spin_unlock(&ch->collect_lock);
        clear_normalized_cda(&ch->ccw[1]);
+
+       CTCM_PR_DBGDATA("ccwcda=0x%p data=0x%p\n",
+                       (void *)(unsigned long)ch->ccw[1].cda,
+                       ch->trans_skb->data);
+       ch->ccw[1].count = ch->max_bufsize;
+
        if (set_normalized_cda(&ch->ccw[1], ch->trans_skb->data)) {
                dev_kfree_skb_any(ch->trans_skb);
                ch->trans_skb = NULL;
@@ -1350,6 +1356,11 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg)
                fsm_event(priv->mpcg->fsm, MPCG_EVENT_INOP, dev);
                return;
        }
+
+       CTCM_PR_DBGDATA("ccwcda=0x%p data=0x%p\n",
+                       (void *)(unsigned long)ch->ccw[1].cda,
+                       ch->trans_skb->data);
+
        ch->ccw[1].count = ch->trans_skb->len;
        fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch);
        ch->prof.send_stamp = current_kernel_time(); /* xtime */