Magellan Linux

Contents of /trunk/kernel-lts/patches-3.4/0143-3.4.44-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2203 - (show annotations) (download)
Thu Jun 13 10:38:14 2013 UTC (10 years, 10 months ago) by niro
File size: 57581 byte(s)
-linux-3.4.44
1 diff --git a/arch/arm/configs/at91sam9g45_defconfig b/arch/arm/configs/at91sam9g45_defconfig
2 index 606d48f..8aab786 100644
3 --- a/arch/arm/configs/at91sam9g45_defconfig
4 +++ b/arch/arm/configs/at91sam9g45_defconfig
5 @@ -173,7 +173,6 @@ CONFIG_MMC=y
6 # CONFIG_MMC_BLOCK_BOUNCE is not set
7 CONFIG_SDIO_UART=m
8 CONFIG_MMC_ATMELMCI=y
9 -CONFIG_MMC_ATMELMCI_DMA=y
10 CONFIG_LEDS_ATMEL_PWM=y
11 CONFIG_LEDS_GPIO=y
12 CONFIG_LEDS_TRIGGER_TIMER=y
13 diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
14 index 41dc31f..cc5e50f 100644
15 --- a/arch/arm/include/asm/pgtable.h
16 +++ b/arch/arm/include/asm/pgtable.h
17 @@ -61,6 +61,15 @@ extern void __pgd_error(const char *file, int line, pgd_t);
18 #define FIRST_USER_ADDRESS PAGE_SIZE
19
20 /*
21 + * Use TASK_SIZE as the ceiling argument for free_pgtables() and
22 + * free_pgd_range() to avoid freeing the modules pmd when LPAE is enabled (pmd
23 + * page shared between user and kernel).
24 + */
25 +#ifdef CONFIG_ARM_LPAE
26 +#define USER_PGTABLES_CEILING TASK_SIZE
27 +#endif
28 +
29 +/*
30 * The pgprot_* and protection_map entries will be fixed up in runtime
31 * to include the cachable and bufferable bits based on memory policy,
32 * as well as any architecture dependent bits like global/ASID and SMP
33 diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c
34 index 55293a7..5db5174 100644
35 --- a/arch/arm/mach-at91/setup.c
36 +++ b/arch/arm/mach-at91/setup.c
37 @@ -326,7 +326,7 @@ static void at91_dt_rstc(void)
38
39 of_id = of_match_node(rstc_ids, np);
40 if (!of_id)
41 - panic("AT91: rtsc no restart function availlable\n");
42 + panic("AT91: rtsc no restart function available\n");
43
44 arm_pm_restart = of_id->data;
45
46 diff --git a/arch/avr32/configs/favr-32_defconfig b/arch/avr32/configs/favr-32_defconfig
47 index 19973b0..59e4cc9 100644
48 --- a/arch/avr32/configs/favr-32_defconfig
49 +++ b/arch/avr32/configs/favr-32_defconfig
50 @@ -122,7 +122,6 @@ CONFIG_USB_G_SERIAL=m
51 CONFIG_USB_CDC_COMPOSITE=m
52 CONFIG_MMC=y
53 CONFIG_MMC_ATMELMCI=y
54 -CONFIG_MMC_ATMELMCI_DMA=y
55 CONFIG_NEW_LEDS=y
56 CONFIG_LEDS_CLASS=y
57 CONFIG_LEDS_ATMEL_PWM=m
58 diff --git a/arch/avr32/configs/merisc_defconfig b/arch/avr32/configs/merisc_defconfig
59 index 3befab9..65de443 100644
60 --- a/arch/avr32/configs/merisc_defconfig
61 +++ b/arch/avr32/configs/merisc_defconfig
62 @@ -102,7 +102,6 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
63 CONFIG_LOGO=y
64 CONFIG_MMC=y
65 CONFIG_MMC_ATMELMCI=y
66 -CONFIG_MMC_ATMELMCI_DMA=y
67 CONFIG_NEW_LEDS=y
68 CONFIG_LEDS_CLASS=y
69 CONFIG_LEDS_ATMEL_PWM=y
70 diff --git a/arch/ia64/include/asm/futex.h b/arch/ia64/include/asm/futex.h
71 index d2bf1fd..76acbcd 100644
72 --- a/arch/ia64/include/asm/futex.h
73 +++ b/arch/ia64/include/asm/futex.h
74 @@ -106,16 +106,15 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
75 return -EFAULT;
76
77 {
78 - register unsigned long r8 __asm ("r8");
79 + register unsigned long r8 __asm ("r8") = 0;
80 unsigned long prev;
81 __asm__ __volatile__(
82 " mf;; \n"
83 - " mov %0=r0 \n"
84 " mov ar.ccv=%4;; \n"
85 "[1:] cmpxchg4.acq %1=[%2],%3,ar.ccv \n"
86 " .xdata4 \"__ex_table\", 1b-., 2f-. \n"
87 "[2:]"
88 - : "=r" (r8), "=r" (prev)
89 + : "+r" (r8), "=&r" (prev)
90 : "r" (uaddr), "r" (newval),
91 "rO" ((long) (unsigned) oldval)
92 : "memory");
93 diff --git a/arch/ia64/include/asm/mca.h b/arch/ia64/include/asm/mca.h
94 index 43f96ab..8c70961 100644
95 --- a/arch/ia64/include/asm/mca.h
96 +++ b/arch/ia64/include/asm/mca.h
97 @@ -143,6 +143,7 @@ extern unsigned long __per_cpu_mca[NR_CPUS];
98 extern int cpe_vector;
99 extern int ia64_cpe_irq;
100 extern void ia64_mca_init(void);
101 +extern void ia64_mca_irq_init(void);
102 extern void ia64_mca_cpu_init(void *);
103 extern void ia64_os_mca_dispatch(void);
104 extern void ia64_os_mca_dispatch_end(void);
105 diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c
106 index ad69606..f2c41828 100644
107 --- a/arch/ia64/kernel/irq.c
108 +++ b/arch/ia64/kernel/irq.c
109 @@ -23,6 +23,8 @@
110 #include <linux/interrupt.h>
111 #include <linux/kernel_stat.h>
112
113 +#include <asm/mca.h>
114 +
115 /*
116 * 'what should we do if we get a hw irq event on an illegal vector'.
117 * each architecture has to answer this themselves.
118 @@ -83,6 +85,12 @@ bool is_affinity_mask_valid(const struct cpumask *cpumask)
119
120 #endif /* CONFIG_SMP */
121
122 +int __init arch_early_irq_init(void)
123 +{
124 + ia64_mca_irq_init();
125 + return 0;
126 +}
127 +
128 #ifdef CONFIG_HOTPLUG_CPU
129 unsigned int vectors_in_migration[NR_IRQS];
130
131 diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
132 index 65bf9cd..d7396db 100644
133 --- a/arch/ia64/kernel/mca.c
134 +++ b/arch/ia64/kernel/mca.c
135 @@ -2074,22 +2074,16 @@ ia64_mca_init(void)
136 printk(KERN_INFO "MCA related initialization done\n");
137 }
138
139 +
140 /*
141 - * ia64_mca_late_init
142 - *
143 - * Opportunity to setup things that require initialization later
144 - * than ia64_mca_init. Setup a timer to poll for CPEs if the
145 - * platform doesn't support an interrupt driven mechanism.
146 - *
147 - * Inputs : None
148 - * Outputs : Status
149 + * These pieces cannot be done in ia64_mca_init() because it is called before
150 + * early_irq_init() which would wipe out our percpu irq registrations. But we
151 + * cannot leave them until ia64_mca_late_init() because by then all the other
152 + * processors have been brought online and have set their own CMC vectors to
153 + * point at a non-existant action. Called from arch_early_irq_init().
154 */
155 -static int __init
156 -ia64_mca_late_init(void)
157 +void __init ia64_mca_irq_init(void)
158 {
159 - if (!mca_init)
160 - return 0;
161 -
162 /*
163 * Configure the CMCI/P vector and handler. Interrupts for CMC are
164 * per-processor, so AP CMC interrupts are setup in smp_callin() (smpboot.c).
165 @@ -2108,6 +2102,23 @@ ia64_mca_late_init(void)
166 /* Setup the CPEI/P handler */
167 register_percpu_irq(IA64_CPEP_VECTOR, &mca_cpep_irqaction);
168 #endif
169 +}
170 +
171 +/*
172 + * ia64_mca_late_init
173 + *
174 + * Opportunity to setup things that require initialization later
175 + * than ia64_mca_init. Setup a timer to poll for CPEs if the
176 + * platform doesn't support an interrupt driven mechanism.
177 + *
178 + * Inputs : None
179 + * Outputs : Status
180 + */
181 +static int __init
182 +ia64_mca_late_init(void)
183 +{
184 + if (!mca_init)
185 + return 0;
186
187 register_hotcpu_notifier(&mca_cpu_notifier);
188
189 diff --git a/arch/ia64/kvm/vtlb.c b/arch/ia64/kvm/vtlb.c
190 index 4332f7e..a7869f8 100644
191 --- a/arch/ia64/kvm/vtlb.c
192 +++ b/arch/ia64/kvm/vtlb.c
193 @@ -256,7 +256,7 @@ u64 guest_vhpt_lookup(u64 iha, u64 *pte)
194 "srlz.d;;"
195 "ssm psr.i;;"
196 "srlz.d;;"
197 - : "=r"(ret) : "r"(iha), "r"(pte):"memory");
198 + : "=&r"(ret) : "r"(iha), "r"(pte) : "memory");
199
200 return ret;
201 }
202 diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
203 index 9e07bd0..1a3607b 100644
204 --- a/arch/powerpc/kernel/head_64.S
205 +++ b/arch/powerpc/kernel/head_64.S
206 @@ -489,6 +489,7 @@ _GLOBAL(copy_and_flush)
207 sync
208 addi r5,r5,8
209 addi r6,r6,8
210 + isync
211 blr
212
213 .align 8
214 diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
215 index 1d75c92..ad697f8 100644
216 --- a/arch/powerpc/platforms/cell/spufs/inode.c
217 +++ b/arch/powerpc/platforms/cell/spufs/inode.c
218 @@ -99,6 +99,7 @@ spufs_new_inode(struct super_block *sb, umode_t mode)
219 if (!inode)
220 goto out;
221
222 + inode->i_ino = get_next_ino();
223 inode->i_mode = mode;
224 inode->i_uid = current_fsuid();
225 inode->i_gid = current_fsgid();
226 diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
227 index 3dafc60..a14a835 100644
228 --- a/arch/x86/kernel/irq.c
229 +++ b/arch/x86/kernel/irq.c
230 @@ -165,10 +165,6 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
231 u64 arch_irq_stat(void)
232 {
233 u64 sum = atomic_read(&irq_err_count);
234 -
235 -#ifdef CONFIG_X86_IO_APIC
236 - sum += atomic_read(&irq_mis_count);
237 -#endif
238 return sum;
239 }
240
241 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
242 index 8375622..8c45818 100644
243 --- a/arch/x86/kvm/emulate.c
244 +++ b/arch/x86/kvm/emulate.c
245 @@ -3737,6 +3737,10 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
246 break;
247 case OpMem8:
248 ctxt->memop.bytes = 1;
249 + if (ctxt->memop.type == OP_REG) {
250 + ctxt->memop.addr.reg = decode_register(ctxt, ctxt->modrm_rm, 1);
251 + fetch_register_operand(&ctxt->memop);
252 + }
253 goto mem_common;
254 case OpMem16:
255 ctxt->memop.bytes = 2;
256 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
257 index 194dbcd..2992678 100644
258 --- a/arch/x86/xen/enlighten.c
259 +++ b/arch/x86/xen/enlighten.c
260 @@ -1515,8 +1515,11 @@ static int __cpuinit xen_hvm_cpu_notify(struct notifier_block *self,
261 switch (action) {
262 case CPU_UP_PREPARE:
263 xen_vcpu_setup(cpu);
264 - if (xen_have_vector_callback)
265 + if (xen_have_vector_callback) {
266 xen_init_lock_cpu(cpu);
267 + if (xen_feature(XENFEAT_hvm_safe_pvclock))
268 + xen_setup_timer(cpu);
269 + }
270 break;
271 default:
272 break;
273 diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
274 index 0296a95..054cc01 100644
275 --- a/arch/x86/xen/time.c
276 +++ b/arch/x86/xen/time.c
277 @@ -497,7 +497,11 @@ static void xen_hvm_setup_cpu_clockevents(void)
278 {
279 int cpu = smp_processor_id();
280 xen_setup_runstate_info(cpu);
281 - xen_setup_timer(cpu);
282 + /*
283 + * xen_setup_timer(cpu) - snprintf is bad in atomic context. Hence
284 + * doing it xen_hvm_cpu_notify (which gets called by smp_init during
285 + * early bootup and also during CPU hotplug events).
286 + */
287 xen_setup_cpu_clockevents();
288 }
289
290 diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
291 index 7aff631..5b0f075 100644
292 --- a/drivers/acpi/pci_root.c
293 +++ b/drivers/acpi/pci_root.c
294 @@ -247,8 +247,8 @@ static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root,
295 *control &= OSC_PCI_CONTROL_MASKS;
296 capbuf[OSC_CONTROL_TYPE] = *control | root->osc_control_set;
297 } else {
298 - /* Run _OSC query for all possible controls. */
299 - capbuf[OSC_CONTROL_TYPE] = OSC_PCI_CONTROL_MASKS;
300 + /* Run _OSC query only with existing controls. */
301 + capbuf[OSC_CONTROL_TYPE] = root->osc_control_set;
302 }
303
304 status = acpi_pci_run_osc(root->device->handle, capbuf, &result);
305 diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
306 index 2bded76..d70106e 100644
307 --- a/drivers/i2c/busses/i2c-xiic.c
308 +++ b/drivers/i2c/busses/i2c-xiic.c
309 @@ -311,10 +311,8 @@ static void xiic_fill_tx_fifo(struct xiic_i2c *i2c)
310 /* last message in transfer -> STOP */
311 data |= XIIC_TX_DYN_STOP_MASK;
312 dev_dbg(i2c->adap.dev.parent, "%s TX STOP\n", __func__);
313 -
314 - xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, data);
315 - } else
316 - xiic_setreg8(i2c, XIIC_DTR_REG_OFFSET, data);
317 + }
318 + xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, data);
319 }
320 }
321
322 diff --git a/drivers/md/md.c b/drivers/md/md.c
323 index e0930bb..7b45b5e 100644
324 --- a/drivers/md/md.c
325 +++ b/drivers/md/md.c
326 @@ -1587,8 +1587,8 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
327 sector, count, 1) == 0)
328 return -EINVAL;
329 }
330 - } else if (sb->bblog_offset == 0)
331 - rdev->badblocks.shift = -1;
332 + } else if (sb->bblog_offset != 0)
333 + rdev->badblocks.shift = 0;
334
335 if (!refdev) {
336 ret = 1;
337 @@ -3107,7 +3107,7 @@ int md_rdev_init(struct md_rdev *rdev)
338 * be used - I wonder if that matters
339 */
340 rdev->badblocks.count = 0;
341 - rdev->badblocks.shift = 0;
342 + rdev->badblocks.shift = -1; /* disabled until explicitly enabled */
343 rdev->badblocks.page = kmalloc(PAGE_SIZE, GFP_KERNEL);
344 seqlock_init(&rdev->badblocks.lock);
345 if (rdev->badblocks.page == NULL)
346 @@ -3179,9 +3179,6 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
347 goto abort_free;
348 }
349 }
350 - if (super_format == -1)
351 - /* hot-add for 0.90, or non-persistent: so no badblocks */
352 - rdev->badblocks.shift = -1;
353
354 return rdev;
355
356 diff --git a/drivers/mfd/adp5520.c b/drivers/mfd/adp5520.c
357 index 8d816cc..105f820 100644
358 --- a/drivers/mfd/adp5520.c
359 +++ b/drivers/mfd/adp5520.c
360 @@ -36,6 +36,7 @@ struct adp5520_chip {
361 struct blocking_notifier_head notifier_list;
362 int irq;
363 unsigned long id;
364 + uint8_t mode;
365 };
366
367 static int __adp5520_read(struct i2c_client *client,
368 @@ -326,7 +327,10 @@ static int adp5520_suspend(struct device *dev)
369 struct i2c_client *client = to_i2c_client(dev);
370 struct adp5520_chip *chip = dev_get_drvdata(&client->dev);
371
372 - adp5520_clr_bits(chip->dev, ADP5520_MODE_STATUS, ADP5520_nSTNBY);
373 + adp5520_read(chip->dev, ADP5520_MODE_STATUS, &chip->mode);
374 + /* All other bits are W1C */
375 + chip->mode &= ADP5520_BL_EN | ADP5520_DIM_EN | ADP5520_nSTNBY;
376 + adp5520_write(chip->dev, ADP5520_MODE_STATUS, 0);
377 return 0;
378 }
379
380 @@ -335,7 +339,7 @@ static int adp5520_resume(struct device *dev)
381 struct i2c_client *client = to_i2c_client(dev);
382 struct adp5520_chip *chip = dev_get_drvdata(&client->dev);
383
384 - adp5520_set_bits(chip->dev, ADP5520_MODE_STATUS, ADP5520_nSTNBY);
385 + adp5520_write(chip->dev, ADP5520_MODE_STATUS, chip->mode);
386 return 0;
387 }
388 #endif
389 diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
390 index 54df5ad..5352cd7 100644
391 --- a/drivers/mmc/core/mmc.c
392 +++ b/drivers/mmc/core/mmc.c
393 @@ -385,13 +385,13 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
394 ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
395 card->ext_csd.raw_trim_mult =
396 ext_csd[EXT_CSD_TRIM_MULT];
397 + card->ext_csd.raw_partition_support = ext_csd[EXT_CSD_PARTITION_SUPPORT];
398 if (card->ext_csd.rev >= 4) {
399 /*
400 * Enhanced area feature support -- check whether the eMMC
401 * card has the Enhanced area enabled. If so, export enhanced
402 * area offset and size to user by adding sysfs interface.
403 */
404 - card->ext_csd.raw_partition_support = ext_csd[EXT_CSD_PARTITION_SUPPORT];
405 if ((ext_csd[EXT_CSD_PARTITION_SUPPORT] & 0x2) &&
406 (ext_csd[EXT_CSD_PARTITION_ATTRIBUTE] & 0x1)) {
407 hc_erase_grp_sz =
408 diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
409 index 2bc06e7..dbdd907 100644
410 --- a/drivers/mmc/host/Kconfig
411 +++ b/drivers/mmc/host/Kconfig
412 @@ -297,16 +297,6 @@ config MMC_ATMELMCI
413
414 endchoice
415
416 -config MMC_ATMELMCI_DMA
417 - bool "Atmel MCI DMA support"
418 - depends on MMC_ATMELMCI && (AVR32 || ARCH_AT91SAM9G45) && DMA_ENGINE
419 - help
420 - Say Y here to have the Atmel MCI driver use a DMA engine to
421 - do data transfers and thus increase the throughput and
422 - reduce the CPU utilization.
423 -
424 - If unsure, say N.
425 -
426 config MMC_IMX
427 tristate "Motorola i.MX Multimedia Card Interface support"
428 depends on ARCH_MX1
429 diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
430 index e94476b..2a822d9 100644
431 --- a/drivers/mmc/host/atmel-mci.c
432 +++ b/drivers/mmc/host/atmel-mci.c
433 @@ -165,6 +165,7 @@ struct atmel_mci {
434 void __iomem *regs;
435
436 struct scatterlist *sg;
437 + unsigned int sg_len;
438 unsigned int pio_offset;
439
440 struct atmel_mci_slot *cur_slot;
441 @@ -754,6 +755,7 @@ static u32 atmci_prepare_data(struct atmel_mci *host, struct mmc_data *data)
442 data->error = -EINPROGRESS;
443
444 host->sg = data->sg;
445 + host->sg_len = data->sg_len;
446 host->data = data;
447 host->data_chan = NULL;
448
449 @@ -1592,7 +1594,8 @@ static void atmci_read_data_pio(struct atmel_mci *host)
450 if (offset == sg->length) {
451 flush_dcache_page(sg_page(sg));
452 host->sg = sg = sg_next(sg);
453 - if (!sg)
454 + host->sg_len--;
455 + if (!sg || !host->sg_len)
456 goto done;
457
458 offset = 0;
459 @@ -1605,7 +1608,8 @@ static void atmci_read_data_pio(struct atmel_mci *host)
460
461 flush_dcache_page(sg_page(sg));
462 host->sg = sg = sg_next(sg);
463 - if (!sg)
464 + host->sg_len--;
465 + if (!sg || !host->sg_len)
466 goto done;
467
468 offset = 4 - remaining;
469 @@ -1659,7 +1663,8 @@ static void atmci_write_data_pio(struct atmel_mci *host)
470 nbytes += 4;
471 if (offset == sg->length) {
472 host->sg = sg = sg_next(sg);
473 - if (!sg)
474 + host->sg_len--;
475 + if (!sg || !host->sg_len)
476 goto done;
477
478 offset = 0;
479 @@ -1673,7 +1678,8 @@ static void atmci_write_data_pio(struct atmel_mci *host)
480 nbytes += remaining;
481
482 host->sg = sg = sg_next(sg);
483 - if (!sg) {
484 + host->sg_len--;
485 + if (!sg || !host->sg_len) {
486 atmci_writel(host, ATMCI_TDR, value);
487 goto done;
488 }
489 @@ -2190,10 +2196,8 @@ static int __exit atmci_remove(struct platform_device *pdev)
490 atmci_readl(host, ATMCI_SR);
491 clk_disable(host->mck);
492
493 -#ifdef CONFIG_MMC_ATMELMCI_DMA
494 if (host->dma.chan)
495 dma_release_channel(host->dma.chan);
496 -#endif
497
498 free_irq(platform_get_irq(pdev, 0), host);
499 iounmap(host->regs);
500 diff --git a/drivers/net/ethernet/freescale/gianfar_ptp.c b/drivers/net/ethernet/freescale/gianfar_ptp.c
501 index 5fd620b..ca2748a 100644
502 --- a/drivers/net/ethernet/freescale/gianfar_ptp.c
503 +++ b/drivers/net/ethernet/freescale/gianfar_ptp.c
504 @@ -127,7 +127,6 @@ struct gianfar_ptp_registers {
505
506 #define DRIVER "gianfar_ptp"
507 #define DEFAULT_CKSEL 1
508 -#define N_ALARM 1 /* first alarm is used internally to reset fipers */
509 #define N_EXT_TS 2
510 #define REG_SIZE sizeof(struct gianfar_ptp_registers)
511
512 @@ -410,7 +409,7 @@ static struct ptp_clock_info ptp_gianfar_caps = {
513 .owner = THIS_MODULE,
514 .name = "gianfar clock",
515 .max_adj = 512000,
516 - .n_alarm = N_ALARM,
517 + .n_alarm = 0,
518 .n_ext_ts = N_EXT_TS,
519 .n_per_out = 0,
520 .pps = 1,
521 diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
522 index 6d1f6c5..8f95545 100644
523 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
524 +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
525 @@ -2263,6 +2263,16 @@ static irqreturn_t ixgbe_msix_other(int irq, void *data)
526 * with the write to EICR.
527 */
528 eicr = IXGBE_READ_REG(hw, IXGBE_EICS);
529 +
530 + /* The lower 16bits of the EICR register are for the queue interrupts
531 + * which should be masked here in order to not accidently clear them if
532 + * the bits are high when ixgbe_msix_other is called. There is a race
533 + * condition otherwise which results in possible performance loss
534 + * especially if the ixgbe_msix_other interrupt is triggering
535 + * consistently (as it would when PPS is turned on for the X540 device)
536 + */
537 + eicr &= 0xFFFF0000;
538 +
539 IXGBE_WRITE_REG(hw, IXGBE_EICR, eicr);
540
541 if (eicr & IXGBE_EICR_LSC)
542 diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c
543 index 9abb8f5..59e946a 100644
544 --- a/drivers/net/wireless/mwifiex/pcie.c
545 +++ b/drivers/net/wireless/mwifiex/pcie.c
546 @@ -1828,9 +1828,9 @@ static void mwifiex_pcie_cleanup(struct mwifiex_adapter *adapter)
547 if (pdev) {
548 pci_iounmap(pdev, card->pci_mmap);
549 pci_iounmap(pdev, card->pci_mmap1);
550 -
551 - pci_release_regions(pdev);
552 pci_disable_device(pdev);
553 + pci_release_region(pdev, 2);
554 + pci_release_region(pdev, 0);
555 pci_set_drvdata(pdev, NULL);
556 }
557 }
558 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
559 index 111569c..d08c0d8 100644
560 --- a/drivers/pci/pci.c
561 +++ b/drivers/pci/pci.c
562 @@ -673,15 +673,11 @@ static int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)
563 error = platform_pci_set_power_state(dev, state);
564 if (!error)
565 pci_update_current_state(dev, state);
566 - /* Fall back to PCI_D0 if native PM is not supported */
567 - if (!dev->pm_cap)
568 - dev->current_state = PCI_D0;
569 - } else {
570 + } else
571 error = -ENODEV;
572 - /* Fall back to PCI_D0 if native PM is not supported */
573 - if (!dev->pm_cap)
574 - dev->current_state = PCI_D0;
575 - }
576 +
577 + if (error && !dev->pm_cap) /* Fall back to PCI_D0 */
578 + dev->current_state = PCI_D0;
579
580 return error;
581 }
582 diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
583 index 7d5f56e..5f8844c 100644
584 --- a/drivers/rtc/rtc-cmos.c
585 +++ b/drivers/rtc/rtc-cmos.c
586 @@ -805,9 +805,8 @@ static int cmos_suspend(struct device *dev)
587 mask = RTC_IRQMASK;
588 tmp &= ~mask;
589 CMOS_WRITE(tmp, RTC_CONTROL);
590 + hpet_mask_rtc_irq_bit(mask);
591
592 - /* shut down hpet emulation - we don't need it for alarm */
593 - hpet_mask_rtc_irq_bit(RTC_PIE|RTC_AIE|RTC_UIE);
594 cmos_checkintr(cmos, tmp);
595 }
596 spin_unlock_irq(&rtc_lock);
597 @@ -872,6 +871,7 @@ static int cmos_resume(struct device *dev)
598 rtc_update_irq(cmos->rtc, 1, mask);
599 tmp &= ~RTC_AIE;
600 hpet_mask_rtc_irq_bit(RTC_AIE);
601 + hpet_rtc_timer_init();
602 } while (mask & RTC_AIE);
603 spin_unlock_irq(&rtc_lock);
604 }
605 diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c
606 index 231a1d8..e73b219 100644
607 --- a/drivers/s390/char/sclp_cmd.c
608 +++ b/drivers/s390/char/sclp_cmd.c
609 @@ -509,6 +509,8 @@ static void __init sclp_add_standby_memory(void)
610 add_memory_merged(0);
611 }
612
613 +#define MEM_SCT_SIZE (1UL << SECTION_SIZE_BITS)
614 +
615 static void __init insert_increment(u16 rn, int standby, int assigned)
616 {
617 struct memory_increment *incr, *new_incr;
618 @@ -521,7 +523,7 @@ static void __init insert_increment(u16 rn, int standby, int assigned)
619 new_incr->rn = rn;
620 new_incr->standby = standby;
621 if (!standby)
622 - new_incr->usecount = 1;
623 + new_incr->usecount = rzm > MEM_SCT_SIZE ? rzm/MEM_SCT_SIZE : 1;
624 last_rn = 0;
625 prev = &sclp_mem_list;
626 list_for_each_entry(incr, &sclp_mem_list, list) {
627 diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
628 index 636c539..cf9a191 100644
629 --- a/drivers/tty/pty.c
630 +++ b/drivers/tty/pty.c
631 @@ -607,6 +607,9 @@ static int ptmx_open(struct inode *inode, struct file *filp)
632
633 nonseekable_open(inode, filp);
634
635 + /* We refuse fsnotify events on ptmx, since it's a shared resource */
636 + filp->f_mode |= FMODE_NONOTIFY;
637 +
638 retval = tty_alloc_file(filp);
639 if (retval)
640 return retval;
641 diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
642 index 246b823..4185cc5 100644
643 --- a/drivers/tty/serial/serial_core.c
644 +++ b/drivers/tty/serial/serial_core.c
645 @@ -1877,6 +1877,8 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *uport)
646 mutex_unlock(&port->mutex);
647 return 0;
648 }
649 + put_device(tty_dev);
650 +
651 if (console_suspend_enabled || !uart_console(uport))
652 uport->suspended = 1;
653
654 @@ -1942,9 +1944,11 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *uport)
655 disable_irq_wake(uport->irq);
656 uport->irq_wake = 0;
657 }
658 + put_device(tty_dev);
659 mutex_unlock(&port->mutex);
660 return 0;
661 }
662 + put_device(tty_dev);
663 uport->suspended = 0;
664
665 /*
666 diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
667 index bf9f987..b28d635 100644
668 --- a/drivers/tty/tty_io.c
669 +++ b/drivers/tty/tty_io.c
670 @@ -938,10 +938,10 @@ void start_tty(struct tty_struct *tty)
671
672 EXPORT_SYMBOL(start_tty);
673
674 +/* We limit tty time update visibility to every 8 seconds or so. */
675 static void tty_update_time(struct timespec *time)
676 {
677 - unsigned long sec = get_seconds();
678 - sec -= sec % 60;
679 + unsigned long sec = get_seconds() & ~7;
680 if ((long)(sec - time->tv_sec) > 0)
681 time->tv_sec = sec;
682 }
683 diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
684 index 404413b..336b82d 100644
685 --- a/drivers/usb/core/devio.c
686 +++ b/drivers/usb/core/devio.c
687 @@ -681,6 +681,8 @@ static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype,
688 index &= 0xff;
689 switch (requesttype & USB_RECIP_MASK) {
690 case USB_RECIP_ENDPOINT:
691 + if ((index & ~USB_DIR_IN) == 0)
692 + return 0;
693 ret = findintfep(ps->dev, index);
694 if (ret >= 0)
695 ret = checkintf(ps, ret);
696 diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c
697 index ac0d75a..9f7003e 100644
698 --- a/drivers/usb/misc/appledisplay.c
699 +++ b/drivers/usb/misc/appledisplay.c
700 @@ -63,6 +63,7 @@ static const struct usb_device_id appledisplay_table[] = {
701 { APPLEDISPLAY_DEVICE(0x9219) },
702 { APPLEDISPLAY_DEVICE(0x921c) },
703 { APPLEDISPLAY_DEVICE(0x921d) },
704 + { APPLEDISPLAY_DEVICE(0x9236) },
705
706 /* Terminating entry */
707 { }
708 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
709 index 07a4fb0..e5ccafc 100644
710 --- a/drivers/usb/serial/ftdi_sio.c
711 +++ b/drivers/usb/serial/ftdi_sio.c
712 @@ -197,6 +197,7 @@ static struct usb_device_id id_table_combined [] = {
713 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) },
714 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) },
715 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) },
716 + { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_BOOST_PID) },
717 { USB_DEVICE(NEWPORT_VID, NEWPORT_AGILIS_PID) },
718 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
719 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
720 @@ -878,7 +879,9 @@ static struct usb_device_id id_table_combined [] = {
721 { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) },
722 { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID),
723 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
724 - { USB_DEVICE(ST_VID, ST_STMCLT1030_PID),
725 + { USB_DEVICE(ST_VID, ST_STMCLT_2232_PID),
726 + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
727 + { USB_DEVICE(ST_VID, ST_STMCLT_4232_PID),
728 .driver_info = (kernel_ulong_t)&ftdi_stmclite_quirk },
729 { USB_DEVICE(FTDI_VID, FTDI_RF_R106) },
730 { USB_DEVICE(FTDI_VID, FTDI_DISTORTEC_JTAG_LOCK_PICK_PID),
731 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
732 index e79861e..9852827 100644
733 --- a/drivers/usb/serial/ftdi_sio_ids.h
734 +++ b/drivers/usb/serial/ftdi_sio_ids.h
735 @@ -74,6 +74,7 @@
736 #define FTDI_OPENDCC_THROTTLE_PID 0xBFDA
737 #define FTDI_OPENDCC_GATEWAY_PID 0xBFDB
738 #define FTDI_OPENDCC_GBM_PID 0xBFDC
739 +#define FTDI_OPENDCC_GBM_BOOST_PID 0xBFDD
740
741 /* NZR SEM 16+ USB (http://www.nzr.de) */
742 #define FTDI_NZR_SEM_USB_PID 0xC1E0 /* NZR SEM-LOG16+ */
743 @@ -1150,7 +1151,8 @@
744 * STMicroelectonics
745 */
746 #define ST_VID 0x0483
747 -#define ST_STMCLT1030_PID 0x3747 /* ST Micro Connect Lite STMCLT1030 */
748 +#define ST_STMCLT_2232_PID 0x3746
749 +#define ST_STMCLT_4232_PID 0x3747
750
751 /*
752 * Papouch products (http://www.papouch.com/)
753 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
754 index 78c4774..16efe0a 100644
755 --- a/drivers/usb/serial/option.c
756 +++ b/drivers/usb/serial/option.c
757 @@ -347,6 +347,7 @@ static void option_instat_callback(struct urb *urb);
758 /* Olivetti products */
759 #define OLIVETTI_VENDOR_ID 0x0b3c
760 #define OLIVETTI_PRODUCT_OLICARD100 0xc000
761 +#define OLIVETTI_PRODUCT_OLICARD145 0xc003
762
763 /* Celot products */
764 #define CELOT_VENDOR_ID 0x211f
765 @@ -1273,6 +1274,7 @@ static const struct usb_device_id option_ids[] = {
766 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
767
768 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
769 + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) },
770 { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
771 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
772 { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
773 @@ -1350,6 +1352,12 @@ static const struct usb_device_id option_ids[] = {
774 { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180),
775 .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
776 { USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) },
777 + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */
778 + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x00, 0x00) }, /* D-Link DWM-156 (variant) */
779 + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x02, 0x01) },
780 + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) },
781 + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) },
782 + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
783 { } /* Terminating entry */
784 };
785 MODULE_DEVICE_TABLE(usb, option_ids);
786 diff --git a/drivers/usb/storage/cypress_atacb.c b/drivers/usb/storage/cypress_atacb.c
787 index 5fe451d..c1f6751 100644
788 --- a/drivers/usb/storage/cypress_atacb.c
789 +++ b/drivers/usb/storage/cypress_atacb.c
790 @@ -248,14 +248,26 @@ static int cypress_probe(struct usb_interface *intf,
791 {
792 struct us_data *us;
793 int result;
794 + struct usb_device *device;
795
796 result = usb_stor_probe1(&us, intf, id,
797 (id - cypress_usb_ids) + cypress_unusual_dev_list);
798 if (result)
799 return result;
800
801 - us->protocol_name = "Transparent SCSI with Cypress ATACB";
802 - us->proto_handler = cypress_atacb_passthrough;
803 + /* Among CY7C68300 chips, the A revision does not support Cypress ATACB
804 + * Filter out this revision from EEPROM default descriptor values
805 + */
806 + device = interface_to_usbdev(intf);
807 + if (device->descriptor.iManufacturer != 0x38 ||
808 + device->descriptor.iProduct != 0x4e ||
809 + device->descriptor.iSerialNumber != 0x64) {
810 + us->protocol_name = "Transparent SCSI with Cypress ATACB";
811 + us->proto_handler = cypress_atacb_passthrough;
812 + } else {
813 + us->protocol_name = "Transparent SCSI";
814 + us->proto_handler = usb_stor_transparent_scsi_command;
815 + }
816
817 result = usb_stor_probe2(us);
818 return result;
819 diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
820 index 18ded2d..a01317c 100644
821 --- a/drivers/video/console/fbcon.c
822 +++ b/drivers/video/console/fbcon.c
823 @@ -1228,6 +1228,8 @@ static void fbcon_deinit(struct vc_data *vc)
824 finished:
825
826 fbcon_free_font(p, free_font);
827 + if (free_font)
828 + vc->vc_font.data = NULL;
829
830 if (!con_is_bound(&fb_con))
831 fbcon_exit();
832 diff --git a/fs/dcache.c b/fs/dcache.c
833 index f104945..e498de2 100644
834 --- a/fs/dcache.c
835 +++ b/fs/dcache.c
836 @@ -1238,8 +1238,10 @@ void shrink_dcache_parent(struct dentry * parent)
837 LIST_HEAD(dispose);
838 int found;
839
840 - while ((found = select_parent(parent, &dispose)) != 0)
841 + while ((found = select_parent(parent, &dispose)) != 0) {
842 shrink_dentry_list(&dispose);
843 + cond_resched();
844 + }
845 }
846 EXPORT_SYMBOL(shrink_dcache_parent);
847
848 diff --git a/fs/exec.c b/fs/exec.c
849 index e3a7e36d..2b7f5ff 100644
850 --- a/fs/exec.c
851 +++ b/fs/exec.c
852 @@ -627,7 +627,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift)
853 * when the old and new regions overlap clear from new_end.
854 */
855 free_pgd_range(&tlb, new_end, old_end, new_end,
856 - vma->vm_next ? vma->vm_next->vm_start : 0);
857 + vma->vm_next ? vma->vm_next->vm_start : USER_PGTABLES_CEILING);
858 } else {
859 /*
860 * otherwise, clean from old_start; this is done to not touch
861 @@ -636,7 +636,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift)
862 * for the others its just a little faster.
863 */
864 free_pgd_range(&tlb, old_start, old_end, new_end,
865 - vma->vm_next ? vma->vm_next->vm_start : 0);
866 + vma->vm_next ? vma->vm_next->vm_start : USER_PGTABLES_CEILING);
867 }
868 tlb_finish_mmu(&tlb, new_end, old_end);
869
870 diff --git a/fs/ext4/Kconfig b/fs/ext4/Kconfig
871 index 9ed1bb1..5459168 100644
872 --- a/fs/ext4/Kconfig
873 +++ b/fs/ext4/Kconfig
874 @@ -82,4 +82,5 @@ config EXT4_DEBUG
875 Enables run-time debugging support for the ext4 filesystem.
876
877 If you select Y here, then you will be able to turn on debugging
878 - with a command such as "echo 1 > /sys/kernel/debug/ext4/mballoc-debug"
879 + with a command such as:
880 + echo 1 > /sys/module/ext4/parameters/mballoc_debug
881 diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h
882 index 83b20fc..6b23a96 100644
883 --- a/fs/ext4/ext4_jbd2.h
884 +++ b/fs/ext4/ext4_jbd2.h
885 @@ -164,16 +164,20 @@ static inline void ext4_journal_callback_add(handle_t *handle,
886 * ext4_journal_callback_del: delete a registered callback
887 * @handle: active journal transaction handle on which callback was registered
888 * @jce: registered journal callback entry to unregister
889 + * Return true if object was sucessfully removed
890 */
891 -static inline void ext4_journal_callback_del(handle_t *handle,
892 +static inline bool ext4_journal_callback_try_del(handle_t *handle,
893 struct ext4_journal_cb_entry *jce)
894 {
895 + bool deleted;
896 struct ext4_sb_info *sbi =
897 EXT4_SB(handle->h_transaction->t_journal->j_private);
898
899 spin_lock(&sbi->s_md_lock);
900 + deleted = !list_empty(&jce->jce_list);
901 list_del_init(&jce->jce_list);
902 spin_unlock(&sbi->s_md_lock);
903 + return deleted;
904 }
905
906 int
907 diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
908 index 6c32dd8..ec970cb 100644
909 --- a/fs/ext4/mballoc.c
910 +++ b/fs/ext4/mballoc.c
911 @@ -4436,11 +4436,11 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b,
912 node = rb_prev(new_node);
913 if (node) {
914 entry = rb_entry(node, struct ext4_free_data, efd_node);
915 - if (can_merge(entry, new_entry)) {
916 + if (can_merge(entry, new_entry) &&
917 + ext4_journal_callback_try_del(handle, &entry->efd_jce)) {
918 new_entry->efd_start_cluster = entry->efd_start_cluster;
919 new_entry->efd_count += entry->efd_count;
920 rb_erase(node, &(db->bb_free_root));
921 - ext4_journal_callback_del(handle, &entry->efd_jce);
922 kmem_cache_free(ext4_free_data_cachep, entry);
923 }
924 }
925 @@ -4448,10 +4448,10 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b,
926 node = rb_next(new_node);
927 if (node) {
928 entry = rb_entry(node, struct ext4_free_data, efd_node);
929 - if (can_merge(new_entry, entry)) {
930 + if (can_merge(new_entry, entry) &&
931 + ext4_journal_callback_try_del(handle, &entry->efd_jce)) {
932 new_entry->efd_count += entry->efd_count;
933 rb_erase(node, &(db->bb_free_root));
934 - ext4_journal_callback_del(handle, &entry->efd_jce);
935 kmem_cache_free(ext4_free_data_cachep, entry);
936 }
937 }
938 diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
939 index 3fc0e8b..9202b22 100644
940 --- a/fs/ext4/resize.c
941 +++ b/fs/ext4/resize.c
942 @@ -1202,6 +1202,8 @@ static void ext4_update_super(struct super_block *sb,
943
944 /* Update the global fs size fields */
945 sbi->s_groups_count += flex_gd->count;
946 + sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count,
947 + (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
948
949 /* Update the reserved block counts only once the new group is
950 * active. */
951 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
952 index 88bb68d..b93de81 100644
953 --- a/fs/ext4/super.c
954 +++ b/fs/ext4/super.c
955 @@ -437,10 +437,13 @@ static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
956 struct super_block *sb = journal->j_private;
957 struct ext4_sb_info *sbi = EXT4_SB(sb);
958 int error = is_journal_aborted(journal);
959 - struct ext4_journal_cb_entry *jce, *tmp;
960 + struct ext4_journal_cb_entry *jce;
961
962 + BUG_ON(txn->t_state == T_FINISHED);
963 spin_lock(&sbi->s_md_lock);
964 - list_for_each_entry_safe(jce, tmp, &txn->t_private_list, jce_list) {
965 + while (!list_empty(&txn->t_private_list)) {
966 + jce = list_entry(txn->t_private_list.next,
967 + struct ext4_journal_cb_entry, jce_list);
968 list_del_init(&jce->jce_list);
969 spin_unlock(&sbi->s_md_lock);
970 jce->jce_func(sb, jce, error);
971 diff --git a/fs/fscache/stats.c b/fs/fscache/stats.c
972 index 4765190..73c0bd7 100644
973 --- a/fs/fscache/stats.c
974 +++ b/fs/fscache/stats.c
975 @@ -276,5 +276,5 @@ const struct file_operations fscache_stats_fops = {
976 .open = fscache_stats_open,
977 .read = seq_read,
978 .llseek = seq_lseek,
979 - .release = seq_release,
980 + .release = single_release,
981 };
982 diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
983 index 840f70f..a0dcbd62 100644
984 --- a/fs/jbd2/commit.c
985 +++ b/fs/jbd2/commit.c
986 @@ -325,7 +325,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
987 int space_left = 0;
988 int first_tag = 0;
989 int tag_flag;
990 - int i, to_free = 0;
991 + int i;
992 int tag_bytes = journal_tag_bytes(journal);
993 struct buffer_head *cbh = NULL; /* For transactional checksums */
994 __u32 crc32_sum = ~0;
995 @@ -1044,7 +1044,7 @@ restart_loop:
996 journal->j_stats.run.rs_blocks_logged += stats.run.rs_blocks_logged;
997 spin_unlock(&journal->j_history_lock);
998
999 - commit_transaction->t_state = T_FINISHED;
1000 + commit_transaction->t_state = T_COMMIT_CALLBACK;
1001 J_ASSERT(commit_transaction == journal->j_committing_transaction);
1002 journal->j_commit_sequence = commit_transaction->t_tid;
1003 journal->j_committing_transaction = NULL;
1004 @@ -1059,38 +1059,44 @@ restart_loop:
1005 journal->j_average_commit_time*3) / 4;
1006 else
1007 journal->j_average_commit_time = commit_time;
1008 +
1009 write_unlock(&journal->j_state_lock);
1010
1011 - if (commit_transaction->t_checkpoint_list == NULL &&
1012 - commit_transaction->t_checkpoint_io_list == NULL) {
1013 - __jbd2_journal_drop_transaction(journal, commit_transaction);
1014 - to_free = 1;
1015 + if (journal->j_checkpoint_transactions == NULL) {
1016 + journal->j_checkpoint_transactions = commit_transaction;
1017 + commit_transaction->t_cpnext = commit_transaction;
1018 + commit_transaction->t_cpprev = commit_transaction;
1019 } else {
1020 - if (journal->j_checkpoint_transactions == NULL) {
1021 - journal->j_checkpoint_transactions = commit_transaction;
1022 - commit_transaction->t_cpnext = commit_transaction;
1023 - commit_transaction->t_cpprev = commit_transaction;
1024 - } else {
1025 - commit_transaction->t_cpnext =
1026 - journal->j_checkpoint_transactions;
1027 - commit_transaction->t_cpprev =
1028 - commit_transaction->t_cpnext->t_cpprev;
1029 - commit_transaction->t_cpnext->t_cpprev =
1030 - commit_transaction;
1031 - commit_transaction->t_cpprev->t_cpnext =
1032 + commit_transaction->t_cpnext =
1033 + journal->j_checkpoint_transactions;
1034 + commit_transaction->t_cpprev =
1035 + commit_transaction->t_cpnext->t_cpprev;
1036 + commit_transaction->t_cpnext->t_cpprev =
1037 + commit_transaction;
1038 + commit_transaction->t_cpprev->t_cpnext =
1039 commit_transaction;
1040 - }
1041 }
1042 spin_unlock(&journal->j_list_lock);
1043 -
1044 + /* Drop all spin_locks because commit_callback may be block.
1045 + * __journal_remove_checkpoint() can not destroy transaction
1046 + * under us because it is not marked as T_FINISHED yet */
1047 if (journal->j_commit_callback)
1048 journal->j_commit_callback(journal, commit_transaction);
1049
1050 trace_jbd2_end_commit(journal, commit_transaction);
1051 jbd_debug(1, "JBD2: commit %d complete, head %d\n",
1052 journal->j_commit_sequence, journal->j_tail_sequence);
1053 - if (to_free)
1054 - jbd2_journal_free_transaction(commit_transaction);
1055
1056 + write_lock(&journal->j_state_lock);
1057 + spin_lock(&journal->j_list_lock);
1058 + commit_transaction->t_state = T_FINISHED;
1059 + /* Recheck checkpoint lists after j_list_lock was dropped */
1060 + if (commit_transaction->t_checkpoint_list == NULL &&
1061 + commit_transaction->t_checkpoint_io_list == NULL) {
1062 + __jbd2_journal_drop_transaction(journal, commit_transaction);
1063 + jbd2_journal_free_transaction(commit_transaction);
1064 + }
1065 + spin_unlock(&journal->j_list_lock);
1066 + write_unlock(&journal->j_state_lock);
1067 wake_up(&journal->j_wait_done_commit);
1068 }
1069 diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c
1070 index ca0a080..193f04c 100644
1071 --- a/fs/lockd/clntlock.c
1072 +++ b/fs/lockd/clntlock.c
1073 @@ -144,6 +144,9 @@ int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout)
1074 timeout);
1075 if (ret < 0)
1076 return -ERESTARTSYS;
1077 + /* Reset the lock status after a server reboot so we resend */
1078 + if (block->b_status == nlm_lck_denied_grace_period)
1079 + block->b_status = nlm_lck_blocked;
1080 req->a_res.status = block->b_status;
1081 return 0;
1082 }
1083 diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
1084 index a3a0987..8392cb8 100644
1085 --- a/fs/lockd/clntproc.c
1086 +++ b/fs/lockd/clntproc.c
1087 @@ -551,9 +551,6 @@ again:
1088 status = nlmclnt_block(block, req, NLMCLNT_POLL_TIMEOUT);
1089 if (status < 0)
1090 break;
1091 - /* Resend the blocking lock request after a server reboot */
1092 - if (resp->status == nlm_lck_denied_grace_period)
1093 - continue;
1094 if (resp->status != nlm_lck_blocked)
1095 break;
1096 }
1097 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1098 index 3035187..04f449c 100644
1099 --- a/fs/nfs/nfs4proc.c
1100 +++ b/fs/nfs/nfs4proc.c
1101 @@ -1362,6 +1362,12 @@ int nfs4_open_delegation_recall(struct nfs_open_context *ctx, struct nfs4_state
1102 case -ENOMEM:
1103 err = 0;
1104 goto out;
1105 + case -NFS4ERR_DELAY:
1106 + case -NFS4ERR_GRACE:
1107 + set_bit(NFS_DELEGATED_STATE, &state->flags);
1108 + ssleep(1);
1109 + err = -EAGAIN;
1110 + goto out;
1111 }
1112 err = nfs4_handle_exception(server, err, &exception);
1113 } while (exception.retry);
1114 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
1115 index abd785e..f90b197 100644
1116 --- a/fs/nfsd/nfs4state.c
1117 +++ b/fs/nfsd/nfs4state.c
1118 @@ -213,13 +213,7 @@ static void __nfs4_file_put_access(struct nfs4_file *fp, int oflag)
1119 {
1120 if (atomic_dec_and_test(&fp->fi_access[oflag])) {
1121 nfs4_file_put_fd(fp, oflag);
1122 - /*
1123 - * It's also safe to get rid of the RDWR open *if*
1124 - * we no longer have need of the other kind of access
1125 - * or if we already have the other kind of open:
1126 - */
1127 - if (fp->fi_fds[1-oflag]
1128 - || atomic_read(&fp->fi_access[1 - oflag]) == 0)
1129 + if (atomic_read(&fp->fi_access[1 - oflag]) == 0)
1130 nfs4_file_put_fd(fp, O_RDWR);
1131 }
1132 }
1133 diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
1134 index ace6745..1798846 100644
1135 --- a/fs/nfsd/nfs4xdr.c
1136 +++ b/fs/nfsd/nfs4xdr.c
1137 @@ -343,10 +343,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval,
1138 all 32 bits of 'nseconds'. */
1139 READ_BUF(12);
1140 len += 12;
1141 - READ32(dummy32);
1142 - if (dummy32)
1143 - return nfserr_inval;
1144 - READ32(iattr->ia_atime.tv_sec);
1145 + READ64(iattr->ia_atime.tv_sec);
1146 READ32(iattr->ia_atime.tv_nsec);
1147 if (iattr->ia_atime.tv_nsec >= (u32)1000000000)
1148 return nfserr_inval;
1149 @@ -369,10 +366,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval,
1150 all 32 bits of 'nseconds'. */
1151 READ_BUF(12);
1152 len += 12;
1153 - READ32(dummy32);
1154 - if (dummy32)
1155 - return nfserr_inval;
1156 - READ32(iattr->ia_mtime.tv_sec);
1157 + READ64(iattr->ia_mtime.tv_sec);
1158 READ32(iattr->ia_mtime.tv_nsec);
1159 if (iattr->ia_mtime.tv_nsec >= (u32)1000000000)
1160 return nfserr_inval;
1161 @@ -2371,8 +2365,7 @@ out_acl:
1162 if (bmval1 & FATTR4_WORD1_TIME_ACCESS) {
1163 if ((buflen -= 12) < 0)
1164 goto out_resource;
1165 - WRITE32(0);
1166 - WRITE32(stat.atime.tv_sec);
1167 + WRITE64((s64)stat.atime.tv_sec);
1168 WRITE32(stat.atime.tv_nsec);
1169 }
1170 if (bmval1 & FATTR4_WORD1_TIME_DELTA) {
1171 @@ -2385,15 +2378,13 @@ out_acl:
1172 if (bmval1 & FATTR4_WORD1_TIME_METADATA) {
1173 if ((buflen -= 12) < 0)
1174 goto out_resource;
1175 - WRITE32(0);
1176 - WRITE32(stat.ctime.tv_sec);
1177 + WRITE64((s64)stat.ctime.tv_sec);
1178 WRITE32(stat.ctime.tv_nsec);
1179 }
1180 if (bmval1 & FATTR4_WORD1_TIME_MODIFY) {
1181 if ((buflen -= 12) < 0)
1182 goto out_resource;
1183 - WRITE32(0);
1184 - WRITE32(stat.mtime.tv_sec);
1185 + WRITE64((s64)stat.mtime.tv_sec);
1186 WRITE32(stat.mtime.tv_nsec);
1187 }
1188 if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) {
1189 diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
1190 index 45024ef..9a5f07d 100644
1191 --- a/fs/sysfs/dir.c
1192 +++ b/fs/sysfs/dir.c
1193 @@ -994,6 +994,7 @@ static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
1194 enum kobj_ns_type type;
1195 const void *ns;
1196 ino_t ino;
1197 + loff_t off;
1198
1199 type = sysfs_ns_type(parent_sd);
1200 ns = sysfs_info(dentry->d_sb)->ns[type];
1201 @@ -1016,6 +1017,7 @@ static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
1202 return 0;
1203 }
1204 mutex_lock(&sysfs_mutex);
1205 + off = filp->f_pos;
1206 for (pos = sysfs_dir_pos(ns, parent_sd, filp->f_pos, pos);
1207 pos;
1208 pos = sysfs_dir_next_pos(ns, parent_sd, filp->f_pos, pos)) {
1209 @@ -1027,19 +1029,24 @@ static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
1210 len = strlen(name);
1211 ino = pos->s_ino;
1212 type = dt_type(pos);
1213 - filp->f_pos = pos->s_hash;
1214 + off = filp->f_pos = pos->s_hash;
1215 filp->private_data = sysfs_get(pos);
1216
1217 mutex_unlock(&sysfs_mutex);
1218 - ret = filldir(dirent, name, len, filp->f_pos, ino, type);
1219 + ret = filldir(dirent, name, len, off, ino, type);
1220 mutex_lock(&sysfs_mutex);
1221 if (ret < 0)
1222 break;
1223 }
1224 mutex_unlock(&sysfs_mutex);
1225 - if ((filp->f_pos > 1) && !pos) { /* EOF */
1226 - filp->f_pos = INT_MAX;
1227 +
1228 + /* don't reference last entry if its refcount is dropped */
1229 + if (!pos) {
1230 filp->private_data = NULL;
1231 +
1232 + /* EOF and not changed as 0 or 1 in read/write path */
1233 + if (off == filp->f_pos && off > 1)
1234 + filp->f_pos = INT_MAX;
1235 }
1236 return 0;
1237 }
1238 diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
1239 index c7ec2cd..9a6eb25 100644
1240 --- a/include/asm-generic/pgtable.h
1241 +++ b/include/asm-generic/pgtable.h
1242 @@ -7,6 +7,16 @@
1243 #include <linux/mm_types.h>
1244 #include <linux/bug.h>
1245
1246 +/*
1247 + * On almost all architectures and configurations, 0 can be used as the
1248 + * upper ceiling to free_pgtables(): on many architectures it has the same
1249 + * effect as using TASK_SIZE. However, there is one configuration which
1250 + * must impose a more careful limit, to avoid freeing kernel pgtables.
1251 + */
1252 +#ifndef USER_PGTABLES_CEILING
1253 +#define USER_PGTABLES_CEILING 0UL
1254 +#endif
1255 +
1256 #ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
1257 extern int ptep_set_access_flags(struct vm_area_struct *vma,
1258 unsigned long address, pte_t *ptep,
1259 diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h
1260 index 8a297a5..497c6cc 100644
1261 --- a/include/linux/ipc_namespace.h
1262 +++ b/include/linux/ipc_namespace.h
1263 @@ -42,8 +42,8 @@ struct ipc_namespace {
1264
1265 size_t shm_ctlmax;
1266 size_t shm_ctlall;
1267 + unsigned long shm_tot;
1268 int shm_ctlmni;
1269 - int shm_tot;
1270 /*
1271 * Defines whether IPC_RMID is forced for _all_ shm segments regardless
1272 * of shmctl()
1273 diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
1274 index 2ed66ef..dd6444f 100644
1275 --- a/include/linux/jbd2.h
1276 +++ b/include/linux/jbd2.h
1277 @@ -470,6 +470,7 @@ struct transaction_s
1278 T_COMMIT,
1279 T_COMMIT_DFLUSH,
1280 T_COMMIT_JFLUSH,
1281 + T_COMMIT_CALLBACK,
1282 T_FINISHED
1283 } t_state;
1284
1285 diff --git a/ipc/shm.c b/ipc/shm.c
1286 index 406c5b2..85d81b4 100644
1287 --- a/ipc/shm.c
1288 +++ b/ipc/shm.c
1289 @@ -450,7 +450,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)
1290 size_t size = params->u.size;
1291 int error;
1292 struct shmid_kernel *shp;
1293 - int numpages = (size + PAGE_SIZE -1) >> PAGE_SHIFT;
1294 + size_t numpages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
1295 struct file * file;
1296 char name[13];
1297 int id;
1298 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
1299 index a4c47d1b..4eb1ed3 100644
1300 --- a/kernel/cgroup.c
1301 +++ b/kernel/cgroup.c
1302 @@ -2020,7 +2020,7 @@ static int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader)
1303 if (!group)
1304 return -ENOMEM;
1305 /* pre-allocate to guarantee space while iterating in rcu read-side. */
1306 - retval = flex_array_prealloc(group, 0, group_size - 1, GFP_KERNEL);
1307 + retval = flex_array_prealloc(group, 0, group_size, GFP_KERNEL);
1308 if (retval)
1309 goto out_free_group_list;
1310
1311 diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
1312 index e4cee8d..60f7e32 100644
1313 --- a/kernel/hrtimer.c
1314 +++ b/kernel/hrtimer.c
1315 @@ -298,6 +298,10 @@ ktime_t ktime_sub_ns(const ktime_t kt, u64 nsec)
1316 } else {
1317 unsigned long rem = do_div(nsec, NSEC_PER_SEC);
1318
1319 + /* Make sure nsec fits into long */
1320 + if (unlikely(nsec > KTIME_SEC_MAX))
1321 + return (ktime_t){ .tv64 = KTIME_MAX };
1322 +
1323 tmp = ktime_set((long)nsec, rem);
1324 }
1325
1326 @@ -1308,6 +1312,8 @@ retry:
1327
1328 expires = ktime_sub(hrtimer_get_expires(timer),
1329 base->offset);
1330 + if (expires.tv64 < 0)
1331 + expires.tv64 = KTIME_MAX;
1332 if (expires.tv64 < expires_next.tv64)
1333 expires_next = expires;
1334 break;
1335 diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
1336 index a13987a..239a323 100644
1337 --- a/kernel/time/tick-broadcast.c
1338 +++ b/kernel/time/tick-broadcast.c
1339 @@ -66,6 +66,8 @@ static void tick_broadcast_start_periodic(struct clock_event_device *bc)
1340 */
1341 int tick_check_broadcast_device(struct clock_event_device *dev)
1342 {
1343 + struct clock_event_device *cur = tick_broadcast_device.evtdev;
1344 +
1345 if ((dev->features & CLOCK_EVT_FEAT_DUMMY) ||
1346 (tick_broadcast_device.evtdev &&
1347 tick_broadcast_device.evtdev->rating >= dev->rating) ||
1348 @@ -73,6 +75,8 @@ int tick_check_broadcast_device(struct clock_event_device *dev)
1349 return 0;
1350
1351 clockevents_exchange_device(tick_broadcast_device.evtdev, dev);
1352 + if (cur)
1353 + cur->event_handler = clockevents_handle_noop;
1354 tick_broadcast_device.evtdev = dev;
1355 if (!cpumask_empty(tick_get_broadcast_mask()))
1356 tick_broadcast_start_periodic(dev);
1357 diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
1358 index da6c9ec..ead79bc 100644
1359 --- a/kernel/time/tick-common.c
1360 +++ b/kernel/time/tick-common.c
1361 @@ -323,6 +323,7 @@ static void tick_shutdown(unsigned int *cpup)
1362 */
1363 dev->mode = CLOCK_EVT_MODE_UNUSED;
1364 clockevents_exchange_device(dev, NULL);
1365 + dev->event_handler = clockevents_handle_noop;
1366 td->evtdev = NULL;
1367 }
1368 raw_spin_unlock_irqrestore(&tick_device_lock, flags);
1369 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
1370 index a3c1dd9..c962d31 100644
1371 --- a/kernel/trace/ftrace.c
1372 +++ b/kernel/trace/ftrace.c
1373 @@ -624,7 +624,7 @@ int ftrace_profile_pages_init(struct ftrace_profile_stat *stat)
1374
1375 pages = DIV_ROUND_UP(functions, PROFILES_PER_PAGE);
1376
1377 - for (i = 0; i < pages; i++) {
1378 + for (i = 1; i < pages; i++) {
1379 pg->next = (void *)get_zeroed_page(GFP_KERNEL);
1380 if (!pg->next)
1381 goto out_free;
1382 @@ -3611,7 +3611,8 @@ out:
1383 if (fail)
1384 return -EINVAL;
1385
1386 - ftrace_graph_filter_enabled = 1;
1387 + ftrace_graph_filter_enabled = !!(*idx);
1388 +
1389 return 0;
1390 }
1391
1392 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
1393 index 8beda39..b29ebd3 100644
1394 --- a/kernel/trace/trace.c
1395 +++ b/kernel/trace/trace.c
1396 @@ -4717,6 +4717,8 @@ static __init int tracer_init_debugfs(void)
1397 trace_access_lock_init();
1398
1399 d_tracer = tracing_init_dentry();
1400 + if (!d_tracer)
1401 + return 0;
1402
1403 trace_create_file("tracing_enabled", 0644, d_tracer,
1404 &global_trace, &tracing_ctrl_fops);
1405 diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
1406 index d4545f4..c70f6bf 100644
1407 --- a/kernel/trace/trace_stack.c
1408 +++ b/kernel/trace/trace_stack.c
1409 @@ -20,13 +20,24 @@
1410
1411 #define STACK_TRACE_ENTRIES 500
1412
1413 +#ifdef CC_USING_FENTRY
1414 +# define fentry 1
1415 +#else
1416 +# define fentry 0
1417 +#endif
1418 +
1419 static unsigned long stack_dump_trace[STACK_TRACE_ENTRIES+1] =
1420 { [0 ... (STACK_TRACE_ENTRIES)] = ULONG_MAX };
1421 static unsigned stack_dump_index[STACK_TRACE_ENTRIES];
1422
1423 +/*
1424 + * Reserve one entry for the passed in ip. This will allow
1425 + * us to remove most or all of the stack size overhead
1426 + * added by the stack tracer itself.
1427 + */
1428 static struct stack_trace max_stack_trace = {
1429 - .max_entries = STACK_TRACE_ENTRIES,
1430 - .entries = stack_dump_trace,
1431 + .max_entries = STACK_TRACE_ENTRIES - 1,
1432 + .entries = &stack_dump_trace[1],
1433 };
1434
1435 static unsigned long max_stack_size;
1436 @@ -40,25 +51,34 @@ static DEFINE_MUTEX(stack_sysctl_mutex);
1437 int stack_tracer_enabled;
1438 static int last_stack_tracer_enabled;
1439
1440 -static inline void check_stack(void)
1441 +static inline void
1442 +check_stack(unsigned long ip, unsigned long *stack)
1443 {
1444 unsigned long this_size, flags;
1445 unsigned long *p, *top, *start;
1446 + static int tracer_frame;
1447 + int frame_size = ACCESS_ONCE(tracer_frame);
1448 int i;
1449
1450 - this_size = ((unsigned long)&this_size) & (THREAD_SIZE-1);
1451 + this_size = ((unsigned long)stack) & (THREAD_SIZE-1);
1452 this_size = THREAD_SIZE - this_size;
1453 + /* Remove the frame of the tracer */
1454 + this_size -= frame_size;
1455
1456 if (this_size <= max_stack_size)
1457 return;
1458
1459 /* we do not handle interrupt stacks yet */
1460 - if (!object_is_on_stack(&this_size))
1461 + if (!object_is_on_stack(stack))
1462 return;
1463
1464 local_irq_save(flags);
1465 arch_spin_lock(&max_stack_lock);
1466
1467 + /* In case another CPU set the tracer_frame on us */
1468 + if (unlikely(!frame_size))
1469 + this_size -= tracer_frame;
1470 +
1471 /* a race could have already updated it */
1472 if (this_size <= max_stack_size)
1473 goto out;
1474 @@ -71,10 +91,18 @@ static inline void check_stack(void)
1475 save_stack_trace(&max_stack_trace);
1476
1477 /*
1478 + * Add the passed in ip from the function tracer.
1479 + * Searching for this on the stack will skip over
1480 + * most of the overhead from the stack tracer itself.
1481 + */
1482 + stack_dump_trace[0] = ip;
1483 + max_stack_trace.nr_entries++;
1484 +
1485 + /*
1486 * Now find where in the stack these are.
1487 */
1488 i = 0;
1489 - start = &this_size;
1490 + start = stack;
1491 top = (unsigned long *)
1492 (((unsigned long)start & ~(THREAD_SIZE-1)) + THREAD_SIZE);
1493
1494 @@ -98,6 +126,18 @@ static inline void check_stack(void)
1495 found = 1;
1496 /* Start the search from here */
1497 start = p + 1;
1498 + /*
1499 + * We do not want to show the overhead
1500 + * of the stack tracer stack in the
1501 + * max stack. If we haven't figured
1502 + * out what that is, then figure it out
1503 + * now.
1504 + */
1505 + if (unlikely(!tracer_frame) && i == 1) {
1506 + tracer_frame = (p - stack) *
1507 + sizeof(unsigned long);
1508 + max_stack_size -= tracer_frame;
1509 + }
1510 }
1511 }
1512
1513 @@ -113,6 +153,7 @@ static inline void check_stack(void)
1514 static void
1515 stack_trace_call(unsigned long ip, unsigned long parent_ip)
1516 {
1517 + unsigned long stack;
1518 int cpu;
1519
1520 if (unlikely(!ftrace_enabled || stack_trace_disabled))
1521 @@ -125,7 +166,26 @@ stack_trace_call(unsigned long ip, unsigned long parent_ip)
1522 if (per_cpu(trace_active, cpu)++ != 0)
1523 goto out;
1524
1525 - check_stack();
1526 + /*
1527 + * When fentry is used, the traced function does not get
1528 + * its stack frame set up, and we lose the parent.
1529 + * The ip is pretty useless because the function tracer
1530 + * was called before that function set up its stack frame.
1531 + * In this case, we use the parent ip.
1532 + *
1533 + * By adding the return address of either the parent ip
1534 + * or the current ip we can disregard most of the stack usage
1535 + * caused by the stack tracer itself.
1536 + *
1537 + * The function tracer always reports the address of where the
1538 + * mcount call was, but the stack will hold the return address.
1539 + */
1540 + if (fentry)
1541 + ip = parent_ip;
1542 + else
1543 + ip += MCOUNT_INSN_SIZE;
1544 +
1545 + check_stack(ip, &stack);
1546
1547 out:
1548 per_cpu(trace_active, cpu)--;
1549 @@ -373,6 +433,8 @@ static __init int stack_trace_init(void)
1550 struct dentry *d_tracer;
1551
1552 d_tracer = tracing_init_dentry();
1553 + if (!d_tracer)
1554 + return 0;
1555
1556 trace_create_file("stack_max_size", 0644, d_tracer,
1557 &max_stack_size, &stack_max_size_fops);
1558 diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c
1559 index 96cffb2..847f88a 100644
1560 --- a/kernel/trace/trace_stat.c
1561 +++ b/kernel/trace/trace_stat.c
1562 @@ -307,6 +307,8 @@ static int tracing_stat_init(void)
1563 struct dentry *d_tracing;
1564
1565 d_tracing = tracing_init_dentry();
1566 + if (!d_tracing)
1567 + return 0;
1568
1569 stat_dir = debugfs_create_dir("trace_stat", d_tracing);
1570 if (!stat_dir)
1571 diff --git a/mm/mmap.c b/mm/mmap.c
1572 index 2add0a1..3635d47 100644
1573 --- a/mm/mmap.c
1574 +++ b/mm/mmap.c
1575 @@ -1920,7 +1920,7 @@ static void unmap_region(struct mm_struct *mm,
1576 unmap_vmas(&tlb, vma, start, end, &nr_accounted, NULL);
1577 vm_unacct_memory(nr_accounted);
1578 free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS,
1579 - next ? next->vm_start : 0);
1580 + next ? next->vm_start : USER_PGTABLES_CEILING);
1581 tlb_finish_mmu(&tlb, start, end);
1582 }
1583
1584 @@ -2308,7 +2308,7 @@ void exit_mmap(struct mm_struct *mm)
1585 unmap_vmas(&tlb, vma, 0, -1, &nr_accounted, NULL);
1586 vm_unacct_memory(nr_accounted);
1587
1588 - free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
1589 + free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, USER_PGTABLES_CEILING);
1590 tlb_finish_mmu(&tlb, 0, -1);
1591
1592 /*
1593 diff --git a/net/wireless/reg.c b/net/wireless/reg.c
1594 index 4dc8347..796a0ee 100644
1595 --- a/net/wireless/reg.c
1596 +++ b/net/wireless/reg.c
1597 @@ -862,7 +862,7 @@ static void handle_channel(struct wiphy *wiphy,
1598 return;
1599
1600 REG_DBG_PRINT("Disabling freq %d MHz\n", chan->center_freq);
1601 - chan->flags = IEEE80211_CHAN_DISABLED;
1602 + chan->flags |= IEEE80211_CHAN_DISABLED;
1603 return;
1604 }
1605
1606 diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c
1607 index af7324b..4790568 100644
1608 --- a/sound/soc/codecs/max98088.c
1609 +++ b/sound/soc/codecs/max98088.c
1610 @@ -2006,7 +2006,7 @@ static int max98088_probe(struct snd_soc_codec *codec)
1611 ret);
1612 goto err_access;
1613 }
1614 - dev_info(codec->dev, "revision %c\n", ret + 'A');
1615 + dev_info(codec->dev, "revision %c\n", ret - 0x40 + 'A');
1616
1617 snd_soc_write(codec, M98088_REG_51_PWR_SYS, M98088_PWRSV);
1618
1619 diff --git a/sound/usb/card.c b/sound/usb/card.c
1620 index 388460d..b41730d 100644
1621 --- a/sound/usb/card.c
1622 +++ b/sound/usb/card.c
1623 @@ -611,7 +611,9 @@ int snd_usb_autoresume(struct snd_usb_audio *chip)
1624 int err = -ENODEV;
1625
1626 down_read(&chip->shutdown_rwsem);
1627 - if (!chip->shutdown && !chip->probing)
1628 + if (chip->probing)
1629 + err = 0;
1630 + else if (!chip->shutdown)
1631 err = usb_autopm_get_interface(chip->pm_intf);
1632 up_read(&chip->shutdown_rwsem);
1633
1634 diff --git a/sound/usb/midi.c b/sound/usb/midi.c
1635 index 34b9bb7..e5fee18 100644
1636 --- a/sound/usb/midi.c
1637 +++ b/sound/usb/midi.c
1638 @@ -126,7 +126,6 @@ struct snd_usb_midi {
1639 struct snd_usb_midi_in_endpoint *in;
1640 } endpoints[MIDI_MAX_ENDPOINTS];
1641 unsigned long input_triggered;
1642 - bool autopm_reference;
1643 unsigned int opened[2];
1644 unsigned char disconnected;
1645 unsigned char input_running;
1646 @@ -1040,7 +1039,6 @@ static int substream_open(struct snd_rawmidi_substream *substream, int dir,
1647 {
1648 struct snd_usb_midi* umidi = substream->rmidi->private_data;
1649 struct snd_kcontrol *ctl;
1650 - int err;
1651
1652 down_read(&umidi->disc_rwsem);
1653 if (umidi->disconnected) {
1654 @@ -1051,13 +1049,6 @@ static int substream_open(struct snd_rawmidi_substream *substream, int dir,
1655 mutex_lock(&umidi->mutex);
1656 if (open) {
1657 if (!umidi->opened[0] && !umidi->opened[1]) {
1658 - err = usb_autopm_get_interface(umidi->iface);
1659 - umidi->autopm_reference = err >= 0;
1660 - if (err < 0 && err != -EACCES) {
1661 - mutex_unlock(&umidi->mutex);
1662 - up_read(&umidi->disc_rwsem);
1663 - return -EIO;
1664 - }
1665 if (umidi->roland_load_ctl) {
1666 ctl = umidi->roland_load_ctl;
1667 ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
1668 @@ -1080,8 +1071,6 @@ static int substream_open(struct snd_rawmidi_substream *substream, int dir,
1669 snd_ctl_notify(umidi->card,
1670 SNDRV_CTL_EVENT_MASK_INFO, &ctl->id);
1671 }
1672 - if (umidi->autopm_reference)
1673 - usb_autopm_put_interface(umidi->iface);
1674 }
1675 }
1676 mutex_unlock(&umidi->mutex);
1677 @@ -2256,6 +2245,8 @@ int snd_usbmidi_create(struct snd_card *card,
1678 return err;
1679 }
1680
1681 + usb_autopm_get_interface_no_resume(umidi->iface);
1682 +
1683 list_add_tail(&umidi->list, midi_list);
1684 return 0;
1685 }
1686 diff --git a/sound/usb/stream.c b/sound/usb/stream.c
1687 index 5ff8010..33a335b 100644
1688 --- a/sound/usb/stream.c
1689 +++ b/sound/usb/stream.c
1690 @@ -168,6 +168,14 @@ static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip,
1691 if (!csep && altsd->bNumEndpoints >= 2)
1692 csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDPOINT);
1693
1694 + /*
1695 + * If we can't locate the USB_DT_CS_ENDPOINT descriptor in the extra
1696 + * bytes after the first endpoint, go search the entire interface.
1697 + * Some devices have it directly *before* the standard endpoint.
1698 + */
1699 + if (!csep)
1700 + csep = snd_usb_find_desc(alts->extra, alts->extralen, NULL, USB_DT_CS_ENDPOINT);
1701 +
1702 if (!csep || csep->bLength < 7 ||
1703 csep->bDescriptorSubtype != UAC_EP_GENERAL) {
1704 snd_printk(KERN_WARNING "%d:%u:%d : no or invalid"