Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2868 - (hide 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 niro 2868 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     }