Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0148-4.9.49-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (hide annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 8 months ago) by niro
File size: 30193 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 diff --git a/Makefile b/Makefile
2     index cfa188b427b1..1ebc553f5464 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 48
9     +SUBLEVEL = 49
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
14     index 0cea7026e4ff..d33f245af5e9 100644
15     --- a/arch/s390/include/asm/pgtable.h
16     +++ b/arch/s390/include/asm/pgtable.h
17     @@ -480,7 +480,7 @@ static inline int mm_alloc_pgste(struct mm_struct *mm)
18     * In the case that a guest uses storage keys
19     * faults should no longer be backed by zero pages
20     */
21     -#define mm_forbids_zeropage mm_use_skey
22     +#define mm_forbids_zeropage mm_has_pgste
23     static inline int mm_use_skey(struct mm_struct *mm)
24     {
25     #ifdef CONFIG_PGSTE
26     diff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c
27     index 3ba622702ce4..cb2cd04e6698 100644
28     --- a/arch/s390/mm/gmap.c
29     +++ b/arch/s390/mm/gmap.c
30     @@ -2124,6 +2124,37 @@ static inline void thp_split_mm(struct mm_struct *mm)
31     #endif
32     }
33    
34     +/*
35     + * Remove all empty zero pages from the mapping for lazy refaulting
36     + * - This must be called after mm->context.has_pgste is set, to avoid
37     + * future creation of zero pages
38     + * - This must be called after THP was enabled
39     + */
40     +static int __zap_zero_pages(pmd_t *pmd, unsigned long start,
41     + unsigned long end, struct mm_walk *walk)
42     +{
43     + unsigned long addr;
44     +
45     + for (addr = start; addr != end; addr += PAGE_SIZE) {
46     + pte_t *ptep;
47     + spinlock_t *ptl;
48     +
49     + ptep = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
50     + if (is_zero_pfn(pte_pfn(*ptep)))
51     + ptep_xchg_direct(walk->mm, addr, ptep, __pte(_PAGE_INVALID));
52     + pte_unmap_unlock(ptep, ptl);
53     + }
54     + return 0;
55     +}
56     +
57     +static inline void zap_zero_pages(struct mm_struct *mm)
58     +{
59     + struct mm_walk walk = { .pmd_entry = __zap_zero_pages };
60     +
61     + walk.mm = mm;
62     + walk_page_range(0, TASK_SIZE, &walk);
63     +}
64     +
65     /*
66     * switch on pgstes for its userspace process (for kvm)
67     */
68     @@ -2141,6 +2172,7 @@ int s390_enable_sie(void)
69     mm->context.has_pgste = 1;
70     /* split thp mappings and disable thp for future mappings */
71     thp_split_mm(mm);
72     + zap_zero_pages(mm);
73     up_write(&mm->mmap_sem);
74     return 0;
75     }
76     @@ -2153,13 +2185,6 @@ EXPORT_SYMBOL_GPL(s390_enable_sie);
77     static int __s390_enable_skey(pte_t *pte, unsigned long addr,
78     unsigned long next, struct mm_walk *walk)
79     {
80     - /*
81     - * Remove all zero page mappings,
82     - * after establishing a policy to forbid zero page mappings
83     - * following faults for that page will get fresh anonymous pages
84     - */
85     - if (is_zero_pfn(pte_pfn(*pte)))
86     - ptep_xchg_direct(walk->mm, addr, pte, __pte(_PAGE_INVALID));
87     /* Clear storage key */
88     ptep_zap_key(walk->mm, addr, pte);
89     return 0;
90     diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c
91     index 8d4d959a821c..8706533db57b 100644
92     --- a/drivers/ata/pata_amd.c
93     +++ b/drivers/ata/pata_amd.c
94     @@ -616,6 +616,7 @@ static const struct pci_device_id amd[] = {
95     { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE), 8 },
96     { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE), 8 },
97     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), 9 },
98     + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_DEV_IDE), 9 },
99    
100     { },
101     };
102     diff --git a/drivers/ata/pata_cs5536.c b/drivers/ata/pata_cs5536.c
103     index 6c15a554efbe..dc1255294628 100644
104     --- a/drivers/ata/pata_cs5536.c
105     +++ b/drivers/ata/pata_cs5536.c
106     @@ -289,6 +289,7 @@ static int cs5536_init_one(struct pci_dev *dev, const struct pci_device_id *id)
107    
108     static const struct pci_device_id cs5536[] = {
109     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), },
110     + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_DEV_IDE), },
111     { },
112     };
113    
114     diff --git a/drivers/base/bus.c b/drivers/base/bus.c
115     index 6470eb8088f4..e32a74eb28a3 100644
116     --- a/drivers/base/bus.c
117     +++ b/drivers/base/bus.c
118     @@ -736,7 +736,7 @@ int bus_add_driver(struct device_driver *drv)
119    
120     out_unregister:
121     kobject_put(&priv->kobj);
122     - kfree(drv->p);
123     + /* drv->p is freed in driver_release() */
124     drv->p = NULL;
125     out_put_bus:
126     bus_put(bus);
127     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
128     index dd220fad366c..74e677ac8e37 100644
129     --- a/drivers/bluetooth/btusb.c
130     +++ b/drivers/bluetooth/btusb.c
131     @@ -342,6 +342,7 @@ static const struct usb_device_id blacklist_table[] = {
132     { USB_DEVICE(0x13d3, 0x3410), .driver_info = BTUSB_REALTEK },
133     { USB_DEVICE(0x13d3, 0x3416), .driver_info = BTUSB_REALTEK },
134     { USB_DEVICE(0x13d3, 0x3459), .driver_info = BTUSB_REALTEK },
135     + { USB_DEVICE(0x13d3, 0x3494), .driver_info = BTUSB_REALTEK },
136    
137     /* Additional Realtek 8821AE Bluetooth devices */
138     { USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },
139     diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
140     index 161c923d6162..3e74e1a6584c 100644
141     --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
142     +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
143     @@ -315,6 +315,8 @@ struct adv7511 {
144     bool edid_read;
145    
146     wait_queue_head_t wq;
147     + struct work_struct hpd_work;
148     +
149     struct drm_bridge bridge;
150     struct drm_connector connector;
151    
152     diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
153     index 8ed3906dd411..213d892b6fa3 100644
154     --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
155     +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
156     @@ -402,6 +402,27 @@ static bool adv7511_hpd(struct adv7511 *adv7511)
157     return false;
158     }
159    
160     +static void adv7511_hpd_work(struct work_struct *work)
161     +{
162     + struct adv7511 *adv7511 = container_of(work, struct adv7511, hpd_work);
163     + enum drm_connector_status status;
164     + unsigned int val;
165     + int ret;
166     +
167     + ret = regmap_read(adv7511->regmap, ADV7511_REG_STATUS, &val);
168     + if (ret < 0)
169     + status = connector_status_disconnected;
170     + else if (val & ADV7511_STATUS_HPD)
171     + status = connector_status_connected;
172     + else
173     + status = connector_status_disconnected;
174     +
175     + if (adv7511->connector.status != status) {
176     + adv7511->connector.status = status;
177     + drm_kms_helper_hotplug_event(adv7511->connector.dev);
178     + }
179     +}
180     +
181     static int adv7511_irq_process(struct adv7511 *adv7511, bool process_hpd)
182     {
183     unsigned int irq0, irq1;
184     @@ -419,7 +440,7 @@ static int adv7511_irq_process(struct adv7511 *adv7511, bool process_hpd)
185     regmap_write(adv7511->regmap, ADV7511_REG_INT(1), irq1);
186    
187     if (process_hpd && irq0 & ADV7511_INT0_HPD && adv7511->bridge.encoder)
188     - drm_helper_hpd_irq_event(adv7511->connector.dev);
189     + schedule_work(&adv7511->hpd_work);
190    
191     if (irq0 & ADV7511_INT0_EDID_READY || irq1 & ADV7511_INT1_DDC_ERROR) {
192     adv7511->edid_read = true;
193     @@ -1006,6 +1027,8 @@ static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
194     goto err_i2c_unregister_edid;
195     }
196    
197     + INIT_WORK(&adv7511->hpd_work, adv7511_hpd_work);
198     +
199     if (i2c->irq) {
200     init_waitqueue_head(&adv7511->wq);
201    
202     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
203     index eb9b278198b2..a4cb82495cee 100644
204     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
205     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
206     @@ -192,6 +192,10 @@ nvkm_pci_new_(const struct nvkm_pci_func *func, struct nvkm_device *device,
207     }
208     }
209    
210     +#ifdef __BIG_ENDIAN
211     + pci->msi = false;
212     +#endif
213     +
214     pci->msi = nvkm_boolopt(device->cfgopt, "NvMSI", pci->msi);
215     if (pci->msi && func->msi_rearm) {
216     pci->msi = pci_enable_msi(pci->pdev) == 0;
217     diff --git a/drivers/hwtracing/intel_th/pci.c b/drivers/hwtracing/intel_th/pci.c
218     index 0bba3842336e..63b5db4e4070 100644
219     --- a/drivers/hwtracing/intel_th/pci.c
220     +++ b/drivers/hwtracing/intel_th/pci.c
221     @@ -85,6 +85,16 @@ static const struct pci_device_id intel_th_pci_id_table[] = {
222     PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa2a6),
223     .driver_data = (kernel_ulong_t)0,
224     },
225     + {
226     + /* Cannon Lake H */
227     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa326),
228     + .driver_data = (kernel_ulong_t)0,
229     + },
230     + {
231     + /* Cannon Lake LP */
232     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x9da6),
233     + .driver_data = (kernel_ulong_t)0,
234     + },
235     { 0 },
236     };
237    
238     diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
239     index cde6f130a99a..472641fc890c 100644
240     --- a/drivers/iio/adc/ti-ads1015.c
241     +++ b/drivers/iio/adc/ti-ads1015.c
242     @@ -80,18 +80,12 @@ static const unsigned int ads1115_data_rate[] = {
243     8, 16, 32, 64, 128, 250, 475, 860
244     };
245    
246     -static const struct {
247     - int scale;
248     - int uscale;
249     -} ads1015_scale[] = {
250     - {3, 0},
251     - {2, 0},
252     - {1, 0},
253     - {0, 500000},
254     - {0, 250000},
255     - {0, 125000},
256     - {0, 125000},
257     - {0, 125000},
258     +/*
259     + * Translation from PGA bits to full-scale positive and negative input voltage
260     + * range in mV
261     + */
262     +static int ads1015_fullscale_range[] = {
263     + 6144, 4096, 2048, 1024, 512, 256, 256, 256
264     };
265    
266     #define ADS1015_V_CHAN(_chan, _addr) { \
267     @@ -182,6 +176,12 @@ struct ads1015_data {
268     struct ads1015_channel_data channel_data[ADS1015_CHANNELS];
269    
270     unsigned int *data_rate;
271     + /*
272     + * Set to true when the ADC is switched to the continuous-conversion
273     + * mode and exits from a power-down state. This flag is used to avoid
274     + * getting the stale result from the conversion register.
275     + */
276     + bool conv_invalid;
277     };
278    
279     static bool ads1015_is_writeable_reg(struct device *dev, unsigned int reg)
280     @@ -234,33 +234,43 @@ static int ads1015_set_power_state(struct ads1015_data *data, bool on)
281     ret = pm_runtime_put_autosuspend(dev);
282     }
283    
284     - return ret;
285     + return ret < 0 ? ret : 0;
286     }
287    
288     static
289     int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
290     {
291     int ret, pga, dr, conv_time;
292     - bool change;
293     + unsigned int old, mask, cfg;
294    
295     if (chan < 0 || chan >= ADS1015_CHANNELS)
296     return -EINVAL;
297    
298     + ret = regmap_read(data->regmap, ADS1015_CFG_REG, &old);
299     + if (ret)
300     + return ret;
301     +
302     pga = data->channel_data[chan].pga;
303     dr = data->channel_data[chan].data_rate;
304     + mask = ADS1015_CFG_MUX_MASK | ADS1015_CFG_PGA_MASK |
305     + ADS1015_CFG_DR_MASK;
306     + cfg = chan << ADS1015_CFG_MUX_SHIFT | pga << ADS1015_CFG_PGA_SHIFT |
307     + dr << ADS1015_CFG_DR_SHIFT;
308    
309     - ret = regmap_update_bits_check(data->regmap, ADS1015_CFG_REG,
310     - ADS1015_CFG_MUX_MASK |
311     - ADS1015_CFG_PGA_MASK,
312     - chan << ADS1015_CFG_MUX_SHIFT |
313     - pga << ADS1015_CFG_PGA_SHIFT,
314     - &change);
315     - if (ret < 0)
316     + cfg = (old & ~mask) | (cfg & mask);
317     +
318     + ret = regmap_write(data->regmap, ADS1015_CFG_REG, cfg);
319     + if (ret)
320     return ret;
321    
322     - if (change) {
323     - conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
324     + if (old != cfg || data->conv_invalid) {
325     + int dr_old = (old & ADS1015_CFG_DR_MASK) >>
326     + ADS1015_CFG_DR_SHIFT;
327     +
328     + conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr_old]);
329     + conv_time += DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
330     usleep_range(conv_time, conv_time + 1);
331     + data->conv_invalid = false;
332     }
333    
334     return regmap_read(data->regmap, ADS1015_CONV_REG, val);
335     @@ -297,17 +307,20 @@ static irqreturn_t ads1015_trigger_handler(int irq, void *p)
336     return IRQ_HANDLED;
337     }
338    
339     -static int ads1015_set_scale(struct ads1015_data *data, int chan,
340     +static int ads1015_set_scale(struct ads1015_data *data,
341     + struct iio_chan_spec const *chan,
342     int scale, int uscale)
343     {
344     int i, ret, rindex = -1;
345     + int fullscale = div_s64((scale * 1000000LL + uscale) <<
346     + (chan->scan_type.realbits - 1), 1000000);
347    
348     - for (i = 0; i < ARRAY_SIZE(ads1015_scale); i++)
349     - if (ads1015_scale[i].scale == scale &&
350     - ads1015_scale[i].uscale == uscale) {
351     + for (i = 0; i < ARRAY_SIZE(ads1015_fullscale_range); i++) {
352     + if (ads1015_fullscale_range[i] == fullscale) {
353     rindex = i;
354     break;
355     }
356     + }
357     if (rindex < 0)
358     return -EINVAL;
359    
360     @@ -317,32 +330,23 @@ static int ads1015_set_scale(struct ads1015_data *data, int chan,
361     if (ret < 0)
362     return ret;
363    
364     - data->channel_data[chan].pga = rindex;
365     + data->channel_data[chan->address].pga = rindex;
366    
367     return 0;
368     }
369    
370     static int ads1015_set_data_rate(struct ads1015_data *data, int chan, int rate)
371     {
372     - int i, ret, rindex = -1;
373     + int i;
374    
375     - for (i = 0; i < ARRAY_SIZE(ads1015_data_rate); i++)
376     + for (i = 0; i < ARRAY_SIZE(ads1015_data_rate); i++) {
377     if (data->data_rate[i] == rate) {
378     - rindex = i;
379     - break;
380     + data->channel_data[chan].data_rate = i;
381     + return 0;
382     }
383     - if (rindex < 0)
384     - return -EINVAL;
385     -
386     - ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
387     - ADS1015_CFG_DR_MASK,
388     - rindex << ADS1015_CFG_DR_SHIFT);
389     - if (ret < 0)
390     - return ret;
391     -
392     - data->channel_data[chan].data_rate = rindex;
393     + }
394    
395     - return 0;
396     + return -EINVAL;
397     }
398    
399     static int ads1015_read_raw(struct iio_dev *indio_dev,
400     @@ -384,9 +388,9 @@ static int ads1015_read_raw(struct iio_dev *indio_dev,
401     }
402     case IIO_CHAN_INFO_SCALE:
403     idx = data->channel_data[chan->address].pga;
404     - *val = ads1015_scale[idx].scale;
405     - *val2 = ads1015_scale[idx].uscale;
406     - ret = IIO_VAL_INT_PLUS_MICRO;
407     + *val = ads1015_fullscale_range[idx];
408     + *val2 = chan->scan_type.realbits - 1;
409     + ret = IIO_VAL_FRACTIONAL_LOG2;
410     break;
411     case IIO_CHAN_INFO_SAMP_FREQ:
412     idx = data->channel_data[chan->address].data_rate;
413     @@ -413,7 +417,7 @@ static int ads1015_write_raw(struct iio_dev *indio_dev,
414     mutex_lock(&data->lock);
415     switch (mask) {
416     case IIO_CHAN_INFO_SCALE:
417     - ret = ads1015_set_scale(data, chan->address, val, val2);
418     + ret = ads1015_set_scale(data, chan, val, val2);
419     break;
420     case IIO_CHAN_INFO_SAMP_FREQ:
421     ret = ads1015_set_data_rate(data, chan->address, val);
422     @@ -445,7 +449,10 @@ static const struct iio_buffer_setup_ops ads1015_buffer_setup_ops = {
423     .validate_scan_mask = &iio_validate_scan_mask_onehot,
424     };
425    
426     -static IIO_CONST_ATTR(scale_available, "3 2 1 0.5 0.25 0.125");
427     +static IIO_CONST_ATTR_NAMED(ads1015_scale_available, scale_available,
428     + "3 2 1 0.5 0.25 0.125");
429     +static IIO_CONST_ATTR_NAMED(ads1115_scale_available, scale_available,
430     + "0.1875 0.125 0.0625 0.03125 0.015625 0.007813");
431    
432     static IIO_CONST_ATTR_NAMED(ads1015_sampling_frequency_available,
433     sampling_frequency_available, "128 250 490 920 1600 2400 3300");
434     @@ -453,7 +460,7 @@ static IIO_CONST_ATTR_NAMED(ads1115_sampling_frequency_available,
435     sampling_frequency_available, "8 16 32 64 128 250 475 860");
436    
437     static struct attribute *ads1015_attributes[] = {
438     - &iio_const_attr_scale_available.dev_attr.attr,
439     + &iio_const_attr_ads1015_scale_available.dev_attr.attr,
440     &iio_const_attr_ads1015_sampling_frequency_available.dev_attr.attr,
441     NULL,
442     };
443     @@ -463,7 +470,7 @@ static const struct attribute_group ads1015_attribute_group = {
444     };
445    
446     static struct attribute *ads1115_attributes[] = {
447     - &iio_const_attr_scale_available.dev_attr.attr,
448     + &iio_const_attr_ads1115_scale_available.dev_attr.attr,
449     &iio_const_attr_ads1115_sampling_frequency_available.dev_attr.attr,
450     NULL,
451     };
452     @@ -624,6 +631,15 @@ static int ads1015_probe(struct i2c_client *client,
453     dev_err(&client->dev, "iio triggered buffer setup failed\n");
454     return ret;
455     }
456     +
457     + ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
458     + ADS1015_CFG_MOD_MASK,
459     + ADS1015_CONTINUOUS << ADS1015_CFG_MOD_SHIFT);
460     + if (ret)
461     + return ret;
462     +
463     + data->conv_invalid = true;
464     +
465     ret = pm_runtime_set_active(&client->dev);
466     if (ret)
467     goto err_buffer_cleanup;
468     @@ -679,10 +695,15 @@ static int ads1015_runtime_resume(struct device *dev)
469     {
470     struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
471     struct ads1015_data *data = iio_priv(indio_dev);
472     + int ret;
473    
474     - return regmap_update_bits(data->regmap, ADS1015_CFG_REG,
475     + ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
476     ADS1015_CFG_MOD_MASK,
477     ADS1015_CONTINUOUS << ADS1015_CFG_MOD_SHIFT);
478     + if (!ret)
479     + data->conv_invalid = true;
480     +
481     + return ret;
482     }
483     #endif
484    
485     diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpoint.c
486     index ce6ff9b301bb..7e2dc5e56632 100644
487     --- a/drivers/input/mouse/trackpoint.c
488     +++ b/drivers/input/mouse/trackpoint.c
489     @@ -381,8 +381,8 @@ int trackpoint_detect(struct psmouse *psmouse, bool set_properties)
490     return 0;
491    
492     if (trackpoint_read(&psmouse->ps2dev, TP_EXT_BTN, &button_info)) {
493     - psmouse_warn(psmouse, "failed to get extended button data\n");
494     - button_info = 0;
495     + psmouse_warn(psmouse, "failed to get extended button data, assuming 3 buttons\n");
496     + button_info = 0x33;
497     }
498    
499     psmouse->private = kzalloc(sizeof(struct trackpoint_data), GFP_KERNEL);
500     diff --git a/drivers/mcb/mcb-lpc.c b/drivers/mcb/mcb-lpc.c
501     index d072c088ce73..945091a88354 100644
502     --- a/drivers/mcb/mcb-lpc.c
503     +++ b/drivers/mcb/mcb-lpc.c
504     @@ -114,6 +114,12 @@ static struct resource sc24_fpga_resource = {
505     .flags = IORESOURCE_MEM,
506     };
507    
508     +static struct resource sc31_fpga_resource = {
509     + .start = 0xf000e000,
510     + .end = 0xf000e000 + CHAM_HEADER_SIZE,
511     + .flags = IORESOURCE_MEM,
512     +};
513     +
514     static struct platform_driver mcb_lpc_driver = {
515     .driver = {
516     .name = "mcb-lpc",
517     @@ -132,6 +138,15 @@ static const struct dmi_system_id mcb_lpc_dmi_table[] = {
518     .driver_data = (void *)&sc24_fpga_resource,
519     .callback = mcb_lpc_create_platform_device,
520     },
521     + {
522     + .ident = "SC31",
523     + .matches = {
524     + DMI_MATCH(DMI_SYS_VENDOR, "MEN"),
525     + DMI_MATCH(DMI_PRODUCT_VERSION, "14SC31"),
526     + },
527     + .driver_data = (void *)&sc31_fpga_resource,
528     + .callback = mcb_lpc_create_platform_device,
529     + },
530     {}
531     };
532     MODULE_DEVICE_TABLE(dmi, mcb_lpc_dmi_table);
533     diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
534     index 972b5e224d5d..366d3dcb8e9d 100644
535     --- a/drivers/net/wireless/ath/ath10k/core.c
536     +++ b/drivers/net/wireless/ath/ath10k/core.c
537     @@ -1852,6 +1852,12 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
538     goto err_wmi_detach;
539     }
540    
541     + /* If firmware indicates Full Rx Reorder support it must be used in a
542     + * slightly different manner. Let HTT code know.
543     + */
544     + ar->htt.rx_ring.in_ord_rx = !!(test_bit(WMI_SERVICE_RX_FULL_REORDER,
545     + ar->wmi.svc_map));
546     +
547     status = ath10k_htt_rx_alloc(&ar->htt);
548     if (status) {
549     ath10k_err(ar, "failed to alloc htt rx: %d\n", status);
550     @@ -1964,12 +1970,6 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
551     }
552     }
553    
554     - /* If firmware indicates Full Rx Reorder support it must be used in a
555     - * slightly different manner. Let HTT code know.
556     - */
557     - ar->htt.rx_ring.in_ord_rx = !!(test_bit(WMI_SERVICE_RX_FULL_REORDER,
558     - ar->wmi.svc_map));
559     -
560     status = ath10k_htt_rx_ring_refill(ar);
561     if (status) {
562     ath10k_err(ar, "failed to refill htt rx ring: %d\n", status);
563     diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
564     index 2f8134b2a504..177fd5be2811 100644
565     --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
566     +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
567     @@ -429,6 +429,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
568     {IWL_PCI_DEVICE(0x095B, 0x520A, iwl7265_2ac_cfg)},
569     {IWL_PCI_DEVICE(0x095A, 0x9000, iwl7265_2ac_cfg)},
570     {IWL_PCI_DEVICE(0x095A, 0x9400, iwl7265_2ac_cfg)},
571     + {IWL_PCI_DEVICE(0x095A, 0x9E10, iwl7265_2ac_cfg)},
572    
573     /* 8000 Series */
574     {IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8260_2ac_cfg)},
575     diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
576     index afdbbf59a278..8677a53ef725 100644
577     --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
578     +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
579     @@ -4188,7 +4188,7 @@ int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter)
580     if (adapter->config_bands & BAND_A)
581     n_channels_a = mwifiex_band_5ghz.n_channels;
582    
583     - adapter->num_in_chan_stats = max_t(u32, n_channels_bg, n_channels_a);
584     + adapter->num_in_chan_stats = n_channels_bg + n_channels_a;
585     adapter->chan_stats = vmalloc(sizeof(*adapter->chan_stats) *
586     adapter->num_in_chan_stats);
587    
588     diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c
589     index 97c9765b5bc6..78d59a67f7e1 100644
590     --- a/drivers/net/wireless/marvell/mwifiex/scan.c
591     +++ b/drivers/net/wireless/marvell/mwifiex/scan.c
592     @@ -2479,6 +2479,12 @@ mwifiex_update_chan_statistics(struct mwifiex_private *priv,
593     sizeof(struct mwifiex_chan_stats);
594    
595     for (i = 0 ; i < num_chan; i++) {
596     + if (adapter->survey_idx >= adapter->num_in_chan_stats) {
597     + mwifiex_dbg(adapter, WARN,
598     + "FW reported too many channel results (max %d)\n",
599     + adapter->num_in_chan_stats);
600     + return;
601     + }
602     chan_stats.chan_num = fw_chan_stats->chan_num;
603     chan_stats.bandcfg = fw_chan_stats->bandcfg;
604     chan_stats.flags = fw_chan_stats->flags;
605     diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c
606     index 5be4fc96002d..75ffeaa54ed8 100644
607     --- a/drivers/net/wireless/realtek/rtlwifi/pci.c
608     +++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
609     @@ -2269,7 +2269,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
610     /* find adapter */
611     if (!_rtl_pci_find_adapter(pdev, hw)) {
612     err = -ENODEV;
613     - goto fail3;
614     + goto fail2;
615     }
616    
617     /* Init IO handler */
618     @@ -2339,10 +2339,10 @@ int rtl_pci_probe(struct pci_dev *pdev,
619     pci_set_drvdata(pdev, NULL);
620     rtl_deinit_core(hw);
621    
622     +fail2:
623     if (rtlpriv->io.pci_mem_start != 0)
624     pci_iounmap(pdev, (void __iomem *)rtlpriv->io.pci_mem_start);
625    
626     -fail2:
627     pci_release_regions(pdev);
628     complete(&rtlpriv->firmware_loading_complete);
629    
630     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
631     index fed37aabf828..9236a13d5d2a 100644
632     --- a/drivers/scsi/sg.c
633     +++ b/drivers/scsi/sg.c
634     @@ -1244,6 +1244,7 @@ sg_mmap(struct file *filp, struct vm_area_struct *vma)
635     unsigned long req_sz, len, sa;
636     Sg_scatter_hold *rsv_schp;
637     int k, length;
638     + int ret = 0;
639    
640     if ((!filp) || (!vma) || (!(sfp = (Sg_fd *) filp->private_data)))
641     return -ENXIO;
642     @@ -1254,8 +1255,11 @@ sg_mmap(struct file *filp, struct vm_area_struct *vma)
643     if (vma->vm_pgoff)
644     return -EINVAL; /* want no offset */
645     rsv_schp = &sfp->reserve;
646     - if (req_sz > rsv_schp->bufflen)
647     - return -ENOMEM; /* cannot map more than reserved buffer */
648     + mutex_lock(&sfp->f_mutex);
649     + if (req_sz > rsv_schp->bufflen) {
650     + ret = -ENOMEM; /* cannot map more than reserved buffer */
651     + goto out;
652     + }
653    
654     sa = vma->vm_start;
655     length = 1 << (PAGE_SHIFT + rsv_schp->page_order);
656     @@ -1269,7 +1273,9 @@ sg_mmap(struct file *filp, struct vm_area_struct *vma)
657     vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
658     vma->vm_private_data = sfp;
659     vma->vm_ops = &sg_mmap_vm_ops;
660     - return 0;
661     +out:
662     + mutex_unlock(&sfp->f_mutex);
663     + return ret;
664     }
665    
666     static void
667     @@ -1741,9 +1747,12 @@ sg_start_req(Sg_request *srp, unsigned char *cmd)
668     !sfp->res_in_use) {
669     sfp->res_in_use = 1;
670     sg_link_reserve(sfp, srp, dxfer_len);
671     - } else if ((hp->flags & SG_FLAG_MMAP_IO) && sfp->res_in_use) {
672     + } else if (hp->flags & SG_FLAG_MMAP_IO) {
673     + res = -EBUSY; /* sfp->res_in_use == 1 */
674     + if (dxfer_len > rsv_schp->bufflen)
675     + res = -ENOMEM;
676     mutex_unlock(&sfp->f_mutex);
677     - return -EBUSY;
678     + return res;
679     } else {
680     res = sg_build_indirect(req_schp, sfp, dxfer_len);
681     if (res) {
682     diff --git a/drivers/staging/rts5208/rtsx_scsi.c b/drivers/staging/rts5208/rtsx_scsi.c
683     index becb4bba166c..b3790334fd3f 100644
684     --- a/drivers/staging/rts5208/rtsx_scsi.c
685     +++ b/drivers/staging/rts5208/rtsx_scsi.c
686     @@ -414,7 +414,7 @@ void set_sense_data(struct rtsx_chip *chip, unsigned int lun, u8 err_code,
687     sense->ascq = ascq;
688     if (sns_key_info0 != 0) {
689     sense->sns_key_info[0] = SKSV | sns_key_info0;
690     - sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 8;
691     + sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 4;
692     sense->sns_key_info[2] = sns_key_info1 & 0x0f;
693     }
694     }
695     diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
696     index 840930b014f6..c8075eb3db26 100644
697     --- a/drivers/usb/core/devio.c
698     +++ b/drivers/usb/core/devio.c
699     @@ -629,6 +629,8 @@ static void async_completed(struct urb *urb)
700     if (as->status < 0 && as->bulk_addr && as->status != -ECONNRESET &&
701     as->status != -ENOENT)
702     cancel_bulk_urbs(ps, as->bulk_addr);
703     +
704     + wake_up(&ps->wait);
705     spin_unlock(&ps->lock);
706    
707     if (signr) {
708     @@ -636,8 +638,6 @@ static void async_completed(struct urb *urb)
709     put_pid(pid);
710     put_cred(cred);
711     }
712     -
713     - wake_up(&ps->wait);
714     }
715    
716     static void destroy_async(struct usb_dev_state *ps, struct list_head *list)
717     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
718     index 574da2b4529c..82806e311202 100644
719     --- a/drivers/usb/core/quirks.c
720     +++ b/drivers/usb/core/quirks.c
721     @@ -57,8 +57,9 @@ static const struct usb_device_id usb_quirk_list[] = {
722     /* Microsoft LifeCam-VX700 v2.0 */
723     { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME },
724    
725     - /* Logitech HD Pro Webcams C920 and C930e */
726     + /* Logitech HD Pro Webcams C920, C920-C and C930e */
727     { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
728     + { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
729     { USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT },
730    
731     /* Logitech ConferenceCam CC3000e */
732     @@ -217,6 +218,9 @@ static const struct usb_device_id usb_quirk_list[] = {
733     { USB_DEVICE(0x1a0a, 0x0200), .driver_info =
734     USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
735    
736     + /* Corsair Strafe RGB */
737     + { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT },
738     +
739     /* Acer C120 LED Projector */
740     { USB_DEVICE(0x1de1, 0xc102), .driver_info = USB_QUIRK_NO_LPM },
741    
742     diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
743     index 5f4ca7890435..58b9685eb21f 100644
744     --- a/drivers/usb/host/pci-quirks.c
745     +++ b/drivers/usb/host/pci-quirks.c
746     @@ -142,29 +142,30 @@ static int amd_chipset_sb_type_init(struct amd_chipset_info *pinfo)
747     pinfo->sb_type.gen = AMD_CHIPSET_SB700;
748     else if (rev >= 0x40 && rev <= 0x4f)
749     pinfo->sb_type.gen = AMD_CHIPSET_SB800;
750     - }
751     - pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
752     - 0x145c, NULL);
753     - if (pinfo->smbus_dev) {
754     - pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
755     } else {
756     pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
757     PCI_DEVICE_ID_AMD_HUDSON2_SMBUS, NULL);
758    
759     - if (!pinfo->smbus_dev) {
760     - pinfo->sb_type.gen = NOT_AMD_CHIPSET;
761     - return 0;
762     + if (pinfo->smbus_dev) {
763     + rev = pinfo->smbus_dev->revision;
764     + if (rev >= 0x11 && rev <= 0x14)
765     + pinfo->sb_type.gen = AMD_CHIPSET_HUDSON2;
766     + else if (rev >= 0x15 && rev <= 0x18)
767     + pinfo->sb_type.gen = AMD_CHIPSET_BOLTON;
768     + else if (rev >= 0x39 && rev <= 0x3a)
769     + pinfo->sb_type.gen = AMD_CHIPSET_YANGTZE;
770     + } else {
771     + pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
772     + 0x145c, NULL);
773     + if (pinfo->smbus_dev) {
774     + rev = pinfo->smbus_dev->revision;
775     + pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
776     + } else {
777     + pinfo->sb_type.gen = NOT_AMD_CHIPSET;
778     + return 0;
779     + }
780     }
781     -
782     - rev = pinfo->smbus_dev->revision;
783     - if (rev >= 0x11 && rev <= 0x14)
784     - pinfo->sb_type.gen = AMD_CHIPSET_HUDSON2;
785     - else if (rev >= 0x15 && rev <= 0x18)
786     - pinfo->sb_type.gen = AMD_CHIPSET_BOLTON;
787     - else if (rev >= 0x39 && rev <= 0x3a)
788     - pinfo->sb_type.gen = AMD_CHIPSET_YANGTZE;
789     }
790     -
791     pinfo->sb_type.rev = rev;
792     return 1;
793     }
794     diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
795     index 261ed2ca28f9..a6b6b1cf1317 100644
796     --- a/drivers/usb/musb/musb_core.c
797     +++ b/drivers/usb/musb/musb_core.c
798     @@ -2655,6 +2655,13 @@ static int musb_suspend(struct device *dev)
799     {
800     struct musb *musb = dev_to_musb(dev);
801     unsigned long flags;
802     + int ret;
803     +
804     + ret = pm_runtime_get_sync(dev);
805     + if (ret < 0) {
806     + pm_runtime_put_noidle(dev);
807     + return ret;
808     + }
809    
810     musb_platform_disable(musb);
811     musb_generic_disable(musb);
812     @@ -2703,14 +2710,6 @@ static int musb_resume(struct device *dev)
813     if ((devctl & mask) != (musb->context.devctl & mask))
814     musb->port1_status = 0;
815    
816     - /*
817     - * The USB HUB code expects the device to be in RPM_ACTIVE once it came
818     - * out of suspend
819     - */
820     - pm_runtime_disable(dev);
821     - pm_runtime_set_active(dev);
822     - pm_runtime_enable(dev);
823     -
824     musb_start(musb);
825    
826     spin_lock_irqsave(&musb->lock, flags);
827     @@ -2720,6 +2719,9 @@ static int musb_resume(struct device *dev)
828     error);
829     spin_unlock_irqrestore(&musb->lock, flags);
830    
831     + pm_runtime_mark_last_busy(dev);
832     + pm_runtime_put_autosuspend(dev);
833     +
834     return 0;
835     }
836    
837     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
838     index fe123153b1a5..2a9944326210 100644
839     --- a/drivers/usb/serial/option.c
840     +++ b/drivers/usb/serial/option.c
841     @@ -2023,6 +2023,7 @@ static const struct usb_device_id option_ids[] = {
842     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) },
843     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
844     { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d04, 0xff) }, /* D-Link DWM-158 */
845     + { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d0e, 0xff) }, /* D-Link DWM-157 C1 */
846     { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e19, 0xff), /* D-Link DWM-221 B1 */
847     .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
848     { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e35, 0xff), /* D-Link DWM-222 */
849     diff --git a/fs/dlm/user.c b/fs/dlm/user.c
850     index 58c2f4a21b7f..9ac65914ab5b 100644
851     --- a/fs/dlm/user.c
852     +++ b/fs/dlm/user.c
853     @@ -355,6 +355,10 @@ static int dlm_device_register(struct dlm_ls *ls, char *name)
854     error = misc_register(&ls->ls_device);
855     if (error) {
856     kfree(ls->ls_device.name);
857     + /* this has to be set to NULL
858     + * to avoid a double-free in dlm_device_deregister
859     + */
860     + ls->ls_device.name = NULL;
861     }
862     fail:
863     return error;
864     diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
865     index 3e5dbbe75f70..43082049baf2 100644
866     --- a/include/linux/pci_ids.h
867     +++ b/include/linux/pci_ids.h
868     @@ -574,6 +574,7 @@
869     #define PCI_DEVICE_ID_AMD_CS5536_EHC 0x2095
870     #define PCI_DEVICE_ID_AMD_CS5536_UDC 0x2096
871     #define PCI_DEVICE_ID_AMD_CS5536_UOC 0x2097
872     +#define PCI_DEVICE_ID_AMD_CS5536_DEV_IDE 0x2092
873     #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A
874     #define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081
875     #define PCI_DEVICE_ID_AMD_LX_AES 0x2082
876     diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
877     index 733a21ef8da4..1061add575d2 100644
878     --- a/include/linux/workqueue.h
879     +++ b/include/linux/workqueue.h
880     @@ -311,8 +311,8 @@ enum {
881    
882     __WQ_DRAINING = 1 << 16, /* internal: workqueue is draining */
883     __WQ_ORDERED = 1 << 17, /* internal: workqueue is ordered */
884     - __WQ_ORDERED_EXPLICIT = 1 << 18, /* internal: alloc_ordered_workqueue() */
885     __WQ_LEGACY = 1 << 18, /* internal: create*_workqueue() */
886     + __WQ_ORDERED_EXPLICIT = 1 << 19, /* internal: alloc_ordered_workqueue() */
887    
888     WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */
889     WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */