Magellan Linux

Contents of /trunk/kernel-alx/patches-4.4/0116-4.4.17-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2825 - (show annotations) (download)
Tue Sep 13 07:18:15 2016 UTC (7 years, 7 months ago) by niro
File size: 67407 byte(s)
-linux-4.4.17
1 diff --git a/Makefile b/Makefile
2 index da7621cadc8e..76d34f763a41 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 4
8 -SUBLEVEL = 16
9 +SUBLEVEL = 17
10 EXTRAVERSION =
11 NAME = Blurry Fish Butt
12
13 diff --git a/arch/arc/Makefile b/arch/arc/Makefile
14 index aeb19021099e..209d8451e23d 100644
15 --- a/arch/arc/Makefile
16 +++ b/arch/arc/Makefile
17 @@ -48,8 +48,6 @@ endif
18
19 endif
20
21 -cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables
22 -
23 # By default gcc 4.8 generates dwarf4 which kernel unwinder can't grok
24 ifeq ($(atleast_gcc48),y)
25 cflags-$(CONFIG_ARC_DW2_UNWIND) += -gdwarf-2
26 diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c
27 index 001de4ce711e..11b50959f20e 100644
28 --- a/arch/arc/kernel/stacktrace.c
29 +++ b/arch/arc/kernel/stacktrace.c
30 @@ -142,7 +142,7 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
31 * prelogue is setup (callee regs saved and then fp set and not other
32 * way around
33 */
34 - pr_warn("CONFIG_ARC_DW2_UNWIND needs to be enabled\n");
35 + pr_warn_once("CONFIG_ARC_DW2_UNWIND needs to be enabled\n");
36 return 0;
37
38 #endif
39 diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
40 index 7a6bed5c08bc..baad72e4c100 100644
41 --- a/arch/x86/include/asm/pvclock.h
42 +++ b/arch/x86/include/asm/pvclock.h
43 @@ -76,6 +76,8 @@ unsigned __pvclock_read_cycles(const struct pvclock_vcpu_time_info *src,
44 u8 ret_flags;
45
46 version = src->version;
47 + /* Make the latest version visible */
48 + smp_rmb();
49
50 offset = pvclock_get_nsec_offset(src);
51 ret = src->system_time + offset;
52 diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c
53 index 7abb2b88572e..1e7de3cefc9c 100644
54 --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c
55 +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c
56 @@ -1110,6 +1110,13 @@ get_next_pebs_record_by_bit(void *base, void *top, int bit)
57 void *at;
58 u64 pebs_status;
59
60 + /*
61 + * fmt0 does not have a status bitfield (does not use
62 + * perf_record_nhm format)
63 + */
64 + if (x86_pmu.intel_cap.pebs_format < 1)
65 + return base;
66 +
67 if (base == NULL)
68 return NULL;
69
70 @@ -1195,7 +1202,7 @@ static void intel_pmu_drain_pebs_core(struct pt_regs *iregs)
71 if (!event->attr.precise_ip)
72 return;
73
74 - n = (top - at) / x86_pmu.pebs_record_size;
75 + n = top - at;
76 if (n <= 0)
77 return;
78
79 diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
80 index db9a675e751b..9fdf1d330727 100644
81 --- a/arch/x86/kernel/early-quirks.c
82 +++ b/arch/x86/kernel/early-quirks.c
83 @@ -11,7 +11,11 @@
84
85 #include <linux/pci.h>
86 #include <linux/acpi.h>
87 +#include <linux/delay.h>
88 +#include <linux/dmi.h>
89 #include <linux/pci_ids.h>
90 +#include <linux/bcma/bcma.h>
91 +#include <linux/bcma/bcma_regs.h>
92 #include <drm/i915_drm.h>
93 #include <asm/pci-direct.h>
94 #include <asm/dma.h>
95 @@ -21,6 +25,9 @@
96 #include <asm/iommu.h>
97 #include <asm/gart.h>
98 #include <asm/irq_remapping.h>
99 +#include <asm/early_ioremap.h>
100 +
101 +#define dev_err(msg) pr_err("pci 0000:%02x:%02x.%d: %s", bus, slot, func, msg)
102
103 static void __init fix_hypertransport_config(int num, int slot, int func)
104 {
105 @@ -76,6 +83,13 @@ static void __init nvidia_bugs(int num, int slot, int func)
106 #ifdef CONFIG_ACPI
107 #ifdef CONFIG_X86_IO_APIC
108 /*
109 + * Only applies to Nvidia root ports (bus 0) and not to
110 + * Nvidia graphics cards with PCI ports on secondary buses.
111 + */
112 + if (num)
113 + return;
114 +
115 + /*
116 * All timer overrides on Nvidia are
117 * wrong unless HPET is enabled.
118 * Unfortunately that's not true on many Asus boards.
119 @@ -589,6 +603,61 @@ static void __init force_disable_hpet(int num, int slot, int func)
120 #endif
121 }
122
123 +#define BCM4331_MMIO_SIZE 16384
124 +#define BCM4331_PM_CAP 0x40
125 +#define bcma_aread32(reg) ioread32(mmio + 1 * BCMA_CORE_SIZE + reg)
126 +#define bcma_awrite32(reg, val) iowrite32(val, mmio + 1 * BCMA_CORE_SIZE + reg)
127 +
128 +static void __init apple_airport_reset(int bus, int slot, int func)
129 +{
130 + void __iomem *mmio;
131 + u16 pmcsr;
132 + u64 addr;
133 + int i;
134 +
135 + if (!dmi_match(DMI_SYS_VENDOR, "Apple Inc."))
136 + return;
137 +
138 + /* Card may have been put into PCI_D3hot by grub quirk */
139 + pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
140 +
141 + if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
142 + pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
143 + write_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL, pmcsr);
144 + mdelay(10);
145 +
146 + pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
147 + if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
148 + dev_err("Cannot power up Apple AirPort card\n");
149 + return;
150 + }
151 + }
152 +
153 + addr = read_pci_config(bus, slot, func, PCI_BASE_ADDRESS_0);
154 + addr |= (u64)read_pci_config(bus, slot, func, PCI_BASE_ADDRESS_1) << 32;
155 + addr &= PCI_BASE_ADDRESS_MEM_MASK;
156 +
157 + mmio = early_ioremap(addr, BCM4331_MMIO_SIZE);
158 + if (!mmio) {
159 + dev_err("Cannot iomap Apple AirPort card\n");
160 + return;
161 + }
162 +
163 + pr_info("Resetting Apple AirPort card (left enabled by EFI)\n");
164 +
165 + for (i = 0; bcma_aread32(BCMA_RESET_ST) && i < 30; i++)
166 + udelay(10);
167 +
168 + bcma_awrite32(BCMA_RESET_CTL, BCMA_RESET_CTL_RESET);
169 + bcma_aread32(BCMA_RESET_CTL);
170 + udelay(1);
171 +
172 + bcma_awrite32(BCMA_RESET_CTL, 0);
173 + bcma_aread32(BCMA_RESET_CTL);
174 + udelay(10);
175 +
176 + early_iounmap(mmio, BCM4331_MMIO_SIZE);
177 +}
178
179 #define QFLAG_APPLY_ONCE 0x1
180 #define QFLAG_APPLIED 0x2
181 @@ -602,12 +671,6 @@ struct chipset {
182 void (*f)(int num, int slot, int func);
183 };
184
185 -/*
186 - * Only works for devices on the root bus. If you add any devices
187 - * not on bus 0 readd another loop level in early_quirks(). But
188 - * be careful because at least the Nvidia quirk here relies on
189 - * only matching on bus 0.
190 - */
191 static struct chipset early_qrk[] __initdata = {
192 { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID,
193 PCI_CLASS_BRIDGE_PCI, PCI_ANY_ID, QFLAG_APPLY_ONCE, nvidia_bugs },
194 @@ -637,9 +700,13 @@ static struct chipset early_qrk[] __initdata = {
195 */
196 { PCI_VENDOR_ID_INTEL, 0x0f00,
197 PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
198 + { PCI_VENDOR_ID_BROADCOM, 0x4331,
199 + PCI_CLASS_NETWORK_OTHER, PCI_ANY_ID, 0, apple_airport_reset},
200 {}
201 };
202
203 +static void __init early_pci_scan_bus(int bus);
204 +
205 /**
206 * check_dev_quirk - apply early quirks to a given PCI device
207 * @num: bus number
208 @@ -648,7 +715,7 @@ static struct chipset early_qrk[] __initdata = {
209 *
210 * Check the vendor & device ID against the early quirks table.
211 *
212 - * If the device is single function, let early_quirks() know so we don't
213 + * If the device is single function, let early_pci_scan_bus() know so we don't
214 * poke at this device again.
215 */
216 static int __init check_dev_quirk(int num, int slot, int func)
217 @@ -657,6 +724,7 @@ static int __init check_dev_quirk(int num, int slot, int func)
218 u16 vendor;
219 u16 device;
220 u8 type;
221 + u8 sec;
222 int i;
223
224 class = read_pci_config_16(num, slot, func, PCI_CLASS_DEVICE);
225 @@ -684,25 +752,36 @@ static int __init check_dev_quirk(int num, int slot, int func)
226
227 type = read_pci_config_byte(num, slot, func,
228 PCI_HEADER_TYPE);
229 +
230 + if ((type & 0x7f) == PCI_HEADER_TYPE_BRIDGE) {
231 + sec = read_pci_config_byte(num, slot, func, PCI_SECONDARY_BUS);
232 + if (sec > num)
233 + early_pci_scan_bus(sec);
234 + }
235 +
236 if (!(type & 0x80))
237 return -1;
238
239 return 0;
240 }
241
242 -void __init early_quirks(void)
243 +static void __init early_pci_scan_bus(int bus)
244 {
245 int slot, func;
246
247 - if (!early_pci_allowed())
248 - return;
249 -
250 /* Poor man's PCI discovery */
251 - /* Only scan the root bus */
252 for (slot = 0; slot < 32; slot++)
253 for (func = 0; func < 8; func++) {
254 /* Only probe function 0 on single fn devices */
255 - if (check_dev_quirk(0, slot, func))
256 + if (check_dev_quirk(bus, slot, func))
257 break;
258 }
259 }
260 +
261 +void __init early_quirks(void)
262 +{
263 + if (!early_pci_allowed())
264 + return;
265 +
266 + early_pci_scan_bus(0);
267 +}
268 diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
269 index 2f355d229a58..bf0ce75735b0 100644
270 --- a/arch/x86/kernel/pvclock.c
271 +++ b/arch/x86/kernel/pvclock.c
272 @@ -66,6 +66,8 @@ u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src)
273
274 do {
275 version = __pvclock_read_cycles(src, &ret, &flags);
276 + /* Make sure that the version double-check is last. */
277 + smp_rmb();
278 } while ((src->version & 1) || version != src->version);
279
280 return flags & valid_flags;
281 @@ -80,6 +82,8 @@ cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
282
283 do {
284 version = __pvclock_read_cycles(src, &ret, &flags);
285 + /* Make sure that the version double-check is last. */
286 + smp_rmb();
287 } while ((src->version & 1) || version != src->version);
288
289 if (unlikely((flags & PVCLOCK_GUEST_STOPPED) != 0)) {
290 diff --git a/block/ioprio.c b/block/ioprio.c
291 index cc7800e9eb44..01b8116298a1 100644
292 --- a/block/ioprio.c
293 +++ b/block/ioprio.c
294 @@ -150,8 +150,10 @@ static int get_task_ioprio(struct task_struct *p)
295 if (ret)
296 goto out;
297 ret = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, IOPRIO_NORM);
298 + task_lock(p);
299 if (p->io_context)
300 ret = p->io_context->ioprio;
301 + task_unlock(p);
302 out:
303 return ret;
304 }
305 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
306 index b79cb10e289e..bd370c98f77d 100644
307 --- a/drivers/ata/libata-core.c
308 +++ b/drivers/ata/libata-core.c
309 @@ -4138,6 +4138,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
310 */
311 { "ST380013AS", "3.20", ATA_HORKAGE_MAX_SEC_1024 },
312
313 + /*
314 + * Device times out with higher max sects.
315 + * https://bugzilla.kernel.org/show_bug.cgi?id=121671
316 + */
317 + { "LITEON CX1-JB256-HP", NULL, ATA_HORKAGE_MAX_SEC_1024 },
318 +
319 /* Devices we expect to fail diagnostics */
320
321 /* Devices where NCQ should be avoided */
322 diff --git a/drivers/bcma/bcma_private.h b/drivers/bcma/bcma_private.h
323 index 38f156745d53..71df8f2afc6c 100644
324 --- a/drivers/bcma/bcma_private.h
325 +++ b/drivers/bcma/bcma_private.h
326 @@ -8,8 +8,6 @@
327 #include <linux/bcma/bcma.h>
328 #include <linux/delay.h>
329
330 -#define BCMA_CORE_SIZE 0x1000
331 -
332 #define bcma_err(bus, fmt, ...) \
333 pr_err("bus%d: " fmt, (bus)->num, ##__VA_ARGS__)
334 #define bcma_warn(bus, fmt, ...) \
335 diff --git a/drivers/clk/rockchip/clk-mmc-phase.c b/drivers/clk/rockchip/clk-mmc-phase.c
336 index 2685644826a0..33c20c6b45af 100644
337 --- a/drivers/clk/rockchip/clk-mmc-phase.c
338 +++ b/drivers/clk/rockchip/clk-mmc-phase.c
339 @@ -153,6 +153,7 @@ struct clk *rockchip_clk_register_mmc(const char *name,
340 return NULL;
341
342 init.name = name;
343 + init.flags = 0;
344 init.num_parents = num_parents;
345 init.parent_names = parent_names;
346 init.ops = &rockchip_mmc_clk_ops;
347 diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c
348 index 02f9aa4ebe05..e44a1bfb0250 100644
349 --- a/drivers/dma/at_xdmac.c
350 +++ b/drivers/dma/at_xdmac.c
351 @@ -242,7 +242,7 @@ struct at_xdmac_lld {
352 u32 mbr_dus; /* Destination Microblock Stride Register */
353 };
354
355 -
356 +/* 64-bit alignment needed to update CNDA and CUBC registers in an atomic way. */
357 struct at_xdmac_desc {
358 struct at_xdmac_lld lld;
359 enum dma_transfer_direction direction;
360 @@ -253,7 +253,7 @@ struct at_xdmac_desc {
361 unsigned int xfer_size;
362 struct list_head descs_list;
363 struct list_head xfer_node;
364 -};
365 +} __aligned(sizeof(u64));
366
367 static inline void __iomem *at_xdmac_chan_reg_base(struct at_xdmac *atxdmac, unsigned int chan_nb)
368 {
369 @@ -1388,6 +1388,7 @@ at_xdmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
370 u32 cur_nda, check_nda, cur_ubc, mask, value;
371 u8 dwidth = 0;
372 unsigned long flags;
373 + bool initd;
374
375 ret = dma_cookie_status(chan, cookie, txstate);
376 if (ret == DMA_COMPLETE)
377 @@ -1412,7 +1413,16 @@ at_xdmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
378 residue = desc->xfer_size;
379 /*
380 * Flush FIFO: only relevant when the transfer is source peripheral
381 - * synchronized.
382 + * synchronized. Flush is needed before reading CUBC because data in
383 + * the FIFO are not reported by CUBC. Reporting a residue of the
384 + * transfer length while we have data in FIFO can cause issue.
385 + * Usecase: atmel USART has a timeout which means I have received
386 + * characters but there is no more character received for a while. On
387 + * timeout, it requests the residue. If the data are in the DMA FIFO,
388 + * we will return a residue of the transfer length. It means no data
389 + * received. If an application is waiting for these data, it will hang
390 + * since we won't have another USART timeout without receiving new
391 + * data.
392 */
393 mask = AT_XDMAC_CC_TYPE | AT_XDMAC_CC_DSYNC;
394 value = AT_XDMAC_CC_TYPE_PER_TRAN | AT_XDMAC_CC_DSYNC_PER2MEM;
395 @@ -1423,34 +1433,43 @@ at_xdmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
396 }
397
398 /*
399 - * When processing the residue, we need to read two registers but we
400 - * can't do it in an atomic way. AT_XDMAC_CNDA is used to find where
401 - * we stand in the descriptor list and AT_XDMAC_CUBC is used
402 - * to know how many data are remaining for the current descriptor.
403 - * Since the dma channel is not paused to not loose data, between the
404 - * AT_XDMAC_CNDA and AT_XDMAC_CUBC read, we may have change of
405 - * descriptor.
406 - * For that reason, after reading AT_XDMAC_CUBC, we check if we are
407 - * still using the same descriptor by reading a second time
408 - * AT_XDMAC_CNDA. If AT_XDMAC_CNDA has changed, it means we have to
409 - * read again AT_XDMAC_CUBC.
410 + * The easiest way to compute the residue should be to pause the DMA
411 + * but doing this can lead to miss some data as some devices don't
412 + * have FIFO.
413 + * We need to read several registers because:
414 + * - DMA is running therefore a descriptor change is possible while
415 + * reading these registers
416 + * - When the block transfer is done, the value of the CUBC register
417 + * is set to its initial value until the fetch of the next descriptor.
418 + * This value will corrupt the residue calculation so we have to skip
419 + * it.
420 + *
421 + * INITD -------- ------------
422 + * |____________________|
423 + * _______________________ _______________
424 + * NDA @desc2 \/ @desc3
425 + * _______________________/\_______________
426 + * __________ ___________ _______________
427 + * CUBC 0 \/ MAX desc1 \/ MAX desc2
428 + * __________/\___________/\_______________
429 + *
430 + * Since descriptors are aligned on 64 bits, we can assume that
431 + * the update of NDA and CUBC is atomic.
432 * Memory barriers are used to ensure the read order of the registers.
433 - * A max number of retries is set because unlikely it can never ends if
434 - * we are transferring a lot of data with small buffers.
435 + * A max number of retries is set because unlikely it could never ends.
436 */
437 - cur_nda = at_xdmac_chan_read(atchan, AT_XDMAC_CNDA) & 0xfffffffc;
438 - rmb();
439 - cur_ubc = at_xdmac_chan_read(atchan, AT_XDMAC_CUBC);
440 for (retry = 0; retry < AT_XDMAC_RESIDUE_MAX_RETRIES; retry++) {
441 - rmb();
442 check_nda = at_xdmac_chan_read(atchan, AT_XDMAC_CNDA) & 0xfffffffc;
443 -
444 - if (likely(cur_nda == check_nda))
445 - break;
446 -
447 - cur_nda = check_nda;
448 + rmb();
449 + initd = !!(at_xdmac_chan_read(atchan, AT_XDMAC_CC) & AT_XDMAC_CC_INITD);
450 rmb();
451 cur_ubc = at_xdmac_chan_read(atchan, AT_XDMAC_CUBC);
452 + rmb();
453 + cur_nda = at_xdmac_chan_read(atchan, AT_XDMAC_CNDA) & 0xfffffffc;
454 + rmb();
455 +
456 + if ((check_nda == cur_nda) && initd)
457 + break;
458 }
459
460 if (unlikely(retry >= AT_XDMAC_RESIDUE_MAX_RETRIES)) {
461 @@ -1459,6 +1478,19 @@ at_xdmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
462 }
463
464 /*
465 + * Flush FIFO: only relevant when the transfer is source peripheral
466 + * synchronized. Another flush is needed here because CUBC is updated
467 + * when the controller sends the data write command. It can lead to
468 + * report data that are not written in the memory or the device. The
469 + * FIFO flush ensures that data are really written.
470 + */
471 + if ((desc->lld.mbr_cfg & mask) == value) {
472 + at_xdmac_write(atxdmac, AT_XDMAC_GSWF, atchan->mask);
473 + while (!(at_xdmac_chan_read(atchan, AT_XDMAC_CIS) & AT_XDMAC_CIS_FIS))
474 + cpu_relax();
475 + }
476 +
477 + /*
478 * Remove size of all microblocks already transferred and the current
479 * one. Then add the remaining size to transfer of the current
480 * microblock.
481 diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
482 index 165d3001c301..c6ec5c62b7a9 100644
483 --- a/drivers/hwtracing/intel_th/core.c
484 +++ b/drivers/hwtracing/intel_th/core.c
485 @@ -419,6 +419,38 @@ static struct intel_th_subdevice {
486 },
487 };
488
489 +#ifdef CONFIG_MODULES
490 +static void __intel_th_request_hub_module(struct work_struct *work)
491 +{
492 + struct intel_th *th = container_of(work, struct intel_th,
493 + request_module_work);
494 +
495 + request_module("intel_th_%s", th->hub->name);
496 +}
497 +
498 +static int intel_th_request_hub_module(struct intel_th *th)
499 +{
500 + INIT_WORK(&th->request_module_work, __intel_th_request_hub_module);
501 + schedule_work(&th->request_module_work);
502 +
503 + return 0;
504 +}
505 +
506 +static void intel_th_request_hub_module_flush(struct intel_th *th)
507 +{
508 + flush_work(&th->request_module_work);
509 +}
510 +#else
511 +static inline int intel_th_request_hub_module(struct intel_th *th)
512 +{
513 + return -EINVAL;
514 +}
515 +
516 +static inline void intel_th_request_hub_module_flush(struct intel_th *th)
517 +{
518 +}
519 +#endif /* CONFIG_MODULES */
520 +
521 static int intel_th_populate(struct intel_th *th, struct resource *devres,
522 unsigned int ndevres, int irq)
523 {
524 @@ -488,7 +520,7 @@ static int intel_th_populate(struct intel_th *th, struct resource *devres,
525 /* need switch driver to be loaded to enumerate the rest */
526 if (subdev->type == INTEL_TH_SWITCH && !req) {
527 th->hub = thdev;
528 - err = request_module("intel_th_%s", subdev->name);
529 + err = intel_th_request_hub_module(th);
530 if (!err)
531 req++;
532 }
533 @@ -603,6 +635,7 @@ void intel_th_free(struct intel_th *th)
534 {
535 int i;
536
537 + intel_th_request_hub_module_flush(th);
538 for (i = 0; i < TH_SUBDEVICE_MAX; i++)
539 if (th->thdev[i] != th->hub)
540 intel_th_device_remove(th->thdev[i]);
541 diff --git a/drivers/hwtracing/intel_th/intel_th.h b/drivers/hwtracing/intel_th/intel_th.h
542 index 57fd72b20fae..d03a6cd1c65d 100644
543 --- a/drivers/hwtracing/intel_th/intel_th.h
544 +++ b/drivers/hwtracing/intel_th/intel_th.h
545 @@ -197,6 +197,9 @@ struct intel_th {
546
547 int id;
548 int major;
549 +#ifdef CONFIG_MODULES
550 + struct work_struct request_module_work;
551 +#endif /* CONFIG_MODULES */
552 #ifdef CONFIG_INTEL_TH_DEBUG
553 struct dentry *dbg;
554 #endif
555 diff --git a/drivers/hwtracing/intel_th/pci.c b/drivers/hwtracing/intel_th/pci.c
556 index 641e87936064..d57a2f75dccf 100644
557 --- a/drivers/hwtracing/intel_th/pci.c
558 +++ b/drivers/hwtracing/intel_th/pci.c
559 @@ -67,6 +67,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = {
560 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa126),
561 .driver_data = (kernel_ulong_t)0,
562 },
563 + {
564 + /* Kaby Lake PCH-H */
565 + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa2a6),
566 + .driver_data = (kernel_ulong_t)0,
567 + },
568 { 0 },
569 };
570
571 diff --git a/drivers/i2c/muxes/i2c-mux-reg.c b/drivers/i2c/muxes/i2c-mux-reg.c
572 index 5fbd5bd0878f..49fc2c7e560a 100644
573 --- a/drivers/i2c/muxes/i2c-mux-reg.c
574 +++ b/drivers/i2c/muxes/i2c-mux-reg.c
575 @@ -150,7 +150,7 @@ static int i2c_mux_reg_probe_dt(struct regmux *mux,
576 mux->data.idle_in_use = true;
577
578 /* map address from "reg" if exists */
579 - if (of_address_to_resource(np, 0, &res)) {
580 + if (of_address_to_resource(np, 0, &res) == 0) {
581 mux->data.reg_size = resource_size(&res);
582 mux->data.reg = devm_ioremap_resource(&pdev->dev, &res);
583 if (IS_ERR(mux->data.reg))
584 diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
585 index fd4100d56d8c..2b2f9d66c2c7 100644
586 --- a/drivers/input/joystick/xpad.c
587 +++ b/drivers/input/joystick/xpad.c
588 @@ -1200,22 +1200,15 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
589 int ep_irq_in_idx;
590 int i, error;
591
592 + if (intf->cur_altsetting->desc.bNumEndpoints != 2)
593 + return -ENODEV;
594 +
595 for (i = 0; xpad_device[i].idVendor; i++) {
596 if ((le16_to_cpu(udev->descriptor.idVendor) == xpad_device[i].idVendor) &&
597 (le16_to_cpu(udev->descriptor.idProduct) == xpad_device[i].idProduct))
598 break;
599 }
600
601 - if (xpad_device[i].xtype == XTYPE_XBOXONE &&
602 - intf->cur_altsetting->desc.bInterfaceNumber != 0) {
603 - /*
604 - * The Xbox One controller lists three interfaces all with the
605 - * same interface class, subclass and protocol. Differentiate by
606 - * interface number.
607 - */
608 - return -ENODEV;
609 - }
610 -
611 xpad = kzalloc(sizeof(struct usb_xpad), GFP_KERNEL);
612 if (!xpad)
613 return -ENOMEM;
614 @@ -1246,6 +1239,8 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
615 if (intf->cur_altsetting->desc.bInterfaceClass == USB_CLASS_VENDOR_SPEC) {
616 if (intf->cur_altsetting->desc.bInterfaceProtocol == 129)
617 xpad->xtype = XTYPE_XBOX360W;
618 + else if (intf->cur_altsetting->desc.bInterfaceProtocol == 208)
619 + xpad->xtype = XTYPE_XBOXONE;
620 else
621 xpad->xtype = XTYPE_XBOX360;
622 } else {
623 @@ -1260,6 +1255,17 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
624 xpad->mapping |= MAP_STICKS_TO_NULL;
625 }
626
627 + if (xpad->xtype == XTYPE_XBOXONE &&
628 + intf->cur_altsetting->desc.bInterfaceNumber != 0) {
629 + /*
630 + * The Xbox One controller lists three interfaces all with the
631 + * same interface class, subclass and protocol. Differentiate by
632 + * interface number.
633 + */
634 + error = -ENODEV;
635 + goto err_free_in_urb;
636 + }
637 +
638 error = xpad_init_output(intf, xpad);
639 if (error)
640 goto err_free_in_urb;
641 diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
642 index 78f93cf68840..be5b399da5d3 100644
643 --- a/drivers/input/mouse/elantech.c
644 +++ b/drivers/input/mouse/elantech.c
645 @@ -1568,13 +1568,7 @@ static int elantech_set_properties(struct elantech_data *etd)
646 case 5:
647 etd->hw_version = 3;
648 break;
649 - case 6:
650 - case 7:
651 - case 8:
652 - case 9:
653 - case 10:
654 - case 13:
655 - case 14:
656 + case 6 ... 14:
657 etd->hw_version = 4;
658 break;
659 default:
660 diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c
661 index a3f0f5a47490..0f586780ceb4 100644
662 --- a/drivers/input/mouse/vmmouse.c
663 +++ b/drivers/input/mouse/vmmouse.c
664 @@ -355,18 +355,11 @@ int vmmouse_detect(struct psmouse *psmouse, bool set_properties)
665 return -ENXIO;
666 }
667
668 - if (!request_region(VMMOUSE_PROTO_PORT, 4, "vmmouse")) {
669 - psmouse_dbg(psmouse, "VMMouse port in use.\n");
670 - return -EBUSY;
671 - }
672 -
673 /* Check if the device is present */
674 response = ~VMMOUSE_PROTO_MAGIC;
675 VMMOUSE_CMD(GETVERSION, 0, version, response, dummy1, dummy2);
676 - if (response != VMMOUSE_PROTO_MAGIC || version == 0xffffffffU) {
677 - release_region(VMMOUSE_PROTO_PORT, 4);
678 + if (response != VMMOUSE_PROTO_MAGIC || version == 0xffffffffU)
679 return -ENXIO;
680 - }
681
682 if (set_properties) {
683 psmouse->vendor = VMMOUSE_VENDOR;
684 @@ -374,8 +367,6 @@ int vmmouse_detect(struct psmouse *psmouse, bool set_properties)
685 psmouse->model = version;
686 }
687
688 - release_region(VMMOUSE_PROTO_PORT, 4);
689 -
690 return 0;
691 }
692
693 @@ -394,7 +385,6 @@ static void vmmouse_disconnect(struct psmouse *psmouse)
694 psmouse_reset(psmouse);
695 input_unregister_device(priv->abs_dev);
696 kfree(priv);
697 - release_region(VMMOUSE_PROTO_PORT, 4);
698 }
699
700 /**
701 @@ -438,15 +428,10 @@ int vmmouse_init(struct psmouse *psmouse)
702 struct input_dev *rel_dev = psmouse->dev, *abs_dev;
703 int error;
704
705 - if (!request_region(VMMOUSE_PROTO_PORT, 4, "vmmouse")) {
706 - psmouse_dbg(psmouse, "VMMouse port in use.\n");
707 - return -EBUSY;
708 - }
709 -
710 psmouse_reset(psmouse);
711 error = vmmouse_enable(psmouse);
712 if (error)
713 - goto release_region;
714 + return error;
715
716 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
717 abs_dev = input_allocate_device();
718 @@ -502,8 +487,5 @@ init_fail:
719 kfree(priv);
720 psmouse->private = NULL;
721
722 -release_region:
723 - release_region(VMMOUSE_PROTO_PORT, 4);
724 -
725 return error;
726 }
727 diff --git a/drivers/input/touchscreen/tsc2004.c b/drivers/input/touchscreen/tsc2004.c
728 index 7295c198aa08..6fe55d598fac 100644
729 --- a/drivers/input/touchscreen/tsc2004.c
730 +++ b/drivers/input/touchscreen/tsc2004.c
731 @@ -22,6 +22,11 @@
732 #include <linux/regmap.h>
733 #include "tsc200x-core.h"
734
735 +static const struct input_id tsc2004_input_id = {
736 + .bustype = BUS_I2C,
737 + .product = 2004,
738 +};
739 +
740 static int tsc2004_cmd(struct device *dev, u8 cmd)
741 {
742 u8 tx = TSC200X_CMD | TSC200X_CMD_12BIT | cmd;
743 @@ -42,7 +47,7 @@ static int tsc2004_probe(struct i2c_client *i2c,
744 const struct i2c_device_id *id)
745
746 {
747 - return tsc200x_probe(&i2c->dev, i2c->irq, BUS_I2C,
748 + return tsc200x_probe(&i2c->dev, i2c->irq, &tsc2004_input_id,
749 devm_regmap_init_i2c(i2c, &tsc200x_regmap_config),
750 tsc2004_cmd);
751 }
752 diff --git a/drivers/input/touchscreen/tsc2005.c b/drivers/input/touchscreen/tsc2005.c
753 index b9f593dfd2ef..f2c5f0e47f77 100644
754 --- a/drivers/input/touchscreen/tsc2005.c
755 +++ b/drivers/input/touchscreen/tsc2005.c
756 @@ -24,6 +24,11 @@
757 #include <linux/regmap.h>
758 #include "tsc200x-core.h"
759
760 +static const struct input_id tsc2005_input_id = {
761 + .bustype = BUS_SPI,
762 + .product = 2005,
763 +};
764 +
765 static int tsc2005_cmd(struct device *dev, u8 cmd)
766 {
767 u8 tx = TSC200X_CMD | TSC200X_CMD_12BIT | cmd;
768 @@ -62,7 +67,7 @@ static int tsc2005_probe(struct spi_device *spi)
769 if (error)
770 return error;
771
772 - return tsc200x_probe(&spi->dev, spi->irq, BUS_SPI,
773 + return tsc200x_probe(&spi->dev, spi->irq, &tsc2005_input_id,
774 devm_regmap_init_spi(spi, &tsc200x_regmap_config),
775 tsc2005_cmd);
776 }
777 diff --git a/drivers/input/touchscreen/tsc200x-core.c b/drivers/input/touchscreen/tsc200x-core.c
778 index 15240c1ee850..dfa7f1c4f545 100644
779 --- a/drivers/input/touchscreen/tsc200x-core.c
780 +++ b/drivers/input/touchscreen/tsc200x-core.c
781 @@ -450,7 +450,7 @@ static void tsc200x_close(struct input_dev *input)
782 mutex_unlock(&ts->mutex);
783 }
784
785 -int tsc200x_probe(struct device *dev, int irq, __u16 bustype,
786 +int tsc200x_probe(struct device *dev, int irq, const struct input_id *tsc_id,
787 struct regmap *regmap,
788 int (*tsc200x_cmd)(struct device *dev, u8 cmd))
789 {
790 @@ -547,9 +547,18 @@ int tsc200x_probe(struct device *dev, int irq, __u16 bustype,
791 snprintf(ts->phys, sizeof(ts->phys),
792 "%s/input-ts", dev_name(dev));
793
794 - input_dev->name = "TSC200X touchscreen";
795 + if (tsc_id->product == 2004) {
796 + input_dev->name = "TSC200X touchscreen";
797 + } else {
798 + input_dev->name = devm_kasprintf(dev, GFP_KERNEL,
799 + "TSC%04d touchscreen",
800 + tsc_id->product);
801 + if (!input_dev->name)
802 + return -ENOMEM;
803 + }
804 +
805 input_dev->phys = ts->phys;
806 - input_dev->id.bustype = bustype;
807 + input_dev->id = *tsc_id;
808 input_dev->dev.parent = dev;
809 input_dev->evbit[0] = BIT(EV_ABS) | BIT(EV_KEY);
810 input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
811 diff --git a/drivers/input/touchscreen/tsc200x-core.h b/drivers/input/touchscreen/tsc200x-core.h
812 index 7a482d102614..49a63a3c6840 100644
813 --- a/drivers/input/touchscreen/tsc200x-core.h
814 +++ b/drivers/input/touchscreen/tsc200x-core.h
815 @@ -70,7 +70,7 @@
816 extern const struct regmap_config tsc200x_regmap_config;
817 extern const struct dev_pm_ops tsc200x_pm_ops;
818
819 -int tsc200x_probe(struct device *dev, int irq, __u16 bustype,
820 +int tsc200x_probe(struct device *dev, int irq, const struct input_id *tsc_id,
821 struct regmap *regmap,
822 int (*tsc200x_cmd)(struct device *dev, u8 cmd));
823 int tsc200x_remove(struct device *dev);
824 diff --git a/drivers/input/touchscreen/wacom_w8001.c b/drivers/input/touchscreen/wacom_w8001.c
825 index 2792ca397dd0..3ed0ce1e4dcb 100644
826 --- a/drivers/input/touchscreen/wacom_w8001.c
827 +++ b/drivers/input/touchscreen/wacom_w8001.c
828 @@ -27,7 +27,7 @@ MODULE_AUTHOR("Jaya Kumar <jayakumar.lkml@gmail.com>");
829 MODULE_DESCRIPTION(DRIVER_DESC);
830 MODULE_LICENSE("GPL");
831
832 -#define W8001_MAX_LENGTH 11
833 +#define W8001_MAX_LENGTH 13
834 #define W8001_LEAD_MASK 0x80
835 #define W8001_LEAD_BYTE 0x80
836 #define W8001_TAB_MASK 0x40
837 diff --git a/drivers/media/usb/airspy/airspy.c b/drivers/media/usb/airspy/airspy.c
838 index 565a59310747..34b35ebd60ac 100644
839 --- a/drivers/media/usb/airspy/airspy.c
840 +++ b/drivers/media/usb/airspy/airspy.c
841 @@ -1073,7 +1073,7 @@ static int airspy_probe(struct usb_interface *intf,
842 if (ret) {
843 dev_err(s->dev, "Failed to register as video device (%d)\n",
844 ret);
845 - goto err_unregister_v4l2_dev;
846 + goto err_free_controls;
847 }
848 dev_info(s->dev, "Registered as %s\n",
849 video_device_node_name(&s->vdev));
850 @@ -1082,7 +1082,6 @@ static int airspy_probe(struct usb_interface *intf,
851
852 err_free_controls:
853 v4l2_ctrl_handler_free(&s->hdl);
854 -err_unregister_v4l2_dev:
855 v4l2_device_unregister(&s->v4l2_dev);
856 err_free_mem:
857 kfree(s);
858 diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
859 index c641c202fe7e..64950035613b 100644
860 --- a/drivers/mmc/card/block.c
861 +++ b/drivers/mmc/card/block.c
862 @@ -1767,8 +1767,8 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
863
864 packed_cmd_hdr = packed->cmd_hdr;
865 memset(packed_cmd_hdr, 0, sizeof(packed->cmd_hdr));
866 - packed_cmd_hdr[0] = (packed->nr_entries << 16) |
867 - (PACKED_CMD_WR << 8) | PACKED_CMD_VER;
868 + packed_cmd_hdr[0] = cpu_to_le32((packed->nr_entries << 16) |
869 + (PACKED_CMD_WR << 8) | PACKED_CMD_VER);
870 hdr_blocks = mmc_large_sector(card) ? 8 : 1;
871
872 /*
873 @@ -1782,14 +1782,14 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
874 ((brq->data.blocks * brq->data.blksz) >=
875 card->ext_csd.data_tag_unit_size);
876 /* Argument of CMD23 */
877 - packed_cmd_hdr[(i * 2)] =
878 + packed_cmd_hdr[(i * 2)] = cpu_to_le32(
879 (do_rel_wr ? MMC_CMD23_ARG_REL_WR : 0) |
880 (do_data_tag ? MMC_CMD23_ARG_TAG_REQ : 0) |
881 - blk_rq_sectors(prq);
882 + blk_rq_sectors(prq));
883 /* Argument of CMD18 or CMD25 */
884 - packed_cmd_hdr[((i * 2)) + 1] =
885 + packed_cmd_hdr[((i * 2)) + 1] = cpu_to_le32(
886 mmc_card_blockaddr(card) ?
887 - blk_rq_pos(prq) : blk_rq_pos(prq) << 9;
888 + blk_rq_pos(prq) : blk_rq_pos(prq) << 9);
889 packed->blocks += blk_rq_sectors(prq);
890 i++;
891 }
892 diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
893 index 8b3275d7792a..8f5e93cb7975 100644
894 --- a/drivers/net/can/at91_can.c
895 +++ b/drivers/net/can/at91_can.c
896 @@ -712,9 +712,10 @@ static int at91_poll_rx(struct net_device *dev, int quota)
897
898 /* upper group completed, look again in lower */
899 if (priv->rx_next > get_mb_rx_low_last(priv) &&
900 - quota > 0 && mb > get_mb_rx_last(priv)) {
901 + mb > get_mb_rx_last(priv)) {
902 priv->rx_next = get_mb_rx_first(priv);
903 - goto again;
904 + if (quota > 0)
905 + goto again;
906 }
907
908 return received;
909 diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
910 index f91b094288da..e3dccd3200d5 100644
911 --- a/drivers/net/can/c_can/c_can.c
912 +++ b/drivers/net/can/c_can/c_can.c
913 @@ -332,9 +332,23 @@ static void c_can_setup_tx_object(struct net_device *dev, int iface,
914
915 priv->write_reg(priv, C_CAN_IFACE(MSGCTRL_REG, iface), ctrl);
916
917 - for (i = 0; i < frame->can_dlc; i += 2) {
918 - priv->write_reg(priv, C_CAN_IFACE(DATA1_REG, iface) + i / 2,
919 - frame->data[i] | (frame->data[i + 1] << 8));
920 + if (priv->type == BOSCH_D_CAN) {
921 + u32 data = 0, dreg = C_CAN_IFACE(DATA1_REG, iface);
922 +
923 + for (i = 0; i < frame->can_dlc; i += 4, dreg += 2) {
924 + data = (u32)frame->data[i];
925 + data |= (u32)frame->data[i + 1] << 8;
926 + data |= (u32)frame->data[i + 2] << 16;
927 + data |= (u32)frame->data[i + 3] << 24;
928 + priv->write_reg32(priv, dreg, data);
929 + }
930 + } else {
931 + for (i = 0; i < frame->can_dlc; i += 2) {
932 + priv->write_reg(priv,
933 + C_CAN_IFACE(DATA1_REG, iface) + i / 2,
934 + frame->data[i] |
935 + (frame->data[i + 1] << 8));
936 + }
937 }
938 }
939
940 @@ -402,10 +416,20 @@ static int c_can_read_msg_object(struct net_device *dev, int iface, u32 ctrl)
941 } else {
942 int i, dreg = C_CAN_IFACE(DATA1_REG, iface);
943
944 - for (i = 0; i < frame->can_dlc; i += 2, dreg ++) {
945 - data = priv->read_reg(priv, dreg);
946 - frame->data[i] = data;
947 - frame->data[i + 1] = data >> 8;
948 + if (priv->type == BOSCH_D_CAN) {
949 + for (i = 0; i < frame->can_dlc; i += 4, dreg += 2) {
950 + data = priv->read_reg32(priv, dreg);
951 + frame->data[i] = data;
952 + frame->data[i + 1] = data >> 8;
953 + frame->data[i + 2] = data >> 16;
954 + frame->data[i + 3] = data >> 24;
955 + }
956 + } else {
957 + for (i = 0; i < frame->can_dlc; i += 2, dreg++) {
958 + data = priv->read_reg(priv, dreg);
959 + frame->data[i] = data;
960 + frame->data[i + 1] = data >> 8;
961 + }
962 }
963 }
964
965 diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
966 index 910c12e2638e..ad535a854e5c 100644
967 --- a/drivers/net/can/dev.c
968 +++ b/drivers/net/can/dev.c
969 @@ -798,6 +798,9 @@ static int can_validate(struct nlattr *tb[], struct nlattr *data[])
970 * - control mode with CAN_CTRLMODE_FD set
971 */
972
973 + if (!data)
974 + return 0;
975 +
976 if (data[IFLA_CAN_CTRLMODE]) {
977 struct can_ctrlmode *cm = nla_data(data[IFLA_CAN_CTRLMODE]);
978
979 @@ -1008,6 +1011,11 @@ static int can_newlink(struct net *src_net, struct net_device *dev,
980 return -EOPNOTSUPP;
981 }
982
983 +static void can_dellink(struct net_device *dev, struct list_head *head)
984 +{
985 + return;
986 +}
987 +
988 static struct rtnl_link_ops can_link_ops __read_mostly = {
989 .kind = "can",
990 .maxtype = IFLA_CAN_MAX,
991 @@ -1016,6 +1024,7 @@ static struct rtnl_link_ops can_link_ops __read_mostly = {
992 .validate = can_validate,
993 .newlink = can_newlink,
994 .changelink = can_changelink,
995 + .dellink = can_dellink,
996 .get_size = can_get_size,
997 .fill_info = can_fill_info,
998 .get_xstats_size = can_get_xstats_size,
999 diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
1000 index a4ac6fedac75..71ec9cb08e06 100644
1001 --- a/drivers/net/ethernet/marvell/mvneta.c
1002 +++ b/drivers/net/ethernet/marvell/mvneta.c
1003 @@ -226,7 +226,7 @@
1004 /* Various constants */
1005
1006 /* Coalescing */
1007 -#define MVNETA_TXDONE_COAL_PKTS 1
1008 +#define MVNETA_TXDONE_COAL_PKTS 0 /* interrupt per packet */
1009 #define MVNETA_RX_COAL_PKTS 32
1010 #define MVNETA_RX_COAL_USEC 100
1011
1012 diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c
1013 index 1029aa7889b5..398ec45aadef 100644
1014 --- a/drivers/pinctrl/freescale/pinctrl-imx.c
1015 +++ b/drivers/pinctrl/freescale/pinctrl-imx.c
1016 @@ -207,9 +207,9 @@ static int imx_pmx_set(struct pinctrl_dev *pctldev, unsigned selector,
1017 pin_reg = &info->pin_regs[pin_id];
1018
1019 if (pin_reg->mux_reg == -1) {
1020 - dev_err(ipctl->dev, "Pin(%s) does not support mux function\n",
1021 + dev_dbg(ipctl->dev, "Pin(%s) does not support mux function\n",
1022 info->pins[pin_id].name);
1023 - return -EINVAL;
1024 + continue;
1025 }
1026
1027 if (info->flags & SHARE_MUX_CONF_REG) {
1028 diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
1029 index 23b6b8c29a99..73d8d47ea465 100644
1030 --- a/drivers/pinctrl/pinctrl-single.c
1031 +++ b/drivers/pinctrl/pinctrl-single.c
1032 @@ -1576,6 +1576,9 @@ static inline void pcs_irq_set(struct pcs_soc_data *pcs_soc,
1033 else
1034 mask &= ~soc_mask;
1035 pcs->write(mask, pcswi->reg);
1036 +
1037 + /* flush posted write */
1038 + mask = pcs->read(pcswi->reg);
1039 raw_spin_unlock(&pcs->lock);
1040 }
1041
1042 diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chrome/cros_ec_dev.c
1043 index d45cd254ed1c..2b331d5b9e79 100644
1044 --- a/drivers/platform/chrome/cros_ec_dev.c
1045 +++ b/drivers/platform/chrome/cros_ec_dev.c
1046 @@ -147,13 +147,19 @@ static long ec_device_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg)
1047 goto exit;
1048 }
1049
1050 + if (u_cmd.outsize != s_cmd->outsize ||
1051 + u_cmd.insize != s_cmd->insize) {
1052 + ret = -EINVAL;
1053 + goto exit;
1054 + }
1055 +
1056 s_cmd->command += ec->cmd_offset;
1057 ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd);
1058 /* Only copy data to userland if data was received. */
1059 if (ret < 0)
1060 goto exit;
1061
1062 - if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + u_cmd.insize))
1063 + if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + s_cmd->insize))
1064 ret = -EFAULT;
1065 exit:
1066 kfree(s_cmd);
1067 diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
1068 index 456987c88baa..b13cd074c52a 100644
1069 --- a/drivers/power/power_supply_core.c
1070 +++ b/drivers/power/power_supply_core.c
1071 @@ -565,11 +565,12 @@ static int power_supply_read_temp(struct thermal_zone_device *tzd,
1072
1073 WARN_ON(tzd == NULL);
1074 psy = tzd->devdata;
1075 - ret = psy->desc->get_property(psy, POWER_SUPPLY_PROP_TEMP, &val);
1076 + ret = power_supply_get_property(psy, POWER_SUPPLY_PROP_TEMP, &val);
1077 + if (ret)
1078 + return ret;
1079
1080 /* Convert tenths of degree Celsius to milli degree Celsius. */
1081 - if (!ret)
1082 - *temp = val.intval * 100;
1083 + *temp = val.intval * 100;
1084
1085 return ret;
1086 }
1087 @@ -612,10 +613,12 @@ static int ps_get_max_charge_cntl_limit(struct thermal_cooling_device *tcd,
1088 int ret;
1089
1090 psy = tcd->devdata;
1091 - ret = psy->desc->get_property(psy,
1092 - POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX, &val);
1093 - if (!ret)
1094 - *state = val.intval;
1095 + ret = power_supply_get_property(psy,
1096 + POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX, &val);
1097 + if (ret)
1098 + return ret;
1099 +
1100 + *state = val.intval;
1101
1102 return ret;
1103 }
1104 @@ -628,10 +631,12 @@ static int ps_get_cur_chrage_cntl_limit(struct thermal_cooling_device *tcd,
1105 int ret;
1106
1107 psy = tcd->devdata;
1108 - ret = psy->desc->get_property(psy,
1109 - POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT, &val);
1110 - if (!ret)
1111 - *state = val.intval;
1112 + ret = power_supply_get_property(psy,
1113 + POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT, &val);
1114 + if (ret)
1115 + return ret;
1116 +
1117 + *state = val.intval;
1118
1119 return ret;
1120 }
1121 diff --git a/drivers/pps/clients/pps_parport.c b/drivers/pps/clients/pps_parport.c
1122 index 38a8bbe74810..83797d89c30f 100644
1123 --- a/drivers/pps/clients/pps_parport.c
1124 +++ b/drivers/pps/clients/pps_parport.c
1125 @@ -195,7 +195,7 @@ static void parport_detach(struct parport *port)
1126 struct pps_client_pp *device;
1127
1128 /* FIXME: oooh, this is ugly! */
1129 - if (strcmp(pardev->name, KBUILD_MODNAME))
1130 + if (!pardev || strcmp(pardev->name, KBUILD_MODNAME))
1131 /* not our port */
1132 return;
1133
1134 diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
1135 index 8f1b091e1732..12b2cb7769f9 100644
1136 --- a/drivers/s390/net/qeth_l2_main.c
1137 +++ b/drivers/s390/net/qeth_l2_main.c
1138 @@ -1051,6 +1051,7 @@ static void qeth_l2_remove_device(struct ccwgroup_device *cgdev)
1139 qeth_l2_set_offline(cgdev);
1140
1141 if (card->dev) {
1142 + netif_napi_del(&card->napi);
1143 unregister_netdev(card->dev);
1144 card->dev = NULL;
1145 }
1146 diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
1147 index 543960e96b42..50cec6b13d27 100644
1148 --- a/drivers/s390/net/qeth_l3_main.c
1149 +++ b/drivers/s390/net/qeth_l3_main.c
1150 @@ -3246,6 +3246,7 @@ static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
1151 qeth_l3_set_offline(cgdev);
1152
1153 if (card->dev) {
1154 + netif_napi_del(&card->napi);
1155 unregister_netdev(card->dev);
1156 card->dev = NULL;
1157 }
1158 diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
1159 index 43ac62623bf2..7a58128a0000 100644
1160 --- a/drivers/scsi/ipr.c
1161 +++ b/drivers/scsi/ipr.c
1162 @@ -10095,6 +10095,7 @@ static int ipr_probe_ioa(struct pci_dev *pdev,
1163 ioa_cfg->intr_flag = IPR_USE_MSI;
1164 else {
1165 ioa_cfg->intr_flag = IPR_USE_LSI;
1166 + ioa_cfg->clear_isr = 1;
1167 ioa_cfg->nvectors = 1;
1168 dev_info(&pdev->dev, "Cannot enable MSI.\n");
1169 }
1170 diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
1171 index 93cbefa75b26..11cdb172cfaf 100644
1172 --- a/drivers/scsi/scsi_devinfo.c
1173 +++ b/drivers/scsi/scsi_devinfo.c
1174 @@ -426,7 +426,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
1175 * here, and we don't know what device it is
1176 * trying to work with, leave it as-is.
1177 */
1178 - vmax = 8; /* max length of vendor */
1179 + vmax = sizeof(devinfo->vendor);
1180 vskip = vendor;
1181 while (vmax > 0 && *vskip == ' ') {
1182 vmax--;
1183 @@ -436,7 +436,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
1184 while (vmax > 0 && vskip[vmax - 1] == ' ')
1185 --vmax;
1186
1187 - mmax = 16; /* max length of model */
1188 + mmax = sizeof(devinfo->model);
1189 mskip = model;
1190 while (mmax > 0 && *mskip == ' ') {
1191 mmax--;
1192 @@ -452,10 +452,12 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
1193 * Behave like the older version of get_device_flags.
1194 */
1195 if (memcmp(devinfo->vendor, vskip, vmax) ||
1196 - devinfo->vendor[vmax])
1197 + (vmax < sizeof(devinfo->vendor) &&
1198 + devinfo->vendor[vmax]))
1199 continue;
1200 if (memcmp(devinfo->model, mskip, mmax) ||
1201 - devinfo->model[mmax])
1202 + (mmax < sizeof(devinfo->model) &&
1203 + devinfo->model[mmax]))
1204 continue;
1205 return devinfo;
1206 } else {
1207 diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c
1208 index fbb0a4d74e91..39d7c7c70112 100644
1209 --- a/drivers/spi/spi-sun4i.c
1210 +++ b/drivers/spi/spi-sun4i.c
1211 @@ -170,13 +170,17 @@ static int sun4i_spi_transfer_one(struct spi_master *master,
1212 {
1213 struct sun4i_spi *sspi = spi_master_get_devdata(master);
1214 unsigned int mclk_rate, div, timeout;
1215 + unsigned int start, end, tx_time;
1216 unsigned int tx_len = 0;
1217 int ret = 0;
1218 u32 reg;
1219
1220 /* We don't support transfer larger than the FIFO */
1221 if (tfr->len > SUN4I_FIFO_DEPTH)
1222 - return -EINVAL;
1223 + return -EMSGSIZE;
1224 +
1225 + if (tfr->tx_buf && tfr->len >= SUN4I_FIFO_DEPTH)
1226 + return -EMSGSIZE;
1227
1228 reinit_completion(&sspi->done);
1229 sspi->tx_buf = tfr->tx_buf;
1230 @@ -269,8 +273,12 @@ static int sun4i_spi_transfer_one(struct spi_master *master,
1231 sun4i_spi_write(sspi, SUN4I_BURST_CNT_REG, SUN4I_BURST_CNT(tfr->len));
1232 sun4i_spi_write(sspi, SUN4I_XMIT_CNT_REG, SUN4I_XMIT_CNT(tx_len));
1233
1234 - /* Fill the TX FIFO */
1235 - sun4i_spi_fill_fifo(sspi, SUN4I_FIFO_DEPTH);
1236 + /*
1237 + * Fill the TX FIFO
1238 + * Filling the FIFO fully causes timeout for some reason
1239 + * at least on spi2 on A10s
1240 + */
1241 + sun4i_spi_fill_fifo(sspi, SUN4I_FIFO_DEPTH - 1);
1242
1243 /* Enable the interrupts */
1244 sun4i_spi_write(sspi, SUN4I_INT_CTL_REG, SUN4I_INT_CTL_TC);
1245 @@ -279,9 +287,16 @@ static int sun4i_spi_transfer_one(struct spi_master *master,
1246 reg = sun4i_spi_read(sspi, SUN4I_CTL_REG);
1247 sun4i_spi_write(sspi, SUN4I_CTL_REG, reg | SUN4I_CTL_XCH);
1248
1249 + tx_time = max(tfr->len * 8 * 2 / (tfr->speed_hz / 1000), 100U);
1250 + start = jiffies;
1251 timeout = wait_for_completion_timeout(&sspi->done,
1252 - msecs_to_jiffies(1000));
1253 + msecs_to_jiffies(tx_time));
1254 + end = jiffies;
1255 if (!timeout) {
1256 + dev_warn(&master->dev,
1257 + "%s: timeout transferring %u bytes@%iHz for %i(%i)ms",
1258 + dev_name(&spi->dev), tfr->len, tfr->speed_hz,
1259 + jiffies_to_msecs(end - start), tx_time);
1260 ret = -ETIMEDOUT;
1261 goto out;
1262 }
1263 diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c
1264 index ac48f59705a8..e77add01b0e9 100644
1265 --- a/drivers/spi/spi-sun6i.c
1266 +++ b/drivers/spi/spi-sun6i.c
1267 @@ -160,6 +160,7 @@ static int sun6i_spi_transfer_one(struct spi_master *master,
1268 {
1269 struct sun6i_spi *sspi = spi_master_get_devdata(master);
1270 unsigned int mclk_rate, div, timeout;
1271 + unsigned int start, end, tx_time;
1272 unsigned int tx_len = 0;
1273 int ret = 0;
1274 u32 reg;
1275 @@ -269,9 +270,16 @@ static int sun6i_spi_transfer_one(struct spi_master *master,
1276 reg = sun6i_spi_read(sspi, SUN6I_TFR_CTL_REG);
1277 sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg | SUN6I_TFR_CTL_XCH);
1278
1279 + tx_time = max(tfr->len * 8 * 2 / (tfr->speed_hz / 1000), 100U);
1280 + start = jiffies;
1281 timeout = wait_for_completion_timeout(&sspi->done,
1282 - msecs_to_jiffies(1000));
1283 + msecs_to_jiffies(tx_time));
1284 + end = jiffies;
1285 if (!timeout) {
1286 + dev_warn(&master->dev,
1287 + "%s: timeout transferring %u bytes@%iHz for %i(%i)ms",
1288 + dev_name(&spi->dev), tfr->len, tfr->speed_hz,
1289 + jiffies_to_msecs(end - start), tx_time);
1290 ret = -ETIMEDOUT;
1291 goto out;
1292 }
1293 diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
1294 index d029bbe9eb36..641fed609911 100644
1295 --- a/drivers/usb/host/ohci-q.c
1296 +++ b/drivers/usb/host/ohci-q.c
1297 @@ -183,7 +183,6 @@ static int ed_schedule (struct ohci_hcd *ohci, struct ed *ed)
1298 {
1299 int branch;
1300
1301 - ed->state = ED_OPER;
1302 ed->ed_prev = NULL;
1303 ed->ed_next = NULL;
1304 ed->hwNextED = 0;
1305 @@ -259,6 +258,8 @@ static int ed_schedule (struct ohci_hcd *ohci, struct ed *ed)
1306 /* the HC may not see the schedule updates yet, but if it does
1307 * then they'll be properly ordered.
1308 */
1309 +
1310 + ed->state = ED_OPER;
1311 return 0;
1312 }
1313
1314 diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c
1315 index 9c234209d8b5..47a4177b16d2 100644
1316 --- a/drivers/xen/xen-pciback/conf_space.c
1317 +++ b/drivers/xen/xen-pciback/conf_space.c
1318 @@ -183,8 +183,7 @@ int xen_pcibk_config_read(struct pci_dev *dev, int offset, int size,
1319 field_start = OFFSET(cfg_entry);
1320 field_end = OFFSET(cfg_entry) + field->size;
1321
1322 - if ((req_start >= field_start && req_start < field_end)
1323 - || (req_end > field_start && req_end <= field_end)) {
1324 + if (req_end > field_start && field_end > req_start) {
1325 err = conf_space_read(dev, cfg_entry, field_start,
1326 &tmp_val);
1327 if (err)
1328 @@ -230,8 +229,7 @@ int xen_pcibk_config_write(struct pci_dev *dev, int offset, int size, u32 value)
1329 field_start = OFFSET(cfg_entry);
1330 field_end = OFFSET(cfg_entry) + field->size;
1331
1332 - if ((req_start >= field_start && req_start < field_end)
1333 - || (req_end > field_start && req_end <= field_end)) {
1334 + if (req_end > field_start && field_end > req_start) {
1335 tmp_val = 0;
1336
1337 err = xen_pcibk_config_read(dev, field_start,
1338 diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c
1339 index 9433e46518c8..531e76474983 100644
1340 --- a/drivers/xen/xenbus/xenbus_dev_frontend.c
1341 +++ b/drivers/xen/xenbus/xenbus_dev_frontend.c
1342 @@ -316,11 +316,18 @@ static int xenbus_write_transaction(unsigned msg_type,
1343 rc = -ENOMEM;
1344 goto out;
1345 }
1346 + } else {
1347 + list_for_each_entry(trans, &u->transactions, list)
1348 + if (trans->handle.id == u->u.msg.tx_id)
1349 + break;
1350 + if (&trans->list == &u->transactions)
1351 + return -ESRCH;
1352 }
1353
1354 reply = xenbus_dev_request_and_reply(&u->u.msg);
1355 if (IS_ERR(reply)) {
1356 - kfree(trans);
1357 + if (msg_type == XS_TRANSACTION_START)
1358 + kfree(trans);
1359 rc = PTR_ERR(reply);
1360 goto out;
1361 }
1362 @@ -333,12 +340,7 @@ static int xenbus_write_transaction(unsigned msg_type,
1363 list_add(&trans->list, &u->transactions);
1364 }
1365 } else if (u->u.msg.type == XS_TRANSACTION_END) {
1366 - list_for_each_entry(trans, &u->transactions, list)
1367 - if (trans->handle.id == u->u.msg.tx_id)
1368 - break;
1369 - BUG_ON(&trans->list == &u->transactions);
1370 list_del(&trans->list);
1371 -
1372 kfree(trans);
1373 }
1374
1375 diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c
1376 index ba804f3d8278..ce65591b4168 100644
1377 --- a/drivers/xen/xenbus/xenbus_xs.c
1378 +++ b/drivers/xen/xenbus/xenbus_xs.c
1379 @@ -250,9 +250,6 @@ void *xenbus_dev_request_and_reply(struct xsd_sockmsg *msg)
1380
1381 mutex_unlock(&xs_state.request_mutex);
1382
1383 - if (IS_ERR(ret))
1384 - return ret;
1385 -
1386 if ((msg->type == XS_TRANSACTION_END) ||
1387 ((req_msg.type == XS_TRANSACTION_START) &&
1388 (msg->type == XS_ERROR)))
1389 diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c
1390 index 7bf835f85bc8..12ceaf52dae6 100644
1391 --- a/fs/9p/vfs_file.c
1392 +++ b/fs/9p/vfs_file.c
1393 @@ -74,7 +74,7 @@ int v9fs_file_open(struct inode *inode, struct file *file)
1394 v9fs_proto_dotu(v9ses));
1395 fid = file->private_data;
1396 if (!fid) {
1397 - fid = v9fs_fid_clone(file->f_path.dentry);
1398 + fid = v9fs_fid_clone(file_dentry(file));
1399 if (IS_ERR(fid))
1400 return PTR_ERR(fid);
1401
1402 @@ -100,7 +100,7 @@ int v9fs_file_open(struct inode *inode, struct file *file)
1403 * because we want write after unlink usecase
1404 * to work.
1405 */
1406 - fid = v9fs_writeback_fid(file->f_path.dentry);
1407 + fid = v9fs_writeback_fid(file_dentry(file));
1408 if (IS_ERR(fid)) {
1409 err = PTR_ERR(fid);
1410 mutex_unlock(&v9inode->v_mutex);
1411 @@ -516,7 +516,7 @@ v9fs_mmap_file_mmap(struct file *filp, struct vm_area_struct *vma)
1412 * because we want write after unlink usecase
1413 * to work.
1414 */
1415 - fid = v9fs_writeback_fid(filp->f_path.dentry);
1416 + fid = v9fs_writeback_fid(file_dentry(filp));
1417 if (IS_ERR(fid)) {
1418 retval = PTR_ERR(fid);
1419 mutex_unlock(&v9inode->v_mutex);
1420 diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
1421 index feef8a9c4de7..11309683d65f 100644
1422 --- a/fs/ecryptfs/file.c
1423 +++ b/fs/ecryptfs/file.c
1424 @@ -170,6 +170,19 @@ out:
1425 return rc;
1426 }
1427
1428 +static int ecryptfs_mmap(struct file *file, struct vm_area_struct *vma)
1429 +{
1430 + struct file *lower_file = ecryptfs_file_to_lower(file);
1431 + /*
1432 + * Don't allow mmap on top of file systems that don't support it
1433 + * natively. If FILESYSTEM_MAX_STACK_DEPTH > 2 or ecryptfs
1434 + * allows recursive mounting, this will need to be extended.
1435 + */
1436 + if (!lower_file->f_op->mmap)
1437 + return -ENODEV;
1438 + return generic_file_mmap(file, vma);
1439 +}
1440 +
1441 /**
1442 * ecryptfs_open
1443 * @inode: inode speciying file to open
1444 @@ -364,7 +377,7 @@ const struct file_operations ecryptfs_main_fops = {
1445 #ifdef CONFIG_COMPAT
1446 .compat_ioctl = ecryptfs_compat_ioctl,
1447 #endif
1448 - .mmap = generic_file_mmap,
1449 + .mmap = ecryptfs_mmap,
1450 .open = ecryptfs_open,
1451 .flush = ecryptfs_flush,
1452 .release = ecryptfs_release,
1453 diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c
1454 index e818f5ac7a26..866bb18efefe 100644
1455 --- a/fs/ecryptfs/kthread.c
1456 +++ b/fs/ecryptfs/kthread.c
1457 @@ -25,7 +25,6 @@
1458 #include <linux/slab.h>
1459 #include <linux/wait.h>
1460 #include <linux/mount.h>
1461 -#include <linux/file.h>
1462 #include "ecryptfs_kernel.h"
1463
1464 struct ecryptfs_open_req {
1465 @@ -148,7 +147,7 @@ int ecryptfs_privileged_open(struct file **lower_file,
1466 flags |= IS_RDONLY(d_inode(lower_dentry)) ? O_RDONLY : O_RDWR;
1467 (*lower_file) = dentry_open(&req.path, flags, cred);
1468 if (!IS_ERR(*lower_file))
1469 - goto have_file;
1470 + goto out;
1471 if ((flags & O_ACCMODE) == O_RDONLY) {
1472 rc = PTR_ERR((*lower_file));
1473 goto out;
1474 @@ -166,16 +165,8 @@ int ecryptfs_privileged_open(struct file **lower_file,
1475 mutex_unlock(&ecryptfs_kthread_ctl.mux);
1476 wake_up(&ecryptfs_kthread_ctl.wait);
1477 wait_for_completion(&req.done);
1478 - if (IS_ERR(*lower_file)) {
1479 + if (IS_ERR(*lower_file))
1480 rc = PTR_ERR(*lower_file);
1481 - goto out;
1482 - }
1483 -have_file:
1484 - if ((*lower_file)->f_op->mmap == NULL) {
1485 - fput(*lower_file);
1486 - *lower_file = NULL;
1487 - rc = -EMEDIUMTYPE;
1488 - }
1489 out:
1490 return rc;
1491 }
1492 diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
1493 index 3578b25fccfd..62880586ed85 100644
1494 --- a/fs/ext4/extents.c
1495 +++ b/fs/ext4/extents.c
1496 @@ -469,6 +469,10 @@ static int __ext4_ext_check(const char *function, unsigned int line,
1497 error_msg = "invalid extent entries";
1498 goto corrupted;
1499 }
1500 + if (unlikely(depth > 32)) {
1501 + error_msg = "too large eh_depth";
1502 + goto corrupted;
1503 + }
1504 /* Verify checksum on non-root extent tree nodes */
1505 if (ext_depth(inode) != depth &&
1506 !ext4_extent_block_csum_verify(inode, eh)) {
1507 diff --git a/fs/inode.c b/fs/inode.c
1508 index 1be5f9003eb3..b0edef500590 100644
1509 --- a/fs/inode.c
1510 +++ b/fs/inode.c
1511 @@ -1733,8 +1733,8 @@ static int __remove_privs(struct dentry *dentry, int kill)
1512 */
1513 int file_remove_privs(struct file *file)
1514 {
1515 - struct dentry *dentry = file->f_path.dentry;
1516 - struct inode *inode = d_inode(dentry);
1517 + struct dentry *dentry = file_dentry(file);
1518 + struct inode *inode = file_inode(file);
1519 int kill;
1520 int error = 0;
1521
1522 @@ -1742,7 +1742,7 @@ int file_remove_privs(struct file *file)
1523 if (IS_NOSEC(inode))
1524 return 0;
1525
1526 - kill = file_needs_remove_privs(file);
1527 + kill = dentry_needs_remove_privs(dentry);
1528 if (kill < 0)
1529 return kill;
1530 if (kill)
1531 diff --git a/fs/locks.c b/fs/locks.c
1532 index 6333263b7bc8..8eddae23e10b 100644
1533 --- a/fs/locks.c
1534 +++ b/fs/locks.c
1535 @@ -1602,7 +1602,7 @@ generic_add_lease(struct file *filp, long arg, struct file_lock **flp, void **pr
1536 {
1537 struct file_lock *fl, *my_fl = NULL, *lease;
1538 struct dentry *dentry = filp->f_path.dentry;
1539 - struct inode *inode = dentry->d_inode;
1540 + struct inode *inode = file_inode(filp);
1541 struct file_lock_context *ctx;
1542 bool is_deleg = (*flp)->fl_flags & FL_DELEG;
1543 int error;
1544 diff --git a/fs/namespace.c b/fs/namespace.c
1545 index 33064fcbfff9..5be02a0635be 100644
1546 --- a/fs/namespace.c
1547 +++ b/fs/namespace.c
1548 @@ -1562,6 +1562,7 @@ void __detach_mounts(struct dentry *dentry)
1549 goto out_unlock;
1550
1551 lock_mount_hash();
1552 + event++;
1553 while (!hlist_empty(&mp->m_list)) {
1554 mnt = hlist_entry(mp->m_list.first, struct mount, mnt_mp_list);
1555 if (mnt->mnt.mnt_flags & MNT_UMOUNT) {
1556 diff --git a/fs/nilfs2/the_nilfs.c b/fs/nilfs2/the_nilfs.c
1557 index 69bd801afb53..37e49cb2ac4c 100644
1558 --- a/fs/nilfs2/the_nilfs.c
1559 +++ b/fs/nilfs2/the_nilfs.c
1560 @@ -443,7 +443,7 @@ static int nilfs_valid_sb(struct nilfs_super_block *sbp)
1561 if (!sbp || le16_to_cpu(sbp->s_magic) != NILFS_SUPER_MAGIC)
1562 return 0;
1563 bytes = le16_to_cpu(sbp->s_bytes);
1564 - if (bytes > BLOCK_SIZE)
1565 + if (bytes < sumoff + 4 || bytes > BLOCK_SIZE)
1566 return 0;
1567 crc = crc32_le(le32_to_cpu(sbp->s_crc_seed), (unsigned char *)sbp,
1568 sumoff);
1569 diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
1570 index 0597820f5d9d..4f729ffff75d 100644
1571 --- a/fs/overlayfs/inode.c
1572 +++ b/fs/overlayfs/inode.c
1573 @@ -63,6 +63,9 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
1574 if (!err) {
1575 upperdentry = ovl_dentry_upper(dentry);
1576
1577 + if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID))
1578 + attr->ia_valid &= ~ATTR_MODE;
1579 +
1580 mutex_lock(&upperdentry->d_inode->i_mutex);
1581 err = notify_change(upperdentry, attr, NULL);
1582 if (!err)
1583 diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
1584 index c4bd0e2c173c..ef2e8c97e183 100644
1585 --- a/include/asm-generic/vmlinux.lds.h
1586 +++ b/include/asm-generic/vmlinux.lds.h
1587 @@ -531,15 +531,19 @@
1588
1589 #define INIT_TEXT \
1590 *(.init.text) \
1591 + *(.text.startup) \
1592 MEM_DISCARD(init.text)
1593
1594 #define EXIT_DATA \
1595 *(.exit.data) \
1596 + *(.fini_array) \
1597 + *(.dtors) \
1598 MEM_DISCARD(exit.data) \
1599 MEM_DISCARD(exit.rodata)
1600
1601 #define EXIT_TEXT \
1602 *(.exit.text) \
1603 + *(.text.exit) \
1604 MEM_DISCARD(exit.text)
1605
1606 #define EXIT_CALL \
1607 diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h
1608 index 3feb1b2d75d8..14cd6f77e284 100644
1609 --- a/include/linux/bcma/bcma.h
1610 +++ b/include/linux/bcma/bcma.h
1611 @@ -156,6 +156,7 @@ struct bcma_host_ops {
1612 #define BCMA_CORE_DEFAULT 0xFFF
1613
1614 #define BCMA_MAX_NR_CORES 16
1615 +#define BCMA_CORE_SIZE 0x1000
1616
1617 /* Chip IDs of PCIe devices */
1618 #define BCMA_CHIP_ID_BCM4313 0x4313
1619 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
1620 index 1c9d701f7a72..a3424f28aaf4 100644
1621 --- a/kernel/cgroup.c
1622 +++ b/kernel/cgroup.c
1623 @@ -4793,6 +4793,7 @@ static void init_and_link_css(struct cgroup_subsys_state *css,
1624 memset(css, 0, sizeof(*css));
1625 css->cgroup = cgrp;
1626 css->ss = ss;
1627 + css->id = -1;
1628 INIT_LIST_HEAD(&css->sibling);
1629 INIT_LIST_HEAD(&css->children);
1630 css->serial_nr = css_serial_nr_next++;
1631 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
1632 index 6c0cdb5a73f8..67d1e1597d9c 100644
1633 --- a/kernel/sched/core.c
1634 +++ b/kernel/sched/core.c
1635 @@ -4951,14 +4951,16 @@ void show_state_filter(unsigned long state_filter)
1636 /*
1637 * reset the NMI-timeout, listing all files on a slow
1638 * console might take a lot of time:
1639 + * Also, reset softlockup watchdogs on all CPUs, because
1640 + * another CPU might be blocked waiting for us to process
1641 + * an IPI.
1642 */
1643 touch_nmi_watchdog();
1644 + touch_all_softlockup_watchdogs();
1645 if (!state_filter || (p->state & state_filter))
1646 sched_show_task(p);
1647 }
1648
1649 - touch_all_softlockup_watchdogs();
1650 -
1651 #ifdef CONFIG_SCHED_DEBUG
1652 sysrq_sched_debug_show();
1653 #endif
1654 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
1655 index 51c615279b23..b8b516c37bf1 100644
1656 --- a/kernel/sched/fair.c
1657 +++ b/kernel/sched/fair.c
1658 @@ -687,8 +687,6 @@ void init_entity_runnable_average(struct sched_entity *se)
1659 /* when this task enqueue'ed, it will contribute to its cfs_rq's load_avg */
1660 }
1661
1662 -static inline unsigned long cfs_rq_runnable_load_avg(struct cfs_rq *cfs_rq);
1663 -static inline unsigned long cfs_rq_load_avg(struct cfs_rq *cfs_rq);
1664 #else
1665 void init_entity_runnable_average(struct sched_entity *se)
1666 {
1667 @@ -4594,19 +4592,24 @@ static long effective_load(struct task_group *tg, int cpu, long wl, long wg)
1668 return wl;
1669
1670 for_each_sched_entity(se) {
1671 - long w, W;
1672 + struct cfs_rq *cfs_rq = se->my_q;
1673 + long W, w = cfs_rq_load_avg(cfs_rq);
1674
1675 - tg = se->my_q->tg;
1676 + tg = cfs_rq->tg;
1677
1678 /*
1679 * W = @wg + \Sum rw_j
1680 */
1681 - W = wg + calc_tg_weight(tg, se->my_q);
1682 + W = wg + atomic_long_read(&tg->load_avg);
1683 +
1684 + /* Ensure \Sum rw_j >= rw_i */
1685 + W -= cfs_rq->tg_load_avg_contrib;
1686 + W += w;
1687
1688 /*
1689 * w = rw_i + @wl
1690 */
1691 - w = cfs_rq_load_avg(se->my_q) + wl;
1692 + w += wl;
1693
1694 /*
1695 * wl = S * s'_i; see (2)
1696 diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
1697 index f5e86d282d52..80016b329d94 100644
1698 --- a/kernel/time/posix-cpu-timers.c
1699 +++ b/kernel/time/posix-cpu-timers.c
1700 @@ -808,6 +808,7 @@ static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp)
1701 timer->it.cpu.expires = 0;
1702 sample_to_timespec(timer->it_clock, timer->it.cpu.expires,
1703 &itp->it_value);
1704 + return;
1705 } else {
1706 cpu_timer_sample_group(timer->it_clock, p, &now);
1707 unlock_task_sighand(p, &flags);
1708 diff --git a/mm/compaction.c b/mm/compaction.c
1709 index 7881e072dc33..dba02dec7195 100644
1710 --- a/mm/compaction.c
1711 +++ b/mm/compaction.c
1712 @@ -475,25 +475,23 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,
1713
1714 /* Found a free page, break it into order-0 pages */
1715 isolated = split_free_page(page);
1716 + if (!isolated)
1717 + break;
1718 +
1719 total_isolated += isolated;
1720 + cc->nr_freepages += isolated;
1721 for (i = 0; i < isolated; i++) {
1722 list_add(&page->lru, freelist);
1723 page++;
1724 }
1725 -
1726 - /* If a page was split, advance to the end of it */
1727 - if (isolated) {
1728 - cc->nr_freepages += isolated;
1729 - if (!strict &&
1730 - cc->nr_migratepages <= cc->nr_freepages) {
1731 - blockpfn += isolated;
1732 - break;
1733 - }
1734 -
1735 - blockpfn += isolated - 1;
1736 - cursor += isolated - 1;
1737 - continue;
1738 + if (!strict && cc->nr_migratepages <= cc->nr_freepages) {
1739 + blockpfn += isolated;
1740 + break;
1741 }
1742 + /* Advance to the end of split page */
1743 + blockpfn += isolated - 1;
1744 + cursor += isolated - 1;
1745 + continue;
1746
1747 isolate_fail:
1748 if (strict)
1749 @@ -503,6 +501,9 @@ isolate_fail:
1750
1751 }
1752
1753 + if (locked)
1754 + spin_unlock_irqrestore(&cc->zone->lock, flags);
1755 +
1756 /*
1757 * There is a tiny chance that we have read bogus compound_order(),
1758 * so be careful to not go outside of the pageblock.
1759 @@ -524,9 +525,6 @@ isolate_fail:
1760 if (strict && blockpfn < end_pfn)
1761 total_isolated = 0;
1762
1763 - if (locked)
1764 - spin_unlock_irqrestore(&cc->zone->lock, flags);
1765 -
1766 /* Update the pageblock-skip if the whole pageblock was scanned */
1767 if (blockpfn == end_pfn)
1768 update_pageblock_skip(cc, valid_page, total_isolated, false);
1769 @@ -966,7 +964,6 @@ static void isolate_freepages(struct compact_control *cc)
1770 block_end_pfn = block_start_pfn,
1771 block_start_pfn -= pageblock_nr_pages,
1772 isolate_start_pfn = block_start_pfn) {
1773 -
1774 /*
1775 * This can iterate a massively long zone without finding any
1776 * suitable migration targets, so periodically check if we need
1777 @@ -990,32 +987,30 @@ static void isolate_freepages(struct compact_control *cc)
1778 continue;
1779
1780 /* Found a block suitable for isolating free pages from. */
1781 - isolate_freepages_block(cc, &isolate_start_pfn,
1782 - block_end_pfn, freelist, false);
1783 + isolate_freepages_block(cc, &isolate_start_pfn, block_end_pfn,
1784 + freelist, false);
1785
1786 /*
1787 - * If we isolated enough freepages, or aborted due to async
1788 - * compaction being contended, terminate the loop.
1789 - * Remember where the free scanner should restart next time,
1790 - * which is where isolate_freepages_block() left off.
1791 - * But if it scanned the whole pageblock, isolate_start_pfn
1792 - * now points at block_end_pfn, which is the start of the next
1793 - * pageblock.
1794 - * In that case we will however want to restart at the start
1795 - * of the previous pageblock.
1796 + * If we isolated enough freepages, or aborted due to lock
1797 + * contention, terminate.
1798 */
1799 if ((cc->nr_freepages >= cc->nr_migratepages)
1800 || cc->contended) {
1801 - if (isolate_start_pfn >= block_end_pfn)
1802 + if (isolate_start_pfn >= block_end_pfn) {
1803 + /*
1804 + * Restart at previous pageblock if more
1805 + * freepages can be isolated next time.
1806 + */
1807 isolate_start_pfn =
1808 block_start_pfn - pageblock_nr_pages;
1809 + }
1810 break;
1811 - } else {
1812 + } else if (isolate_start_pfn < block_end_pfn) {
1813 /*
1814 - * isolate_freepages_block() should not terminate
1815 - * prematurely unless contended, or isolated enough
1816 + * If isolation failed early, do not continue
1817 + * needlessly.
1818 */
1819 - VM_BUG_ON(isolate_start_pfn < block_end_pfn);
1820 + break;
1821 }
1822 }
1823
1824 diff --git a/mm/internal.h b/mm/internal.h
1825 index 38e24b89e4c4..6979b2bd3227 100644
1826 --- a/mm/internal.h
1827 +++ b/mm/internal.h
1828 @@ -22,7 +22,8 @@
1829 */
1830 #define GFP_RECLAIM_MASK (__GFP_RECLAIM|__GFP_HIGH|__GFP_IO|__GFP_FS|\
1831 __GFP_NOWARN|__GFP_REPEAT|__GFP_NOFAIL|\
1832 - __GFP_NORETRY|__GFP_MEMALLOC|__GFP_NOMEMALLOC)
1833 + __GFP_NORETRY|__GFP_MEMALLOC|__GFP_NOMEMALLOC|\
1834 + __GFP_ATOMIC)
1835
1836 /* The GFP flags allowed during early boot */
1837 #define GFP_BOOT_MASK (__GFP_BITS_MASK & ~(__GFP_RECLAIM|__GFP_IO|__GFP_FS))
1838 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1839 index 99c1738684ec..2bcdfbf8c36d 100644
1840 --- a/mm/page_alloc.c
1841 +++ b/mm/page_alloc.c
1842 @@ -275,7 +275,9 @@ static inline void reset_deferred_meminit(pg_data_t *pgdat)
1843 /* Returns true if the struct page for the pfn is uninitialised */
1844 static inline bool __meminit early_page_uninitialised(unsigned long pfn)
1845 {
1846 - if (pfn >= NODE_DATA(early_pfn_to_nid(pfn))->first_deferred_pfn)
1847 + int nid = early_pfn_to_nid(pfn);
1848 +
1849 + if (node_online(nid) && pfn >= NODE_DATA(nid)->first_deferred_pfn)
1850 return true;
1851
1852 return false;
1853 @@ -1057,7 +1059,7 @@ int __meminit early_pfn_to_nid(unsigned long pfn)
1854 spin_lock(&early_pfn_lock);
1855 nid = __early_pfn_to_nid(pfn, &early_pfnnid_cache);
1856 if (nid < 0)
1857 - nid = 0;
1858 + nid = first_online_node;
1859 spin_unlock(&early_pfn_lock);
1860
1861 return nid;
1862 diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
1863 index 7d8f581d9f1f..ddc3573894b0 100644
1864 --- a/net/ceph/osdmap.c
1865 +++ b/net/ceph/osdmap.c
1866 @@ -1192,6 +1192,115 @@ struct ceph_osdmap *ceph_osdmap_decode(void **p, void *end)
1867 }
1868
1869 /*
1870 + * Encoding order is (new_up_client, new_state, new_weight). Need to
1871 + * apply in the (new_weight, new_state, new_up_client) order, because
1872 + * an incremental map may look like e.g.
1873 + *
1874 + * new_up_client: { osd=6, addr=... } # set osd_state and addr
1875 + * new_state: { osd=6, xorstate=EXISTS } # clear osd_state
1876 + */
1877 +static int decode_new_up_state_weight(void **p, void *end,
1878 + struct ceph_osdmap *map)
1879 +{
1880 + void *new_up_client;
1881 + void *new_state;
1882 + void *new_weight_end;
1883 + u32 len;
1884 +
1885 + new_up_client = *p;
1886 + ceph_decode_32_safe(p, end, len, e_inval);
1887 + len *= sizeof(u32) + sizeof(struct ceph_entity_addr);
1888 + ceph_decode_need(p, end, len, e_inval);
1889 + *p += len;
1890 +
1891 + new_state = *p;
1892 + ceph_decode_32_safe(p, end, len, e_inval);
1893 + len *= sizeof(u32) + sizeof(u8);
1894 + ceph_decode_need(p, end, len, e_inval);
1895 + *p += len;
1896 +
1897 + /* new_weight */
1898 + ceph_decode_32_safe(p, end, len, e_inval);
1899 + while (len--) {
1900 + s32 osd;
1901 + u32 w;
1902 +
1903 + ceph_decode_need(p, end, 2*sizeof(u32), e_inval);
1904 + osd = ceph_decode_32(p);
1905 + w = ceph_decode_32(p);
1906 + BUG_ON(osd >= map->max_osd);
1907 + pr_info("osd%d weight 0x%x %s\n", osd, w,
1908 + w == CEPH_OSD_IN ? "(in)" :
1909 + (w == CEPH_OSD_OUT ? "(out)" : ""));
1910 + map->osd_weight[osd] = w;
1911 +
1912 + /*
1913 + * If we are marking in, set the EXISTS, and clear the
1914 + * AUTOOUT and NEW bits.
1915 + */
1916 + if (w) {
1917 + map->osd_state[osd] |= CEPH_OSD_EXISTS;
1918 + map->osd_state[osd] &= ~(CEPH_OSD_AUTOOUT |
1919 + CEPH_OSD_NEW);
1920 + }
1921 + }
1922 + new_weight_end = *p;
1923 +
1924 + /* new_state (up/down) */
1925 + *p = new_state;
1926 + len = ceph_decode_32(p);
1927 + while (len--) {
1928 + s32 osd;
1929 + u8 xorstate;
1930 + int ret;
1931 +
1932 + osd = ceph_decode_32(p);
1933 + xorstate = ceph_decode_8(p);
1934 + if (xorstate == 0)
1935 + xorstate = CEPH_OSD_UP;
1936 + BUG_ON(osd >= map->max_osd);
1937 + if ((map->osd_state[osd] & CEPH_OSD_UP) &&
1938 + (xorstate & CEPH_OSD_UP))
1939 + pr_info("osd%d down\n", osd);
1940 + if ((map->osd_state[osd] & CEPH_OSD_EXISTS) &&
1941 + (xorstate & CEPH_OSD_EXISTS)) {
1942 + pr_info("osd%d does not exist\n", osd);
1943 + map->osd_weight[osd] = CEPH_OSD_IN;
1944 + ret = set_primary_affinity(map, osd,
1945 + CEPH_OSD_DEFAULT_PRIMARY_AFFINITY);
1946 + if (ret)
1947 + return ret;
1948 + memset(map->osd_addr + osd, 0, sizeof(*map->osd_addr));
1949 + map->osd_state[osd] = 0;
1950 + } else {
1951 + map->osd_state[osd] ^= xorstate;
1952 + }
1953 + }
1954 +
1955 + /* new_up_client */
1956 + *p = new_up_client;
1957 + len = ceph_decode_32(p);
1958 + while (len--) {
1959 + s32 osd;
1960 + struct ceph_entity_addr addr;
1961 +
1962 + osd = ceph_decode_32(p);
1963 + ceph_decode_copy(p, &addr, sizeof(addr));
1964 + ceph_decode_addr(&addr);
1965 + BUG_ON(osd >= map->max_osd);
1966 + pr_info("osd%d up\n", osd);
1967 + map->osd_state[osd] |= CEPH_OSD_EXISTS | CEPH_OSD_UP;
1968 + map->osd_addr[osd] = addr;
1969 + }
1970 +
1971 + *p = new_weight_end;
1972 + return 0;
1973 +
1974 +e_inval:
1975 + return -EINVAL;
1976 +}
1977 +
1978 +/*
1979 * decode and apply an incremental map update.
1980 */
1981 struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
1982 @@ -1290,49 +1399,10 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
1983 __remove_pg_pool(&map->pg_pools, pi);
1984 }
1985
1986 - /* new_up */
1987 - ceph_decode_32_safe(p, end, len, e_inval);
1988 - while (len--) {
1989 - u32 osd;
1990 - struct ceph_entity_addr addr;
1991 - ceph_decode_32_safe(p, end, osd, e_inval);
1992 - ceph_decode_copy_safe(p, end, &addr, sizeof(addr), e_inval);
1993 - ceph_decode_addr(&addr);
1994 - pr_info("osd%d up\n", osd);
1995 - BUG_ON(osd >= map->max_osd);
1996 - map->osd_state[osd] |= CEPH_OSD_UP | CEPH_OSD_EXISTS;
1997 - map->osd_addr[osd] = addr;
1998 - }
1999 -
2000 - /* new_state */
2001 - ceph_decode_32_safe(p, end, len, e_inval);
2002 - while (len--) {
2003 - u32 osd;
2004 - u8 xorstate;
2005 - ceph_decode_32_safe(p, end, osd, e_inval);
2006 - xorstate = **(u8 **)p;
2007 - (*p)++; /* clean flag */
2008 - if (xorstate == 0)
2009 - xorstate = CEPH_OSD_UP;
2010 - if (xorstate & CEPH_OSD_UP)
2011 - pr_info("osd%d down\n", osd);
2012 - if (osd < map->max_osd)
2013 - map->osd_state[osd] ^= xorstate;
2014 - }
2015 -
2016 - /* new_weight */
2017 - ceph_decode_32_safe(p, end, len, e_inval);
2018 - while (len--) {
2019 - u32 osd, off;
2020 - ceph_decode_need(p, end, sizeof(u32)*2, e_inval);
2021 - osd = ceph_decode_32(p);
2022 - off = ceph_decode_32(p);
2023 - pr_info("osd%d weight 0x%x %s\n", osd, off,
2024 - off == CEPH_OSD_IN ? "(in)" :
2025 - (off == CEPH_OSD_OUT ? "(out)" : ""));
2026 - if (osd < map->max_osd)
2027 - map->osd_weight[osd] = off;
2028 - }
2029 + /* new_up_client, new_state, new_weight */
2030 + err = decode_new_up_state_weight(p, end, map);
2031 + if (err)
2032 + goto bad;
2033
2034 /* new_pg_temp */
2035 err = decode_new_pg_temp(p, end, map);
2036 diff --git a/net/rds/tcp.c b/net/rds/tcp.c
2037 index 9d6ddbacd875..18e50a8fc05f 100644
2038 --- a/net/rds/tcp.c
2039 +++ b/net/rds/tcp.c
2040 @@ -421,7 +421,7 @@ static int rds_tcp_init(void)
2041
2042 ret = rds_tcp_recv_init();
2043 if (ret)
2044 - goto out_slab;
2045 + goto out_pernet;
2046
2047 ret = rds_trans_register(&rds_tcp_transport);
2048 if (ret)
2049 @@ -433,8 +433,9 @@ static int rds_tcp_init(void)
2050
2051 out_recv:
2052 rds_tcp_recv_exit();
2053 -out_slab:
2054 +out_pernet:
2055 unregister_pernet_subsys(&rds_tcp_net_ops);
2056 +out_slab:
2057 kmem_cache_destroy(rds_tcp_conn_slab);
2058 out:
2059 return ret;
2060 diff --git a/sound/core/timer.c b/sound/core/timer.c
2061 index 7c6155f5865b..637d034bb084 100644
2062 --- a/sound/core/timer.c
2063 +++ b/sound/core/timer.c
2064 @@ -1247,6 +1247,7 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,
2065 tu->tstamp = *tstamp;
2066 if ((tu->filter & (1 << event)) == 0 || !tu->tread)
2067 return;
2068 + memset(&r1, 0, sizeof(r1));
2069 r1.event = event;
2070 r1.tstamp = *tstamp;
2071 r1.val = resolution;
2072 @@ -1281,6 +1282,7 @@ static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri,
2073 }
2074 if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) &&
2075 tu->last_resolution != resolution) {
2076 + memset(&r1, 0, sizeof(r1));
2077 r1.event = SNDRV_TIMER_EVENT_RESOLUTION;
2078 r1.tstamp = tstamp;
2079 r1.val = resolution;
2080 @@ -1746,6 +1748,7 @@ static int snd_timer_user_params(struct file *file,
2081 if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) {
2082 if (tu->tread) {
2083 struct snd_timer_tread tread;
2084 + memset(&tread, 0, sizeof(tread));
2085 tread.event = SNDRV_TIMER_EVENT_EARLY;
2086 tread.tstamp.tv_sec = 0;
2087 tread.tstamp.tv_nsec = 0;