* [PATCH 0/2] Drivers: net: hyperv: Cleanup the recive path @ 2014-01-31 16:24 K. Y. Srinivasan 2014-01-31 16:25 ` [PATCH 1/2] Drivers: net: hyperv: Get rid of the rndis_filter_packet structure K. Y. Srinivasan 2014-02-02 1:01 ` [PATCH 0/2] Drivers: net: hyperv: Cleanup the recive path David Miller 0 siblings, 2 replies; 4+ messages in thread From: K. Y. Srinivasan @ 2014-01-31 16:24 UTC (permalink / raw) To: davem, netdev, linux-kernel, devel, olaf, apw, jasowang; +Cc: K. Y. Srinivasan Some minor cleanup of the receive path. Get rid of unnecessary indirection as well as unnecessary re-establishment of state. K. Y. Srinivasan (2): Drivers: net: hyperv: Get rid of the rndis_filter_packet structure Drivers: net: hyperv: Cleanup the receive path drivers/net/hyperv/hyperv_net.h | 6 ----- drivers/net/hyperv/netvsc.c | 29 +++++++++++-------------- drivers/net/hyperv/netvsc_drv.c | 2 +- drivers/net/hyperv/rndis_filter.c | 41 ++---------------------------------- 4 files changed, 17 insertions(+), 61 deletions(-) -- 1.7.4.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] Drivers: net: hyperv: Get rid of the rndis_filter_packet structure 2014-01-31 16:24 [PATCH 0/2] Drivers: net: hyperv: Cleanup the recive path K. Y. Srinivasan @ 2014-01-31 16:25 ` K. Y. Srinivasan 2014-01-31 16:25 ` [PATCH 2/2] Drivers: net: hyperv: Cleanup the receive path K. Y. Srinivasan 2014-02-02 1:01 ` [PATCH 0/2] Drivers: net: hyperv: Cleanup the recive path David Miller 1 sibling, 1 reply; 4+ messages in thread From: K. Y. Srinivasan @ 2014-01-31 16:25 UTC (permalink / raw) To: davem, netdev, linux-kernel, devel, olaf, apw, jasowang; +Cc: K. Y. Srinivasan This structure is redundant; get rid of it make the code little more efficient - get rid of the unnecessary indirection. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> --- drivers/net/hyperv/hyperv_net.h | 6 ----- drivers/net/hyperv/netvsc_drv.c | 2 +- drivers/net/hyperv/rndis_filter.c | 41 ++---------------------------------- 3 files changed, 4 insertions(+), 45 deletions(-) diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h index 7b594ce..7645ba3 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -846,12 +846,6 @@ struct rndis_message { }; -struct rndis_filter_packet { - void *completion_ctx; - void (*completion)(void *context); - struct rndis_message msg; -}; - /* Handy macros */ /* get the size of an RNDIS message. Pass in the message type, */ diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 7756118..1eadc13 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -146,7 +146,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) /* Allocate a netvsc packet based on # of frags. */ packet = kzalloc(sizeof(struct hv_netvsc_packet) + (num_pages * sizeof(struct hv_page_buffer)) + - sizeof(struct rndis_filter_packet) + + sizeof(struct rndis_message) + NDIS_VLAN_PPI_SIZE, GFP_ATOMIC); if (!packet) { /* out of memory, drop packet */ diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c index 1084e5d..f0cc8ef 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -58,9 +58,6 @@ struct rndis_request { u8 request_ext[RNDIS_EXT_LEN]; }; -static void rndis_filter_send_completion(void *ctx); - - static struct rndis_device *get_rndis_device(void) { struct rndis_device *device; @@ -277,7 +274,7 @@ static void rndis_filter_receive_response(struct rndis_device *dev, "rndis response buffer overflow " "detected (size %u max %zu)\n", resp->msg_len, - sizeof(struct rndis_filter_packet)); + sizeof(struct rndis_message)); if (resp->ndis_msg_type == RNDIS_MSG_RESET_C) { @@ -898,17 +895,14 @@ int rndis_filter_close(struct hv_device *dev) int rndis_filter_send(struct hv_device *dev, struct hv_netvsc_packet *pkt) { - int ret; - struct rndis_filter_packet *filter_pkt; struct rndis_message *rndis_msg; struct rndis_packet *rndis_pkt; u32 rndis_msg_size; bool isvlan = pkt->vlan_tci & VLAN_TAG_PRESENT; /* Add the rndis header */ - filter_pkt = (struct rndis_filter_packet *)pkt->extension; + rndis_msg = (struct rndis_message *)pkt->extension; - rndis_msg = &filter_pkt->msg; rndis_msg_size = RNDIS_MESSAGE_SIZE(struct rndis_packet); if (isvlan) rndis_msg_size += NDIS_VLAN_PPI_SIZE; @@ -961,34 +955,5 @@ int rndis_filter_send(struct hv_device *dev, pkt->page_buf[1].len = rndis_msg_size - pkt->page_buf[0].len; } - /* Save the packet send completion and context */ - filter_pkt->completion = pkt->completion.send.send_completion; - filter_pkt->completion_ctx = - pkt->completion.send.send_completion_ctx; - - /* Use ours */ - pkt->completion.send.send_completion = rndis_filter_send_completion; - pkt->completion.send.send_completion_ctx = filter_pkt; - - ret = netvsc_send(dev, pkt); - if (ret != 0) { - /* - * Reset the completion to originals to allow retries from - * above - */ - pkt->completion.send.send_completion = - filter_pkt->completion; - pkt->completion.send.send_completion_ctx = - filter_pkt->completion_ctx; - } - - return ret; -} - -static void rndis_filter_send_completion(void *ctx) -{ - struct rndis_filter_packet *filter_pkt = ctx; - - /* Pass it back to the original handler */ - filter_pkt->completion(filter_pkt->completion_ctx); + return netvsc_send(dev, pkt); } -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] Drivers: net: hyperv: Cleanup the receive path 2014-01-31 16:25 ` [PATCH 1/2] Drivers: net: hyperv: Get rid of the rndis_filter_packet structure K. Y. Srinivasan @ 2014-01-31 16:25 ` K. Y. Srinivasan 0 siblings, 0 replies; 4+ messages in thread From: K. Y. Srinivasan @ 2014-01-31 16:25 UTC (permalink / raw) To: davem, netdev, linux-kernel, devel, olaf, apw, jasowang; +Cc: K. Y. Srinivasan Make the receive path a little more efficient by parameterizing the required state rather than re-establishing that state. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> --- drivers/net/hyperv/netvsc.c | 29 +++++++++++++---------------- 1 files changed, 13 insertions(+), 16 deletions(-) diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index 03a2c6e..7fa2bba 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -432,17 +432,14 @@ static inline u32 hv_ringbuf_avail_percent( return avail_write * 100 / ring_info->ring_datasize; } -static void netvsc_send_completion(struct hv_device *device, +static void netvsc_send_completion(struct netvsc_device *net_device, + struct hv_device *device, struct vmpacket_descriptor *packet) { - struct netvsc_device *net_device; struct nvsp_message *nvsp_packet; struct hv_netvsc_packet *nvsc_packet; struct net_device *ndev; - net_device = get_inbound_net_device(device); - if (!net_device) - return; ndev = net_device->ndev; nvsp_packet = (struct nvsp_message *)((unsigned long)packet + @@ -561,13 +558,13 @@ int netvsc_send(struct hv_device *device, } static void netvsc_send_recv_completion(struct hv_device *device, + struct netvsc_device *net_device, u64 transaction_id, u32 status) { struct nvsp_message recvcompMessage; int retries = 0; int ret; struct net_device *ndev; - struct netvsc_device *net_device = hv_get_drvdata(device); ndev = net_device->ndev; @@ -653,14 +650,15 @@ static void netvsc_receive_completion(void *context) /* Send a receive completion for the xfer page packet */ if (fsend_receive_comp) - netvsc_send_recv_completion(device, transaction_id, status); + netvsc_send_recv_completion(device, net_device, transaction_id, + status); } -static void netvsc_receive(struct hv_device *device, - struct vmpacket_descriptor *packet) +static void netvsc_receive(struct netvsc_device *net_device, + struct hv_device *device, + struct vmpacket_descriptor *packet) { - struct netvsc_device *net_device; struct vmtransfer_page_packet_header *vmxferpage_packet; struct nvsp_message *nvsp_packet; struct hv_netvsc_packet *netvsc_packet = NULL; @@ -673,9 +671,6 @@ static void netvsc_receive(struct hv_device *device, LIST_HEAD(listHead); - net_device = get_inbound_net_device(device); - if (!net_device) - return; ndev = net_device->ndev; /* @@ -741,7 +736,7 @@ static void netvsc_receive(struct hv_device *device, spin_unlock_irqrestore(&net_device->recv_pkt_list_lock, flags); - netvsc_send_recv_completion(device, + netvsc_send_recv_completion(device, net_device, vmxferpage_packet->d.trans_id, NVSP_STAT_FAIL); @@ -825,11 +820,13 @@ static void netvsc_channel_cb(void *context) desc = (struct vmpacket_descriptor *)buffer; switch (desc->type) { case VM_PKT_COMP: - netvsc_send_completion(device, desc); + netvsc_send_completion(net_device, + device, desc); break; case VM_PKT_DATA_USING_XFER_PAGES: - netvsc_receive(device, desc); + netvsc_receive(net_device, + device, desc); break; default: -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 0/2] Drivers: net: hyperv: Cleanup the recive path 2014-01-31 16:24 [PATCH 0/2] Drivers: net: hyperv: Cleanup the recive path K. Y. Srinivasan 2014-01-31 16:25 ` [PATCH 1/2] Drivers: net: hyperv: Get rid of the rndis_filter_packet structure K. Y. Srinivasan @ 2014-02-02 1:01 ` David Miller 1 sibling, 0 replies; 4+ messages in thread From: David Miller @ 2014-02-02 1:01 UTC (permalink / raw) To: kys; +Cc: netdev, linux-kernel, devel, olaf, apw, jasowang From: "K. Y. Srinivasan" <kys@microsoft.com> Date: Fri, 31 Jan 2014 08:24:38 -0800 > Some minor cleanup of the receive path. Get rid of unnecessary > indirection as well as unnecessary re-establishment of state. It is not appropriate to submit cleanups at this time. Please wait until the net-next tree opens back up, and submit your changes against it at that time. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-02-02 1:01 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-01-31 16:24 [PATCH 0/2] Drivers: net: hyperv: Cleanup the recive path K. Y. Srinivasan 2014-01-31 16:25 ` [PATCH 1/2] Drivers: net: hyperv: Get rid of the rndis_filter_packet structure K. Y. Srinivasan 2014-01-31 16:25 ` [PATCH 2/2] Drivers: net: hyperv: Cleanup the receive path K. Y. Srinivasan 2014-02-02 1:01 ` [PATCH 0/2] Drivers: net: hyperv: Cleanup the recive path David Miller
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).