From: Johannes Berg <johannes@sipsolutions.net>
To: Pooventhiran G <pooventhiran.g@oss.qualcomm.com>
Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH wireless-next v4 08/21] wifi: nl80211/cfg80211: pack SMD dynamic context along with frame
Date: Tue, 10 Nov 2026 19:51:55 +0100 [thread overview]
Message-ID: <db523e851beda07c6f52f3c094b5ea2bf718af03.camel@sipsolutions.net> (raw)
In-Reply-To: <20261106-smd-v4-8-62e39487f51a@oss.qualcomm.com>
On Fri, 2026-11-06 at 13:28 +0530, Pooventhiran G wrote:
>
> +static size_t _nl80211_smd_ctx_nl_ba_param_size(u8 n_tids, bool dl)
> +{
> + size_t n = 0;
> +
> + n += nla_total_size(0); /* ba_params nest header */
> + n += n_tids * (nla_total_size(0) + /* tid nest header */
> + nla_total_size(sizeof(u16)) + /* buff_size */
> + nla_total_size(sizeof(u8)) + /* policy */
> + nla_total_size(0) + /* amsdu_support */
> + nla_total_size(sizeof(u16)) + /* timeout */
> + nla_total_size(0) + /* ext_no_frag */
> + nla_total_size(sizeof(u8)) + /* ext_frag_lvl */
> + nla_total_size(sizeof(u16))); /* ext_buff_size */
> +
> + if (dl)
> + n += n_tids * nla_total_size(sizeof(u16)); /* winstarto */
> +
> + return n;
> +}
> +
> +static size_t
> +nl80211_smd_ctx_nl_size(struct cfg80211_smd_transition_info *st_info)
> +{
> + const struct ieee80211_smd_ctx *ctx = st_info->ctx;
> + int n_dl_tids = 0, n_ul_tids = 0;
> + u8 pn_len = ctx->pn_len;
> + size_t n = 0;
> +
> + /* count valid TIDs */
> + n_dl_tids = hweight8(ctx->dl.valid_tid_bmap);
> + n_ul_tids = hweight8(ctx->ul.valid_tid_bmap);
> +
> + n += nla_total_size(sizeof(u8)); /* ST type */
> +
> + /* outer NL80211_ATTR_SMD_CTX nest */
> + n += nla_total_size(0); /* nest header */
> +
> + /* DL nest */
> + n += nla_total_size(0); /* DL nest header */
> +
> + n += nla_total_size(sizeof(u8)); /* valid_tid_bitmap */
> +
> + if (ctx->dl_sn_valid) {
> + n += nla_total_size(0); /* DL SN nest header */
> + n += n_dl_tids * nla_total_size(sizeof(u16)); /* DL SN */
> + if (ctx->mgmt_tid_valid)
> + n += nla_total_size(sizeof(u16)); /* DL mgmt_sn */
> + }
> +
> + if (ctx->pn_valid)
> + n += nla_total_size(pn_len); /* DL PN */
> +
> + if (ctx->ba_params_valid)
> + n += _nl80211_smd_ctx_nl_ba_param_size(n_dl_tids, true); /* DL BA */
> +
> + /* UL nest */
> + n += nla_total_size(0); /* UL nest header */
> +
> + n += nla_total_size(sizeof(u8)); /* valid_tid_bitmap */
> +
> + if (ctx->ul_sn_valid) {
> + n += nla_total_size(0); /* UL SN nest header */
> + n += n_ul_tids * nla_total_size(sizeof(u16)); /* UL SN */
> + if (ctx->mgmt_tid_valid)
> + n += nla_total_size(sizeof(u16)); /* UL mgmt_sn */
> + }
> +
> + if (ctx->pn_valid) {
> + n += nla_total_size(0); /* UL PN nest header */
> + n += n_ul_tids * nla_total_size(pn_len); /* UL PN */
> + if (ctx->mgmt_tid_valid)
> + n += nla_total_size(pn_len); /* UL mgmt_pn */
> + }
> +
> + if (ctx->ba_params_valid)
> + n += _nl80211_smd_ctx_nl_ba_param_size(n_ul_tids, false); /* UL BA */
> +
> + return n;
> +}
This kind of code is just crazy LLM output ... we can just have a sane
upper bound and make that a single line of code? Nobody will really care
about the precise size of the allocation.
> +static int
> +nl80211_put_smd_ctx_ba_params(struct sk_buff *msg,
> + const unsigned long *tid_bmap,
> + const struct ieee80211_smd_ctx_ba *ba_tids,
> + bool dl)
> +{
> + u32 ba_params_attr = NL80211_SMD_CTX_DL_ATTR_BA_PARAMS;
> + struct nlattr *dl_ul_ba = NULL, *tid_ba = NULL;
nope.
> + u8 tid;
> +
> + if (!dl)
> + ba_params_attr = NL80211_SMD_CTX_UL_ATTR_BA_PARAMS;
> +
> + dl_ul_ba = nla_nest_start(msg, ba_params_attr);
> + if (!dl_ul_ba)
> + return -ENOBUFS;
> +
> + for_each_set_bit(tid, tid_bmap, IEEE80211_SMD_CTX_NUM_TIDS) {
> + const struct ieee80211_smd_ctx_ba *ba = &ba_tids[tid];
> +
> + tid_ba = nla_nest_start(msg, tid + 1);
that can also be declared in the loop
> +static int nl80211_put_smd_ctx(struct sk_buff *msg,
> + struct cfg80211_smd_transition_info *st_info)
> +{
> + struct nlattr *dl_sn = NULL, *ul_sn = NULL, *ul_pn = NULL;
> + struct nlattr *smd_ctx = NULL, *dl = NULL, *ul = NULL;
> + const struct ieee80211_smd_ctx *ctx;
> + unsigned long dl_tid_bmap = 0, ul_tid_bmap = 0;
same here, what's with all the pointless =0/=NULL?
and move variables into the inner code blocks too
> + pn_valid = (ctx->pn_len && ctx->pn_len <= IEEE80211_SMD_CTX_MAX_PN_LEN &&
> + ctx->pn_valid);
useless parentheses, but anyway you don't need pn_len or the max, or the
pn_valid even since it's always transferred ...
> +nla_fail_ul:
> + nla_nest_cancel(msg, ul);
> +
> +nla_fail_dl:
> + nla_nest_cancel(msg, dl);
> +
> +nla_fail:
> + nla_nest_cancel(msg, smd_ctx);
> + return -EINVAL;
crazy LLMs again? You obviously don't need to have nested cancel to get
rid of the whole thing ... probably don't need it at all because you're
just going to free the skb.
johannes
next prev parent reply other threads:[~2026-11-10 18:52 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 7:58 [PATCH wireless-next v4 00/21] wifi: Add Seamless Mobility Domain (SMD) AP support Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 01/21] wifi: nl80211: define Seamless Mobility Domain (SMD) device capability Pooventhiran G
2026-11-10 14:15 ` Johannes Berg
2026-11-10 14:26 ` Johannes Berg
2026-11-06 7:58 ` [PATCH wireless-next v4 02/21] wifi: nl80211/cfg80211: define interfaces for SMD setup and STA update Pooventhiran G
2026-11-10 18:18 ` Johannes Berg
2026-11-06 7:58 ` [PATCH wireless-next v4 03/21] wifi: nl80211: add SMD BSS Transition sub-state STA flags Pooventhiran G
2026-11-10 18:27 ` Johannes Berg
2026-11-06 7:58 ` [PATCH wireless-next v4 04/21] wifi: cfg80211: define layouts for SMD BSS Transition context Pooventhiran G
2026-11-10 18:39 ` Johannes Berg
2026-11-06 7:58 ` [PATCH wireless-next v4 05/21] wifi: nl80211: define interfaces for SMD BSS Transition context transfer Pooventhiran G
2026-11-10 18:45 ` Johannes Berg
2026-11-06 7:58 ` [PATCH wireless-next v4 06/21] wifi: ieee80211: define APIs for UHR Link Reconfiguration frame checks Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 07/21] wifi: ieee80211: define API to check if frame is class 3 Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 08/21] wifi: nl80211/cfg80211: pack SMD dynamic context along with frame Pooventhiran G
2026-11-10 18:51 ` Johannes Berg [this message]
2026-11-06 7:58 ` [PATCH wireless-next v4 09/21] wifi: nl80211/cfg80211: add support for SMD context programming Pooventhiran G
2026-11-10 18:55 ` Johannes Berg
2026-11-06 7:58 ` [PATCH wireless-next v4 10/21] wifi: nl80211/cfg80211: add support for querying SMD context for target AP MLD Pooventhiran G
2026-11-10 19:00 ` Johannes Berg
2026-11-06 7:58 ` [PATCH wireless-next v4 11/21] wifi: nl80211/cfg80211: define API to notify SMD Drain completion Pooventhiran G
2026-11-10 19:01 ` Johannes Berg
2026-11-06 7:58 ` [PATCH wireless-next v4 12/21] wifi: mac80211: set SMD parameters for AP setup and STA update Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 13/21] wifi: mac80211: apply SMD BSS Transition STA sub-states Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 14/21] wifi: mac80211: add driver_op for SMD substate changes Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 15/21] wifi: mac80211: filter uplink and downlink frames based on SMD states Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 16/21] wifi: mac80211: send BlockAck policy in AMPDU action Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 17/21] wifi: mac80211: pass rx_data directly from ieee80211_rx_list() Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 18/21] wifi: mac80211: handle UHR Link Reconfiguration frame Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 19/21] wifi: mac80211: add mac80211 support to handle NL80211_CMD_SET_SMD_CTX Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 20/21] wifi: mac80211: add mac80211 support to handle NL80211_CMD_GET_SMD_CTX Pooventhiran G
2026-11-06 7:58 ` [PATCH wireless-next v4 21/21] wifi: mac80211: define API to invoke SMD Drain Completion event Pooventhiran G
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=db523e851beda07c6f52f3c094b5ea2bf718af03.camel@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=pooventhiran.g@oss.qualcomm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®