mt76: add len parameter to __mt76_mcu_msg_alloc signature
authorLorenzo Bianconi <lorenzo@kernel.org>
Thu, 30 Jun 2022 12:55:18 +0000 (14:55 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 11 Jul 2022 11:40:03 +0000 (13:40 +0200)
Introduce len to __mt76_mcu_msg_alloc signature in order to add the
capability to specify two different value for allocation and copy length.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mcu.c
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7921/main.c

index 914ee27..a8cafa3 100644 (file)
@@ -7,17 +7,19 @@
 
 struct sk_buff *
 __mt76_mcu_msg_alloc(struct mt76_dev *dev, const void *data,
-                    int data_len, gfp_t gfp)
+                    int len, int data_len, gfp_t gfp)
 {
        const struct mt76_mcu_ops *ops = dev->mcu_ops;
-       int length = ops->headroom + data_len + ops->tailroom;
        struct sk_buff *skb;
 
-       skb = alloc_skb(length, gfp);
+       len = max_t(int, len, data_len);
+       len = ops->headroom + len + ops->tailroom;
+
+       skb = alloc_skb(len, gfp);
        if (!skb)
                return NULL;
 
-       memset(skb->head, 0, length);
+       memset(skb->head, 0, len);
        skb_reserve(skb, ops->headroom);
 
        if (data && data_len)
index f25f2da..0a86afb 100644 (file)
@@ -1343,12 +1343,12 @@ int mt76s_rd_rp(struct mt76_dev *dev, u32 base,
 
 struct sk_buff *
 __mt76_mcu_msg_alloc(struct mt76_dev *dev, const void *data,
-                    int data_len, gfp_t gfp);
+                    int len, int data_len, gfp_t gfp);
 static inline struct sk_buff *
 mt76_mcu_msg_alloc(struct mt76_dev *dev, const void *data,
                   int data_len)
 {
-       return __mt76_mcu_msg_alloc(dev, data, data_len, GFP_KERNEL);
+       return __mt76_mcu_msg_alloc(dev, data, data_len, data_len, GFP_KERNEL);
 }
 
 void mt76_mcu_rx_event(struct mt76_dev *dev, struct sk_buff *skb);
index 6891d65..7628204 100644 (file)
@@ -1454,15 +1454,14 @@ static void mt7921_ipv6_addr_change(struct ieee80211_hw *hw,
        if (!idx)
                return;
 
-       skb = __mt76_mcu_msg_alloc(&dev->mt76, NULL, sizeof(req_hdr) +
-                                  idx * sizeof(struct in6_addr), GFP_ATOMIC);
-       if (!skb)
-               return;
-
        req_hdr.arpns.ips_num = idx;
        req_hdr.arpns.len = cpu_to_le16(sizeof(struct mt76_connac_arpns_tlv)
                                        + idx * sizeof(struct in6_addr));
-       skb_put_data(skb, &req_hdr, sizeof(req_hdr));
+       skb = __mt76_mcu_msg_alloc(&dev->mt76, &req_hdr,
+                       sizeof(req_hdr) + idx * sizeof(struct in6_addr),
+                       sizeof(req_hdr), GFP_ATOMIC);
+       if (!skb)
+               return;
 
        for (i = 0; i < idx; i++)
                skb_put_data(skb, &ns_addrs[i].in6_u, sizeof(struct in6_addr));