Contents of /trunk/kernel-alx/patches-3.10/0180-3.10.81-all-fixes.patch
Parent Directory | Revision Log
Revision 2668 -
(show 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 | 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, |