]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: sdp_poll() should not excessively poll rx_cq
authorEldad Zinger <eldadz@mellanox.co.il>
Tue, 28 Sep 2010 11:39:02 +0000 (13:39 +0200)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:05:24 +0000 (05:05 -0700)
sdp_poll() might be called before send(), and if there is no data in rx_cq,
polling rx_cq will waste 700 usec (recv_poll).

Signed-off-by: Eldad Zinger <eldadz@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp_main.c

index d8ddce62afd1e11c7c96997aab0724a79ba38a30..04e8dca7884b9db4a5ae1918de25ff21c57edeae 100644 (file)
@@ -2611,12 +2611,12 @@ static unsigned int sdp_poll(struct file *file, struct socket *socket,
        sdp_sk(sk)->cpu = smp_processor_id();
 
        if (sk->sk_state == TCP_ESTABLISHED) {
-               sdp_prf(sk, NULL, "polling");
-               posts_handler_get(sdp_sk(sk));
-               poll_recv_cq(sk);
-               posts_handler_put(sdp_sk(sk), 0);
+               sdp_prf(sk, NULL, "posting\n");
+               sdp_do_posts(sdp_sk(sk));
        }
        mask = datagram_poll(file, socket, wait);
+       if (!(mask & POLLIN))
+               sdp_arm_rx_cq(sk);
 
        /*
         * Adjust for memory in later kernels