Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F140084340
D2544.id5382.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D2544.id5382.diff
View Options
Index: sys/dev/sfxge/sfxge.c
===================================================================
--- sys/dev/sfxge/sfxge.c
+++ sys/dev/sfxge/sfxge.c
@@ -65,8 +65,7 @@
IFCAP_JUMBO_MTU | IFCAP_LRO | \
IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWSTATS)
#define SFXGE_CAP_ENABLE SFXGE_CAP
-#define SFXGE_CAP_FIXED (IFCAP_VLAN_MTU | IFCAP_RXCSUM | IFCAP_VLAN_HWCSUM | \
- IFCAP_RXCSUM_IPV6 | \
+#define SFXGE_CAP_FIXED (IFCAP_VLAN_MTU | IFCAP_VLAN_HWCSUM | \
IFCAP_JUMBO_MTU | IFCAP_LINKSTATE | IFCAP_HWSTATS)
MALLOC_DEFINE(M_SFXGE, "sfxge", "Solarflare 10GigE driver");
Index: sys/dev/sfxge/sfxge_rx.c
===================================================================
--- sys/dev/sfxge/sfxge_rx.c
+++ sys/dev/sfxge/sfxge_rx.c
@@ -792,7 +792,8 @@
sfxge_rx_qcomplete(struct sfxge_rxq *rxq, boolean_t eop)
{
struct sfxge_softc *sc = rxq->sc;
- int lro_enabled = sc->ifnet->if_capenable & IFCAP_LRO;
+ int if_capenable = sc->ifnet->if_capenable;
+ int lro_enabled = if_capenable & IFCAP_LRO;
unsigned int index;
struct sfxge_evq *evq;
unsigned int completed;
@@ -822,21 +823,37 @@
prefetch_read_many(mtod(m, caddr_t));
- /* Check for loopback packets */
- if (!(rx_desc->flags & EFX_PKT_IPV4) &&
- !(rx_desc->flags & EFX_PKT_IPV6)) {
- struct ether_header *etherhp;
-
- /*LINTED*/
- etherhp = mtod(m, struct ether_header *);
-
- if (etherhp->ether_type ==
- htons(SFXGE_ETHERTYPE_LOOPBACK)) {
- EFSYS_PROBE(loopback);
-
- rxq->loopback++;
- goto discard;
+ switch (rx_desc->flags & (EFX_PKT_IPV4 | EFX_PKT_IPV6)) {
+ case EFX_PKT_IPV4:
+ if (~if_capenable & IFCAP_RXCSUM)
+ rx_desc->flags &=
+ ~(EFX_CKSUM_IPV4 | EFX_CKSUM_TCPUDP);
+ break;
+ case EFX_PKT_IPV6:
+ if (~if_capenable & IFCAP_RXCSUM_IPV6)
+ rx_desc->flags &= ~EFX_CKSUM_TCPUDP;
+ break;
+ case 0:
+ /* Check for loopback packets */
+ {
+ struct ether_header *etherhp;
+
+ /*LINTED*/
+ etherhp = mtod(m, struct ether_header *);
+
+ if (etherhp->ether_type ==
+ htons(SFXGE_ETHERTYPE_LOOPBACK)) {
+ EFSYS_PROBE(loopback);
+
+ rxq->loopback++;
+ goto discard;
+ }
}
+ break;
+ default:
+ KASSERT(B_FALSE,
+ ("Rx descriptor with both IPv4 and IPv6 flags"));
+ goto discard;
}
/* Pass packet up the stack or into LRO (pipelined) */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Dec 21, 12:51 AM (5 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27103834
Default Alt Text
D2544.id5382.diff (2 KB)
Attached To
Mode
D2544: sfxge: support Rx checksum offloads disabling
Attached
Detach File
Event Timeline
Log In to Comment