MFC r204155,204219:
r204155: Increase PCIe maximuim read request size to 2048. Because re(4) uses Tx DMA burst size 2048, I beleive PCIe maximum read request size also should match to the value of Tx DMA burst size. With this change I can get more than 800Mbps for TCP bulk transfers. Previously I was not able to get more than 700Mbps. If I enable TSO it now shows 927Mbps. r204219: Add TSO on VLANs. Because re(4) has a TSO limitation for jumbo frame, make sure to update VLAN capabilities whenever jumbo frame is configured. While I'm here rearrange interface capabilities configuration. The controller requires VLAN hardware tagging to make TSO work on VLANs so explicitly check this requirement.
This commit is contained in:
parent
60a337785e
commit
d95d4a8336
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/8/; revision=205526
@ -1162,6 +1162,9 @@ re_attach(device_t dev)
|
||||
msic = 0;
|
||||
if (pci_find_extcap(dev, PCIY_EXPRESS, ®) == 0) {
|
||||
sc->rl_flags |= RL_FLAG_PCIE;
|
||||
/* Set PCIe maximum read request size to 2048. */
|
||||
if (pci_get_max_read_req(dev) < 2048)
|
||||
pci_set_max_read_req(dev, 2048);
|
||||
msic = pci_msi_count(dev);
|
||||
if (bootverbose)
|
||||
device_printf(dev, "MSI count : %d\n", msic);
|
||||
@ -1426,7 +1429,7 @@ re_attach(device_t dev)
|
||||
*/
|
||||
if ((sc->rl_flags & RL_FLAG_DESCV2) == 0) {
|
||||
ifp->if_hwassist |= CSUM_TSO;
|
||||
ifp->if_capabilities |= IFCAP_TSO4;
|
||||
ifp->if_capabilities |= IFCAP_TSO4 | IFCAP_VLAN_HWTSO;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1448,7 +1451,7 @@ re_attach(device_t dev)
|
||||
* packets in TSO size.
|
||||
*/
|
||||
ifp->if_hwassist &= ~CSUM_TSO;
|
||||
ifp->if_capenable &= ~IFCAP_TSO4;
|
||||
ifp->if_capenable &= ~(IFCAP_TSO4 | IFCAP_VLAN_HWTSO);
|
||||
#ifdef DEVICE_POLLING
|
||||
ifp->if_capabilities |= IFCAP_POLLING;
|
||||
#endif
|
||||
@ -2786,6 +2789,7 @@ re_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
(ifp->if_capenable & IFCAP_TSO4) != 0) {
|
||||
ifp->if_capenable &= ~IFCAP_TSO4;
|
||||
ifp->if_hwassist &= ~CSUM_TSO;
|
||||
VLAN_CAPABILITIES(ifp);
|
||||
}
|
||||
RL_UNLOCK(sc);
|
||||
break;
|
||||
@ -2852,14 +2856,10 @@ re_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
ifp->if_hwassist &= ~RE_CSUM_FEATURES;
|
||||
reinit = 1;
|
||||
}
|
||||
if (mask & IFCAP_VLAN_HWTAGGING) {
|
||||
ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
|
||||
reinit = 1;
|
||||
}
|
||||
if (mask & IFCAP_TSO4) {
|
||||
if ((mask & IFCAP_TSO4) != 0 &&
|
||||
(ifp->if_capabilities & IFCAP_TSO) != 0) {
|
||||
ifp->if_capenable ^= IFCAP_TSO4;
|
||||
if ((IFCAP_TSO4 & ifp->if_capenable) &&
|
||||
(IFCAP_TSO4 & ifp->if_capabilities))
|
||||
if ((IFCAP_TSO4 & ifp->if_capenable) != 0)
|
||||
ifp->if_hwassist |= CSUM_TSO;
|
||||
else
|
||||
ifp->if_hwassist &= ~CSUM_TSO;
|
||||
@ -2869,6 +2869,17 @@ re_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
ifp->if_hwassist &= ~CSUM_TSO;
|
||||
}
|
||||
}
|
||||
if ((mask & IFCAP_VLAN_HWTSO) != 0 &&
|
||||
(ifp->if_capabilities & IFCAP_VLAN_HWTSO) != 0)
|
||||
ifp->if_capenable ^= IFCAP_VLAN_HWTSO;
|
||||
if ((mask & IFCAP_VLAN_HWTAGGING) != 0 &&
|
||||
(ifp->if_capabilities & IFCAP_VLAN_HWTAGGING) != 0) {
|
||||
ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
|
||||
/* TSO over VLAN requires VLAN hardware tagging. */
|
||||
if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0)
|
||||
ifp->if_capenable &= ~IFCAP_VLAN_HWTSO;
|
||||
reinit = 1;
|
||||
}
|
||||
if ((mask & IFCAP_WOL) != 0 &&
|
||||
(ifp->if_capabilities & IFCAP_WOL) != 0) {
|
||||
if ((mask & IFCAP_WOL_UCAST) != 0)
|
||||
|
Loading…
Reference in New Issue
Block a user