Annotation of /trunk/kernel-alx/patches-3.10/0180-3.10.81-all-fixes.patch
Parent Directory | Revision Log
Revision 2668 -
(hide annotations)
(download)
Tue Jul 21 16:20:24 2015 UTC (9 years, 2 months ago) by niro
File size: 22889 byte(s)
Tue Jul 21 16:20:24 2015 UTC (9 years, 2 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, ¶m); | ||
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, |