|
@@ -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,
|
|
}
|
|
}
|
|
|
|
|
|
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)
|
|
|
|
|
|
/* 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,
|
|
|
|
- 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 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,
|
|
|
|
|
|
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,
|
|
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)
|
|
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:
|