Thread (5 messages) flat view 5 messages, 2 authors, 2015-05-06

RE: [PATCH V3 net-next 1/1] hv_netvsc: Use the xmit_more skb flag to optimize signaling the host

From: KY Srinivasan <kys@microsoft.com>
Date: 2015-05-06 19:55:13
Also in: lkml

-----Original Message-----
From: Eric Dumazet [mailto:eric.dumazet@gmail.com]
Sent: Wednesday, May 6, 2015 12:18 PM
To: KY Srinivasan
Cc: davem@davemloft.net; netdev@vger.kernel.org; linux-
kernel@vger.kernel.org; devel@linuxdriverproject.org; olaf@aepfle.de;
apw@canonical.com; jasowang@redhat.com
Subject: Re: [PATCH V3 net-next 1/1] hv_netvsc: Use the xmit_more skb flag
to optimize signaling the host

On Wed, 2015-05-06 at 18:28 +0000, KY Srinivasan wrote:
quoted
Ah! I too was wondering how we could get into this situation. The condition
you mention
quoted
is already handled in the lower level - if the attempt to put the last packet
on vmbus were to
quoted
fail because the ring is full, we will notify the host independent of kick_q
parameter - look
quoted
at the function vmbus_sendpacket_ctl() in drivers/hv/channel.c

I will resend the patch by reverting this to version 2.
I am not really convinced by what you are saying ;)

problem is not when you fail to add an additional packet.

Problem is :

You queue a packet but not kick because skb->xmit_more = 1, and _then_
you call netif_tx_stop_queue().

No further packet will be delivered to your driver, until
netif_tx_wake_queue() is called again from netvsc_send_completion(),
possibly milli seconds later.
Ok; I see your point. We stop the q in our driver under two conditions:

1. When the ring is full and we fail to queue. This situation is taken care of already.
2. We fall below a certain free space in the ring buffer - this is the case you are pointing out.

I will address this and resend the patch. Thanks for the review.

Regards,

K. Y
If qdisc was replaced by another one, no packet will kick again, unless
other traffic comes.

Given complexity of your driver, I have no easy way to check you made
this xmit_more conversion correctly, and one packet can not sit in the
equivalent of TX ring buffer for unbound time.

Better add a full explanation into your changelog.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help