summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/hyperv/netvsc/hv_net_vsc.c6
-rw-r--r--sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c14
-rw-r--r--sys/dev/hyperv/netvsc/hv_rndis_filter.c9
3 files changed, 16 insertions, 13 deletions
diff --git a/sys/dev/hyperv/netvsc/hv_net_vsc.c b/sys/dev/hyperv/netvsc/hv_net_vsc.c
index 7992323..c592dc8 100644
--- a/sys/dev/hyperv/netvsc/hv_net_vsc.c
+++ b/sys/dev/hyperv/netvsc/hv_net_vsc.c
@@ -741,10 +741,8 @@ cleanup:
* Free the packet buffers on the netvsc device packet queue.
* Release other resources.
*/
- if (net_dev) {
- sema_destroy(&net_dev->channel_init_sema);
- free(net_dev, M_NETVSC);
- }
+ sema_destroy(&net_dev->channel_init_sema);
+ free(net_dev, M_NETVSC);
return (NULL);
}
diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
index 156a76d..6ae8626 100644
--- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -138,6 +138,8 @@ __FBSDID("$FreeBSD$");
#define HN_LROENT_CNT_DEF 128
+#define HN_RING_CNT_DEF_MAX 8
+
#define HN_RNDIS_MSG_LEN \
(sizeof(rndis_msg) + \
RNDIS_HASH_PPI_SIZE + \
@@ -282,12 +284,12 @@ static int hn_use_if_start = 0;
SYSCTL_INT(_hw_hn, OID_AUTO, use_if_start, CTLFLAG_RDTUN,
&hn_use_if_start, 0, "Use if_start TX method");
-static int hn_chan_cnt = 1;
+static int hn_chan_cnt = 0;
SYSCTL_INT(_hw_hn, OID_AUTO, chan_cnt, CTLFLAG_RDTUN,
&hn_chan_cnt, 0,
"# of channels to use; each channel has one RX ring and one TX ring");
-static int hn_tx_ring_cnt = 1;
+static int hn_tx_ring_cnt = 0;
SYSCTL_INT(_hw_hn, OID_AUTO, tx_ring_cnt, CTLFLAG_RDTUN,
&hn_tx_ring_cnt, 0, "# of TX rings to use");
@@ -480,8 +482,14 @@ netvsc_attach(device_t dev)
* The # of RX rings to use is same as the # of channels to use.
*/
ring_cnt = hn_chan_cnt;
- if (ring_cnt <= 0 || ring_cnt > mp_ncpus)
+ if (ring_cnt <= 0) {
+ /* Default */
+ ring_cnt = mp_ncpus;
+ if (ring_cnt > HN_RING_CNT_DEF_MAX)
+ ring_cnt = HN_RING_CNT_DEF_MAX;
+ } else if (ring_cnt > mp_ncpus) {
ring_cnt = mp_ncpus;
+ }
tx_ring_cnt = hn_tx_ring_cnt;
if (tx_ring_cnt <= 0 || tx_ring_cnt > ring_cnt)
diff --git a/sys/dev/hyperv/netvsc/hv_rndis_filter.c b/sys/dev/hyperv/netvsc/hv_rndis_filter.c
index 04867d2..6c787e5 100644
--- a/sys/dev/hyperv/netvsc/hv_rndis_filter.c
+++ b/sys/dev/hyperv/netvsc/hv_rndis_filter.c
@@ -406,8 +406,7 @@ hv_rf_send_offload_request(struct hv_device *device,
}
cleanup:
- if (request)
- hv_put_rndis_request(rndis_dev, request);
+ hv_put_rndis_request(rndis_dev, request);
return (ret);
}
@@ -908,10 +907,8 @@ hv_rf_halt_device(rndis_device *device)
}
device->state = RNDIS_DEV_UNINITIALIZED;
-
- if (request != NULL) {
- hv_put_rndis_request(device, request);
- }
+
+ hv_put_rndis_request(device, request);
return (0);
}
OpenPOWER on IntegriCloud