Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.10/0180-3.10.81-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2668 - (hide annotations) (download)
Tue Jul 21 16:20:24 2015 UTC (8 years, 10 months ago) by niro
File size: 22889 byte(s)
-linux-3.10.81
1 niro 2668 diff --git a/Makefile b/Makefile
2     index 067433219984..6d19e37d36d5 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 80
9     +SUBLEVEL = 81
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c
14     index d1fea7a054be..7479d8d847a6 100644
15     --- a/arch/mips/kernel/irq.c
16     +++ b/arch/mips/kernel/irq.c
17     @@ -110,7 +110,7 @@ void __init init_IRQ(void)
18     #endif
19     }
20    
21     -#ifdef DEBUG_STACKOVERFLOW
22     +#ifdef CONFIG_DEBUG_STACKOVERFLOW
23     static inline void check_stack_overflow(void)
24     {
25     unsigned long sp;
26     diff --git a/block/genhd.c b/block/genhd.c
27     index 7694dffe9f0e..b09f5fc94dee 100644
28     --- a/block/genhd.c
29     +++ b/block/genhd.c
30     @@ -422,9 +422,9 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt)
31     /* allocate ext devt */
32     idr_preload(GFP_KERNEL);
33    
34     - spin_lock(&ext_devt_lock);
35     + spin_lock_bh(&ext_devt_lock);
36     idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT);
37     - spin_unlock(&ext_devt_lock);
38     + spin_unlock_bh(&ext_devt_lock);
39    
40     idr_preload_end();
41     if (idx < 0)
42     @@ -449,9 +449,9 @@ void blk_free_devt(dev_t devt)
43     return;
44    
45     if (MAJOR(devt) == BLOCK_EXT_MAJOR) {
46     - spin_lock(&ext_devt_lock);
47     + spin_lock_bh(&ext_devt_lock);
48     idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
49     - spin_unlock(&ext_devt_lock);
50     + spin_unlock_bh(&ext_devt_lock);
51     }
52     }
53    
54     @@ -691,13 +691,13 @@ struct gendisk *get_gendisk(dev_t devt, int *partno)
55     } else {
56     struct hd_struct *part;
57    
58     - spin_lock(&ext_devt_lock);
59     + spin_lock_bh(&ext_devt_lock);
60     part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
61     if (part && get_disk(part_to_disk(part))) {
62     *partno = part->partno;
63     disk = part_to_disk(part);
64     }
65     - spin_unlock(&ext_devt_lock);
66     + spin_unlock_bh(&ext_devt_lock);
67     }
68    
69     return disk;
70     diff --git a/drivers/ata/pata_octeon_cf.c b/drivers/ata/pata_octeon_cf.c
71     index e73bef3093d2..5507f36a06b4 100644
72     --- a/drivers/ata/pata_octeon_cf.c
73     +++ b/drivers/ata/pata_octeon_cf.c
74     @@ -1068,7 +1068,7 @@ static struct of_device_id octeon_cf_match[] = {
75     },
76     {},
77     };
78     -MODULE_DEVICE_TABLE(of, octeon_i2c_match);
79     +MODULE_DEVICE_TABLE(of, octeon_cf_match);
80    
81     static struct platform_driver octeon_cf_driver = {
82     .probe = octeon_cf_probe,
83     diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
84     index 4a21e13cc58c..d5e666fb459c 100644
85     --- a/drivers/gpu/drm/i915/intel_i2c.c
86     +++ b/drivers/gpu/drm/i915/intel_i2c.c
87     @@ -441,7 +441,7 @@ gmbus_xfer(struct i2c_adapter *adapter,
88     struct intel_gmbus,
89     adapter);
90     struct drm_i915_private *dev_priv = bus->dev_priv;
91     - int i, reg_offset;
92     + int i = 0, inc, try = 0, reg_offset;
93     int ret = 0;
94    
95     mutex_lock(&dev_priv->gmbus_mutex);
96     @@ -453,12 +453,14 @@ gmbus_xfer(struct i2c_adapter *adapter,
97    
98     reg_offset = dev_priv->gpio_mmio_base;
99    
100     +retry:
101     I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
102    
103     - for (i = 0; i < num; i++) {
104     + for (; i < num; i += inc) {
105     + inc = 1;
106     if (gmbus_is_index_read(msgs, i, num)) {
107     ret = gmbus_xfer_index_read(dev_priv, &msgs[i]);
108     - i += 1; /* set i to the index of the read xfer */
109     + inc = 2; /* an index read is two msgs */
110     } else if (msgs[i].flags & I2C_M_RD) {
111     ret = gmbus_xfer_read(dev_priv, &msgs[i], 0);
112     } else {
113     @@ -530,6 +532,18 @@ clear_err:
114     adapter->name, msgs[i].addr,
115     (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len);
116    
117     + /*
118     + * Passive adapters sometimes NAK the first probe. Retry the first
119     + * message once on -ENXIO for GMBUS transfers; the bit banging algorithm
120     + * has retries internally. See also the retry loop in
121     + * drm_do_probe_ddc_edid, which bails out on the first -ENXIO.
122     + */
123     + if (ret == -ENXIO && i == 0 && try++ == 0) {
124     + DRM_DEBUG_KMS("GMBUS [%s] NAK on first message, retry\n",
125     + adapter->name);
126     + goto retry;
127     + }
128     +
129     goto out;
130    
131     timeout:
132     diff --git a/drivers/iio/imu/adis16400.h b/drivers/iio/imu/adis16400.h
133     index 0916bf6b6c31..1e8fd2e81d45 100644
134     --- a/drivers/iio/imu/adis16400.h
135     +++ b/drivers/iio/imu/adis16400.h
136     @@ -165,6 +165,7 @@ struct adis16400_state {
137     int filt_int;
138    
139     struct adis adis;
140     + unsigned long avail_scan_mask[2];
141     };
142    
143     /* At the moment triggers are only used for ring buffer
144     diff --git a/drivers/iio/imu/adis16400_core.c b/drivers/iio/imu/adis16400_core.c
145     index 7d60c85cc16d..9721c58ed847 100644
146     --- a/drivers/iio/imu/adis16400_core.c
147     +++ b/drivers/iio/imu/adis16400_core.c
148     @@ -438,6 +438,11 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
149     *val = st->variant->temp_scale_nano / 1000000;
150     *val2 = (st->variant->temp_scale_nano % 1000000);
151     return IIO_VAL_INT_PLUS_MICRO;
152     + case IIO_PRESSURE:
153     + /* 20 uBar = 0.002kPascal */
154     + *val = 0;
155     + *val2 = 2000;
156     + return IIO_VAL_INT_PLUS_MICRO;
157     default:
158     return -EINVAL;
159     }
160     @@ -480,10 +485,10 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
161     }
162     }
163    
164     -#define ADIS16400_VOLTAGE_CHAN(addr, bits, name, si) { \
165     +#define ADIS16400_VOLTAGE_CHAN(addr, bits, name, si, chn) { \
166     .type = IIO_VOLTAGE, \
167     .indexed = 1, \
168     - .channel = 0, \
169     + .channel = chn, \
170     .extend_name = name, \
171     .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
172     BIT(IIO_CHAN_INFO_SCALE), \
173     @@ -499,10 +504,10 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
174     }
175    
176     #define ADIS16400_SUPPLY_CHAN(addr, bits) \
177     - ADIS16400_VOLTAGE_CHAN(addr, bits, "supply", ADIS16400_SCAN_SUPPLY)
178     + ADIS16400_VOLTAGE_CHAN(addr, bits, "supply", ADIS16400_SCAN_SUPPLY, 0)
179    
180     #define ADIS16400_AUX_ADC_CHAN(addr, bits) \
181     - ADIS16400_VOLTAGE_CHAN(addr, bits, NULL, ADIS16400_SCAN_ADC)
182     + ADIS16400_VOLTAGE_CHAN(addr, bits, NULL, ADIS16400_SCAN_ADC, 1)
183    
184     #define ADIS16400_GYRO_CHAN(mod, addr, bits) { \
185     .type = IIO_ANGL_VEL, \
186     @@ -819,11 +824,6 @@ static const struct iio_info adis16400_info = {
187     .debugfs_reg_access = adis_debugfs_reg_access,
188     };
189    
190     -static const unsigned long adis16400_burst_scan_mask[] = {
191     - ~0UL,
192     - 0,
193     -};
194     -
195     static const char * const adis16400_status_error_msgs[] = {
196     [ADIS16400_DIAG_STAT_ZACCL_FAIL] = "Z-axis accelerometer self-test failure",
197     [ADIS16400_DIAG_STAT_YACCL_FAIL] = "Y-axis accelerometer self-test failure",
198     @@ -871,6 +871,20 @@ static const struct adis_data adis16400_data = {
199     BIT(ADIS16400_DIAG_STAT_POWER_LOW),
200     };
201    
202     +static void adis16400_setup_chan_mask(struct adis16400_state *st)
203     +{
204     + const struct adis16400_chip_info *chip_info = st->variant;
205     + unsigned i;
206     +
207     + for (i = 0; i < chip_info->num_channels; i++) {
208     + const struct iio_chan_spec *ch = &chip_info->channels[i];
209     +
210     + if (ch->scan_index >= 0 &&
211     + ch->scan_index != ADIS16400_SCAN_TIMESTAMP)
212     + st->avail_scan_mask[0] |= BIT(ch->scan_index);
213     + }
214     +}
215     +
216     static int adis16400_probe(struct spi_device *spi)
217     {
218     struct adis16400_state *st;
219     @@ -894,8 +908,10 @@ static int adis16400_probe(struct spi_device *spi)
220     indio_dev->info = &adis16400_info;
221     indio_dev->modes = INDIO_DIRECT_MODE;
222    
223     - if (!(st->variant->flags & ADIS16400_NO_BURST))
224     - indio_dev->available_scan_masks = adis16400_burst_scan_mask;
225     + if (!(st->variant->flags & ADIS16400_NO_BURST)) {
226     + adis16400_setup_chan_mask(st);
227     + indio_dev->available_scan_masks = st->avail_scan_mask;
228     + }
229    
230     ret = adis_init(&st->adis, indio_dev, spi, &adis16400_data);
231     if (ret)
232     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
233     index dbd4f5ad3343..02099afb6c79 100644
234     --- a/drivers/input/mouse/elantech.c
235     +++ b/drivers/input/mouse/elantech.c
236     @@ -1241,10 +1241,11 @@ static bool elantech_is_signature_valid(const unsigned char *param)
237     return true;
238    
239     /*
240     - * Some models have a revision higher then 20. Meaning param[2] may
241     - * be 10 or 20, skip the rates check for these.
242     + * Some hw_version >= 4 models have a revision higher then 20. Meaning
243     + * that param[2] may be 10 or 20, skip the rates check for these.
244     */
245     - if (param[0] == 0x46 && (param[1] & 0xef) == 0x0f && param[2] < 40)
246     + if ((param[0] & 0x0f) >= 0x06 && (param[1] & 0xaf) == 0x0f &&
247     + param[2] < 40)
248     return true;
249    
250     for (i = 0; i < ARRAY_SIZE(rates); i++)
251     diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
252     index 7490b6c866e6..d2907a6e3dab 100644
253     --- a/drivers/net/phy/dp83640.c
254     +++ b/drivers/net/phy/dp83640.c
255     @@ -45,7 +45,7 @@
256     #define PSF_TX 0x1000
257     #define EXT_EVENT 1
258     #define CAL_EVENT 7
259     -#define CAL_TRIGGER 7
260     +#define CAL_TRIGGER 1
261     #define PER_TRIGGER 6
262    
263     #define MII_DP83640_MICR 0x11
264     diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
265     index 427e48a80efa..299d35552a3e 100644
266     --- a/drivers/net/phy/phy.c
267     +++ b/drivers/net/phy/phy.c
268     @@ -1022,12 +1022,14 @@ int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)
269    
270     /* According to 802.3az,the EEE is supported only in full duplex-mode.
271     * Also EEE feature is active when core is operating with MII, GMII
272     - * or RGMII.
273     + * or RGMII (all kinds). Internal PHYs are also allowed to proceed and
274     + * should return an error if they do not support EEE.
275     */
276     if ((phydev->duplex == DUPLEX_FULL) &&
277     ((phydev->interface == PHY_INTERFACE_MODE_MII) ||
278     (phydev->interface == PHY_INTERFACE_MODE_GMII) ||
279     - (phydev->interface == PHY_INTERFACE_MODE_RGMII))) {
280     + (phydev->interface >= PHY_INTERFACE_MODE_RGMII &&
281     + phydev->interface <= PHY_INTERFACE_MODE_RGMII_TXID))) {
282     int eee_lp, eee_cap, eee_adv;
283     u32 lp, cap, adv;
284     int status;
285     diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
286     index 8a9e8750703f..e0cf18c6cf11 100644
287     --- a/drivers/net/xen-netback/xenbus.c
288     +++ b/drivers/net/xen-netback/xenbus.c
289     @@ -33,6 +33,8 @@ struct backend_info {
290     enum xenbus_state frontend_state;
291     struct xenbus_watch hotplug_status_watch;
292     u8 have_hotplug_status_watch:1;
293     +
294     + const char *hotplug_script;
295     };
296    
297     static int connect_rings(struct backend_info *);
298     @@ -55,6 +57,7 @@ static int netback_remove(struct xenbus_device *dev)
299     xenvif_free(be->vif);
300     be->vif = NULL;
301     }
302     + kfree(be->hotplug_script);
303     kfree(be);
304     dev_set_drvdata(&dev->dev, NULL);
305     return 0;
306     @@ -72,6 +75,7 @@ static int netback_probe(struct xenbus_device *dev,
307     struct xenbus_transaction xbt;
308     int err;
309     int sg;
310     + const char *script;
311     struct backend_info *be = kzalloc(sizeof(struct backend_info),
312     GFP_KERNEL);
313     if (!be) {
314     @@ -132,6 +136,15 @@ static int netback_probe(struct xenbus_device *dev,
315     goto fail;
316     }
317    
318     + script = xenbus_read(XBT_NIL, dev->nodename, "script", NULL);
319     + if (IS_ERR(script)) {
320     + err = PTR_ERR(script);
321     + xenbus_dev_fatal(dev, err, "reading script");
322     + goto fail;
323     + }
324     +
325     + be->hotplug_script = script;
326     +
327     err = xenbus_switch_state(dev, XenbusStateInitWait);
328     if (err)
329     goto fail;
330     @@ -162,22 +175,14 @@ static int netback_uevent(struct xenbus_device *xdev,
331     struct kobj_uevent_env *env)
332     {
333     struct backend_info *be = dev_get_drvdata(&xdev->dev);
334     - char *val;
335    
336     - val = xenbus_read(XBT_NIL, xdev->nodename, "script", NULL);
337     - if (IS_ERR(val)) {
338     - int err = PTR_ERR(val);
339     - xenbus_dev_fatal(xdev, err, "reading script");
340     - return err;
341     - } else {
342     - if (add_uevent_var(env, "script=%s", val)) {
343     - kfree(val);
344     - return -ENOMEM;
345     - }
346     - kfree(val);
347     - }
348     + if (!be)
349     + return 0;
350     +
351     + if (add_uevent_var(env, "script=%s", be->hotplug_script))
352     + return -ENOMEM;
353    
354     - if (!be || !be->vif)
355     + if (!be->vif)
356     return 0;
357    
358     return add_uevent_var(env, "vif=%s", be->vif->dev->name);
359     diff --git a/drivers/staging/ozwpan/ozusbsvc1.c b/drivers/staging/ozwpan/ozusbsvc1.c
360     index 4e4b650fee3f..d4f55b08ef78 100644
361     --- a/drivers/staging/ozwpan/ozusbsvc1.c
362     +++ b/drivers/staging/ozwpan/ozusbsvc1.c
363     @@ -314,7 +314,11 @@ static void oz_usb_handle_ep_data(struct oz_usb_ctx *usb_ctx,
364     struct oz_multiple_fixed *body =
365     (struct oz_multiple_fixed *)data_hdr;
366     u8 *data = body->data;
367     - int n = (len - sizeof(struct oz_multiple_fixed)+1)
368     + unsigned int n;
369     + if (!body->unit_size ||
370     + len < sizeof(struct oz_multiple_fixed) - 1)
371     + break;
372     + n = (len - (sizeof(struct oz_multiple_fixed) - 1))
373     / body->unit_size;
374     while (n--) {
375     oz_hcd_data_ind(usb_ctx->hport, body->endpoint,
376     @@ -376,10 +380,15 @@ void oz_usb_rx(struct oz_pd *pd, struct oz_elt *elt)
377     case OZ_GET_DESC_RSP: {
378     struct oz_get_desc_rsp *body =
379     (struct oz_get_desc_rsp *)usb_hdr;
380     - int data_len = elt->length -
381     - sizeof(struct oz_get_desc_rsp) + 1;
382     - u16 offs = le16_to_cpu(get_unaligned(&body->offset));
383     - u16 total_size =
384     + u16 offs, total_size;
385     + u8 data_len;
386     +
387     + if (elt->length < sizeof(struct oz_get_desc_rsp) - 1)
388     + break;
389     + data_len = elt->length -
390     + (sizeof(struct oz_get_desc_rsp) - 1);
391     + offs = le16_to_cpu(get_unaligned(&body->offset));
392     + total_size =
393     le16_to_cpu(get_unaligned(&body->total_size));
394     oz_trace("USB_REQ_GET_DESCRIPTOR - cnf\n");
395     oz_hcd_get_desc_cnf(usb_ctx->hport, body->req_id,
396     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
397     index 691a82105180..ab1c5e8ac27f 100644
398     --- a/drivers/usb/serial/cp210x.c
399     +++ b/drivers/usb/serial/cp210x.c
400     @@ -128,6 +128,7 @@ static const struct usb_device_id id_table[] = {
401     { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
402     { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
403     { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
404     + { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */
405     { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
406     { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
407     { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
408     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
409     index 4d918d5f945a..b55e5f3a311d 100644
410     --- a/drivers/usb/serial/ftdi_sio.c
411     +++ b/drivers/usb/serial/ftdi_sio.c
412     @@ -715,6 +715,7 @@ static struct usb_device_id id_table_combined [] = {
413     { USB_DEVICE(XSENS_VID, XSENS_AWINDA_DONGLE_PID) },
414     { USB_DEVICE(XSENS_VID, XSENS_AWINDA_STATION_PID) },
415     { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) },
416     + { USB_DEVICE(XSENS_VID, XSENS_MTDEVBOARD_PID) },
417     { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) },
418     { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) },
419     { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
420     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
421     index e906b6aa2424..99316d7cfc03 100644
422     --- a/drivers/usb/serial/ftdi_sio_ids.h
423     +++ b/drivers/usb/serial/ftdi_sio_ids.h
424     @@ -155,6 +155,7 @@
425     #define XSENS_AWINDA_STATION_PID 0x0101
426     #define XSENS_AWINDA_DONGLE_PID 0x0102
427     #define XSENS_MTW_PID 0x0200 /* Xsens MTw */
428     +#define XSENS_MTDEVBOARD_PID 0x0300 /* Motion Tracker Development Board */
429     #define XSENS_CONVERTER_PID 0xD00D /* Xsens USB-serial converter */
430    
431     /* Xsens devices using FTDI VID */
432     diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
433     index 84ceff6abbc1..be7e31a933e5 100644
434     --- a/fs/btrfs/extent_io.c
435     +++ b/fs/btrfs/extent_io.c
436     @@ -4080,8 +4080,11 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
437     }
438     ret = fiemap_fill_next_extent(fieinfo, em_start, disko,
439     em_len, flags);
440     - if (ret)
441     + if (ret) {
442     + if (ret == 1)
443     + ret = 0;
444     goto out_free;
445     + }
446     }
447     out_free:
448     free_extent_map(em);
449     diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
450     index f0857e092a3c..68891ff7e5d4 100644
451     --- a/fs/btrfs/super.c
452     +++ b/fs/btrfs/super.c
453     @@ -779,6 +779,15 @@ find_root:
454     if (btrfs_root_refs(&new_root->root_item) == 0)
455     return ERR_PTR(-ENOENT);
456    
457     + if (!(sb->s_flags & MS_RDONLY)) {
458     + int ret;
459     + down_read(&fs_info->cleanup_work_sem);
460     + ret = btrfs_orphan_cleanup(new_root);
461     + up_read(&fs_info->cleanup_work_sem);
462     + if (ret)
463     + return ERR_PTR(ret);
464     + }
465     +
466     dir_id = btrfs_root_dirid(&new_root->root_item);
467     setup_root:
468     location.objectid = dir_id;
469     diff --git a/kernel/trace/ring_buffer_benchmark.c b/kernel/trace/ring_buffer_benchmark.c
470     index a5457d577b98..6ad2e2d320fe 100644
471     --- a/kernel/trace/ring_buffer_benchmark.c
472     +++ b/kernel/trace/ring_buffer_benchmark.c
473     @@ -455,7 +455,7 @@ static int __init ring_buffer_benchmark_init(void)
474    
475     if (producer_fifo >= 0) {
476     struct sched_param param = {
477     - .sched_priority = consumer_fifo
478     + .sched_priority = producer_fifo
479     };
480     sched_setscheduler(producer, SCHED_FIFO, &param);
481     } else
482     diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
483     index 2298237db142..d85d3a0e06ce 100644
484     --- a/mm/memory_hotplug.c
485     +++ b/mm/memory_hotplug.c
486     @@ -1803,8 +1803,10 @@ void try_offline_node(int nid)
487     * wait_table may be allocated from boot memory,
488     * here only free if it's allocated by vmalloc.
489     */
490     - if (is_vmalloc_addr(zone->wait_table))
491     + if (is_vmalloc_addr(zone->wait_table)) {
492     vfree(zone->wait_table);
493     + zone->wait_table = NULL;
494     + }
495     }
496     }
497     EXPORT_SYMBOL(try_offline_node);
498     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
499     index 81de0106528b..49b4a82d3f86 100644
500     --- a/net/bridge/br_multicast.c
501     +++ b/net/bridge/br_multicast.c
502     @@ -1007,7 +1007,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
503    
504     err = br_ip6_multicast_add_group(br, port, &grec->grec_mca,
505     vid);
506     - if (!err)
507     + if (err)
508     break;
509     }
510    
511     diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
512     index 526bf56f4d31..afeb8e07ee41 100644
513     --- a/net/caif/caif_socket.c
514     +++ b/net/caif/caif_socket.c
515     @@ -332,6 +332,10 @@ static long caif_stream_data_wait(struct sock *sk, long timeo)
516     release_sock(sk);
517     timeo = schedule_timeout(timeo);
518     lock_sock(sk);
519     +
520     + if (sock_flag(sk, SOCK_DEAD))
521     + break;
522     +
523     clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
524     }
525    
526     @@ -376,6 +380,10 @@ static int caif_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
527     struct sk_buff *skb;
528    
529     lock_sock(sk);
530     + if (sock_flag(sk, SOCK_DEAD)) {
531     + err = -ECONNRESET;
532     + goto unlock;
533     + }
534     skb = skb_dequeue(&sk->sk_receive_queue);
535     caif_check_flow_release(sk);
536    
537     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
538     index e23c5f64286b..222e1b6141d3 100644
539     --- a/net/ipv4/route.c
540     +++ b/net/ipv4/route.c
541     @@ -871,6 +871,10 @@ static int ip_error(struct sk_buff *skb)
542     bool send;
543     int code;
544    
545     + /* IP on this device is disabled. */
546     + if (!in_dev)
547     + goto out;
548     +
549     net = dev_net(rt->dst.dev);
550     if (!IN_DEV_FORWARD(in_dev)) {
551     switch (rt->dst.error) {
552     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
553     index c3075b552248..63b536bbf0b0 100644
554     --- a/net/ipv4/udp.c
555     +++ b/net/ipv4/udp.c
556     @@ -1293,10 +1293,8 @@ csum_copy_err:
557     }
558     unlock_sock_fast(sk, slow);
559    
560     - if (noblock)
561     - return -EAGAIN;
562     -
563     - /* starting over for a new packet */
564     + /* starting over for a new packet, but check if we need to yield */
565     + cond_resched();
566     msg->msg_flags &= ~MSG_TRUNC;
567     goto try_again;
568     }
569     diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
570     index 6b298dc614e3..7e3901893413 100644
571     --- a/net/ipv6/udp.c
572     +++ b/net/ipv6/udp.c
573     @@ -494,10 +494,8 @@ csum_copy_err:
574     }
575     unlock_sock_fast(sk, slow);
576    
577     - if (noblock)
578     - return -EAGAIN;
579     -
580     - /* starting over for a new packet */
581     + /* starting over for a new packet, but check if we need to yield */
582     + cond_resched();
583     msg->msg_flags &= ~MSG_TRUNC;
584     goto try_again;
585     }
586     diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
587     index 2d2f07945c85..e87b27c7bffd 100644
588     --- a/net/sched/sch_api.c
589     +++ b/net/sched/sch_api.c
590     @@ -752,10 +752,8 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent,
591     if (dev->flags & IFF_UP)
592     dev_deactivate(dev);
593    
594     - if (new && new->ops->attach) {
595     - new->ops->attach(new);
596     - num_q = 0;
597     - }
598     + if (new && new->ops->attach)
599     + goto skip;
600    
601     for (i = 0; i < num_q; i++) {
602     struct netdev_queue *dev_queue = dev_ingress_queue(dev);
603     @@ -771,12 +769,16 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent,
604     qdisc_destroy(old);
605     }
606    
607     +skip:
608     if (!ingress) {
609     notify_and_destroy(net, skb, n, classid,
610     dev->qdisc, new);
611     if (new && !new->ops->attach)
612     atomic_inc(&new->refcnt);
613     dev->qdisc = new ? : &noop_qdisc;
614     +
615     + if (new && new->ops->attach)
616     + new->ops->attach(new);
617     } else {
618     notify_and_destroy(net, skb, n, classid, old, new);
619     }
620     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
621     index 75e198d029d2..123c16419cbe 100644
622     --- a/net/unix/af_unix.c
623     +++ b/net/unix/af_unix.c
624     @@ -1898,6 +1898,10 @@ static long unix_stream_data_wait(struct sock *sk, long timeo,
625     unix_state_unlock(sk);
626     timeo = schedule_timeout(timeo);
627     unix_state_lock(sk);
628     +
629     + if (sock_flag(sk, SOCK_DEAD))
630     + break;
631     +
632     clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
633     }
634    
635     @@ -1957,6 +1961,10 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
636     struct sk_buff *skb, *last;
637    
638     unix_state_lock(sk);
639     + if (sock_flag(sk, SOCK_DEAD)) {
640     + err = -ECONNRESET;
641     + goto unlock;
642     + }
643     last = skb = skb_peek(&sk->sk_receive_queue);
644     again:
645     if (skb == NULL) {
646     diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
647     index d997d0f0c54a..18a7a7b112ef 100644
648     --- a/net/wireless/wext-compat.c
649     +++ b/net/wireless/wext-compat.c
650     @@ -1345,6 +1345,8 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
651     memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN);
652     wdev_unlock(wdev);
653    
654     + memset(&sinfo, 0, sizeof(sinfo));
655     +
656     if (rdev_get_station(rdev, dev, bssid, &sinfo))
657     return NULL;
658    
659     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
660     index 444019696f85..ca2094c914a1 100644
661     --- a/sound/pci/hda/patch_realtek.c
662     +++ b/sound/pci/hda/patch_realtek.c
663     @@ -2148,6 +2148,7 @@ static const struct hda_fixup alc882_fixups[] = {
664     static const struct snd_pci_quirk alc882_fixup_tbl[] = {
665     SND_PCI_QUIRK(0x1025, 0x006c, "Acer Aspire 9810", ALC883_FIXUP_ACER_EAPD),
666     SND_PCI_QUIRK(0x1025, 0x0090, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
667     + SND_PCI_QUIRK(0x1025, 0x0107, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
668     SND_PCI_QUIRK(0x1025, 0x010a, "Acer Ferrari 5000", ALC883_FIXUP_ACER_EAPD),
669     SND_PCI_QUIRK(0x1025, 0x0110, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
670     SND_PCI_QUIRK(0x1025, 0x0112, "Acer Aspire 9303", ALC883_FIXUP_ACER_EAPD),
671     diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
672     index 061be0e5fa5a..5ea5a18f3f58 100644
673     --- a/sound/usb/mixer.c
674     +++ b/sound/usb/mixer.c
675     @@ -891,6 +891,7 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval,
676     case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */
677     case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */
678     case USB_ID(0x046d, 0x0826): /* HD Webcam c525 */
679     + case USB_ID(0x046d, 0x08ca): /* Logitech Quickcam Fusion */
680     case USB_ID(0x046d, 0x0991):
681     /* Most audio usb devices lie about volume resolution.
682     * Most Logitech webcams have res = 384.
683     diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
684     index 4df31b0f94a3..d06fbd9f7cbe 100644
685     --- a/sound/usb/mixer_maps.c
686     +++ b/sound/usb/mixer_maps.c
687     @@ -418,6 +418,11 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
688     .map = ebox44_map,
689     },
690     {
691     + /* MAYA44 USB+ */
692     + .id = USB_ID(0x2573, 0x0008),
693     + .map = maya44_map,
694     + },
695     + {
696     /* KEF X300A */
697     .id = USB_ID(0x27ac, 0x1000),
698     .map = scms_usb3318_map,