Commit 97c1723a authored by KY Srinivasan's avatar KY Srinivasan Committed by David S. Miller

Drivers: net: hyperv: Cleanup the receive path

Make the receive path a little more efficient by parameterizing the
required state rather than re-establishing that state.
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: default avatarHaiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 86eedacc
...@@ -432,17 +432,14 @@ static inline u32 hv_ringbuf_avail_percent( ...@@ -432,17 +432,14 @@ static inline u32 hv_ringbuf_avail_percent(
return avail_write * 100 / ring_info->ring_datasize; 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 vmpacket_descriptor *packet)
{ {
struct netvsc_device *net_device;
struct nvsp_message *nvsp_packet; struct nvsp_message *nvsp_packet;
struct hv_netvsc_packet *nvsc_packet; struct hv_netvsc_packet *nvsc_packet;
struct net_device *ndev; struct net_device *ndev;
net_device = get_inbound_net_device(device);
if (!net_device)
return;
ndev = net_device->ndev; ndev = net_device->ndev;
nvsp_packet = (struct nvsp_message *)((unsigned long)packet + nvsp_packet = (struct nvsp_message *)((unsigned long)packet +
...@@ -561,13 +558,13 @@ int netvsc_send(struct hv_device *device, ...@@ -561,13 +558,13 @@ int netvsc_send(struct hv_device *device,
} }
static void netvsc_send_recv_completion(struct hv_device *device, static void netvsc_send_recv_completion(struct hv_device *device,
struct netvsc_device *net_device,
u64 transaction_id, u32 status) u64 transaction_id, u32 status)
{ {
struct nvsp_message recvcompMessage; struct nvsp_message recvcompMessage;
int retries = 0; int retries = 0;
int ret; int ret;
struct net_device *ndev; struct net_device *ndev;
struct netvsc_device *net_device = hv_get_drvdata(device);
ndev = net_device->ndev; ndev = net_device->ndev;
...@@ -653,14 +650,15 @@ static void netvsc_receive_completion(void *context) ...@@ -653,14 +650,15 @@ static void netvsc_receive_completion(void *context)
/* Send a receive completion for the xfer page packet */ /* Send a receive completion for the xfer page packet */
if (fsend_receive_comp) 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, static void netvsc_receive(struct netvsc_device *net_device,
struct hv_device *device,
struct vmpacket_descriptor *packet) struct vmpacket_descriptor *packet)
{ {
struct netvsc_device *net_device;
struct vmtransfer_page_packet_header *vmxferpage_packet; struct vmtransfer_page_packet_header *vmxferpage_packet;
struct nvsp_message *nvsp_packet; struct nvsp_message *nvsp_packet;
struct hv_netvsc_packet *netvsc_packet = NULL; struct hv_netvsc_packet *netvsc_packet = NULL;
...@@ -673,9 +671,6 @@ static void netvsc_receive(struct hv_device *device, ...@@ -673,9 +671,6 @@ static void netvsc_receive(struct hv_device *device,
LIST_HEAD(listHead); LIST_HEAD(listHead);
net_device = get_inbound_net_device(device);
if (!net_device)
return;
ndev = net_device->ndev; ndev = net_device->ndev;
/* /*
...@@ -741,7 +736,7 @@ static void netvsc_receive(struct hv_device *device, ...@@ -741,7 +736,7 @@ static void netvsc_receive(struct hv_device *device,
spin_unlock_irqrestore(&net_device->recv_pkt_list_lock, spin_unlock_irqrestore(&net_device->recv_pkt_list_lock,
flags); flags);
netvsc_send_recv_completion(device, netvsc_send_recv_completion(device, net_device,
vmxferpage_packet->d.trans_id, vmxferpage_packet->d.trans_id,
NVSP_STAT_FAIL); NVSP_STAT_FAIL);
...@@ -825,11 +820,13 @@ static void netvsc_channel_cb(void *context) ...@@ -825,11 +820,13 @@ static void netvsc_channel_cb(void *context)
desc = (struct vmpacket_descriptor *)buffer; desc = (struct vmpacket_descriptor *)buffer;
switch (desc->type) { switch (desc->type) {
case VM_PKT_COMP: case VM_PKT_COMP:
netvsc_send_completion(device, desc); netvsc_send_completion(net_device,
device, desc);
break; break;
case VM_PKT_DATA_USING_XFER_PAGES: case VM_PKT_DATA_USING_XFER_PAGES:
netvsc_receive(device, desc); netvsc_receive(net_device,
device, desc);
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment