Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0369-4.9.270-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3671 - (hide annotations) (download)
Mon Oct 24 14:07:48 2022 UTC (2 years ago) by niro
File size: 31101 byte(s)
-linux-4.9.270
1 niro 3671 diff --git a/Makefile b/Makefile
2     index 94436a50dc9fb..e8313ffb8af98 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 269
9     +SUBLEVEL = 270
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/arch/openrisc/kernel/setup.c b/arch/openrisc/kernel/setup.c
14     index b4ed8b36e078d..e5f5b69a7b7bd 100644
15     --- a/arch/openrisc/kernel/setup.c
16     +++ b/arch/openrisc/kernel/setup.c
17     @@ -278,6 +278,8 @@ void calibrate_delay(void)
18     pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n",
19     loops_per_jiffy / (500000 / HZ),
20     (loops_per_jiffy / (5000 / HZ)) % 100, loops_per_jiffy);
21     +
22     + of_node_put(cpu);
23     }
24    
25     void __init setup_arch(char **cmdline_p)
26     diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c
27     index 1852d19d0d7b0..86110a2abf0f0 100644
28     --- a/drivers/cdrom/gdrom.c
29     +++ b/drivers/cdrom/gdrom.c
30     @@ -773,6 +773,13 @@ static int probe_gdrom_setupqueue(void)
31     static int probe_gdrom(struct platform_device *devptr)
32     {
33     int err;
34     +
35     + /*
36     + * Ensure our "one" device is initialized properly in case of previous
37     + * usages of it
38     + */
39     + memset(&gd, 0, sizeof(gd));
40     +
41     /* Start the device */
42     if (gdrom_execute_diagnostic() != 1) {
43     pr_warning("ATA Probe for GDROM failed\n");
44     @@ -850,6 +857,8 @@ static int remove_gdrom(struct platform_device *devptr)
45     if (gdrom_major)
46     unregister_blkdev(gdrom_major, GDROM_DEV_NAME);
47     unregister_cdrom(gd.cd_info);
48     + kfree(gd.cd_info);
49     + kfree(gd.toc);
50    
51     return 0;
52     }
53     @@ -865,7 +874,7 @@ static struct platform_driver gdrom_driver = {
54     static int __init init_gdrom(void)
55     {
56     int rc;
57     - gd.toc = NULL;
58     +
59     rc = platform_driver_register(&gdrom_driver);
60     if (rc)
61     return rc;
62     @@ -881,8 +890,6 @@ static void __exit exit_gdrom(void)
63     {
64     platform_device_unregister(pd);
65     platform_driver_unregister(&gdrom_driver);
66     - kfree(gd.toc);
67     - kfree(gd.cd_info);
68     }
69    
70     module_init(init_gdrom);
71     diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c
72     index be60bd5bab783..ee6d499edc1ba 100644
73     --- a/drivers/hwmon/lm80.c
74     +++ b/drivers/hwmon/lm80.c
75     @@ -630,7 +630,6 @@ static int lm80_probe(struct i2c_client *client,
76     struct device *dev = &client->dev;
77     struct device *hwmon_dev;
78     struct lm80_data *data;
79     - int rv;
80    
81     data = devm_kzalloc(dev, sizeof(struct lm80_data), GFP_KERNEL);
82     if (!data)
83     @@ -643,14 +642,8 @@ static int lm80_probe(struct i2c_client *client,
84     lm80_init_client(client);
85    
86     /* A few vars need to be filled upon startup */
87     - rv = lm80_read_value(client, LM80_REG_FAN_MIN(1));
88     - if (rv < 0)
89     - return rv;
90     - data->fan[f_min][0] = rv;
91     - rv = lm80_read_value(client, LM80_REG_FAN_MIN(2));
92     - if (rv < 0)
93     - return rv;
94     - data->fan[f_min][1] = rv;
95     + data->fan[f_min][0] = lm80_read_value(client, LM80_REG_FAN_MIN(1));
96     + data->fan[f_min][1] = lm80_read_value(client, LM80_REG_FAN_MIN(2));
97    
98     hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
99     data, lm80_groups);
100     diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
101     index 186da467060cc..5fa1442fd4f11 100644
102     --- a/drivers/infiniband/sw/rxe/rxe_qp.c
103     +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
104     @@ -258,6 +258,7 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
105     if (err) {
106     vfree(qp->sq.queue->buf);
107     kfree(qp->sq.queue);
108     + qp->sq.queue = NULL;
109     return err;
110     }
111    
112     @@ -315,6 +316,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
113     if (err) {
114     vfree(qp->rq.queue->buf);
115     kfree(qp->rq.queue);
116     + qp->rq.queue = NULL;
117     return err;
118     }
119     }
120     @@ -374,6 +376,11 @@ int rxe_qp_from_init(struct rxe_dev *rxe, struct rxe_qp *qp, struct rxe_pd *pd,
121     err2:
122     rxe_queue_cleanup(qp->sq.queue);
123     err1:
124     + qp->pd = NULL;
125     + qp->rcq = NULL;
126     + qp->scq = NULL;
127     + qp->srq = NULL;
128     +
129     if (srq)
130     rxe_drop_ref(srq);
131     rxe_drop_ref(scq);
132     diff --git a/drivers/leds/leds-lp5523.c b/drivers/leds/leds-lp5523.c
133     index 44ceed7ac3c5b..7cebcd458943e 100644
134     --- a/drivers/leds/leds-lp5523.c
135     +++ b/drivers/leds/leds-lp5523.c
136     @@ -320,7 +320,7 @@ static int lp5523_init_program_engine(struct lp55xx_chip *chip)
137     usleep_range(3000, 6000);
138     ret = lp55xx_read(chip, LP5523_REG_STATUS, &status);
139     if (ret)
140     - return ret;
141     + goto out;
142     status &= LP5523_ENG_STATUS_MASK;
143    
144     if (status != LP5523_ENG_STATUS_MASK) {
145     diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
146     index c04d9f22d1607..6acdbec05f702 100644
147     --- a/drivers/md/dm-snap.c
148     +++ b/drivers/md/dm-snap.c
149     @@ -1264,6 +1264,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
150    
151     if (!s->store->chunk_size) {
152     ti->error = "Chunk size not set";
153     + r = -EINVAL;
154     goto bad_read_metadata;
155     }
156    
157     diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
158     index 63ebc491057b6..99fc0121da93d 100644
159     --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
160     +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
161     @@ -1039,7 +1039,7 @@ int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode)
162     for (i = 0; i < QLCNIC_NUM_ILB_PKT; i++) {
163     skb = netdev_alloc_skb(adapter->netdev, QLCNIC_ILB_PKT_SIZE);
164     if (!skb)
165     - break;
166     + goto error;
167     qlcnic_create_loopback_buff(skb->data, adapter->mac_addr);
168     skb_put(skb, QLCNIC_ILB_PKT_SIZE);
169     adapter->ahw->diag_cnt = 0;
170     @@ -1063,6 +1063,7 @@ int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode)
171     cnt++;
172     }
173     if (cnt != i) {
174     +error:
175     dev_err(&adapter->pdev->dev,
176     "LB Test: failed, TX[%d], RX[%d]\n", i, cnt);
177     if (mode != QLCNIC_ILB_MODE)
178     diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
179     index fc1fa0f9f3387..fe4128405bbb7 100644
180     --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
181     +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
182     @@ -39,7 +39,7 @@ struct sunxi_priv_data {
183     static int sun7i_gmac_init(struct platform_device *pdev, void *priv)
184     {
185     struct sunxi_priv_data *gmac = priv;
186     - int ret;
187     + int ret = 0;
188    
189     if (gmac->regulator) {
190     ret = regulator_enable(gmac->regulator);
191     @@ -60,11 +60,11 @@ static int sun7i_gmac_init(struct platform_device *pdev, void *priv)
192     } else {
193     clk_set_rate(gmac->tx_clk, SUN7I_GMAC_MII_RATE);
194     ret = clk_prepare(gmac->tx_clk);
195     - if (ret)
196     - return ret;
197     + if (ret && gmac->regulator)
198     + regulator_disable(gmac->regulator);
199     }
200    
201     - return 0;
202     + return ret;
203     }
204    
205     static void sun7i_gmac_exit(struct platform_device *pdev, void *priv)
206     diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
207     index 5bf47279f9c1b..306d5d08141ee 100644
208     --- a/drivers/net/ethernet/sun/niu.c
209     +++ b/drivers/net/ethernet/sun/niu.c
210     @@ -8166,10 +8166,10 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end)
211     "VPD_SCAN: Reading in property [%s] len[%d]\n",
212     namebuf, prop_len);
213     for (i = 0; i < prop_len; i++) {
214     - err = niu_pci_eeprom_read(np, off + i);
215     - if (err >= 0)
216     - *prop_buf = err;
217     - ++prop_buf;
218     + err = niu_pci_eeprom_read(np, off + i);
219     + if (err < 0)
220     + return err;
221     + *prop_buf++ = err;
222     }
223     }
224    
225     @@ -8180,14 +8180,14 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end)
226     }
227    
228     /* ESPC_PIO_EN_ENABLE must be set */
229     -static void niu_pci_vpd_fetch(struct niu *np, u32 start)
230     +static int niu_pci_vpd_fetch(struct niu *np, u32 start)
231     {
232     u32 offset;
233     int err;
234    
235     err = niu_pci_eeprom_read16_swp(np, start + 1);
236     if (err < 0)
237     - return;
238     + return err;
239    
240     offset = err + 3;
241    
242     @@ -8196,12 +8196,14 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start)
243     u32 end;
244    
245     err = niu_pci_eeprom_read(np, here);
246     + if (err < 0)
247     + return err;
248     if (err != 0x90)
249     - return;
250     + return -EINVAL;
251    
252     err = niu_pci_eeprom_read16_swp(np, here + 1);
253     if (err < 0)
254     - return;
255     + return err;
256    
257     here = start + offset + 3;
258     end = start + offset + err;
259     @@ -8209,9 +8211,12 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start)
260     offset += err;
261    
262     err = niu_pci_vpd_scan_props(np, here, end);
263     - if (err < 0 || err == 1)
264     - return;
265     + if (err < 0)
266     + return err;
267     + if (err == 1)
268     + return -EINVAL;
269     }
270     + return 0;
271     }
272    
273     /* ESPC_PIO_EN_ENABLE must be set */
274     @@ -9304,8 +9309,11 @@ static int niu_get_invariants(struct niu *np)
275     offset = niu_pci_vpd_offset(np);
276     netif_printk(np, probe, KERN_DEBUG, np->dev,
277     "%s() VPD offset [%08x]\n", __func__, offset);
278     - if (offset)
279     - niu_pci_vpd_fetch(np, offset);
280     + if (offset) {
281     + err = niu_pci_vpd_fetch(np, offset);
282     + if (err < 0)
283     + return err;
284     + }
285     nw64(ESPC_PIO_EN, 0);
286    
287     if (np->flags & NIU_FLAGS_VPD_VALID) {
288     diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c
289     index 7de18ed10db8e..e1992de500b0d 100644
290     --- a/drivers/net/wireless/realtek/rtlwifi/base.c
291     +++ b/drivers/net/wireless/realtek/rtlwifi/base.c
292     @@ -454,9 +454,14 @@ static void _rtl_init_mac80211(struct ieee80211_hw *hw)
293     }
294     }
295    
296     -static void _rtl_init_deferred_work(struct ieee80211_hw *hw)
297     +static int _rtl_init_deferred_work(struct ieee80211_hw *hw)
298     {
299     struct rtl_priv *rtlpriv = rtl_priv(hw);
300     + struct workqueue_struct *wq;
301     +
302     + wq = alloc_workqueue("%s", 0, 0, rtlpriv->cfg->name);
303     + if (!wq)
304     + return -ENOMEM;
305    
306     /* <1> timer */
307     setup_timer(&rtlpriv->works.watchdog_timer,
308     @@ -465,11 +470,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw)
309     rtl_easy_concurrent_retrytimer_callback, (unsigned long)hw);
310     /* <2> work queue */
311     rtlpriv->works.hw = hw;
312     - rtlpriv->works.rtl_wq = alloc_workqueue("%s", 0, 0, rtlpriv->cfg->name);
313     - if (unlikely(!rtlpriv->works.rtl_wq)) {
314     - pr_err("Failed to allocate work queue\n");
315     - return;
316     - }
317     + rtlpriv->works.rtl_wq = wq;
318    
319     INIT_DELAYED_WORK(&rtlpriv->works.watchdog_wq,
320     (void *)rtl_watchdog_wq_callback);
321     @@ -481,7 +482,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw)
322     (void *)rtl_swlps_rfon_wq_callback);
323     INIT_DELAYED_WORK(&rtlpriv->works.fwevt_wq,
324     (void *)rtl_fwevt_wq_callback);
325     -
326     + return 0;
327     }
328    
329     void rtl_deinit_deferred_work(struct ieee80211_hw *hw)
330     @@ -573,9 +574,7 @@ int rtl_init_core(struct ieee80211_hw *hw)
331     rtlmac->link_state = MAC80211_NOLINK;
332    
333     /* <6> init deferred work */
334     - _rtl_init_deferred_work(hw);
335     -
336     - return 0;
337     + return _rtl_init_deferred_work(hw);
338     }
339     EXPORT_SYMBOL_GPL(rtl_init_core);
340    
341     diff --git a/drivers/rapidio/rio_cm.c b/drivers/rapidio/rio_cm.c
342     index b29fc258eeba4..ab57a1eb519fc 100644
343     --- a/drivers/rapidio/rio_cm.c
344     +++ b/drivers/rapidio/rio_cm.c
345     @@ -2136,6 +2136,14 @@ static int riocm_add_mport(struct device *dev,
346     return -ENODEV;
347     }
348    
349     + cm->rx_wq = create_workqueue(DRV_NAME "/rxq");
350     + if (!cm->rx_wq) {
351     + rio_release_inb_mbox(mport, cmbox);
352     + rio_release_outb_mbox(mport, cmbox);
353     + kfree(cm);
354     + return -ENOMEM;
355     + }
356     +
357     /*
358     * Allocate and register inbound messaging buffers to be ready
359     * to receive channel and system management requests
360     @@ -2146,15 +2154,6 @@ static int riocm_add_mport(struct device *dev,
361     cm->rx_slots = RIOCM_RX_RING_SIZE;
362     mutex_init(&cm->rx_lock);
363     riocm_rx_fill(cm, RIOCM_RX_RING_SIZE);
364     - cm->rx_wq = create_workqueue(DRV_NAME "/rxq");
365     - if (!cm->rx_wq) {
366     - riocm_error("failed to allocate IBMBOX_%d on %s",
367     - cmbox, mport->name);
368     - rio_release_outb_mbox(mport, cmbox);
369     - kfree(cm);
370     - return -ENOMEM;
371     - }
372     -
373     INIT_WORK(&cm->rx_work, rio_ibmsg_handler);
374    
375     cm->tx_slot = 0;
376     diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
377     index 104e13ae34288..9ec18463b4523 100644
378     --- a/drivers/scsi/qla2xxx/qla_nx.c
379     +++ b/drivers/scsi/qla2xxx/qla_nx.c
380     @@ -1102,7 +1102,8 @@ qla82xx_write_flash_dword(struct qla_hw_data *ha, uint32_t flashaddr,
381     return ret;
382     }
383    
384     - if (qla82xx_flash_set_write_enable(ha))
385     + ret = qla82xx_flash_set_write_enable(ha);
386     + if (ret < 0)
387     goto done_write;
388    
389     qla82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_WDATA, data);
390     diff --git a/drivers/staging/iio/light/tsl2583.c b/drivers/staging/iio/light/tsl2583.c
391     index 08f1583ee34e9..fb3ec56d45b61 100644
392     --- a/drivers/staging/iio/light/tsl2583.c
393     +++ b/drivers/staging/iio/light/tsl2583.c
394     @@ -382,6 +382,15 @@ static int taos_als_calibrate(struct iio_dev *indio_dev)
395     dev_err(&chip->client->dev, "taos_als_calibrate failed to get lux\n");
396     return lux_val;
397     }
398     +
399     + /* Avoid division by zero of lux_value later on */
400     + if (lux_val == 0) {
401     + dev_err(&chip->client->dev,
402     + "%s: lux_val of 0 will produce out of range trim_value\n",
403     + __func__);
404     + return -ENODATA;
405     + }
406     +
407     gain_trim_val = (unsigned int)(((chip->taos_settings.als_cal_target)
408     * chip->taos_settings.als_gain_trim) / lux_val);
409    
410     diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
411     index 2fa7527b1230e..8c74d9ebfc502 100644
412     --- a/drivers/tty/vt/vt.c
413     +++ b/drivers/tty/vt/vt.c
414     @@ -838,7 +838,7 @@ static inline int resize_screen(struct vc_data *vc, int width, int height,
415     /* Resizes the resolution of the display adapater */
416     int err = 0;
417    
418     - if (vc->vc_mode != KD_GRAPHICS && vc->vc_sw->con_resize)
419     + if (vc->vc_sw->con_resize)
420     err = vc->vc_sw->con_resize(vc, width, height, user);
421    
422     return err;
423     diff --git a/drivers/tty/vt/vt_ioctl.c b/drivers/tty/vt/vt_ioctl.c
424     index 275ec49b30b9f..9206fd2489353 100644
425     --- a/drivers/tty/vt/vt_ioctl.c
426     +++ b/drivers/tty/vt/vt_ioctl.c
427     @@ -898,17 +898,17 @@ int vt_ioctl(struct tty_struct *tty,
428     if (vcp) {
429     int ret;
430     int save_scan_lines = vcp->vc_scan_lines;
431     - int save_font_height = vcp->vc_font.height;
432     + int save_cell_height = vcp->vc_cell_height;
433    
434     if (v.v_vlin)
435     vcp->vc_scan_lines = v.v_vlin;
436     if (v.v_clin)
437     - vcp->vc_font.height = v.v_clin;
438     + vcp->vc_cell_height = v.v_clin;
439     vcp->vc_resize_user = 1;
440     ret = vc_resize(vcp, v.v_cols, v.v_rows);
441     if (ret) {
442     vcp->vc_scan_lines = save_scan_lines;
443     - vcp->vc_font.height = save_font_height;
444     + vcp->vc_cell_height = save_cell_height;
445     console_unlock();
446     return ret;
447     }
448     diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
449     index 44df6f6fd0636..510bc3f51dccf 100644
450     --- a/drivers/video/console/fbcon.c
451     +++ b/drivers/video/console/fbcon.c
452     @@ -1986,7 +1986,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,
453     return -EINVAL;
454    
455     DPRINTK("resize now %ix%i\n", var.xres, var.yres);
456     - if (con_is_visible(vc)) {
457     + if (con_is_visible(vc) && vc->vc_mode == KD_TEXT) {
458     var.activate = FB_ACTIVATE_NOW |
459     FB_ACTIVATE_FORCE;
460     fb_set_var(info, &var);
461     diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
462     index b38ee2354cbfa..cb9b879631293 100644
463     --- a/drivers/video/console/vgacon.c
464     +++ b/drivers/video/console/vgacon.c
465     @@ -434,7 +434,7 @@ static void vgacon_init(struct vc_data *c, int init)
466     vc_resize(c, vga_video_num_columns, vga_video_num_lines);
467    
468     c->vc_scan_lines = vga_scan_lines;
469     - c->vc_font.height = vga_video_font_height;
470     + c->vc_font.height = c->vc_cell_height = vga_video_font_height;
471     c->vc_complement_mask = 0x7700;
472     if (vga_512_chars)
473     c->vc_hi_font_mask = 0x0800;
474     @@ -572,32 +572,32 @@ static void vgacon_cursor(struct vc_data *c, int mode)
475     switch (c->vc_cursor_type & 0x0f) {
476     case CUR_UNDERLINE:
477     vgacon_set_cursor_size(c->vc_x,
478     - c->vc_font.height -
479     - (c->vc_font.height <
480     + c->vc_cell_height -
481     + (c->vc_cell_height <
482     10 ? 2 : 3),
483     - c->vc_font.height -
484     - (c->vc_font.height <
485     + c->vc_cell_height -
486     + (c->vc_cell_height <
487     10 ? 1 : 2));
488     break;
489     case CUR_TWO_THIRDS:
490     vgacon_set_cursor_size(c->vc_x,
491     - c->vc_font.height / 3,
492     - c->vc_font.height -
493     - (c->vc_font.height <
494     + c->vc_cell_height / 3,
495     + c->vc_cell_height -
496     + (c->vc_cell_height <
497     10 ? 1 : 2));
498     break;
499     case CUR_LOWER_THIRD:
500     vgacon_set_cursor_size(c->vc_x,
501     - (c->vc_font.height * 2) / 3,
502     - c->vc_font.height -
503     - (c->vc_font.height <
504     + (c->vc_cell_height * 2) / 3,
505     + c->vc_cell_height -
506     + (c->vc_cell_height <
507     10 ? 1 : 2));
508     break;
509     case CUR_LOWER_HALF:
510     vgacon_set_cursor_size(c->vc_x,
511     - c->vc_font.height / 2,
512     - c->vc_font.height -
513     - (c->vc_font.height <
514     + c->vc_cell_height / 2,
515     + c->vc_cell_height -
516     + (c->vc_cell_height <
517     10 ? 1 : 2));
518     break;
519     case CUR_NONE:
520     @@ -608,7 +608,7 @@ static void vgacon_cursor(struct vc_data *c, int mode)
521     break;
522     default:
523     vgacon_set_cursor_size(c->vc_x, 1,
524     - c->vc_font.height);
525     + c->vc_cell_height);
526     break;
527     }
528     break;
529     @@ -619,13 +619,13 @@ static int vgacon_doresize(struct vc_data *c,
530     unsigned int width, unsigned int height)
531     {
532     unsigned long flags;
533     - unsigned int scanlines = height * c->vc_font.height;
534     + unsigned int scanlines = height * c->vc_cell_height;
535     u8 scanlines_lo = 0, r7 = 0, vsync_end = 0, mode, max_scan;
536    
537     raw_spin_lock_irqsave(&vga_lock, flags);
538    
539     vgacon_xres = width * VGA_FONTWIDTH;
540     - vgacon_yres = height * c->vc_font.height;
541     + vgacon_yres = height * c->vc_cell_height;
542     if (vga_video_type >= VIDEO_TYPE_VGAC) {
543     outb_p(VGA_CRTC_MAX_SCAN, vga_video_port_reg);
544     max_scan = inb_p(vga_video_port_val);
545     @@ -680,9 +680,9 @@ static int vgacon_doresize(struct vc_data *c,
546     static int vgacon_switch(struct vc_data *c)
547     {
548     int x = c->vc_cols * VGA_FONTWIDTH;
549     - int y = c->vc_rows * c->vc_font.height;
550     + int y = c->vc_rows * c->vc_cell_height;
551     int rows = screen_info.orig_video_lines * vga_default_font_height/
552     - c->vc_font.height;
553     + c->vc_cell_height;
554     /*
555     * We need to save screen size here as it's the only way
556     * we can spot the screen has been resized and we need to
557     @@ -1120,7 +1120,7 @@ static int vgacon_adjust_height(struct vc_data *vc, unsigned fontheight)
558     cursor_size_lastto = 0;
559     c->vc_sw->con_cursor(c, CM_DRAW);
560     }
561     - c->vc_font.height = fontheight;
562     + c->vc_font.height = c->vc_cell_height = fontheight;
563     vc_resize(c, 0, rows); /* Adjust console size */
564     }
565     }
566     @@ -1174,12 +1174,20 @@ static int vgacon_resize(struct vc_data *c, unsigned int width,
567     if ((width << 1) * height > vga_vram_size)
568     return -EINVAL;
569    
570     + if (user) {
571     + /*
572     + * Ho ho! Someone (svgatextmode, eh?) may have reprogrammed
573     + * the video mode! Set the new defaults then and go away.
574     + */
575     + screen_info.orig_video_cols = width;
576     + screen_info.orig_video_lines = height;
577     + vga_default_font_height = c->vc_cell_height;
578     + return 0;
579     + }
580     if (width % 2 || width > screen_info.orig_video_cols ||
581     height > (screen_info.orig_video_lines * vga_default_font_height)/
582     - c->vc_font.height)
583     - /* let svgatextmode tinker with video timings and
584     - return success */
585     - return (user) ? 0 : -EINVAL;
586     + c->vc_cell_height)
587     + return -EINVAL;
588    
589     if (con_is_visible(c) && !vga_is_gfx) /* who knows */
590     vgacon_doresize(c, width, height);
591     diff --git a/drivers/video/fbdev/hgafb.c b/drivers/video/fbdev/hgafb.c
592     index 59e1cae579481..03c0b1b8747b9 100644
593     --- a/drivers/video/fbdev/hgafb.c
594     +++ b/drivers/video/fbdev/hgafb.c
595     @@ -286,7 +286,7 @@ static int hga_card_detect(void)
596    
597     hga_vram = ioremap(0xb0000, hga_vram_len);
598     if (!hga_vram)
599     - goto error;
600     + return -ENOMEM;
601    
602     if (request_region(0x3b0, 12, "hgafb"))
603     release_io_ports = 1;
604     @@ -346,13 +346,18 @@ static int hga_card_detect(void)
605     hga_type_name = "Hercules";
606     break;
607     }
608     - return 1;
609     + return 0;
610     error:
611     if (release_io_ports)
612     release_region(0x3b0, 12);
613     if (release_io_port)
614     release_region(0x3bf, 1);
615     - return 0;
616     +
617     + iounmap(hga_vram);
618     +
619     + pr_err("hgafb: HGA card not detected.\n");
620     +
621     + return -EINVAL;
622     }
623    
624     /**
625     @@ -550,13 +555,11 @@ static struct fb_ops hgafb_ops = {
626     static int hgafb_probe(struct platform_device *pdev)
627     {
628     struct fb_info *info;
629     + int ret;
630    
631     - if (! hga_card_detect()) {
632     - printk(KERN_INFO "hgafb: HGA card not detected.\n");
633     - if (hga_vram)
634     - iounmap(hga_vram);
635     - return -EINVAL;
636     - }
637     + ret = hga_card_detect();
638     + if (ret)
639     + return ret;
640    
641     printk(KERN_INFO "hgafb: %s with %ldK of memory detected.\n",
642     hga_type_name, hga_vram_len/1024);
643     diff --git a/drivers/video/fbdev/imsttfb.c b/drivers/video/fbdev/imsttfb.c
644     index 4ef9dc94e8138..4363c64d74e8c 100644
645     --- a/drivers/video/fbdev/imsttfb.c
646     +++ b/drivers/video/fbdev/imsttfb.c
647     @@ -1516,11 +1516,6 @@ static int imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
648     info->fix.smem_start = addr;
649     info->screen_base = (__u8 *)ioremap(addr, par->ramdac == IBM ?
650     0x400000 : 0x800000);
651     - if (!info->screen_base) {
652     - release_mem_region(addr, size);
653     - framebuffer_release(info);
654     - return -ENOMEM;
655     - }
656     info->fix.mmio_start = addr + 0x800000;
657     par->dc_regs = ioremap(addr + 0x800000, 0x1000);
658     par->cmap_regs_phys = addr + 0x840000;
659     diff --git a/drivers/xen/xen-pciback/xenbus.c b/drivers/xen/xen-pciback/xenbus.c
660     index 36ec99cff507b..2912905331020 100644
661     --- a/drivers/xen/xen-pciback/xenbus.c
662     +++ b/drivers/xen/xen-pciback/xenbus.c
663     @@ -357,7 +357,8 @@ out:
664     return err;
665     }
666    
667     -static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev)
668     +static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev,
669     + enum xenbus_state state)
670     {
671     int err = 0;
672     int num_devs;
673     @@ -371,9 +372,7 @@ static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev)
674     dev_dbg(&pdev->xdev->dev, "Reconfiguring device ...\n");
675    
676     mutex_lock(&pdev->dev_lock);
677     - /* Make sure we only reconfigure once */
678     - if (xenbus_read_driver_state(pdev->xdev->nodename) !=
679     - XenbusStateReconfiguring)
680     + if (xenbus_read_driver_state(pdev->xdev->nodename) != state)
681     goto out;
682    
683     err = xenbus_scanf(XBT_NIL, pdev->xdev->nodename, "num_devs", "%d",
684     @@ -500,6 +499,10 @@ static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev)
685     }
686     }
687    
688     + if (state != XenbusStateReconfiguring)
689     + /* Make sure we only reconfigure once. */
690     + goto out;
691     +
692     err = xenbus_switch_state(pdev->xdev, XenbusStateReconfigured);
693     if (err) {
694     xenbus_dev_fatal(pdev->xdev, err,
695     @@ -525,7 +528,7 @@ static void xen_pcibk_frontend_changed(struct xenbus_device *xdev,
696     break;
697    
698     case XenbusStateReconfiguring:
699     - xen_pcibk_reconfigure(pdev);
700     + xen_pcibk_reconfigure(pdev, XenbusStateReconfiguring);
701     break;
702    
703     case XenbusStateConnected:
704     @@ -664,6 +667,15 @@ static void xen_pcibk_be_watch(struct xenbus_watch *watch,
705     xen_pcibk_setup_backend(pdev);
706     break;
707    
708     + case XenbusStateInitialised:
709     + /*
710     + * We typically move to Initialised when the first device was
711     + * added. Hence subsequent devices getting added may need
712     + * reconfiguring.
713     + */
714     + xen_pcibk_reconfigure(pdev, XenbusStateInitialised);
715     + break;
716     +
717     default:
718     break;
719     }
720     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
721     index 67edd6e03f803..fffba1b1da2e4 100644
722     --- a/fs/cifs/smb2ops.c
723     +++ b/fs/cifs/smb2ops.c
724     @@ -629,6 +629,8 @@ smb2_clone_range(const unsigned int xid,
725     cpu_to_le32(min_t(u32, len, tcon->max_bytes_chunk));
726    
727     /* Request server copy to target from src identified by key */
728     + kfree(retbuf);
729     + retbuf = NULL;
730     rc = SMB2_ioctl(xid, tcon, trgtfile->fid.persistent_fid,
731     trgtfile->fid.volatile_fid, FSCTL_SRV_COPYCHUNK_WRITE,
732     true /* is_fsctl */, (char *)pcchunk,
733     diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
734     index ff6cf23be8a21..cb77e7ee2c9f0 100644
735     --- a/fs/ecryptfs/crypto.c
736     +++ b/fs/ecryptfs/crypto.c
737     @@ -339,10 +339,8 @@ static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
738     struct extent_crypt_result ecr;
739     int rc = 0;
740    
741     - if (!crypt_stat || !crypt_stat->tfm
742     - || !(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED))
743     - return -EINVAL;
744     -
745     + BUG_ON(!crypt_stat || !crypt_stat->tfm
746     + || !(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED));
747     if (unlikely(ecryptfs_verbosity > 0)) {
748     ecryptfs_printk(KERN_DEBUG, "Key size [%zd]; key:\n",
749     crypt_stat->key_size);
750     diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h
751     index 6fd3c908a340d..a30112ba06e44 100644
752     --- a/include/linux/console_struct.h
753     +++ b/include/linux/console_struct.h
754     @@ -61,6 +61,7 @@ struct vc_data {
755     unsigned int vc_rows;
756     unsigned int vc_size_row; /* Bytes per row */
757     unsigned int vc_scan_lines; /* # of scan lines */
758     + unsigned int vc_cell_height; /* CRTC character cell height */
759     unsigned long vc_origin; /* [!] Start of real screen */
760     unsigned long vc_scr_end; /* [!] End of real screen */
761     unsigned long vc_visible_origin; /* [!] Top of visible window */
762     diff --git a/kernel/ptrace.c b/kernel/ptrace.c
763     index ea3370e205fb9..4f10223bc7b0f 100644
764     --- a/kernel/ptrace.c
765     +++ b/kernel/ptrace.c
766     @@ -159,6 +159,21 @@ void __ptrace_unlink(struct task_struct *child)
767     spin_unlock(&child->sighand->siglock);
768     }
769    
770     +static bool looks_like_a_spurious_pid(struct task_struct *task)
771     +{
772     + if (task->exit_code != ((PTRACE_EVENT_EXEC << 8) | SIGTRAP))
773     + return false;
774     +
775     + if (task_pid_vnr(task) == task->ptrace_message)
776     + return false;
777     + /*
778     + * The tracee changed its pid but the PTRACE_EVENT_EXEC event
779     + * was not wait()'ed, most probably debugger targets the old
780     + * leader which was destroyed in de_thread().
781     + */
782     + return true;
783     +}
784     +
785     /* Ensure that nothing can wake it up, even SIGKILL */
786     static bool ptrace_freeze_traced(struct task_struct *task)
787     {
788     @@ -169,7 +184,8 @@ static bool ptrace_freeze_traced(struct task_struct *task)
789     return ret;
790    
791     spin_lock_irq(&task->sighand->siglock);
792     - if (task_is_traced(task) && !__fatal_signal_pending(task)) {
793     + if (task_is_traced(task) && !looks_like_a_spurious_pid(task) &&
794     + !__fatal_signal_pending(task)) {
795     task->state = __TASK_TRACED;
796     ret = true;
797     }
798     diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
799     index 6670b7ffc2005..cedfce6f397ed 100644
800     --- a/net/bluetooth/smp.c
801     +++ b/net/bluetooth/smp.c
802     @@ -2636,6 +2636,15 @@ static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)
803     if (skb->len < sizeof(*key))
804     return SMP_INVALID_PARAMS;
805    
806     + /* Check if remote and local public keys are the same and debug key is
807     + * not in use.
808     + */
809     + if (!test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags) &&
810     + !crypto_memneq(key, smp->local_pk, 64)) {
811     + bt_dev_err(hdev, "Remote and local public keys are identical");
812     + return SMP_UNSPECIFIED;
813     + }
814     +
815     memcpy(smp->remote_pk, key, 64);
816    
817     if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags)) {
818     diff --git a/sound/firewire/Kconfig b/sound/firewire/Kconfig
819     index 8557e54d26598..f7b8dcb578157 100644
820     --- a/sound/firewire/Kconfig
821     +++ b/sound/firewire/Kconfig
822     @@ -36,7 +36,7 @@ config SND_OXFW
823     * Mackie(Loud) Onyx-i series (former models)
824     * Mackie(Loud) Onyx Satellite
825     * Mackie(Loud) Tapco Link.Firewire
826     - * Mackie(Loud) d.2 pro/d.4 pro
827     + * Mackie(Loud) d.4 pro
828     * Mackie(Loud) U.420/U.420d
829     * TASCAM FireOne
830     * Stanton Controllers & Systems 1 Deck/Mixer
831     @@ -82,7 +82,7 @@ config SND_BEBOB
832     * PreSonus FIREBOX/FIREPOD/FP10/Inspire1394
833     * BridgeCo RDAudio1/Audio5
834     * Mackie Onyx 1220/1620/1640 (FireWire I/O Card)
835     - * Mackie d.2 (FireWire Option)
836     + * Mackie d.2 (FireWire Option) and d.2 Pro
837     * Stanton FinalScratch 2 (ScratchAmp)
838     * Tascam IF-FW/DM
839     * Behringer XENIX UFX 1204/1604
840     diff --git a/sound/firewire/bebob/bebob.c b/sound/firewire/bebob/bebob.c
841     index a205b93fd9ac8..9d620a7c283f4 100644
842     --- a/sound/firewire/bebob/bebob.c
843     +++ b/sound/firewire/bebob/bebob.c
844     @@ -414,7 +414,7 @@ static const struct ieee1394_device_id bebob_id_table[] = {
845     SND_BEBOB_DEV_ENTRY(VEN_BRIDGECO, 0x00010049, &spec_normal),
846     /* Mackie, Onyx 1220/1620/1640 (Firewire I/O Card) */
847     SND_BEBOB_DEV_ENTRY(VEN_MACKIE2, 0x00010065, &spec_normal),
848     - /* Mackie, d.2 (Firewire Option) */
849     + // Mackie, d.2 (Firewire option card) and d.2 Pro (the card is built-in).
850     SND_BEBOB_DEV_ENTRY(VEN_MACKIE1, 0x00010067, &spec_normal),
851     /* Stanton, ScratchAmp */
852     SND_BEBOB_DEV_ENTRY(VEN_STANTON, 0x00000001, &spec_normal),
853     diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c
854     index a7ab34d5e7b08..44ecf2f5f65fd 100644
855     --- a/sound/firewire/oxfw/oxfw.c
856     +++ b/sound/firewire/oxfw/oxfw.c
857     @@ -405,7 +405,6 @@ static const struct ieee1394_device_id oxfw_id_table[] = {
858     * Onyx-i series (former models): 0x081216
859     * Mackie Onyx Satellite: 0x00200f
860     * Tapco LINK.firewire 4x6: 0x000460
861     - * d.2 pro: Unknown
862     * d.4 pro: Unknown
863     * U.420: Unknown
864     * U.420d: Unknown
865     diff --git a/sound/isa/sb/sb8.c b/sound/isa/sb/sb8.c
866     index e75bfc511e3e8..ad42d2364199f 100644
867     --- a/sound/isa/sb/sb8.c
868     +++ b/sound/isa/sb/sb8.c
869     @@ -111,10 +111,6 @@ static int snd_sb8_probe(struct device *pdev, unsigned int dev)
870    
871     /* block the 0x388 port to avoid PnP conflicts */
872     acard->fm_res = request_region(0x388, 4, "SoundBlaster FM");
873     - if (!acard->fm_res) {
874     - err = -EBUSY;
875     - goto _err;
876     - }
877    
878     if (port[dev] != SNDRV_AUTO_PORT) {
879     if ((err = snd_sbdsp_create(card, port[dev], irq[dev],
880     diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
881     index ea3a9bd05e687..0107bbfeb17d1 100644
882     --- a/sound/usb/line6/driver.c
883     +++ b/sound/usb/line6/driver.c
884     @@ -687,6 +687,10 @@ static int line6_init_cap_control(struct usb_line6 *line6)
885     line6->buffer_message = kmalloc(LINE6_MIDI_MESSAGE_MAXLEN, GFP_KERNEL);
886     if (!line6->buffer_message)
887     return -ENOMEM;
888     +
889     + ret = line6_init_midi(line6);
890     + if (ret < 0)
891     + return ret;
892     } else {
893     ret = line6_hwdep_init(line6);
894     if (ret < 0)
895     diff --git a/sound/usb/line6/pod.c b/sound/usb/line6/pod.c
896     index 17aa616e61f53..aaa192aee883e 100644
897     --- a/sound/usb/line6/pod.c
898     +++ b/sound/usb/line6/pod.c
899     @@ -421,11 +421,6 @@ static int pod_init(struct usb_line6 *line6,
900     if (err < 0)
901     return err;
902    
903     - /* initialize MIDI subsystem: */
904     - err = line6_init_midi(line6);
905     - if (err < 0)
906     - return err;
907     -
908     /* initialize PCM subsystem: */
909     err = line6_init_pcm(line6, &pod_pcm_properties);
910     if (err < 0)
911     diff --git a/sound/usb/line6/variax.c b/sound/usb/line6/variax.c
912     index 0c4512d0382ea..a911cff0cec86 100644
913     --- a/sound/usb/line6/variax.c
914     +++ b/sound/usb/line6/variax.c
915     @@ -217,7 +217,6 @@ static int variax_init(struct usb_line6 *line6,
916     const struct usb_device_id *id)
917     {
918     struct usb_line6_variax *variax = (struct usb_line6_variax *) line6;
919     - int err;
920    
921     line6->process_message = line6_variax_process_message;
922     line6->disconnect = line6_variax_disconnect;
923     @@ -233,11 +232,6 @@ static int variax_init(struct usb_line6 *line6,
924     if (variax->buffer_activate == NULL)
925     return -ENOMEM;
926    
927     - /* initialize MIDI subsystem: */
928     - err = line6_init_midi(&variax->line6);
929     - if (err < 0)
930     - return err;
931     -
932     /* initiate startup procedure: */
933     variax_startup1(variax);
934     return 0;
935     diff --git a/sound/usb/midi.c b/sound/usb/midi.c
936     index ea264727fdf7b..f0b41fee71304 100644
937     --- a/sound/usb/midi.c
938     +++ b/sound/usb/midi.c
939     @@ -1867,8 +1867,12 @@ static int snd_usbmidi_get_ms_info(struct snd_usb_midi *umidi,
940     ms_ep = find_usb_ms_endpoint_descriptor(hostep);
941     if (!ms_ep)
942     continue;
943     + if (ms_ep->bLength <= sizeof(*ms_ep))
944     + continue;
945     if (ms_ep->bNumEmbMIDIJack > 0x10)
946     continue;
947     + if (ms_ep->bLength < sizeof(*ms_ep) + ms_ep->bNumEmbMIDIJack)
948     + continue;
949     if (usb_endpoint_dir_out(ep)) {
950     if (endpoints[epidx].out_ep) {
951     if (++epidx >= MIDI_MAX_ENDPOINTS) {