* [PATCH V2 net-next 1/1] hv_netvsc: Use the xmit_more skb flag to optimize signaling the host
@ 2015-04-30 23:29 K. Y. Srinivasan
2015-05-01 4:36 ` Eric Dumazet
0 siblings, 1 reply; 3+ messages in thread
From: K. Y. Srinivasan @ 2015-04-30 23:29 UTC (permalink / raw)
To: davem, netdev, linux-kernel, devel, olaf, apw, jasowang; +Cc: K. Y. Srinivasan
Based on the information given to this driver (via the xmit_more skb flag),
we can defer signaling the host if more packets are on the way. This will help
make the host more efficient since it can potentially process a larger batch of
packets. Implement this optimization.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
---
v2: Fixed up indentation based on feedback from David Miller.
drivers/net/hyperv/netvsc.c | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 2e8ad06..5fdc5e1 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -743,6 +743,7 @@ static inline int netvsc_send_pkt(
u64 req_id;
int ret;
struct hv_page_buffer *pgbuf;
+ u32 vmbus_flags = VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED;
nvmsg.hdr.msg_type = NVSP_MSG1_TYPE_SEND_RNDIS_PKT;
if (packet->is_data_pkt) {
@@ -772,19 +773,22 @@ static inline int netvsc_send_pkt(
if (packet->page_buf_cnt) {
pgbuf = packet->cp_partial ? packet->page_buf +
packet->rmsg_pgcnt : packet->page_buf;
- ret = vmbus_sendpacket_pagebuffer(out_channel,
- pgbuf,
- packet->page_buf_cnt,
- &nvmsg,
- sizeof(struct nvsp_message),
- req_id);
+ ret = vmbus_sendpacket_pagebuffer_ctl(out_channel,
+ pgbuf,
+ packet->page_buf_cnt,
+ &nvmsg,
+ sizeof(struct
+ nvsp_message),
+ req_id,
+ vmbus_flags,
+ !packet->xmit_more);
} else {
- ret = vmbus_sendpacket(
+ ret = vmbus_sendpacket_ctl(
out_channel, &nvmsg,
sizeof(struct nvsp_message),
req_id,
VM_PKT_DATA_INBAND,
- VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
+ vmbus_flags, !packet->xmit_more);
}
if (ret == 0) {
--
1.7.4.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH V2 net-next 1/1] hv_netvsc: Use the xmit_more skb flag to optimize signaling the host
2015-04-30 23:29 [PATCH V2 net-next 1/1] hv_netvsc: Use the xmit_more skb flag to optimize signaling the host K. Y. Srinivasan
@ 2015-05-01 4:36 ` Eric Dumazet
2015-05-06 0:08 ` KY Srinivasan
0 siblings, 1 reply; 3+ messages in thread
From: Eric Dumazet @ 2015-05-01 4:36 UTC (permalink / raw)
To: K. Y. Srinivasan; +Cc: olaf, netdev, jasowang, linux-kernel, apw, devel, davem
On Thu, 2015-04-30 at 16:29 -0700, K. Y. Srinivasan wrote:
> Based on the information given to this driver (via the xmit_more skb flag),
> we can defer signaling the host if more packets are on the way. This will help
> make the host more efficient since it can potentially process a larger batch of
> packets. Implement this optimization.
>
> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
> ---
> v2: Fixed up indentation based on feedback from David Miller.
>
> drivers/net/hyperv/netvsc.c | 20 ++++++++++++--------
> 1 files changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
> index 2e8ad06..5fdc5e1 100644
> --- a/drivers/net/hyperv/netvsc.c
> +++ b/drivers/net/hyperv/netvsc.c
> @@ -743,6 +743,7 @@ static inline int netvsc_send_pkt(
> u64 req_id;
> int ret;
> struct hv_page_buffer *pgbuf;
> + u32 vmbus_flags = VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED;
>
> nvmsg.hdr.msg_type = NVSP_MSG1_TYPE_SEND_RNDIS_PKT;
> if (packet->is_data_pkt) {
> @@ -772,19 +773,22 @@ static inline int netvsc_send_pkt(
> if (packet->page_buf_cnt) {
> pgbuf = packet->cp_partial ? packet->page_buf +
> packet->rmsg_pgcnt : packet->page_buf;
> - ret = vmbus_sendpacket_pagebuffer(out_channel,
> - pgbuf,
> - packet->page_buf_cnt,
> - &nvmsg,
> - sizeof(struct nvsp_message),
> - req_id);
> + ret = vmbus_sendpacket_pagebuffer_ctl(out_channel,
> + pgbuf,
> + packet->page_buf_cnt,
> + &nvmsg,
> + sizeof(struct
> + nvsp_message),
> + req_id,
> + vmbus_flags,
> + !packet->xmit_more);
> } else {
> - ret = vmbus_sendpacket(
> + ret = vmbus_sendpacket_ctl(
> out_channel, &nvmsg,
> sizeof(struct nvsp_message),
> req_id,
> VM_PKT_DATA_INBAND,
> - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
> + vmbus_flags, !packet->xmit_more);
> }
>
> if (ret == 0) {
This might be problematic, if queue is stopped ( netif_tx_stop_queue())
You need to force a kick if we are about to stop the queue :
Random example : commit ddd0ca5d60b350bbfbfb60b25885a9779ce6d6c7
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH V2 net-next 1/1] hv_netvsc: Use the xmit_more skb flag to optimize signaling the host
2015-05-01 4:36 ` Eric Dumazet
@ 2015-05-06 0:08 ` KY Srinivasan
0 siblings, 0 replies; 3+ messages in thread
From: KY Srinivasan @ 2015-05-06 0:08 UTC (permalink / raw)
To: Eric Dumazet
Cc: olaf@aepfle.de, netdev@vger.kernel.org, jasowang@redhat.com,
linux-kernel@vger.kernel.org, apw@canonical.com,
devel@linuxdriverproject.org, davem@davemloft.net
> -----Original Message-----
> From: Eric Dumazet [mailto:eric.dumazet@gmail.com]
> Sent: Thursday, April 30, 2015 9:37 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 V2 net-next 1/1] hv_netvsc: Use the xmit_more skb flag
> to optimize signaling the host
>
> On Thu, 2015-04-30 at 16:29 -0700, K. Y. Srinivasan wrote:
> > Based on the information given to this driver (via the xmit_more skb flag),
> > we can defer signaling the host if more packets are on the way. This will
> help
> > make the host more efficient since it can potentially process a larger batch
> of
> > packets. Implement this optimization.
> >
> > Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
> > ---
> > v2: Fixed up indentation based on feedback from David Miller.
> >
> > drivers/net/hyperv/netvsc.c | 20 ++++++++++++--------
> > 1 files changed, 12 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
> > index 2e8ad06..5fdc5e1 100644
> > --- a/drivers/net/hyperv/netvsc.c
> > +++ b/drivers/net/hyperv/netvsc.c
> > @@ -743,6 +743,7 @@ static inline int netvsc_send_pkt(
> > u64 req_id;
> > int ret;
> > struct hv_page_buffer *pgbuf;
> > + u32 vmbus_flags =
> VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED;
> >
> > nvmsg.hdr.msg_type = NVSP_MSG1_TYPE_SEND_RNDIS_PKT;
> > if (packet->is_data_pkt) {
> > @@ -772,19 +773,22 @@ static inline int netvsc_send_pkt(
> > if (packet->page_buf_cnt) {
> > pgbuf = packet->cp_partial ? packet->page_buf +
> > packet->rmsg_pgcnt : packet->page_buf;
> > - ret = vmbus_sendpacket_pagebuffer(out_channel,
> > - pgbuf,
> > - packet->page_buf_cnt,
> > - &nvmsg,
> > - sizeof(struct
> nvsp_message),
> > - req_id);
> > + ret = vmbus_sendpacket_pagebuffer_ctl(out_channel,
> > + pgbuf,
> > + packet->page_buf_cnt,
> > + &nvmsg,
> > + sizeof(struct
> > + nvsp_message),
> > + req_id,
> > + vmbus_flags,
> > + !packet->xmit_more);
> > } else {
> > - ret = vmbus_sendpacket(
> > + ret = vmbus_sendpacket_ctl(
> > out_channel, &nvmsg,
> > sizeof(struct nvsp_message),
> > req_id,
> > VM_PKT_DATA_INBAND,
> > -
> VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
> > + vmbus_flags, !packet->xmit_more);
> > }
> >
> > if (ret == 0) {
>
> This might be problematic, if queue is stopped ( netif_tx_stop_queue())
>
> You need to force a kick if we are about to stop the queue :
>
> Random example : commit ddd0ca5d60b350bbfbfb60b25885a9779ce6d6c7
Thanks Eric; I will fix and resend.
Regards,
K. Y
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-05-06 0:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-30 23:29 [PATCH V2 net-next 1/1] hv_netvsc: Use the xmit_more skb flag to optimize signaling the host K. Y. Srinivasan
2015-05-01 4:36 ` Eric Dumazet
2015-05-06 0:08 ` KY Srinivasan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).