hyperv/hn: Pass channel to send done callbacks.
Mainly to strigent the data packet send done check. MFC after: 2 weeks Sponsored by: Microsoft OSTC
This commit is contained in:
parent
21640df213
commit
7dda664075
@ -64,7 +64,7 @@ static int hv_nv_destroy_send_buffer(netvsc_dev *net_dev);
|
||||
static int hv_nv_destroy_rx_buffer(netvsc_dev *net_dev);
|
||||
static int hv_nv_connect_to_vsp(struct hv_device *device);
|
||||
static void hv_nv_on_send_completion(netvsc_dev *net_dev,
|
||||
struct hv_device *device, hv_vm_packet_descriptor *pkt);
|
||||
struct hv_device *device, struct hv_vmbus_channel *, hv_vm_packet_descriptor *pkt);
|
||||
static void hv_nv_on_receive_completion(struct hv_vmbus_channel *chan,
|
||||
uint64_t tid, uint32_t status);
|
||||
static void hv_nv_on_receive(netvsc_dev *net_dev,
|
||||
@ -787,7 +787,8 @@ hv_nv_on_device_remove(struct hv_device *device, boolean_t destroy_channel)
|
||||
*/
|
||||
static void
|
||||
hv_nv_on_send_completion(netvsc_dev *net_dev,
|
||||
struct hv_device *device, hv_vm_packet_descriptor *pkt)
|
||||
struct hv_device *device, struct hv_vmbus_channel *chan,
|
||||
hv_vm_packet_descriptor *pkt)
|
||||
{
|
||||
nvsp_msg *nvsp_msg_pkt;
|
||||
netvsc_packet *net_vsc_pkt;
|
||||
@ -838,7 +839,7 @@ hv_nv_on_send_completion(netvsc_dev *net_dev,
|
||||
}
|
||||
|
||||
/* Notify the layer above us */
|
||||
net_vsc_pkt->compl.send.on_send_completion(
|
||||
net_vsc_pkt->compl.send.on_send_completion(chan,
|
||||
net_vsc_pkt->compl.send.send_completion_context);
|
||||
|
||||
}
|
||||
@ -1065,7 +1066,8 @@ hv_nv_on_channel_callback(void *xchan)
|
||||
desc = (hv_vm_packet_descriptor *)buffer;
|
||||
switch (desc->type) {
|
||||
case HV_VMBUS_PACKET_TYPE_COMPLETION:
|
||||
hv_nv_on_send_completion(net_dev, device, desc);
|
||||
hv_nv_on_send_completion(net_dev, device,
|
||||
chan, desc);
|
||||
break;
|
||||
case HV_VMBUS_PACKET_TYPE_DATA_USING_TRANSFER_PAGES:
|
||||
hv_nv_on_receive(net_dev, device, chan, desc);
|
||||
|
@ -1077,8 +1077,9 @@ typedef struct netvsc_dev_ {
|
||||
uint32_t vrss_send_table[VRSS_SEND_TABLE_SIZE];
|
||||
} netvsc_dev;
|
||||
|
||||
struct hv_vmbus_channel;
|
||||
|
||||
typedef void (*pfn_on_send_rx_completion)(void *);
|
||||
typedef void (*pfn_on_send_rx_completion)(struct hv_vmbus_channel *, void *);
|
||||
|
||||
#define NETVSC_DEVICE_RING_BUFFER_SIZE (128 * PAGE_SIZE)
|
||||
#define NETVSC_PACKET_MAXPAGE 32
|
||||
@ -1172,8 +1173,6 @@ struct hn_rx_ring {
|
||||
#define HN_TRUST_HCSUM_TCP 0x0002
|
||||
#define HN_TRUST_HCSUM_UDP 0x0004
|
||||
|
||||
struct hv_vmbus_channel;
|
||||
|
||||
struct hn_tx_ring {
|
||||
#ifndef HN_USE_TXDESC_BUFRING
|
||||
struct mtx hn_txlist_spin;
|
||||
|
@ -721,7 +721,7 @@ hn_txdesc_hold(struct hn_txdesc *txd)
|
||||
}
|
||||
|
||||
static void
|
||||
hn_tx_done(void *xpkt)
|
||||
hn_tx_done(struct hv_vmbus_channel *chan, void *xpkt)
|
||||
{
|
||||
netvsc_packet *packet = xpkt;
|
||||
struct hn_txdesc *txd;
|
||||
@ -731,6 +731,11 @@ hn_tx_done(void *xpkt)
|
||||
packet->compl.send.send_completion_tid;
|
||||
|
||||
txr = txd->txr;
|
||||
KASSERT(txr->hn_chan == chan,
|
||||
("channel mismatch, on channel%u, should be channel%u",
|
||||
chan->offer_msg.offer.sub_channel_index,
|
||||
txr->hn_chan->offer_msg.offer.sub_channel_index));
|
||||
|
||||
txr->hn_has_txeof = 1;
|
||||
hn_txdesc_put(txr, txd);
|
||||
}
|
||||
|
@ -69,8 +69,8 @@ static int hv_rf_set_packet_filter(rndis_device *device, uint32_t new_filter);
|
||||
static int hv_rf_init_device(rndis_device *device);
|
||||
static int hv_rf_open_device(rndis_device *device);
|
||||
static int hv_rf_close_device(rndis_device *device);
|
||||
static void hv_rf_on_send_request_completion(void *context);
|
||||
static void hv_rf_on_send_request_halt_completion(void *context);
|
||||
static void hv_rf_on_send_request_completion(struct hv_vmbus_channel *, void *context);
|
||||
static void hv_rf_on_send_request_halt_completion(struct hv_vmbus_channel *, void *context);
|
||||
int
|
||||
hv_rf_send_offload_request(struct hv_device *device,
|
||||
rndis_offload_params *offloads);
|
||||
@ -1158,7 +1158,8 @@ hv_rf_on_close(struct hv_device *device)
|
||||
* RNDIS filter on send request completion callback
|
||||
*/
|
||||
static void
|
||||
hv_rf_on_send_request_completion(void *context)
|
||||
hv_rf_on_send_request_completion(struct hv_vmbus_channel *chan __unused,
|
||||
void *context __unused)
|
||||
{
|
||||
}
|
||||
|
||||
@ -1166,7 +1167,8 @@ hv_rf_on_send_request_completion(void *context)
|
||||
* RNDIS filter on send request (halt only) completion callback
|
||||
*/
|
||||
static void
|
||||
hv_rf_on_send_request_halt_completion(void *context)
|
||||
hv_rf_on_send_request_halt_completion(struct hv_vmbus_channel *chan __unused,
|
||||
void *context)
|
||||
{
|
||||
rndis_request *request = context;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user