]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
wifi: brcmfmac: fwsignal: Use struct_size() to simplify brcmf_fws_rxreorder()
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 21 Jul 2024 07:40:19 +0000 (09:40 +0200)
committerKalle Valo <kvalo@kernel.org>
Sun, 4 Aug 2024 09:08:52 +0000 (12:08 +0300)
In the "struct brcmf_ampdu_rx_reorder", change the 'pktslots' field into
flexible array.

It saves the size of a pointer when the memory is allocated and avoids
an indirection when the array is used.
It also removes the usage of a pointer arithmetic and saves a few lines of
code.

Finally, struct_size() can be used. It is not a must have here, because
it is easy to see that buf_size can not overflow, but still, it is a good
practice.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://patch.msgid.link/f4ca6b887ca1290c71e76247218adea4d1c42442.1721547559.git.christophe.jaillet@wanadoo.fr
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c

index ea76b8d334019a98bd85c70929edfb3ac6571d46..39226b9c0fa8349e39fdadbf1f4dd1a664b0c98b 100644 (file)
 /**
  * struct brcmf_ampdu_rx_reorder - AMPDU receive reorder info
  *
- * @pktslots: dynamic allocated array for ordering AMPDU packets.
  * @flow_id: AMPDU flow identifier.
  * @cur_idx: last AMPDU index from firmware.
  * @exp_idx: expected next AMPDU index.
  * @max_idx: maximum amount of packets per AMPDU.
  * @pend_pkts: number of packets currently in @pktslots.
+ * @pktslots: array for ordering AMPDU packets.
  */
 struct brcmf_ampdu_rx_reorder {
-       struct sk_buff **pktslots;
        u8 flow_id;
        u8 cur_idx;
        u8 exp_idx;
        u8 max_idx;
        u8 pend_pkts;
+       struct sk_buff *pktslots[];
 };
 
 /* Forward decls for struct brcmf_pub (see below) */
index 36af81975855c52534ed03b4c80a87c404533b61..0949e7975ff106593bd98671bd6c6dd6fbb43da1 100644 (file)
@@ -1673,7 +1673,6 @@ void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
        struct sk_buff_head reorder_list;
        struct sk_buff *pnext;
        u8 flags;
-       u32 buf_size;
 
        reorder_data = ((struct brcmf_skb_reorder_data *)pkt->cb)->reorder;
        flow_id = reorder_data[BRCMF_RXREORDER_FLOWID_OFFSET];
@@ -1708,15 +1707,13 @@ void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
        }
        /* from here on we need a flow reorder instance */
        if (rfi == NULL) {
-               buf_size = sizeof(*rfi);
                max_idx = reorder_data[BRCMF_RXREORDER_MAXIDX_OFFSET];
 
-               buf_size += (max_idx + 1) * sizeof(pkt);
-
                /* allocate space for flow reorder info */
                brcmf_dbg(INFO, "flow-%d: start, maxidx %d\n",
                          flow_id, max_idx);
-               rfi = kzalloc(buf_size, GFP_ATOMIC);
+               rfi = kzalloc(struct_size(rfi, pktslots, max_idx + 1),
+                             GFP_ATOMIC);
                if (rfi == NULL) {
                        bphy_err(drvr, "failed to alloc buffer\n");
                        brcmf_netif_rx(ifp, pkt);
@@ -1724,7 +1721,6 @@ void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
                }
 
                ifp->drvr->reorder_flows[flow_id] = rfi;
-               rfi->pktslots = (struct sk_buff **)(rfi + 1);
                rfi->max_idx = max_idx;
        }
        if (flags & BRCMF_RXREORDER_NEW_HOLE)  {