From nobody Fri Jun 10 14:38:09 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 1A7C983BF68; Fri, 10 Jun 2022 14:38:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LKNqQ05z4z3knF; Fri, 10 Jun 2022 14:38:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654871890; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Fs0QUsdiIhSWcK5gYWKk8NNQUnM2Ydo3Ts0z3NvUjQc=; b=oxatFnNBLE3mIMtCW8CYLv+BEu7OL2X/ZmqnHG01PRUm1ueOjjt/bU3C6XuBkBUXzHHHa2 Y9wi50GhUkQvi5YZaQWKf5h5sTnmhf3esZe70hfXFZY1l3/nG73znEDZFlnFTROZACw7c+ tkYGFdVpNLjSwDG9PEuYZ9cFYAmpCWrBjLs5VSai+sUolmTKanzopozBR9pH4/uf7QxBW2 /1Z9VWP4o2wzcSZAjfZuZSD4WDJjDDvNQJVdtGDFaSRqeAqOalagHE9ocw6ngTy6UX3UO7 XOzbnECDriXMozxHPdcMcHdyZ4YUgGgvV3MAVkrut/LbxNHTTRv9I3WmxNhD8Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D476E1A895; Fri, 10 Jun 2022 14:38:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 25AEc9ZG087761; Fri, 10 Jun 2022 14:38:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 25AEc9E0087760; Fri, 10 Jun 2022 14:38:09 GMT (envelope-from git) Date: Fri, 10 Jun 2022 14:38:09 GMT Message-Id: <202206101438.25AEc9E0087760@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: d0d291103519 - main - LinuxKPI: 802.11: rework handling of the special IEEE80211_NUM_TIDS queue List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d0d2911035192473e8bd3f6b99ed5ca9b1b29e47 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654871890; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Fs0QUsdiIhSWcK5gYWKk8NNQUnM2Ydo3Ts0z3NvUjQc=; b=gx9w2axpsVsUR/USruxgB1b8p1j4qnCs3d1Oi3d2S3wrcQDUe3mhcNv+EEyhwm1YXmNLu4 fjVva7HJR4KSZ1rW0gzKdk2DF8gpPbAORIBvV8xyGjnnqYA+DhrPsAQBZCDR5RjWTk/j7V TN+ygEauSKIHl37wTn9O03jbEHGes1AJVRvQKysUSYPzJ+mFZOfsWCE6oLI+trIqp7hXHr yXnFI2NoAdrPOTuBg63ZWJXoRUdpGD++ie9ENY38tPzIPP31nLWkm1ERqfK68L4aiWCI8v CpzkIKKjx1T5KgdeivdAADSPKiMPqydl/Nq2TKgSthFMPv367vDKkkQT1iNPpQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1654871890; a=rsa-sha256; cv=none; b=FUxMxiG56bld155g7vzwBoEb3FhkR6HKinHNenoJqnIqgmqPPCgmfFiDp6yGgPz4irkt5B py7Dh1MiqYJebMX8PHli7DMNy6/MMZQci+BIdklla+PEMI2KELcYUWYNkxU0Ff0r5MxeNA EpcJM64wHHRgF6oyDZIXgYpa30adhirLg96s6lZlvONLcPYyPnqc6LiLcR6kA9tNoCBs28 0tfZmLqYIW61wYjLt+8hzVbLSQ7csv7ZH/FBiQeEISDgofmrn2NMt2ob1QFoTZcKzL6wdt q41RCcjCCy0k2YlM5DT8f0hko3pjpaWWE05bV2r5Hqo54tyP3MLtHbZTZNKhSg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=d0d2911035192473e8bd3f6b99ed5ca9b1b29e47 commit d0d2911035192473e8bd3f6b99ed5ca9b1b29e47 Author: Bjoern A. Zeeb AuthorDate: 2022-06-10 14:18:57 +0000 Commit: Bjoern A. Zeeb CommitDate: 2022-06-10 14:18:57 +0000 LinuxKPI: 802.11: rework handling of the special IEEE80211_NUM_TIDS queue Rework the way we are dealing with the last queue. If the driver opts in to STA_MMPDU_TXQ then preferably send all non-data frames via the last (IEEE80211_NUM_TIDS) queue which otherwise is not used in station mode. If we do not have that queue we do individual tx() calls for non-data frames now. Everything else goes via the selected queue if possible for as long as we have a ni (sta) and otherwise resorts to direct tx. Tested on: Intel AX200 and AX210 Sponsored by: The FreeBSD Foundation MFC after: 3 days --- sys/compat/linuxkpi/common/src/linux_80211.c | 54 ++++++++++++++++++---------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c index fd17aba19d96..a0cb20cf9032 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -219,27 +219,27 @@ lkpi_lsta_alloc(struct ieee80211vap *vap, const uint8_t mac[IEEE80211_ADDR_LEN], for (tid = 0; tid < nitems(sta->txq); tid++) { struct lkpi_txq *ltxq; - /* - * We are neither limiting ourselves to hw.queues here, - * nor do we check if driver wants IEEE80211_NUM_TIDS queue. - */ - + /* We are not limiting ourselves to hw.queues here. */ ltxq = malloc(sizeof(*ltxq) + hw->txq_data_size, M_LKPI80211, M_NOWAIT | M_ZERO); if (ltxq == NULL) goto cleanup; - ltxq->seen_dequeue = false; - skb_queue_head_init(<xq->skbq); /* iwlwifi//mvm/sta.c::tid_to_mac80211_ac[] */ if (tid == IEEE80211_NUM_TIDS) { - IMPROVE(); + if (!ieee80211_hw_check(hw, STA_MMPDU_TXQ)) { + free(ltxq, M_LKPI80211); + continue; + } + IMPROVE("AP/if we support non-STA here too"); ltxq->txq.ac = IEEE80211_AC_VO; } else { ltxq->txq.ac = tid_to_mac80211_ac[tid & 7]; } + ltxq->seen_dequeue = false; + ltxq->txq.vif = vif; ltxq->txq.tid = tid; ltxq->txq.sta = sta; - ltxq->txq.vif = vif; + skb_queue_head_init(<xq->skbq); sta->txq[tid] = <xq->txq; } @@ -3043,8 +3043,22 @@ lkpi_80211_txq_tx_one(struct lkpi_sta *lsta, struct mbuf *m) if (sta != NULL) { struct lkpi_txq *ltxq; + struct ieee80211_hdr *hdr; + + hdr = (void *)skb->data; + if (lsta->added_to_drv && + !ieee80211_is_data_present(hdr->frame_control)) { + if (sta->txq[IEEE80211_NUM_TIDS] != NULL) + ltxq = TXQ_TO_LTXQ(sta->txq[IEEE80211_NUM_TIDS]); + else + goto ops_tx; + } else if (lsta->added_to_drv) { + ltxq = TXQ_TO_LTXQ(sta->txq[ac]); /* XXX-BZ re-check */ + } else + goto ops_tx; + KASSERT(ltxq != NULL, ("%s: lsta %p sta %p m %p skb %p " + "ltxq %p != NULL\n", __func__, lsta, sta, m, skb, ltxq)); - ltxq = TXQ_TO_LTXQ(sta->txq[ac]); /* XXX-BZ re-check */ /* * We currently do not use queues but do direct TX. * The exception to the rule is initial packets, as we cannot @@ -3053,6 +3067,7 @@ lkpi_80211_txq_tx_one(struct lkpi_sta *lsta, struct mbuf *m) * calls. In the time until then we queue packets and * let the driver deal with them. */ +#if 0 if (!ltxq->seen_dequeue) { /* Prevent an ordering problem, likely other issues. */ @@ -3070,25 +3085,28 @@ lkpi_80211_txq_tx_one(struct lkpi_sta *lsta, struct mbuf *m) } if (0 && ltxq->seen_dequeue && skb_queue_empty(<xq->skbq)) goto ops_tx; +#endif skb_queue_tail(<xq->skbq, skb); #ifdef LINUXKPI_DEBUG_80211 if (linuxkpi_debug_80211 & D80211_TRACE_TX) - printf("%s:%d lsta %p sta %p ni %p %6D skb %p lxtq %p " - "qlen %u WAKE_TX_Q ac %d prio %u qmap %u\n", - __func__, __LINE__, lsta, sta, ni, - ni->ni_macaddr, ":", skb, ltxq, - skb_queue_len(<xq->skbq), ac, - skb->priority, skb->qmap); + printf("%s:%d mo_wake_tx_queue :: %d %u lsta %p sta %p " + "ni %p %6D skb %p lxtq %p { qlen %u, ac %d tid %u } " + "WAKE_TX_Q ac %d prio %u qmap %u\n", + curthread->td_tid, (unsigned int)ticks, + lsta, sta, ni, ni->ni_macaddr, ":", skb, ltxq, + skb_queue_len(<xq->skbq), ltxq->txq.ac, + ltxq->txq.tid, ac, skb->priority, skb->qmap); #endif - lkpi_80211_mo_wake_tx_queue(hw, sta->txq[ac]); /* XXX-BZ */ + lkpi_80211_mo_wake_tx_queue(hw, <xq->txq); return; } ops_tx: #ifdef LINUXKPI_DEBUG_80211 if (linuxkpi_debug_80211 & D80211_TRACE_TX) - printf("%s:%d lsta %p sta %p ni %p %6D skb %p TX ac %d prio %u qmap %u\n", + printf("%s:%d mo_tx :: lsta %p sta %p ni %p %6D skb %p " + "TX ac %d prio %u qmap %u\n", __func__, __LINE__, lsta, sta, ni, ni->ni_macaddr, ":", skb, ac, skb->priority, skb->qmap); #endif