Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0422-4.9.323-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3724 - (hide annotations) (download)
Mon Oct 24 14:08:35 2022 UTC (19 months, 3 weeks ago) by niro
File size: 11026 byte(s)
-linux-4.9.323
1 niro 3724 diff --git a/Makefile b/Makefile
2     index bd4c898a9940e..44c3b223062a1 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 322
9     +SUBLEVEL = 323
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c
14     index ca266fcca186c..f191057065f72 100644
15     --- a/drivers/dma/at_xdmac.c
16     +++ b/drivers/dma/at_xdmac.c
17     @@ -1806,6 +1806,11 @@ static int at_xdmac_alloc_chan_resources(struct dma_chan *chan)
18     for (i = 0; i < init_nr_desc_per_channel; i++) {
19     desc = at_xdmac_alloc_desc(chan, GFP_ATOMIC);
20     if (!desc) {
21     + if (i == 0) {
22     + dev_warn(chan2dev(chan),
23     + "can't allocate any descriptors\n");
24     + return -EIO;
25     + }
26     dev_warn(chan2dev(chan),
27     "only %d descriptors have been allocated\n", i);
28     break;
29     diff --git a/drivers/dma/ti-dma-crossbar.c b/drivers/dma/ti-dma-crossbar.c
30     index a7e1f6e17e3d1..8ea8d04e1ae02 100644
31     --- a/drivers/dma/ti-dma-crossbar.c
32     +++ b/drivers/dma/ti-dma-crossbar.c
33     @@ -251,6 +251,7 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,
34     if (dma_spec->args[0] >= xbar->xbar_requests) {
35     dev_err(&pdev->dev, "Invalid XBAR request number: %d\n",
36     dma_spec->args[0]);
37     + put_device(&pdev->dev);
38     return ERR_PTR(-EINVAL);
39     }
40    
41     @@ -258,12 +259,14 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,
42     dma_spec->np = of_parse_phandle(ofdma->of_node, "dma-masters", 0);
43     if (!dma_spec->np) {
44     dev_err(&pdev->dev, "Can't get DMA master\n");
45     + put_device(&pdev->dev);
46     return ERR_PTR(-EINVAL);
47     }
48    
49     map = kzalloc(sizeof(*map), GFP_KERNEL);
50     if (!map) {
51     of_node_put(dma_spec->np);
52     + put_device(&pdev->dev);
53     return ERR_PTR(-ENOMEM);
54     }
55    
56     @@ -274,6 +277,8 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,
57     mutex_unlock(&xbar->mutex);
58     dev_err(&pdev->dev, "Run out of free DMA requests\n");
59     kfree(map);
60     + of_node_put(dma_spec->np);
61     + put_device(&pdev->dev);
62     return ERR_PTR(-ENOMEM);
63     }
64     set_bit(map->xbar_out, xbar->dma_inuse);
65     diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c
66     index a29ac9bae6d5e..9ab056bb834d9 100644
67     --- a/drivers/i2c/busses/i2c-cadence.c
68     +++ b/drivers/i2c/busses/i2c-cadence.c
69     @@ -992,6 +992,7 @@ static int cdns_i2c_probe(struct platform_device *pdev)
70     return 0;
71    
72     err_clk_dis:
73     + clk_notifier_unregister(id->clk, &id->clk_rate_change_nb);
74     clk_disable_unprepare(id->clk);
75     pm_runtime_set_suspended(&pdev->dev);
76     pm_runtime_disable(&pdev->dev);
77     diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
78     index 9ad5a7019abfd..d8b8cf36de312 100644
79     --- a/drivers/iommu/dmar.c
80     +++ b/drivers/iommu/dmar.c
81     @@ -373,7 +373,7 @@ static int dmar_pci_bus_notifier(struct notifier_block *nb,
82    
83     static struct notifier_block dmar_pci_bus_nb = {
84     .notifier_call = dmar_pci_bus_notifier,
85     - .priority = INT_MIN,
86     + .priority = 1,
87     };
88    
89     static struct dmar_drhd_unit *
90     diff --git a/drivers/net/can/grcan.c b/drivers/net/can/grcan.c
91     index c6a176d8681c0..4e3432182092d 100644
92     --- a/drivers/net/can/grcan.c
93     +++ b/drivers/net/can/grcan.c
94     @@ -1669,7 +1669,6 @@ static int grcan_probe(struct platform_device *ofdev)
95     */
96     sysid_parent = of_find_node_by_path("/ambapp0");
97     if (sysid_parent) {
98     - of_node_get(sysid_parent);
99     err = of_property_read_u32(sysid_parent, "systemid", &sysid);
100     if (!err && ((sysid & GRLIB_VERSION_MASK) >=
101     GRCAN_TXBUG_SAFE_GRLIB_VERSION))
102     diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
103     index 6771c51f72c37..e3dc59fffdb78 100644
104     --- a/drivers/net/can/usb/gs_usb.c
105     +++ b/drivers/net/can/usb/gs_usb.c
106     @@ -192,6 +192,8 @@ struct gs_can {
107    
108     struct usb_anchor tx_submitted;
109     atomic_t active_tx_urbs;
110     + void *rxbuf[GS_MAX_RX_URBS];
111     + dma_addr_t rxbuf_dma[GS_MAX_RX_URBS];
112     };
113    
114     /* usb interface struct */
115     @@ -601,6 +603,7 @@ static int gs_can_open(struct net_device *netdev)
116     for (i = 0; i < GS_MAX_RX_URBS; i++) {
117     struct urb *urb;
118     u8 *buf;
119     + dma_addr_t buf_dma;
120    
121     /* alloc rx urb */
122     urb = usb_alloc_urb(0, GFP_KERNEL);
123     @@ -611,7 +614,7 @@ static int gs_can_open(struct net_device *netdev)
124     buf = usb_alloc_coherent(dev->udev,
125     sizeof(struct gs_host_frame),
126     GFP_KERNEL,
127     - &urb->transfer_dma);
128     + &buf_dma);
129     if (!buf) {
130     netdev_err(netdev,
131     "No memory left for USB buffer\n");
132     @@ -619,6 +622,8 @@ static int gs_can_open(struct net_device *netdev)
133     return -ENOMEM;
134     }
135    
136     + urb->transfer_dma = buf_dma;
137     +
138     /* fill, anchor, and submit rx urb */
139     usb_fill_bulk_urb(urb,
140     dev->udev,
141     @@ -642,10 +647,17 @@ static int gs_can_open(struct net_device *netdev)
142     rc);
143    
144     usb_unanchor_urb(urb);
145     + usb_free_coherent(dev->udev,
146     + sizeof(struct gs_host_frame),
147     + buf,
148     + buf_dma);
149     usb_free_urb(urb);
150     break;
151     }
152    
153     + dev->rxbuf[i] = buf;
154     + dev->rxbuf_dma[i] = buf_dma;
155     +
156     /* Drop reference,
157     * USB core will take care of freeing it
158     */
159     @@ -710,13 +722,20 @@ static int gs_can_close(struct net_device *netdev)
160     int rc;
161     struct gs_can *dev = netdev_priv(netdev);
162     struct gs_usb *parent = dev->parent;
163     + unsigned int i;
164    
165     netif_stop_queue(netdev);
166    
167     /* Stop polling */
168     parent->active_channels--;
169     - if (!parent->active_channels)
170     + if (!parent->active_channels) {
171     usb_kill_anchored_urbs(&parent->rx_submitted);
172     + for (i = 0; i < GS_MAX_RX_URBS; i++)
173     + usb_free_coherent(dev->udev,
174     + sizeof(struct gs_host_frame),
175     + dev->rxbuf[i],
176     + dev->rxbuf_dma[i]);
177     + }
178    
179     /* Stop sending URBs */
180     usb_kill_anchored_urbs(&dev->tx_submitted);
181     diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
182     index 4b7a9672d92b7..d8253c6ac2b08 100644
183     --- a/drivers/net/usb/usbnet.c
184     +++ b/drivers/net/usb/usbnet.c
185     @@ -2085,7 +2085,7 @@ static void usbnet_async_cmd_cb(struct urb *urb)
186     int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
187     u16 value, u16 index, const void *data, u16 size)
188     {
189     - struct usb_ctrlrequest *req = NULL;
190     + struct usb_ctrlrequest *req;
191     struct urb *urb;
192     int err = -ENOMEM;
193     void *buf = NULL;
194     @@ -2103,7 +2103,7 @@ int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
195     if (!buf) {
196     netdev_err(dev->net, "Error allocating buffer"
197     " in %s!\n", __func__);
198     - goto fail_free;
199     + goto fail_free_urb;
200     }
201     }
202    
203     @@ -2127,14 +2127,21 @@ int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
204     if (err < 0) {
205     netdev_err(dev->net, "Error submitting the control"
206     " message: status=%d\n", err);
207     - goto fail_free;
208     + goto fail_free_all;
209     }
210     return 0;
211    
212     +fail_free_all:
213     + kfree(req);
214     fail_free_buf:
215     kfree(buf);
216     -fail_free:
217     - kfree(req);
218     + /*
219     + * avoid a double free
220     + * needed because the flag can be set only
221     + * after filling the URB
222     + */
223     + urb->transfer_flags = 0;
224     +fail_free_urb:
225     usb_free_urb(urb);
226     fail:
227     return err;
228     diff --git a/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c b/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c
229     index 383977ea3a3ca..0b5aba4bf3380 100644
230     --- a/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c
231     +++ b/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c
232     @@ -158,26 +158,26 @@ static const struct sunxi_desc_pin sun8i_a83t_pins[] = {
233     SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
234     SUNXI_FUNCTION(0x0, "gpio_in"),
235     SUNXI_FUNCTION(0x1, "gpio_out"),
236     - SUNXI_FUNCTION(0x2, "nand"), /* DQ6 */
237     + SUNXI_FUNCTION(0x2, "nand0"), /* DQ6 */
238     SUNXI_FUNCTION(0x3, "mmc2")), /* D6 */
239     SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
240     SUNXI_FUNCTION(0x0, "gpio_in"),
241     SUNXI_FUNCTION(0x1, "gpio_out"),
242     - SUNXI_FUNCTION(0x2, "nand"), /* DQ7 */
243     + SUNXI_FUNCTION(0x2, "nand0"), /* DQ7 */
244     SUNXI_FUNCTION(0x3, "mmc2")), /* D7 */
245     SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
246     SUNXI_FUNCTION(0x0, "gpio_in"),
247     SUNXI_FUNCTION(0x1, "gpio_out"),
248     - SUNXI_FUNCTION(0x2, "nand"), /* DQS */
249     + SUNXI_FUNCTION(0x2, "nand0"), /* DQS */
250     SUNXI_FUNCTION(0x3, "mmc2")), /* RST */
251     SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 17),
252     SUNXI_FUNCTION(0x0, "gpio_in"),
253     SUNXI_FUNCTION(0x1, "gpio_out"),
254     - SUNXI_FUNCTION(0x2, "nand")), /* CE2 */
255     + SUNXI_FUNCTION(0x2, "nand0")), /* CE2 */
256     SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 18),
257     SUNXI_FUNCTION(0x0, "gpio_in"),
258     SUNXI_FUNCTION(0x1, "gpio_out"),
259     - SUNXI_FUNCTION(0x2, "nand")), /* CE3 */
260     + SUNXI_FUNCTION(0x2, "nand0")), /* CE3 */
261     /* Hole */
262     SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
263     SUNXI_FUNCTION(0x0, "gpio_in"),
264     diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
265     index c5f2f1e3cc4bd..48d62da622260 100644
266     --- a/fs/xfs/xfs_inode.c
267     +++ b/fs/xfs/xfs_inode.c
268     @@ -2973,7 +2973,6 @@ xfs_rename(
269     * appropriately.
270     */
271     if (flags & RENAME_WHITEOUT) {
272     - ASSERT(!(flags & (RENAME_NOREPLACE | RENAME_EXCHANGE)));
273     error = xfs_rename_alloc_whiteout(target_dp, &wip);
274     if (error)
275     return error;
276     diff --git a/include/video/of_display_timing.h b/include/video/of_display_timing.h
277     index ea755b5616d80..cb3f3b2e7ccfa 100644
278     --- a/include/video/of_display_timing.h
279     +++ b/include/video/of_display_timing.h
280     @@ -9,6 +9,8 @@
281     #ifndef __LINUX_OF_DISPLAY_TIMING_H
282     #define __LINUX_OF_DISPLAY_TIMING_H
283    
284     +#include <linux/errno.h>
285     +
286     struct device_node;
287     struct display_timing;
288     struct display_timings;
289     diff --git a/lib/idr.c b/lib/idr.c
290     index 6098336df2672..c657e35433e6e 100644
291     --- a/lib/idr.c
292     +++ b/lib/idr.c
293     @@ -1124,7 +1124,9 @@ void ida_simple_remove(struct ida *ida, unsigned int id)
294     {
295     unsigned long flags;
296    
297     - BUG_ON((int)id < 0);
298     + if ((int)id < 0)
299     + return;
300     +
301     spin_lock_irqsave(&simple_ida_lock, flags);
302     ida_remove(ida, id);
303     spin_unlock_irqrestore(&simple_ida_lock, flags);
304     diff --git a/mm/slub.c b/mm/slub.c
305     index 0b13135fd5719..c07c5fa6adcd1 100644
306     --- a/mm/slub.c
307     +++ b/mm/slub.c
308     @@ -2556,6 +2556,7 @@ redo:
309     deactivate_slab(s, page, c->freelist);
310     c->page = NULL;
311     c->freelist = NULL;
312     + c->tid = next_tid(c->tid);
313     goto new_slab;
314     }
315     }
316     @@ -2569,6 +2570,7 @@ redo:
317     deactivate_slab(s, page, c->freelist);
318     c->page = NULL;
319     c->freelist = NULL;
320     + c->tid = next_tid(c->tid);
321     goto new_slab;
322     }
323    
324     @@ -2581,6 +2583,7 @@ redo:
325    
326     if (!freelist) {
327     c->page = NULL;
328     + c->tid = next_tid(c->tid);
329     stat(s, DEACTIVATE_BYPASS);
330     goto new_slab;
331     }
332     @@ -2605,6 +2608,7 @@ new_slab:
333     c->partial = page->next;
334     stat(s, CPU_PARTIAL_ALLOC);
335     c->freelist = NULL;
336     + c->tid = next_tid(c->tid);
337     goto redo;
338     }
339    
340     @@ -2627,6 +2631,7 @@ new_slab:
341     deactivate_slab(s, page, get_freepointer(s, freelist));
342     c->page = NULL;
343     c->freelist = NULL;
344     + c->tid = next_tid(c->tid);
345     return freelist;
346     }
347    
348     diff --git a/net/rose/rose_route.c b/net/rose/rose_route.c
349     index 9f704a7f2a282..34e7e2ab78fe5 100644
350     --- a/net/rose/rose_route.c
351     +++ b/net/rose/rose_route.c
352     @@ -230,8 +230,8 @@ static void rose_remove_neigh(struct rose_neigh *rose_neigh)
353     {
354     struct rose_neigh *s;
355    
356     - rose_stop_ftimer(rose_neigh);
357     - rose_stop_t0timer(rose_neigh);
358     + del_timer_sync(&rose_neigh->ftimer);
359     + del_timer_sync(&rose_neigh->t0timer);
360    
361     skb_queue_purge(&rose_neigh->queue);
362