Hand optimize netvsc_send_pkt by adding likely/unlikely.
Also don't print pointer in warning message, instead dump info.

Signed-off-by: Stephen Hemminger <sthem...@microsoft.com>
---
 drivers/net/hyperv/netvsc.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 59ca5fd6797d..d9bd1a2db4db 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -751,9 +751,9 @@ static u32 netvsc_copy_to_send_buf(struct netvsc_device 
*net_device,
        return msg_size;
 }
 
-static inline int netvsc_send_pkt(
+static int netvsc_send_pkt(
        struct hv_device *device,
-       struct hv_netvsc_packet *packet,
+       const struct hv_netvsc_packet *packet,
        struct netvsc_device *net_device,
        struct hv_page_buffer **pb,
        struct sk_buff *skb)
@@ -766,7 +766,6 @@ static inline int netvsc_send_pkt(
        struct netdev_queue *txq = netdev_get_tx_queue(ndev, packet->q_idx);
        u64 req_id;
        int ret;
-       struct hv_page_buffer *pgbuf;
        u32 ring_avail = hv_ringbuf_avail_percent(out_channel);
 
        nvmsg.hdr.msg_type = NVSP_MSG1_TYPE_SEND_RNDIS_PKT;
@@ -788,10 +787,12 @@ static inline int netvsc_send_pkt(
 
        req_id = (ulong)skb;
 
-       if (out_channel->rescind)
+       if (unlikely(out_channel->rescind))
                return -ENODEV;
 
        if (packet->page_buf_cnt) {
+               struct hv_page_buffer *pgbuf;
+
                pgbuf = packet->cp_partial ? (*pb) +
                        packet->rmsg_pgcnt : (*pb);
                ret = vmbus_sendpacket_pagebuffer_ctl(out_channel,
@@ -809,20 +810,23 @@ static inline int netvsc_send_pkt(
                                           
VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
        }
 
-       if (ret == 0) {
-               atomic_inc_return(&nvchan->queue_sends);
+       if (likely(ret == 0)) {
+               atomic_inc(&nvchan->queue_sends);
 
                if (ring_avail < RING_AVAIL_PERCENT_LOWATER)
                        netif_tx_stop_queue(txq);
-       } else if (ret == -EAGAIN) {
+       } else if (likely(ret == -EAGAIN)) {
                netif_tx_stop_queue(txq);
                if (atomic_read(&nvchan->queue_sends) < 1) {
                        netif_tx_wake_queue(txq);
                        ret = -ENOSPC;
                }
        } else {
-               netdev_err(ndev, "Unable to send packet %p ret %d\n",
-                          packet, ret);
+               if (net_ratelimit())
+                       netdev_warn(ndev,
+                                   "Unable to send packet qid %u index %d len 
%u (%d)\n",
+                                   packet->q_idx, packet->send_buf_index,
+                                   packet->total_data_buflen, ret);
        }
 
        return ret;
-- 
2.11.0

Reply via email to