diff options
author | sbruno <sbruno@FreeBSD.org> | 2016-07-20 18:26:48 +0000 |
---|---|---|
committer | sbruno <sbruno@FreeBSD.org> | 2016-07-20 18:26:48 +0000 |
commit | 6e4ce2c512d4f0bfe68a7064025acf48d6b293f7 (patch) | |
tree | fb197b1baba6a7986bc833339b08c656fa5dc127 | |
parent | e747ac9c645f3f184976184a45d5cbfb3c50d1af (diff) | |
download | FreeBSD-src-6e4ce2c512d4f0bfe68a7064025acf48d6b293f7.zip FreeBSD-src-6e4ce2c512d4f0bfe68a7064025acf48d6b293f7.tar.gz |
MFC - r302384 to 10-STABLE
Do not initialize the adapter on MTU change when adapter status is down.
This fixes long-standing problems when changing settings of the adapter.
Discussed in:
https://lists.freebsd.org/pipermail/freebsd-net/2016-June/045509.html
Differential Revision: https://reviews.freebsd.org/D7254
-rw-r--r-- | sys/dev/e1000/if_em.c | 3 | ||||
-rw-r--r-- | sys/dev/e1000/if_igb.c | 3 | ||||
-rw-r--r-- | sys/dev/e1000/if_lem.c | 3 | ||||
-rw-r--r-- | sys/dev/ixgb/if_ixgb.c | 3 | ||||
-rw-r--r-- | sys/dev/ixgbe/if_ix.c | 3 | ||||
-rw-r--r-- | sys/dev/ixgbe/if_ixv.c | 3 | ||||
-rw-r--r-- | sys/dev/ixl/if_ixl.c | 3 | ||||
-rw-r--r-- | sys/dev/ixl/if_ixlv.c | 3 |
8 files changed, 16 insertions, 8 deletions
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 88ff516..f639590 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -1220,7 +1220,8 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data) ifp->if_mtu = ifr->ifr_mtu; adapter->hw.mac.max_frame_size = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; - em_init_locked(adapter); + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) + em_init_locked(adapter); EM_CORE_UNLOCK(adapter); break; } diff --git a/sys/dev/e1000/if_igb.c b/sys/dev/e1000/if_igb.c index 05ccb64..7531d4e 100644 --- a/sys/dev/e1000/if_igb.c +++ b/sys/dev/e1000/if_igb.c @@ -1090,7 +1090,8 @@ igb_ioctl(struct ifnet *ifp, u_long command, caddr_t data) ifp->if_mtu = ifr->ifr_mtu; adapter->max_frame_size = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; - igb_init_locked(adapter); + if ((ifp->if_drv_flags & IFF_DRV_RUNNING)) + igb_init_locked(adapter); IGB_CORE_UNLOCK(adapter); break; } diff --git a/sys/dev/e1000/if_lem.c b/sys/dev/e1000/if_lem.c index b8310a1..b329a81 100644 --- a/sys/dev/e1000/if_lem.c +++ b/sys/dev/e1000/if_lem.c @@ -1047,7 +1047,8 @@ lem_ioctl(struct ifnet *ifp, u_long command, caddr_t data) ifp->if_mtu = ifr->ifr_mtu; adapter->max_frame_size = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; - lem_init_locked(adapter); + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING)) + lem_init_locked(adapter); EM_CORE_UNLOCK(adapter); break; } diff --git a/sys/dev/ixgb/if_ixgb.c b/sys/dev/ixgb/if_ixgb.c index f01e673..4c48cf1 100644 --- a/sys/dev/ixgb/if_ixgb.c +++ b/sys/dev/ixgb/if_ixgb.c @@ -538,7 +538,8 @@ ixgb_ioctl(struct ifnet * ifp, IOCTL_CMD_TYPE command, caddr_t data) adapter->hw.max_frame_size = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; - ixgb_init_locked(adapter); + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + ixgb_init_locked(adapter); IXGB_UNLOCK(adapter); } break; diff --git a/sys/dev/ixgbe/if_ix.c b/sys/dev/ixgbe/if_ix.c index a371836..2e85942 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -900,7 +900,8 @@ ixgbe_ioctl(struct ifnet * ifp, u_long command, caddr_t data) ifp->if_mtu = ifr->ifr_mtu; adapter->max_frame_size = ifp->if_mtu + IXGBE_MTU_HDR; - ixgbe_init_locked(adapter); + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + ixgbe_init_locked(adapter); #ifdef PCI_IOV ixgbe_recalculate_max_frame(adapter); #endif diff --git a/sys/dev/ixgbe/if_ixv.c b/sys/dev/ixgbe/if_ixv.c index 914f742..38bb1b8 100644 --- a/sys/dev/ixgbe/if_ixv.c +++ b/sys/dev/ixgbe/if_ixv.c @@ -587,7 +587,8 @@ ixv_ioctl(struct ifnet * ifp, u_long command, caddr_t data) ifp->if_mtu = ifr->ifr_mtu; adapter->max_frame_size = ifp->if_mtu + IXGBE_MTU_HDR; - ixv_init_locked(adapter); + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + ixv_init_locked(adapter); IXGBE_CORE_UNLOCK(adapter); } break; diff --git a/sys/dev/ixl/if_ixl.c b/sys/dev/ixl/if_ixl.c index b89c64c..e646360 100644 --- a/sys/dev/ixl/if_ixl.c +++ b/sys/dev/ixl/if_ixl.c @@ -1024,7 +1024,8 @@ ixl_ioctl(struct ifnet * ifp, u_long command, caddr_t data) vsi->max_frame_size = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN + ETHER_VLAN_ENCAP_LEN; - ixl_init_locked(pf); + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + ixl_init_locked(pf); IXL_PF_UNLOCK(pf); } break; diff --git a/sys/dev/ixl/if_ixlv.c b/sys/dev/ixl/if_ixlv.c index 2e041df..d0cefa0 100644 --- a/sys/dev/ixl/if_ixlv.c +++ b/sys/dev/ixl/if_ixlv.c @@ -675,7 +675,8 @@ ixlv_ioctl(struct ifnet *ifp, u_long command, caddr_t data) vsi->max_frame_size = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN + ETHER_VLAN_ENCAP_LEN; - ixlv_init_locked(sc); + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + ixlv_init_locked(sc); } mtx_unlock(&sc->mtx); break; |