[RAMEN9610-13609][common][RAMEN9610-13609][9610] wlbt: scheduling while atomic
authorDebabrata Purohit <d.purohit@samsung.com>
Wed, 20 Mar 2019 11:22:00 +0000 (11:22 +0000)
committerlingsen1 <lingsen1@lenovo.com>
Fri, 22 Mar 2019 16:56:49 +0000 (00:56 +0800)
Cause:
For intra BSS relay, the SKBs are allocated with
GFP_KERNEL flag. this is done in atomic context, which can be fatal.

Resolution:
Allocate the SKBs with GFP_ATOMIC flag.

Change-Id: I667ad314c7c1f95b7b2bda73a9d2252668b6efa6
SCSC-Bug-Id: SSB-50805
Signed-off-by: Debabrata Purohit <d.purohit@samsung.com>
drivers/net/wireless/scsc/sap_ma.c

index fc76ad3bf4712f177e819f45ff6ce188f61a2881..9f89e5c5944c58e98466890caf5edd63c676ede3 100755 (executable)
@@ -272,8 +272,11 @@ void slsi_rx_data_deliver_skb(struct slsi_dev *sdev, struct net_device *dev, str
                        struct ethhdr *ehdr = (struct ethhdr *)(rx_skb->data);
 
                        if (is_multicast_ether_addr(ehdr->h_dest)) {
+#ifdef CONFIG_SCSC_WLAN_RX_NAPI
+                               struct sk_buff *rebroadcast_skb = slsi_skb_copy(rx_skb, GFP_ATOMIC);
+#else
                                struct sk_buff *rebroadcast_skb = slsi_skb_copy(rx_skb, GFP_KERNEL);
-
+#endif
                                if (!rebroadcast_skb) {
                                        SLSI_WARN(sdev, "Intra BSS: failed to alloc new SKB for broadcast\n");
                                } else {