Magellan Linux

Contents of /trunk/kernel-alx/patches-4.4/0132-4.4.33-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2868 - (show annotations) (download)
Mon Mar 27 13:49:11 2017 UTC (7 years, 1 month ago) by niro
File size: 41563 byte(s)
linux-4.4.33
1 diff --git a/Makefile b/Makefile
2 index fba9b09a1330..a513c045c8de 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 4
8 -SUBLEVEL = 32
9 +SUBLEVEL = 33
10 EXTRAVERSION =
11 NAME = Blurry Fish Butt
12
13 diff --git a/arch/arc/kernel/time.c b/arch/arc/kernel/time.c
14 index dfad287f1db1..dbedc576e4ca 100644
15 --- a/arch/arc/kernel/time.c
16 +++ b/arch/arc/kernel/time.c
17 @@ -130,14 +130,17 @@ static cycle_t arc_counter_read(struct clocksource *cs)
18 cycle_t full;
19 } stamp;
20
21 -
22 - __asm__ __volatile(
23 - "1: \n"
24 - " lr %0, [AUX_RTC_LOW] \n"
25 - " lr %1, [AUX_RTC_HIGH] \n"
26 - " lr %2, [AUX_RTC_CTRL] \n"
27 - " bbit0.nt %2, 31, 1b \n"
28 - : "=r" (stamp.low), "=r" (stamp.high), "=r" (status));
29 + /*
30 + * hardware has an internal state machine which tracks readout of
31 + * low/high and updates the CTRL.status if
32 + * - interrupt/exception taken between the two reads
33 + * - high increments after low has been read
34 + */
35 + do {
36 + stamp.low = read_aux_reg(AUX_RTC_LOW);
37 + stamp.high = read_aux_reg(AUX_RTC_HIGH);
38 + status = read_aux_reg(AUX_RTC_CTRL);
39 + } while (!(status & _BITUL(31)));
40
41 return stamp.full;
42 }
43 diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h
44 index dd7cee795709..c8c04a1f1c9f 100644
45 --- a/arch/mips/include/asm/kvm_host.h
46 +++ b/arch/mips/include/asm/kvm_host.h
47 @@ -400,7 +400,10 @@ struct kvm_vcpu_arch {
48 /* Host KSEG0 address of the EI/DI offset */
49 void *kseg0_commpage;
50
51 - u32 io_gpr; /* GPR used as IO source/target */
52 + /* Resume PC after MMIO completion */
53 + unsigned long io_pc;
54 + /* GPR used as IO source/target */
55 + u32 io_gpr;
56
57 struct hrtimer comparecount_timer;
58 /* Count timer control KVM register */
59 @@ -422,8 +425,6 @@ struct kvm_vcpu_arch {
60 /* Bitmask of pending exceptions to be cleared */
61 unsigned long pending_exceptions_clr;
62
63 - unsigned long pending_load_cause;
64 -
65 /* Save/Restore the entryhi register when are are preempted/scheduled back in */
66 unsigned long preempt_entryhi;
67
68 diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c
69 index 4298aeb1e20f..4c85ab808f99 100644
70 --- a/arch/mips/kvm/emulate.c
71 +++ b/arch/mips/kvm/emulate.c
72 @@ -1473,6 +1473,7 @@ enum emulation_result kvm_mips_emulate_load(uint32_t inst, uint32_t cause,
73 struct kvm_vcpu *vcpu)
74 {
75 enum emulation_result er = EMULATE_DO_MMIO;
76 + unsigned long curr_pc;
77 int32_t op, base, rt, offset;
78 uint32_t bytes;
79
80 @@ -1481,7 +1482,18 @@ enum emulation_result kvm_mips_emulate_load(uint32_t inst, uint32_t cause,
81 offset = inst & 0xffff;
82 op = (inst >> 26) & 0x3f;
83
84 - vcpu->arch.pending_load_cause = cause;
85 + /*
86 + * Find the resume PC now while we have safe and easy access to the
87 + * prior branch instruction, and save it for
88 + * kvm_mips_complete_mmio_load() to restore later.
89 + */
90 + curr_pc = vcpu->arch.pc;
91 + er = update_pc(vcpu, cause);
92 + if (er == EMULATE_FAIL)
93 + return er;
94 + vcpu->arch.io_pc = vcpu->arch.pc;
95 + vcpu->arch.pc = curr_pc;
96 +
97 vcpu->arch.io_gpr = rt;
98
99 switch (op) {
100 @@ -2461,9 +2473,8 @@ enum emulation_result kvm_mips_complete_mmio_load(struct kvm_vcpu *vcpu,
101 goto done;
102 }
103
104 - er = update_pc(vcpu, vcpu->arch.pending_load_cause);
105 - if (er == EMULATE_FAIL)
106 - return er;
107 + /* Restore saved resume PC */
108 + vcpu->arch.pc = vcpu->arch.io_pc;
109
110 switch (run->mmio.len) {
111 case 4:
112 @@ -2485,11 +2496,6 @@ enum emulation_result kvm_mips_complete_mmio_load(struct kvm_vcpu *vcpu,
113 break;
114 }
115
116 - if (vcpu->arch.pending_load_cause & CAUSEF_BD)
117 - kvm_debug("[%#lx] Completing %d byte BD Load to gpr %d (0x%08lx) type %d\n",
118 - vcpu->arch.pc, run->mmio.len, vcpu->arch.io_gpr, *gpr,
119 - vcpu->mmio_needed);
120 -
121 done:
122 return er;
123 }
124 diff --git a/arch/s390/hypfs/hypfs_diag.c b/arch/s390/hypfs/hypfs_diag.c
125 index 045035796ca7..b63b9a42af70 100644
126 --- a/arch/s390/hypfs/hypfs_diag.c
127 +++ b/arch/s390/hypfs/hypfs_diag.c
128 @@ -525,11 +525,11 @@ static int diag224(void *ptr)
129 static int diag224_get_name_table(void)
130 {
131 /* memory must be below 2GB */
132 - diag224_cpu_names = kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
133 + diag224_cpu_names = (char *) __get_free_page(GFP_KERNEL | GFP_DMA);
134 if (!diag224_cpu_names)
135 return -ENOMEM;
136 if (diag224(diag224_cpu_names)) {
137 - kfree(diag224_cpu_names);
138 + free_page((unsigned long) diag224_cpu_names);
139 return -EOPNOTSUPP;
140 }
141 EBCASC(diag224_cpu_names + 16, (*diag224_cpu_names + 1) * 16);
142 @@ -538,7 +538,7 @@ static int diag224_get_name_table(void)
143
144 static void diag224_delete_name_table(void)
145 {
146 - kfree(diag224_cpu_names);
147 + free_page((unsigned long) diag224_cpu_names);
148 }
149
150 static int diag224_idx2name(int index, char *name)
151 diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
152 index 3dd9c462d22a..8f8da9f92090 100644
153 --- a/drivers/acpi/apei/ghes.c
154 +++ b/drivers/acpi/apei/ghes.c
155 @@ -657,7 +657,7 @@ static int ghes_proc(struct ghes *ghes)
156 ghes_do_proc(ghes, ghes->estatus);
157 out:
158 ghes_clear_estatus(ghes);
159 - return 0;
160 + return rc;
161 }
162
163 static void ghes_add_timer(struct ghes *ghes)
164 diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
165 index 74d97f4bac34..1d58854c4a9f 100644
166 --- a/drivers/block/drbd/drbd_main.c
167 +++ b/drivers/block/drbd/drbd_main.c
168 @@ -1802,7 +1802,7 @@ int drbd_send(struct drbd_connection *connection, struct socket *sock,
169 * do we need to block DRBD_SIG if sock == &meta.socket ??
170 * otherwise wake_asender() might interrupt some send_*Ack !
171 */
172 - rv = kernel_sendmsg(sock, &msg, &iov, 1, size);
173 + rv = kernel_sendmsg(sock, &msg, &iov, 1, iov.iov_len);
174 if (rv == -EAGAIN) {
175 if (we_should_drop_the_connection(connection, sock))
176 break;
177 diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
178 index 6f497aa1b276..cf25020576fa 100644
179 --- a/drivers/char/hw_random/core.c
180 +++ b/drivers/char/hw_random/core.c
181 @@ -84,14 +84,14 @@ static size_t rng_buffer_size(void)
182
183 static void add_early_randomness(struct hwrng *rng)
184 {
185 - unsigned char bytes[16];
186 int bytes_read;
187 + size_t size = min_t(size_t, 16, rng_buffer_size());
188
189 mutex_lock(&reading_mutex);
190 - bytes_read = rng_get_data(rng, bytes, sizeof(bytes), 1);
191 + bytes_read = rng_get_data(rng, rng_buffer, size, 1);
192 mutex_unlock(&reading_mutex);
193 if (bytes_read > 0)
194 - add_device_randomness(bytes, bytes_read);
195 + add_device_randomness(rng_buffer, bytes_read);
196 }
197
198 static inline void cleanup_rng(struct kref *kref)
199 diff --git a/drivers/clk/clk-qoriq.c b/drivers/clk/clk-qoriq.c
200 index 8b77abb6bc22..a5070f9cb0d4 100644
201 --- a/drivers/clk/clk-qoriq.c
202 +++ b/drivers/clk/clk-qoriq.c
203 @@ -700,6 +700,7 @@ static struct clk * __init create_mux_common(struct clockgen *cg,
204 struct mux_hwclock *hwc,
205 const struct clk_ops *ops,
206 unsigned long min_rate,
207 + unsigned long max_rate,
208 unsigned long pct80_rate,
209 const char *fmt, int idx)
210 {
211 @@ -728,6 +729,8 @@ static struct clk * __init create_mux_common(struct clockgen *cg,
212 continue;
213 if (rate < min_rate)
214 continue;
215 + if (rate > max_rate)
216 + continue;
217
218 parent_names[j] = div->name;
219 hwc->parent_to_clksel[j] = i;
220 @@ -759,7 +762,7 @@ static struct clk * __init create_one_cmux(struct clockgen *cg, int idx)
221 struct mux_hwclock *hwc;
222 const struct clockgen_pll_div *div;
223 unsigned long plat_rate, min_rate;
224 - u64 pct80_rate;
225 + u64 max_rate, pct80_rate;
226 u32 clksel;
227
228 hwc = kzalloc(sizeof(*hwc), GFP_KERNEL);
229 @@ -787,8 +790,8 @@ static struct clk * __init create_one_cmux(struct clockgen *cg, int idx)
230 return NULL;
231 }
232
233 - pct80_rate = clk_get_rate(div->clk);
234 - pct80_rate *= 8;
235 + max_rate = clk_get_rate(div->clk);
236 + pct80_rate = max_rate * 8;
237 do_div(pct80_rate, 10);
238
239 plat_rate = clk_get_rate(cg->pll[PLATFORM_PLL].div[PLL_DIV1].clk);
240 @@ -798,7 +801,7 @@ static struct clk * __init create_one_cmux(struct clockgen *cg, int idx)
241 else
242 min_rate = plat_rate / 2;
243
244 - return create_mux_common(cg, hwc, &cmux_ops, min_rate,
245 + return create_mux_common(cg, hwc, &cmux_ops, min_rate, max_rate,
246 pct80_rate, "cg-cmux%d", idx);
247 }
248
249 @@ -813,7 +816,7 @@ static struct clk * __init create_one_hwaccel(struct clockgen *cg, int idx)
250 hwc->reg = cg->regs + 0x20 * idx + 0x10;
251 hwc->info = cg->info.hwaccel[idx];
252
253 - return create_mux_common(cg, hwc, &hwaccel_ops, 0, 0,
254 + return create_mux_common(cg, hwc, &hwaccel_ops, 0, ULONG_MAX, 0,
255 "cg-hwaccel%d", idx);
256 }
257
258 diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c
259 index 9d05d7dbcfa9..66c073fc8afc 100644
260 --- a/drivers/dma/at_xdmac.c
261 +++ b/drivers/dma/at_xdmac.c
262 @@ -864,8 +864,12 @@ at_xdmac_interleaved_queue_desc(struct dma_chan *chan,
263 * access. Hopefully we can access DDR through both ports (at least on
264 * SAMA5D4x), so we can use the same interface for source and dest,
265 * that solves the fact we don't know the direction.
266 + * ERRATA: Even if useless for memory transfers, the PERID has to not
267 + * match the one of another channel. If not, it could lead to spurious
268 + * flag status.
269 */
270 - u32 chan_cc = AT_XDMAC_CC_DIF(0)
271 + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f)
272 + | AT_XDMAC_CC_DIF(0)
273 | AT_XDMAC_CC_SIF(0)
274 | AT_XDMAC_CC_MBSIZE_SIXTEEN
275 | AT_XDMAC_CC_TYPE_MEM_TRAN;
276 @@ -1042,8 +1046,12 @@ at_xdmac_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
277 * access DDR through both ports (at least on SAMA5D4x), so we can use
278 * the same interface for source and dest, that solves the fact we
279 * don't know the direction.
280 + * ERRATA: Even if useless for memory transfers, the PERID has to not
281 + * match the one of another channel. If not, it could lead to spurious
282 + * flag status.
283 */
284 - u32 chan_cc = AT_XDMAC_CC_DAM_INCREMENTED_AM
285 + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f)
286 + | AT_XDMAC_CC_DAM_INCREMENTED_AM
287 | AT_XDMAC_CC_SAM_INCREMENTED_AM
288 | AT_XDMAC_CC_DIF(0)
289 | AT_XDMAC_CC_SIF(0)
290 @@ -1144,8 +1152,12 @@ static struct at_xdmac_desc *at_xdmac_memset_create_desc(struct dma_chan *chan,
291 * access. Hopefully we can access DDR through both ports (at least on
292 * SAMA5D4x), so we can use the same interface for source and dest,
293 * that solves the fact we don't know the direction.
294 + * ERRATA: Even if useless for memory transfers, the PERID has to not
295 + * match the one of another channel. If not, it could lead to spurious
296 + * flag status.
297 */
298 - u32 chan_cc = AT_XDMAC_CC_DAM_UBS_AM
299 + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f)
300 + | AT_XDMAC_CC_DAM_UBS_AM
301 | AT_XDMAC_CC_SAM_INCREMENTED_AM
302 | AT_XDMAC_CC_DIF(0)
303 | AT_XDMAC_CC_SIF(0)
304 diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
305 index 3b92cad8bef2..1ea8532f5ab2 100644
306 --- a/drivers/gpu/drm/i915/intel_hdmi.c
307 +++ b/drivers/gpu/drm/i915/intel_hdmi.c
308 @@ -1997,6 +1997,50 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
309 intel_hdmi->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
310 }
311
312 +static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv,
313 + enum port port)
314 +{
315 + const struct ddi_vbt_port_info *info =
316 + &dev_priv->vbt.ddi_port_info[port];
317 + u8 ddc_pin;
318 +
319 + if (info->alternate_ddc_pin) {
320 + DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n",
321 + info->alternate_ddc_pin, port_name(port));
322 + return info->alternate_ddc_pin;
323 + }
324 +
325 + switch (port) {
326 + case PORT_B:
327 + if (IS_BROXTON(dev_priv))
328 + ddc_pin = GMBUS_PIN_1_BXT;
329 + else
330 + ddc_pin = GMBUS_PIN_DPB;
331 + break;
332 + case PORT_C:
333 + if (IS_BROXTON(dev_priv))
334 + ddc_pin = GMBUS_PIN_2_BXT;
335 + else
336 + ddc_pin = GMBUS_PIN_DPC;
337 + break;
338 + case PORT_D:
339 + if (IS_CHERRYVIEW(dev_priv))
340 + ddc_pin = GMBUS_PIN_DPD_CHV;
341 + else
342 + ddc_pin = GMBUS_PIN_DPD;
343 + break;
344 + default:
345 + MISSING_CASE(port);
346 + ddc_pin = GMBUS_PIN_DPB;
347 + break;
348 + }
349 +
350 + DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (platform default)\n",
351 + ddc_pin, port_name(port));
352 +
353 + return ddc_pin;
354 +}
355 +
356 void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
357 struct intel_connector *intel_connector)
358 {
359 @@ -2006,7 +2050,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
360 struct drm_device *dev = intel_encoder->base.dev;
361 struct drm_i915_private *dev_priv = dev->dev_private;
362 enum port port = intel_dig_port->port;
363 - uint8_t alternate_ddc_pin;
364
365 DRM_DEBUG_KMS("Adding HDMI connector on port %c\n",
366 port_name(port));
367 @@ -2019,12 +2062,10 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
368 connector->doublescan_allowed = 0;
369 connector->stereo_allowed = 1;
370
371 + intel_hdmi->ddc_bus = intel_hdmi_ddc_pin(dev_priv, port);
372 +
373 switch (port) {
374 case PORT_B:
375 - if (IS_BROXTON(dev_priv))
376 - intel_hdmi->ddc_bus = GMBUS_PIN_1_BXT;
377 - else
378 - intel_hdmi->ddc_bus = GMBUS_PIN_DPB;
379 /*
380 * On BXT A0/A1, sw needs to activate DDIA HPD logic and
381 * interrupts to check the external panel connection.
382 @@ -2035,46 +2076,17 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
383 intel_encoder->hpd_pin = HPD_PORT_B;
384 break;
385 case PORT_C:
386 - if (IS_BROXTON(dev_priv))
387 - intel_hdmi->ddc_bus = GMBUS_PIN_2_BXT;
388 - else
389 - intel_hdmi->ddc_bus = GMBUS_PIN_DPC;
390 intel_encoder->hpd_pin = HPD_PORT_C;
391 break;
392 case PORT_D:
393 - if (WARN_ON(IS_BROXTON(dev_priv)))
394 - intel_hdmi->ddc_bus = GMBUS_PIN_DISABLED;
395 - else if (IS_CHERRYVIEW(dev_priv))
396 - intel_hdmi->ddc_bus = GMBUS_PIN_DPD_CHV;
397 - else
398 - intel_hdmi->ddc_bus = GMBUS_PIN_DPD;
399 intel_encoder->hpd_pin = HPD_PORT_D;
400 break;
401 case PORT_E:
402 - /* On SKL PORT E doesn't have seperate GMBUS pin
403 - * We rely on VBT to set a proper alternate GMBUS pin. */
404 - alternate_ddc_pin =
405 - dev_priv->vbt.ddi_port_info[PORT_E].alternate_ddc_pin;
406 - switch (alternate_ddc_pin) {
407 - case DDC_PIN_B:
408 - intel_hdmi->ddc_bus = GMBUS_PIN_DPB;
409 - break;
410 - case DDC_PIN_C:
411 - intel_hdmi->ddc_bus = GMBUS_PIN_DPC;
412 - break;
413 - case DDC_PIN_D:
414 - intel_hdmi->ddc_bus = GMBUS_PIN_DPD;
415 - break;
416 - default:
417 - MISSING_CASE(alternate_ddc_pin);
418 - }
419 intel_encoder->hpd_pin = HPD_PORT_E;
420 break;
421 - case PORT_A:
422 - intel_encoder->hpd_pin = HPD_PORT_A;
423 - /* Internal port only for eDP. */
424 default:
425 - BUG();
426 + MISSING_CASE(port);
427 + return;
428 }
429
430 if (IS_VALLEYVIEW(dev)) {
431 diff --git a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c b/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
432 index dc33c1dd5191..b5beea53d6f6 100644
433 --- a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
434 +++ b/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
435 @@ -30,26 +30,26 @@ static struct {
436 u32 usage_id;
437 int unit; /* 0 for default others from HID sensor spec */
438 int scale_val0; /* scale, whole number */
439 - int scale_val1; /* scale, fraction in micros */
440 + int scale_val1; /* scale, fraction in nanos */
441 } unit_conversion[] = {
442 - {HID_USAGE_SENSOR_ACCEL_3D, 0, 9, 806650},
443 + {HID_USAGE_SENSOR_ACCEL_3D, 0, 9, 806650000},
444 {HID_USAGE_SENSOR_ACCEL_3D,
445 HID_USAGE_SENSOR_UNITS_METERS_PER_SEC_SQRD, 1, 0},
446 {HID_USAGE_SENSOR_ACCEL_3D,
447 - HID_USAGE_SENSOR_UNITS_G, 9, 806650},
448 + HID_USAGE_SENSOR_UNITS_G, 9, 806650000},
449
450 - {HID_USAGE_SENSOR_GYRO_3D, 0, 0, 17453},
451 + {HID_USAGE_SENSOR_GYRO_3D, 0, 0, 17453293},
452 {HID_USAGE_SENSOR_GYRO_3D,
453 HID_USAGE_SENSOR_UNITS_RADIANS_PER_SECOND, 1, 0},
454 {HID_USAGE_SENSOR_GYRO_3D,
455 - HID_USAGE_SENSOR_UNITS_DEGREES_PER_SECOND, 0, 17453},
456 + HID_USAGE_SENSOR_UNITS_DEGREES_PER_SECOND, 0, 17453293},
457
458 - {HID_USAGE_SENSOR_COMPASS_3D, 0, 0, 1000},
459 + {HID_USAGE_SENSOR_COMPASS_3D, 0, 0, 1000000},
460 {HID_USAGE_SENSOR_COMPASS_3D, HID_USAGE_SENSOR_UNITS_GAUSS, 1, 0},
461
462 - {HID_USAGE_SENSOR_INCLINOMETER_3D, 0, 0, 17453},
463 + {HID_USAGE_SENSOR_INCLINOMETER_3D, 0, 0, 17453293},
464 {HID_USAGE_SENSOR_INCLINOMETER_3D,
465 - HID_USAGE_SENSOR_UNITS_DEGREES, 0, 17453},
466 + HID_USAGE_SENSOR_UNITS_DEGREES, 0, 17453293},
467 {HID_USAGE_SENSOR_INCLINOMETER_3D,
468 HID_USAGE_SENSOR_UNITS_RADIANS, 1, 0},
469
470 @@ -57,7 +57,7 @@ static struct {
471 {HID_USAGE_SENSOR_ALS, HID_USAGE_SENSOR_UNITS_LUX, 1, 0},
472
473 {HID_USAGE_SENSOR_PRESSURE, 0, 100, 0},
474 - {HID_USAGE_SENSOR_PRESSURE, HID_USAGE_SENSOR_UNITS_PASCAL, 0, 1000},
475 + {HID_USAGE_SENSOR_PRESSURE, HID_USAGE_SENSOR_UNITS_PASCAL, 0, 1000000},
476 };
477
478 static int pow_10(unsigned power)
479 @@ -266,15 +266,15 @@ EXPORT_SYMBOL(hid_sensor_write_raw_hyst_value);
480 /*
481 * This fuction applies the unit exponent to the scale.
482 * For example:
483 - * 9.806650 ->exp:2-> val0[980]val1[665000]
484 - * 9.000806 ->exp:2-> val0[900]val1[80600]
485 - * 0.174535 ->exp:2-> val0[17]val1[453500]
486 - * 1.001745 ->exp:0-> val0[1]val1[1745]
487 - * 1.001745 ->exp:2-> val0[100]val1[174500]
488 - * 1.001745 ->exp:4-> val0[10017]val1[450000]
489 - * 9.806650 ->exp:-2-> val0[0]val1[98066]
490 + * 9.806650000 ->exp:2-> val0[980]val1[665000000]
491 + * 9.000806000 ->exp:2-> val0[900]val1[80600000]
492 + * 0.174535293 ->exp:2-> val0[17]val1[453529300]
493 + * 1.001745329 ->exp:0-> val0[1]val1[1745329]
494 + * 1.001745329 ->exp:2-> val0[100]val1[174532900]
495 + * 1.001745329 ->exp:4-> val0[10017]val1[453290000]
496 + * 9.806650000 ->exp:-2-> val0[0]val1[98066500]
497 */
498 -static void adjust_exponent_micro(int *val0, int *val1, int scale0,
499 +static void adjust_exponent_nano(int *val0, int *val1, int scale0,
500 int scale1, int exp)
501 {
502 int i;
503 @@ -285,32 +285,32 @@ static void adjust_exponent_micro(int *val0, int *val1, int scale0,
504 if (exp > 0) {
505 *val0 = scale0 * pow_10(exp);
506 res = 0;
507 - if (exp > 6) {
508 + if (exp > 9) {
509 *val1 = 0;
510 return;
511 }
512 for (i = 0; i < exp; ++i) {
513 - x = scale1 / pow_10(5 - i);
514 + x = scale1 / pow_10(8 - i);
515 res += (pow_10(exp - 1 - i) * x);
516 - scale1 = scale1 % pow_10(5 - i);
517 + scale1 = scale1 % pow_10(8 - i);
518 }
519 *val0 += res;
520 *val1 = scale1 * pow_10(exp);
521 } else if (exp < 0) {
522 exp = abs(exp);
523 - if (exp > 6) {
524 + if (exp > 9) {
525 *val0 = *val1 = 0;
526 return;
527 }
528 *val0 = scale0 / pow_10(exp);
529 rem = scale0 % pow_10(exp);
530 res = 0;
531 - for (i = 0; i < (6 - exp); ++i) {
532 - x = scale1 / pow_10(5 - i);
533 - res += (pow_10(5 - exp - i) * x);
534 - scale1 = scale1 % pow_10(5 - i);
535 + for (i = 0; i < (9 - exp); ++i) {
536 + x = scale1 / pow_10(8 - i);
537 + res += (pow_10(8 - exp - i) * x);
538 + scale1 = scale1 % pow_10(8 - i);
539 }
540 - *val1 = rem * pow_10(6 - exp) + res;
541 + *val1 = rem * pow_10(9 - exp) + res;
542 } else {
543 *val0 = scale0;
544 *val1 = scale1;
545 @@ -332,14 +332,14 @@ int hid_sensor_format_scale(u32 usage_id,
546 unit_conversion[i].unit == attr_info->units) {
547 exp = hid_sensor_convert_exponent(
548 attr_info->unit_expo);
549 - adjust_exponent_micro(val0, val1,
550 + adjust_exponent_nano(val0, val1,
551 unit_conversion[i].scale_val0,
552 unit_conversion[i].scale_val1, exp);
553 break;
554 }
555 }
556
557 - return IIO_VAL_INT_PLUS_MICRO;
558 + return IIO_VAL_INT_PLUS_NANO;
559 }
560 EXPORT_SYMBOL(hid_sensor_format_scale);
561
562 diff --git a/drivers/iio/orientation/hid-sensor-rotation.c b/drivers/iio/orientation/hid-sensor-rotation.c
563 index b98b9d94d184..a97e802ca523 100644
564 --- a/drivers/iio/orientation/hid-sensor-rotation.c
565 +++ b/drivers/iio/orientation/hid-sensor-rotation.c
566 @@ -335,6 +335,7 @@ static struct platform_driver hid_dev_rot_platform_driver = {
567 .id_table = hid_dev_rot_ids,
568 .driver = {
569 .name = KBUILD_MODNAME,
570 + .pm = &hid_sensor_pm_ops,
571 },
572 .probe = hid_dev_rot_probe,
573 .remove = hid_dev_rot_remove,
574 diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
575 index 0397985a2601..5975d76ce755 100644
576 --- a/drivers/iommu/amd_iommu.c
577 +++ b/drivers/iommu/amd_iommu.c
578 @@ -1833,6 +1833,9 @@ static void dma_ops_domain_free(struct dma_ops_domain *dom)
579 kfree(dom->aperture[i]);
580 }
581
582 + if (dom->domain.id)
583 + domain_id_free(dom->domain.id);
584 +
585 kfree(dom);
586 }
587
588 diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
589 index b7f852d824a3..5baa830ce49f 100644
590 --- a/drivers/iommu/intel-iommu.c
591 +++ b/drivers/iommu/intel-iommu.c
592 @@ -1672,6 +1672,7 @@ static void disable_dmar_iommu(struct intel_iommu *iommu)
593 if (!iommu->domains || !iommu->domain_ids)
594 return;
595
596 +again:
597 spin_lock_irqsave(&device_domain_lock, flags);
598 list_for_each_entry_safe(info, tmp, &device_domain_list, global) {
599 struct dmar_domain *domain;
600 @@ -1684,10 +1685,19 @@ static void disable_dmar_iommu(struct intel_iommu *iommu)
601
602 domain = info->domain;
603
604 - dmar_remove_one_dev_info(domain, info->dev);
605 + __dmar_remove_one_dev_info(info);
606
607 - if (!domain_type_is_vm_or_si(domain))
608 + if (!domain_type_is_vm_or_si(domain)) {
609 + /*
610 + * The domain_exit() function can't be called under
611 + * device_domain_lock, as it takes this lock itself.
612 + * So release the lock here and re-run the loop
613 + * afterwards.
614 + */
615 + spin_unlock_irqrestore(&device_domain_lock, flags);
616 domain_exit(domain);
617 + goto again;
618 + }
619 }
620 spin_unlock_irqrestore(&device_domain_lock, flags);
621
622 diff --git a/drivers/media/usb/dvb-usb/dib0700_core.c b/drivers/media/usb/dvb-usb/dib0700_core.c
623 index 0d248ce02a9b..ab58f0b9da5c 100644
624 --- a/drivers/media/usb/dvb-usb/dib0700_core.c
625 +++ b/drivers/media/usb/dvb-usb/dib0700_core.c
626 @@ -677,7 +677,7 @@ static void dib0700_rc_urb_completion(struct urb *purb)
627 struct dvb_usb_device *d = purb->context;
628 struct dib0700_rc_response *poll_reply;
629 enum rc_type protocol;
630 - u32 uninitialized_var(keycode);
631 + u32 keycode;
632 u8 toggle;
633
634 deb_info("%s()\n", __func__);
635 @@ -719,7 +719,8 @@ static void dib0700_rc_urb_completion(struct urb *purb)
636 poll_reply->nec.data == 0x00 &&
637 poll_reply->nec.not_data == 0xff) {
638 poll_reply->data_state = 2;
639 - break;
640 + rc_repeat(d->rc_dev);
641 + goto resubmit;
642 }
643
644 if ((poll_reply->nec.data ^ poll_reply->nec.not_data) != 0xff) {
645 diff --git a/drivers/misc/mei/bus-fixup.c b/drivers/misc/mei/bus-fixup.c
646 index 020de5919c21..bdc7fcd80eca 100644
647 --- a/drivers/misc/mei/bus-fixup.c
648 +++ b/drivers/misc/mei/bus-fixup.c
649 @@ -151,7 +151,7 @@ static int mei_nfc_if_version(struct mei_cl *cl,
650
651 ret = 0;
652 bytes_recv = __mei_cl_recv(cl, (u8 *)reply, if_version_length);
653 - if (bytes_recv < 0 || bytes_recv < sizeof(struct mei_nfc_reply)) {
654 + if (bytes_recv < if_version_length) {
655 dev_err(bus->dev, "Could not read IF version\n");
656 ret = -EIO;
657 goto err;
658 diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c
659 index d839147e591d..44ecebd1ea8c 100644
660 --- a/drivers/mmc/host/mxs-mmc.c
661 +++ b/drivers/mmc/host/mxs-mmc.c
662 @@ -661,13 +661,13 @@ static int mxs_mmc_probe(struct platform_device *pdev)
663
664 platform_set_drvdata(pdev, mmc);
665
666 + spin_lock_init(&host->lock);
667 +
668 ret = devm_request_irq(&pdev->dev, irq_err, mxs_mmc_irq_handler, 0,
669 dev_name(&pdev->dev), host);
670 if (ret)
671 goto out_free_dma;
672
673 - spin_lock_init(&host->lock);
674 -
675 ret = mmc_add_host(mmc);
676 if (ret)
677 goto out_free_dma;
678 diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
679 index 979cc024bca7..4edbab6ca7ef 100644
680 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
681 +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
682 @@ -8595,7 +8595,7 @@ static int i40e_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
683 return 0;
684
685 return ndo_dflt_bridge_getlink(skb, pid, seq, dev, veb->bridge_mode,
686 - nlflags, 0, 0, filter_mask, NULL);
687 + 0, 0, nlflags, filter_mask, NULL);
688 }
689
690 #define I40E_MAX_TUNNEL_HDR_LEN 80
691 diff --git a/drivers/nfc/mei_phy.c b/drivers/nfc/mei_phy.c
692 index 83deda4bb4d6..6f9563a96488 100644
693 --- a/drivers/nfc/mei_phy.c
694 +++ b/drivers/nfc/mei_phy.c
695 @@ -133,7 +133,7 @@ static int mei_nfc_if_version(struct nfc_mei_phy *phy)
696 return -ENOMEM;
697
698 bytes_recv = mei_cldev_recv(phy->cldev, (u8 *)reply, if_version_length);
699 - if (bytes_recv < 0 || bytes_recv < sizeof(struct mei_nfc_reply)) {
700 + if (bytes_recv < 0 || bytes_recv < if_version_length) {
701 pr_err("Could not read IF version\n");
702 r = -EIO;
703 goto err;
704 diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
705 index 4e377599d266..a009ae34c5ef 100644
706 --- a/drivers/pinctrl/intel/pinctrl-cherryview.c
707 +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
708 @@ -1564,12 +1564,15 @@ static int chv_pinctrl_remove(struct platform_device *pdev)
709 }
710
711 #ifdef CONFIG_PM_SLEEP
712 -static int chv_pinctrl_suspend(struct device *dev)
713 +static int chv_pinctrl_suspend_noirq(struct device *dev)
714 {
715 struct platform_device *pdev = to_platform_device(dev);
716 struct chv_pinctrl *pctrl = platform_get_drvdata(pdev);
717 + unsigned long flags;
718 int i;
719
720 + raw_spin_lock_irqsave(&chv_lock, flags);
721 +
722 pctrl->saved_intmask = readl(pctrl->regs + CHV_INTMASK);
723
724 for (i = 0; i < pctrl->community->npins; i++) {
725 @@ -1590,15 +1593,20 @@ static int chv_pinctrl_suspend(struct device *dev)
726 ctx->padctrl1 = readl(reg);
727 }
728
729 + raw_spin_unlock_irqrestore(&chv_lock, flags);
730 +
731 return 0;
732 }
733
734 -static int chv_pinctrl_resume(struct device *dev)
735 +static int chv_pinctrl_resume_noirq(struct device *dev)
736 {
737 struct platform_device *pdev = to_platform_device(dev);
738 struct chv_pinctrl *pctrl = platform_get_drvdata(pdev);
739 + unsigned long flags;
740 int i;
741
742 + raw_spin_lock_irqsave(&chv_lock, flags);
743 +
744 /*
745 * Mask all interrupts before restoring per-pin configuration
746 * registers because we don't know in which state BIOS left them
747 @@ -1643,12 +1651,15 @@ static int chv_pinctrl_resume(struct device *dev)
748 chv_writel(0xffff, pctrl->regs + CHV_INTSTAT);
749 chv_writel(pctrl->saved_intmask, pctrl->regs + CHV_INTMASK);
750
751 + raw_spin_unlock_irqrestore(&chv_lock, flags);
752 +
753 return 0;
754 }
755 #endif
756
757 static const struct dev_pm_ops chv_pinctrl_pm_ops = {
758 - SET_LATE_SYSTEM_SLEEP_PM_OPS(chv_pinctrl_suspend, chv_pinctrl_resume)
759 + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(chv_pinctrl_suspend_noirq,
760 + chv_pinctrl_resume_noirq)
761 };
762
763 static const struct acpi_device_id chv_pinctrl_acpi_match[] = {
764 diff --git a/drivers/platform/x86/toshiba-wmi.c b/drivers/platform/x86/toshiba-wmi.c
765 index feac4576b837..2df07ee8f3c3 100644
766 --- a/drivers/platform/x86/toshiba-wmi.c
767 +++ b/drivers/platform/x86/toshiba-wmi.c
768 @@ -24,14 +24,15 @@
769 #include <linux/acpi.h>
770 #include <linux/input.h>
771 #include <linux/input/sparse-keymap.h>
772 +#include <linux/dmi.h>
773
774 MODULE_AUTHOR("Azael Avalos");
775 MODULE_DESCRIPTION("Toshiba WMI Hotkey Driver");
776 MODULE_LICENSE("GPL");
777
778 -#define TOSHIBA_WMI_EVENT_GUID "59142400-C6A3-40FA-BADB-8A2652834100"
779 +#define WMI_EVENT_GUID "59142400-C6A3-40FA-BADB-8A2652834100"
780
781 -MODULE_ALIAS("wmi:"TOSHIBA_WMI_EVENT_GUID);
782 +MODULE_ALIAS("wmi:"WMI_EVENT_GUID);
783
784 static struct input_dev *toshiba_wmi_input_dev;
785
786 @@ -63,6 +64,16 @@ static void toshiba_wmi_notify(u32 value, void *context)
787 kfree(response.pointer);
788 }
789
790 +static struct dmi_system_id toshiba_wmi_dmi_table[] __initdata = {
791 + {
792 + .ident = "Toshiba laptop",
793 + .matches = {
794 + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
795 + },
796 + },
797 + {}
798 +};
799 +
800 static int __init toshiba_wmi_input_setup(void)
801 {
802 acpi_status status;
803 @@ -81,7 +92,7 @@ static int __init toshiba_wmi_input_setup(void)
804 if (err)
805 goto err_free_dev;
806
807 - status = wmi_install_notify_handler(TOSHIBA_WMI_EVENT_GUID,
808 + status = wmi_install_notify_handler(WMI_EVENT_GUID,
809 toshiba_wmi_notify, NULL);
810 if (ACPI_FAILURE(status)) {
811 err = -EIO;
812 @@ -95,7 +106,7 @@ static int __init toshiba_wmi_input_setup(void)
813 return 0;
814
815 err_remove_notifier:
816 - wmi_remove_notify_handler(TOSHIBA_WMI_EVENT_GUID);
817 + wmi_remove_notify_handler(WMI_EVENT_GUID);
818 err_free_keymap:
819 sparse_keymap_free(toshiba_wmi_input_dev);
820 err_free_dev:
821 @@ -105,7 +116,7 @@ static int __init toshiba_wmi_input_setup(void)
822
823 static void toshiba_wmi_input_destroy(void)
824 {
825 - wmi_remove_notify_handler(TOSHIBA_WMI_EVENT_GUID);
826 + wmi_remove_notify_handler(WMI_EVENT_GUID);
827 sparse_keymap_free(toshiba_wmi_input_dev);
828 input_unregister_device(toshiba_wmi_input_dev);
829 }
830 @@ -114,7 +125,8 @@ static int __init toshiba_wmi_init(void)
831 {
832 int ret;
833
834 - if (!wmi_has_guid(TOSHIBA_WMI_EVENT_GUID))
835 + if (!wmi_has_guid(WMI_EVENT_GUID) ||
836 + !dmi_check_system(toshiba_wmi_dmi_table))
837 return -ENODEV;
838
839 ret = toshiba_wmi_input_setup();
840 @@ -130,7 +142,7 @@ static int __init toshiba_wmi_init(void)
841
842 static void __exit toshiba_wmi_exit(void)
843 {
844 - if (wmi_has_guid(TOSHIBA_WMI_EVENT_GUID))
845 + if (wmi_has_guid(WMI_EVENT_GUID))
846 toshiba_wmi_input_destroy();
847 }
848
849 diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
850 index 0969cea1089a..2d867c5bfd9f 100644
851 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
852 +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
853 @@ -1275,9 +1275,9 @@ scsih_target_alloc(struct scsi_target *starget)
854 sas_target_priv_data->handle = raid_device->handle;
855 sas_target_priv_data->sas_address = raid_device->wwid;
856 sas_target_priv_data->flags |= MPT_TARGET_FLAGS_VOLUME;
857 - sas_target_priv_data->raid_device = raid_device;
858 if (ioc->is_warpdrive)
859 - raid_device->starget = starget;
860 + sas_target_priv_data->raid_device = raid_device;
861 + raid_device->starget = starget;
862 }
863 spin_unlock_irqrestore(&ioc->raid_device_lock, flags);
864 return 0;
865 diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
866 index fc6674db4f2d..c44cbf46221c 100644
867 --- a/drivers/scsi/qla2xxx/qla_os.c
868 +++ b/drivers/scsi/qla2xxx/qla_os.c
869 @@ -2257,6 +2257,8 @@ qla2xxx_scan_finished(struct Scsi_Host *shost, unsigned long time)
870 {
871 scsi_qla_host_t *vha = shost_priv(shost);
872
873 + if (test_bit(UNLOADING, &vha->dpc_flags))
874 + return 1;
875 if (!vha->host)
876 return 1;
877 if (time > vha->hw->loop_reset_delay * HZ)
878 diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
879 index 10c43dda0f5a..196da09e20a1 100644
880 --- a/drivers/staging/iio/impedance-analyzer/ad5933.c
881 +++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
882 @@ -647,6 +647,7 @@ static void ad5933_work(struct work_struct *work)
883 __be16 buf[2];
884 int val[2];
885 unsigned char status;
886 + int ret;
887
888 mutex_lock(&indio_dev->mlock);
889 if (st->state == AD5933_CTRL_INIT_START_FREQ) {
890 @@ -654,19 +655,22 @@ static void ad5933_work(struct work_struct *work)
891 ad5933_cmd(st, AD5933_CTRL_START_SWEEP);
892 st->state = AD5933_CTRL_START_SWEEP;
893 schedule_delayed_work(&st->work, st->poll_time_jiffies);
894 - mutex_unlock(&indio_dev->mlock);
895 - return;
896 + goto out;
897 }
898
899 - ad5933_i2c_read(st->client, AD5933_REG_STATUS, 1, &status);
900 + ret = ad5933_i2c_read(st->client, AD5933_REG_STATUS, 1, &status);
901 + if (ret)
902 + goto out;
903
904 if (status & AD5933_STAT_DATA_VALID) {
905 int scan_count = bitmap_weight(indio_dev->active_scan_mask,
906 indio_dev->masklength);
907 - ad5933_i2c_read(st->client,
908 + ret = ad5933_i2c_read(st->client,
909 test_bit(1, indio_dev->active_scan_mask) ?
910 AD5933_REG_REAL_DATA : AD5933_REG_IMAG_DATA,
911 scan_count * 2, (u8 *)buf);
912 + if (ret)
913 + goto out;
914
915 if (scan_count == 2) {
916 val[0] = be16_to_cpu(buf[0]);
917 @@ -678,8 +682,7 @@ static void ad5933_work(struct work_struct *work)
918 } else {
919 /* no data available - try again later */
920 schedule_delayed_work(&st->work, st->poll_time_jiffies);
921 - mutex_unlock(&indio_dev->mlock);
922 - return;
923 + goto out;
924 }
925
926 if (status & AD5933_STAT_SWEEP_DONE) {
927 @@ -691,7 +694,7 @@ static void ad5933_work(struct work_struct *work)
928 ad5933_cmd(st, AD5933_CTRL_INC_FREQ);
929 schedule_delayed_work(&st->work, st->poll_time_jiffies);
930 }
931 -
932 +out:
933 mutex_unlock(&indio_dev->mlock);
934 }
935
936 diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c
937 index 0922dd3a08d3..196f6b0a288f 100644
938 --- a/drivers/staging/nvec/nvec_ps2.c
939 +++ b/drivers/staging/nvec/nvec_ps2.c
940 @@ -106,13 +106,12 @@ static int nvec_mouse_probe(struct platform_device *pdev)
941 {
942 struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
943 struct serio *ser_dev;
944 - char mouse_reset[] = { NVEC_PS2, SEND_COMMAND, PSMOUSE_RST, 3 };
945
946 - ser_dev = devm_kzalloc(&pdev->dev, sizeof(struct serio), GFP_KERNEL);
947 + ser_dev = kzalloc(sizeof(struct serio), GFP_KERNEL);
948 if (!ser_dev)
949 return -ENOMEM;
950
951 - ser_dev->id.type = SERIO_PS_PSTHRU;
952 + ser_dev->id.type = SERIO_8042;
953 ser_dev->write = ps2_sendcommand;
954 ser_dev->start = ps2_startstreaming;
955 ser_dev->stop = ps2_stopstreaming;
956 @@ -127,9 +126,6 @@ static int nvec_mouse_probe(struct platform_device *pdev)
957
958 serio_register_port(ser_dev);
959
960 - /* mouse reset */
961 - nvec_write_async(nvec, mouse_reset, sizeof(mouse_reset));
962 -
963 return 0;
964 }
965
966 diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
967 index 7b5462eb8388..e0b89b961e1b 100644
968 --- a/drivers/tty/serial/atmel_serial.c
969 +++ b/drivers/tty/serial/atmel_serial.c
970 @@ -2075,6 +2075,7 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state,
971 static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
972 struct ktermios *old)
973 {
974 + struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
975 unsigned long flags;
976 unsigned int old_mode, mode, imr, quot, baud;
977
978 @@ -2178,11 +2179,29 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
979 mode |= ATMEL_US_USMODE_RS485;
980 } else if (termios->c_cflag & CRTSCTS) {
981 /* RS232 with hardware handshake (RTS/CTS) */
982 - if (atmel_use_dma_rx(port) && !atmel_use_fifo(port)) {
983 - dev_info(port->dev, "not enabling hardware flow control because DMA is used");
984 - termios->c_cflag &= ~CRTSCTS;
985 - } else {
986 + if (atmel_use_fifo(port) &&
987 + !mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_CTS)) {
988 + /*
989 + * with ATMEL_US_USMODE_HWHS set, the controller will
990 + * be able to drive the RTS pin high/low when the RX
991 + * FIFO is above RXFTHRES/below RXFTHRES2.
992 + * It will also disable the transmitter when the CTS
993 + * pin is high.
994 + * This mode is not activated if CTS pin is a GPIO
995 + * because in this case, the transmitter is always
996 + * disabled (there must be an internal pull-up
997 + * responsible for this behaviour).
998 + * If the RTS pin is a GPIO, the controller won't be
999 + * able to drive it according to the FIFO thresholds,
1000 + * but it will be handled by the driver.
1001 + */
1002 mode |= ATMEL_US_USMODE_HWHS;
1003 + } else {
1004 + /*
1005 + * For platforms without FIFO, the flow control is
1006 + * handled by the driver.
1007 + */
1008 + mode |= ATMEL_US_USMODE_NORMAL;
1009 }
1010 } else {
1011 /* RS232 without hadware handshake */
1012 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1013 index 7f374369e539..4d77745f439f 100644
1014 --- a/drivers/usb/class/cdc-acm.c
1015 +++ b/drivers/usb/class/cdc-acm.c
1016 @@ -877,8 +877,6 @@ static int wait_serial_change(struct acm *acm, unsigned long arg)
1017 DECLARE_WAITQUEUE(wait, current);
1018 struct async_icount old, new;
1019
1020 - if (arg & (TIOCM_DSR | TIOCM_RI | TIOCM_CD ))
1021 - return -EINVAL;
1022 do {
1023 spin_lock_irq(&acm->read_lock);
1024 old = acm->oldcount;
1025 diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
1026 index b644248f4b8e..7413f89660f7 100644
1027 --- a/drivers/usb/gadget/function/u_ether.c
1028 +++ b/drivers/usb/gadget/function/u_ether.c
1029 @@ -594,14 +594,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb,
1030
1031 req->length = length;
1032
1033 - /* throttle high/super speed IRQ rate back slightly */
1034 - if (gadget_is_dualspeed(dev->gadget))
1035 - req->no_interrupt = (((dev->gadget->speed == USB_SPEED_HIGH ||
1036 - dev->gadget->speed == USB_SPEED_SUPER)) &&
1037 - !list_empty(&dev->tx_reqs))
1038 - ? ((atomic_read(&dev->tx_qlen) % dev->qmult) != 0)
1039 - : 0;
1040 -
1041 retval = usb_ep_queue(in, req, GFP_ATOMIC);
1042 switch (retval) {
1043 default:
1044 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
1045 index 4bc9dbf29a73..3cff6523f27d 100644
1046 --- a/fs/btrfs/inode.c
1047 +++ b/fs/btrfs/inode.c
1048 @@ -8691,9 +8691,14 @@ static void btrfs_invalidatepage(struct page *page, unsigned int offset,
1049 * So even we call qgroup_free_data(), it won't decrease reserved
1050 * space.
1051 * 2) Not written to disk
1052 - * This means the reserved space should be freed here.
1053 + * This means the reserved space should be freed here. However,
1054 + * if a truncate invalidates the page (by clearing PageDirty)
1055 + * and the page is accounted for while allocating extent
1056 + * in btrfs_check_data_free_space() we let delayed_ref to
1057 + * free the entire extent.
1058 */
1059 - btrfs_qgroup_free_data(inode, page_start, PAGE_CACHE_SIZE);
1060 + if (PageDirty(page))
1061 + btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE);
1062 if (!inode_evicting) {
1063 clear_extent_bit(tree, page_start, page_end,
1064 EXTENT_LOCKED | EXTENT_DIRTY |
1065 diff --git a/fs/coredump.c b/fs/coredump.c
1066 index dfc87c5f5a54..5d15c4975ba1 100644
1067 --- a/fs/coredump.c
1068 +++ b/fs/coredump.c
1069 @@ -1,6 +1,7 @@
1070 #include <linux/slab.h>
1071 #include <linux/file.h>
1072 #include <linux/fdtable.h>
1073 +#include <linux/freezer.h>
1074 #include <linux/mm.h>
1075 #include <linux/stat.h>
1076 #include <linux/fcntl.h>
1077 @@ -399,7 +400,9 @@ static int coredump_wait(int exit_code, struct core_state *core_state)
1078 if (core_waiters > 0) {
1079 struct core_thread *ptr;
1080
1081 + freezer_do_not_count();
1082 wait_for_completion(&core_state->startup);
1083 + freezer_count();
1084 /*
1085 * Wait for all the threads to become inactive, so that
1086 * all the thread context (extended register state, like
1087 diff --git a/lib/genalloc.c b/lib/genalloc.c
1088 index 116a166b096f..27aa9c629d13 100644
1089 --- a/lib/genalloc.c
1090 +++ b/lib/genalloc.c
1091 @@ -273,7 +273,7 @@ unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
1092 struct gen_pool_chunk *chunk;
1093 unsigned long addr = 0;
1094 int order = pool->min_alloc_order;
1095 - int nbits, start_bit = 0, end_bit, remain;
1096 + int nbits, start_bit, end_bit, remain;
1097
1098 #ifndef CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG
1099 BUG_ON(in_nmi());
1100 @@ -288,6 +288,7 @@ unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
1101 if (size > atomic_read(&chunk->avail))
1102 continue;
1103
1104 + start_bit = 0;
1105 end_bit = chunk_size(chunk) >> order;
1106 retry:
1107 start_bit = pool->algo(chunk->bits, end_bit, start_bit, nbits,
1108 diff --git a/mm/swapfile.c b/mm/swapfile.c
1109 index 58877312cf6b..c1a0f3dea8b5 100644
1110 --- a/mm/swapfile.c
1111 +++ b/mm/swapfile.c
1112 @@ -2225,6 +2225,8 @@ static unsigned long read_swap_header(struct swap_info_struct *p,
1113 swab32s(&swap_header->info.version);
1114 swab32s(&swap_header->info.last_page);
1115 swab32s(&swap_header->info.nr_badpages);
1116 + if (swap_header->info.nr_badpages > MAX_SWAP_BADPAGES)
1117 + return 0;
1118 for (i = 0; i < swap_header->info.nr_badpages; i++)
1119 swab32s(&swap_header->info.badpages[i]);
1120 }
1121 diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
1122 index a5d41dfa9f05..2c89f90cd7bc 100644
1123 --- a/net/netfilter/nf_log.c
1124 +++ b/net/netfilter/nf_log.c
1125 @@ -401,7 +401,7 @@ static int nf_log_proc_dostring(struct ctl_table *table, int write,
1126 size_t size = *lenp;
1127 int r = 0;
1128 int tindex = (unsigned long)table->extra1;
1129 - struct net *net = current->nsproxy->net_ns;
1130 + struct net *net = table->extra2;
1131
1132 if (write) {
1133 if (size > sizeof(buf))
1134 @@ -453,7 +453,6 @@ static int netfilter_log_sysctl_init(struct net *net)
1135 3, "%d", i);
1136 nf_log_sysctl_table[i].procname =
1137 nf_log_sysctl_fnames[i];
1138 - nf_log_sysctl_table[i].data = NULL;
1139 nf_log_sysctl_table[i].maxlen = NFLOGGER_NAME_LEN;
1140 nf_log_sysctl_table[i].mode = 0644;
1141 nf_log_sysctl_table[i].proc_handler =
1142 @@ -463,6 +462,9 @@ static int netfilter_log_sysctl_init(struct net *net)
1143 }
1144 }
1145
1146 + for (i = NFPROTO_UNSPEC; i < NFPROTO_NUMPROTO; i++)
1147 + table[i].extra2 = net;
1148 +
1149 net->nf.nf_log_dir_header = register_net_sysctl(net,
1150 "net/netfilter/nf_log",
1151 table);
1152 diff --git a/sound/core/info.c b/sound/core/info.c
1153 index 895362a696c9..8ab72e0f5932 100644
1154 --- a/sound/core/info.c
1155 +++ b/sound/core/info.c
1156 @@ -325,10 +325,15 @@ static ssize_t snd_info_text_entry_write(struct file *file,
1157 size_t next;
1158 int err = 0;
1159
1160 + if (!entry->c.text.write)
1161 + return -EIO;
1162 pos = *offset;
1163 if (!valid_pos(pos, count))
1164 return -EIO;
1165 next = pos + count;
1166 + /* don't handle too large text inputs */
1167 + if (next > 16 * 1024)
1168 + return -EIO;
1169 mutex_lock(&entry->access);
1170 buf = data->wbuffer;
1171 if (!buf) {
1172 @@ -366,7 +371,9 @@ static int snd_info_seq_show(struct seq_file *seq, void *p)
1173 struct snd_info_private_data *data = seq->private;
1174 struct snd_info_entry *entry = data->entry;
1175
1176 - if (entry->c.text.read) {
1177 + if (!entry->c.text.read) {
1178 + return -EIO;
1179 + } else {
1180 data->rbuffer->buffer = (char *)seq; /* XXX hack! */
1181 entry->c.text.read(entry, data->rbuffer);
1182 }
1183 diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c
1184 index e07807d96b68..3670086b9227 100644
1185 --- a/sound/soc/codecs/cs4270.c
1186 +++ b/sound/soc/codecs/cs4270.c
1187 @@ -148,11 +148,11 @@ SND_SOC_DAPM_OUTPUT("AOUTR"),
1188 };
1189
1190 static const struct snd_soc_dapm_route cs4270_dapm_routes[] = {
1191 - { "Capture", NULL, "AINA" },
1192 - { "Capture", NULL, "AINB" },
1193 + { "Capture", NULL, "AINL" },
1194 + { "Capture", NULL, "AINR" },
1195
1196 - { "AOUTA", NULL, "Playback" },
1197 - { "AOUTB", NULL, "Playback" },
1198 + { "AOUTL", NULL, "Playback" },
1199 + { "AOUTR", NULL, "Playback" },
1200 };
1201
1202 /**
1203 diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
1204 index 1bb896d78d09..1a4999f9d56f 100644
1205 --- a/sound/soc/sunxi/sun4i-codec.c
1206 +++ b/sound/soc/sunxi/sun4i-codec.c
1207 @@ -575,11 +575,11 @@ static struct snd_soc_card *sun4i_codec_create_card(struct device *dev)
1208
1209 card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
1210 if (!card)
1211 - return NULL;
1212 + return ERR_PTR(-ENOMEM);
1213
1214 card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
1215 if (!card->dai_link)
1216 - return NULL;
1217 + return ERR_PTR(-ENOMEM);
1218
1219 card->dev = dev;
1220 card->name = "sun4i-codec";
1221 @@ -661,7 +661,8 @@ static int sun4i_codec_probe(struct platform_device *pdev)
1222 }
1223
1224 card = sun4i_codec_create_card(&pdev->dev);
1225 - if (!card) {
1226 + if (IS_ERR(card)) {
1227 + ret = PTR_ERR(card);
1228 dev_err(&pdev->dev, "Failed to create our card\n");
1229 goto err_unregister_codec;
1230 }