Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2668 - (show annotations) (download)
Tue Jul 21 16:20:24 2015 UTC (8 years, 9 months ago) by niro
File size: 22889 byte(s)
-linux-3.10.81
1 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,