mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-26 02:51:33 -05:00
wifi: brcmfmac: fwsignal: Use struct_size() to simplify brcmf_fws_rxreorder()
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
This commit is contained in:
committed by
Kalle Valo
parent
9588469d06
commit
16b31ecb80
@@ -48,20 +48,20 @@
|
||||
/**
|
||||
* 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) */
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user