git: d21079b4b85d - stable/13 - LinuxKPI: 802.11: disable ic_headroom for the moment

From: Bjoern A. Zeeb <bz_at_FreeBSD.org>
Date: Sun, 20 Feb 2022 18:15:53 UTC
The branch stable/13 has been updated by bz:

URL: https://cgit.FreeBSD.org/src/commit/?id=d21079b4b85dbf7f73dbccd233d339003d5c6f9d

commit d21079b4b85dbf7f73dbccd233d339003d5c6f9d
Author:     Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2022-02-16 23:57:27 +0000
Commit:     Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2022-02-20 16:25:55 +0000

    LinuxKPI: 802.11: disable ic_headroom for the moment
    
    There is a problem with some drivers, such as rtw88, asking for more
    headroom than we currently can handle throughout the stack (we have
    other legacy wireless driver in the tree with similar problems).
    This may trigger an assertion in the TCP syncache where we are checking
    for a reply to fit in MHLEN.
    While for the moment we still copy data from mbufs to skbs,
    we can simply disable the extra headroom request in ic_headroom and
    deal with it ourselves (which we already did anyway).
    Leave a link to the thread on freebsd-transport detailing more of the
    problem so we can find it again and solve it here or there.
    
    (cherry picked from commit 3d09d310d9981dde1d6e51fed6ecf9576480b9f7)
---
 sys/compat/linuxkpi/common/src/linux_80211.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c
index 520ecaf4f4f0..b5fde7e10781 100644
--- a/sys/compat/linuxkpi/common/src/linux_80211.c
+++ b/sys/compat/linuxkpi/common/src/linux_80211.c
@@ -2423,6 +2423,8 @@ lkpi_80211_txq_tx_one(struct lkpi_sta *lsta, struct mbuf *m)
 	/*
 	 * net80211 should handle hw->extra_tx_headroom.
 	 * Though for as long as we are copying we don't mind.
+	 * XXX-BZ rtw88 asks for too much headroom for ipv6+tcp:
+	 * https://lists.freebsd.org/archives/freebsd-transport/2022-February/000012.html
 	 */
 	skb = dev_alloc_skb(hw->extra_tx_headroom + m->m_pkthdr.len);
 	if (skb == NULL) {
@@ -2852,7 +2854,10 @@ linuxkpi_ieee80211_ifattach(struct ieee80211_hw *hw)
 		ic_printf(ic, "%s: warning, no hardware address!\n", __func__);
 	}
 
+#ifdef __not_yet__
+	/* See comment in lkpi_80211_txq_tx_one(). */
 	ic->ic_headroom = hw->extra_tx_headroom;
+#endif
 
 	ic->ic_phytype = IEEE80211_T_OFDM;	/* not only, but not used */
 	ic->ic_opmode = IEEE80211_M_STA;