]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-4.4/brcmfmac-revise-handling-events-in-receive-path.patch
drop drm-rockchip-shutdown-drm-subsystem-on-shutdown.patch from 4.4.y and 4.9.y
[thirdparty/kernel/stable-queue.git] / queue-4.4 / brcmfmac-revise-handling-events-in-receive-path.patch
1 From foo@baz Tue 04 Jun 2019 04:46:27 PM CEST
2 From: Arend van Spriel <arend@broadcom.com>
3 Date: Mon, 11 Apr 2016 11:35:27 +0200
4 Subject: brcmfmac: revise handling events in receive path
5
6 From: Arend van Spriel <arend@broadcom.com>
7
8 commit 9c349892ccc90c6de2baaa69cc78449f58082273 upstream.
9
10 Move event handling out of brcmf_netif_rx() avoiding the need
11 to pass a flag. This flag is only ever true for USB hosts as
12 other interface use separate brcmf_rx_event() function.
13
14 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
15 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
16 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
17 Signed-off-by: Arend van Spriel <arend@broadcom.com>
18 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
19 [bwh: Backported to 4.4 as dependency of commit a4176ec356c7
20 "brcmfmac: add subtype check for event handling in data path"
21 - Adjust filenames, context]
22 Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
23 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
24 ---
25 drivers/net/wireless/brcm80211/brcmfmac/bus.h | 2 -
26 drivers/net/wireless/brcm80211/brcmfmac/core.c | 32 +++++++++++------------
27 drivers/net/wireless/brcm80211/brcmfmac/core.h | 3 --
28 drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | 2 -
29 4 files changed, 19 insertions(+), 20 deletions(-)
30
31 --- a/drivers/net/wireless/brcm80211/brcmfmac/bus.h
32 +++ b/drivers/net/wireless/brcm80211/brcmfmac/bus.h
33 @@ -214,7 +214,7 @@ bool brcmf_c_prec_enq(struct device *dev
34 int prec);
35
36 /* Receive frame for delivery to OS. Callee disposes of rxp. */
37 -void brcmf_rx_frame(struct device *dev, struct sk_buff *rxp, bool handle_evnt);
38 +void brcmf_rx_frame(struct device *dev, struct sk_buff *rxp, bool handle_event);
39 /* Receive async event packet from firmware. Callee disposes of rxp. */
40 void brcmf_rx_event(struct device *dev, struct sk_buff *rxp);
41
42 --- a/drivers/net/wireless/brcm80211/brcmfmac/core.c
43 +++ b/drivers/net/wireless/brcm80211/brcmfmac/core.c
44 @@ -301,18 +301,11 @@ void brcmf_txflowblock(struct device *de
45 brcmf_fws_bus_blocked(drvr, state);
46 }
47
48 -void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb,
49 - bool handle_event)
50 +void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
51 {
52 - skb->protocol = eth_type_trans(skb, ifp->ndev);
53 -
54 if (skb->pkt_type == PACKET_MULTICAST)
55 ifp->stats.multicast++;
56
57 - /* Process special event packets */
58 - if (handle_event)
59 - brcmf_fweh_process_skb(ifp->drvr, skb);
60 -
61 if (!(ifp->ndev->flags & IFF_UP)) {
62 brcmu_pkt_buf_free_skb(skb);
63 return;
64 @@ -372,7 +365,7 @@ static void brcmf_rxreorder_process_info
65 /* validate flags and flow id */
66 if (flags == 0xFF) {
67 brcmf_err("invalid flags...so ignore this packet\n");
68 - brcmf_netif_rx(ifp, pkt, false);
69 + brcmf_netif_rx(ifp, pkt);
70 return;
71 }
72
73 @@ -384,7 +377,7 @@ static void brcmf_rxreorder_process_info
74 if (rfi == NULL) {
75 brcmf_dbg(INFO, "received flags to cleanup, but no flow (%d) yet\n",
76 flow_id);
77 - brcmf_netif_rx(ifp, pkt, false);
78 + brcmf_netif_rx(ifp, pkt);
79 return;
80 }
81
82 @@ -409,7 +402,7 @@ static void brcmf_rxreorder_process_info
83 rfi = kzalloc(buf_size, GFP_ATOMIC);
84 if (rfi == NULL) {
85 brcmf_err("failed to alloc buffer\n");
86 - brcmf_netif_rx(ifp, pkt, false);
87 + brcmf_netif_rx(ifp, pkt);
88 return;
89 }
90
91 @@ -523,11 +516,11 @@ static void brcmf_rxreorder_process_info
92 netif_rx:
93 skb_queue_walk_safe(&reorder_list, pkt, pnext) {
94 __skb_unlink(pkt, &reorder_list);
95 - brcmf_netif_rx(ifp, pkt, false);
96 + brcmf_netif_rx(ifp, pkt);
97 }
98 }
99
100 -void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_evnt)
101 +void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
102 {
103 struct brcmf_if *ifp;
104 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
105 @@ -547,11 +540,18 @@ void brcmf_rx_frame(struct device *dev,
106 return;
107 }
108
109 + skb->protocol = eth_type_trans(skb, ifp->ndev);
110 +
111 rd = (struct brcmf_skb_reorder_data *)skb->cb;
112 - if (rd->reorder)
113 + if (rd->reorder) {
114 brcmf_rxreorder_process_info(ifp, rd->reorder, skb);
115 - else
116 - brcmf_netif_rx(ifp, skb, handle_evnt);
117 + } else {
118 + /* Process special event packets */
119 + if (handle_event)
120 + brcmf_fweh_process_skb(ifp->drvr, skb);
121 +
122 + brcmf_netif_rx(ifp, skb);
123 + }
124 }
125
126 void brcmf_rx_event(struct device *dev, struct sk_buff *skb)
127 --- a/drivers/net/wireless/brcm80211/brcmfmac/core.h
128 +++ b/drivers/net/wireless/brcm80211/brcmfmac/core.h
129 @@ -215,8 +215,7 @@ int brcmf_get_next_free_bsscfgidx(struct
130 void brcmf_txflowblock_if(struct brcmf_if *ifp,
131 enum brcmf_netif_stop_reason reason, bool state);
132 void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
133 -void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb,
134 - bool handle_event);
135 +void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
136 void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
137
138 #endif /* BRCMFMAC_CORE_H */
139 --- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
140 +++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
141 @@ -1155,7 +1155,7 @@ brcmf_msgbuf_process_rx_complete(struct
142 brcmu_pkt_buf_free_skb(skb);
143 return;
144 }
145 - brcmf_netif_rx(ifp, skb, false);
146 + brcmf_netif_rx(ifp, skb);
147 }
148
149