Page MenuHomeFreeBSD

D21223.id.diff
No OneTemporary

D21223.id.diff

Index: sys/dev/ixl/ixl_pf.h
===================================================================
--- sys/dev/ixl/ixl_pf.h
+++ sys/dev/ixl/ixl_pf.h
@@ -336,7 +336,8 @@
void ixl_del_filter(struct ixl_vsi *, const u8 *, s16 vlan);
void ixl_reconfigure_filters(struct ixl_vsi *vsi);
-int ixl_disable_rings(struct ixl_vsi *);
+int ixl_disable_rings(struct ixl_pf *, struct ixl_vsi *,
+ struct ixl_pf_qtag *);
int ixl_disable_tx_ring(struct ixl_pf *, struct ixl_pf_qtag *, u16);
int ixl_disable_rx_ring(struct ixl_pf *, struct ixl_pf_qtag *, u16);
int ixl_disable_ring(struct ixl_pf *pf, struct ixl_pf_qtag *, u16);
Index: sys/dev/ixl/ixl_pf_iov.c
===================================================================
--- sys/dev/ixl/ixl_pf_iov.c
+++ sys/dev/ixl/ixl_pf_iov.c
@@ -411,7 +411,7 @@
wr32(hw, I40E_VPGEN_VFRTRIG(vf->vf_num), vfrtrig);
if (vf->vsi.seid != 0)
- ixl_disable_rings(&vf->vsi);
+ ixl_disable_rings(pf, &vf->vsi, &vf->qtag);
ixl_vf_release_resources(pf, vf);
ixl_vf_setup_vsi(pf, vf);
Index: sys/dev/ixl/ixl_pf_main.c
===================================================================
--- sys/dev/ixl/ixl_pf_main.c
+++ sys/dev/ixl/ixl_pf_main.c
@@ -309,17 +309,19 @@
* by user before bringing interface up */
ixl_set_promisc(vsi);
- /* And now turn on interrupts */
- ixl_enable_intr(vsi);
-
/* Get link info */
hw->phy.get_link_info = TRUE;
i40e_get_link_status(hw, &pf->link_up);
ixl_update_link_status(pf);
- /* Now inform the stack we're ready */
+ /* Inform the stack we're ready */
ifp->if_drv_flags |= IFF_DRV_RUNNING;
+ /* Turn on interrupts after setting the running flag
+ * to avoid missing those asserted immediately after
+ * enabling them */
+ ixl_enable_intr(vsi);
+
#ifdef IXL_IW
if (ixl_enable_iwarp && pf->iw_enabled) {
int ret = ixl_iw_pf_init(pf);
@@ -1162,7 +1164,7 @@
#endif
ixl_disable_rings_intr(vsi);
- ixl_disable_rings(vsi);
+ ixl_disable_rings(pf, vsi, &pf->qtag);
}
void
@@ -3561,18 +3563,13 @@
return (error);
}
-/* For PF VSI only */
int
-ixl_disable_rings(struct ixl_vsi *vsi)
+ixl_disable_rings(struct ixl_pf *pf, struct ixl_vsi *vsi, struct ixl_pf_qtag *qtag)
{
- struct ixl_pf *pf = vsi->back;
- int error = 0;
+ int error = 0;
- for (int i = 0; i < vsi->num_queues; i++) {
- error = ixl_disable_ring(pf, &pf->qtag, i);
- if (error)
- return (error);
- }
+ for (int i = 0; i < vsi->num_queues; i++)
+ error = ixl_disable_ring(pf, qtag, i);
return (error);
}
Index: sys/dev/ixl/ixl_txrx.c
===================================================================
--- sys/dev/ixl/ixl_txrx.c
+++ sys/dev/ixl/ixl_txrx.c
@@ -1504,6 +1504,10 @@
/*
** Now set up the LRO interface:
*/
+ if (lro->ifp != NULL) {
+ tcp_lro_free(lro);
+ lro->ifp = NULL;
+ }
if (ifp->if_capenable & IFCAP_LRO) {
int err = tcp_lro_init(lro);
if (err) {
@@ -1559,6 +1563,11 @@
bus_dma_tag_destroy(rxr->ptag);
rxr->ptag = NULL;
}
+
+ if (rxr->lro.ifp != NULL) {
+ tcp_lro_free(&rxr->lro);
+ rxr->lro.ifp = NULL;
+ }
}
static inline void

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 2, 2:22 PM (2 h, 30 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30725717
Default Alt Text
D21223.id.diff (2 KB)

Event Timeline