svn commit: r205528 - stable/7/sys/dev/re
Pyun YongHyeon
yongari at FreeBSD.org
Tue Mar 23 19:34:35 UTC 2010
Author: yongari
Date: Tue Mar 23 19:34:34 2010
New Revision: 205528
URL: http://svn.freebsd.org/changeset/base/205528
Log:
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.
Modified:
stable/7/sys/dev/re/if_re.c
Directory Properties:
stable/7/sys/ (props changed)
stable/7/sys/cddl/contrib/opensolaris/ (props changed)
stable/7/sys/contrib/dev/acpica/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
Modified: stable/7/sys/dev/re/if_re.c
==============================================================================
--- stable/7/sys/dev/re/if_re.c Tue Mar 23 19:30:56 2010 (r205527)
+++ stable/7/sys/dev/re/if_re.c Tue Mar 23 19:34:34 2010 (r205528)
@@ -1163,6 +1163,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);
@@ -1427,7 +1430,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;
}
/*
@@ -1449,7 +1452,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
@@ -2780,6 +2783,7 @@ re_ioctl(struct ifnet *ifp, u_long comma
(ifp->if_capenable & IFCAP_TSO4) != 0) {
ifp->if_capenable &= ~IFCAP_TSO4;
ifp->if_hwassist &= ~CSUM_TSO;
+ VLAN_CAPABILITIES(ifp);
}
RL_UNLOCK(sc);
break;
@@ -2846,14 +2850,10 @@ re_ioctl(struct ifnet *ifp, u_long comma
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;
@@ -2863,6 +2863,17 @@ re_ioctl(struct ifnet *ifp, u_long comma
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)
More information about the svn-src-stable-7
mailing list