Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.4/0128-4.4.29-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2864 - (hide annotations) (download)
Mon Mar 27 13:49:08 2017 UTC (7 years, 2 months ago) by niro
File size: 78075 byte(s)
linux-4.4.29
1 niro 2864 diff --git a/Documentation/x86/exception-tables.txt b/Documentation/x86/exception-tables.txt
2     index 32901aa36f0a..e396bcd8d830 100644
3     --- a/Documentation/x86/exception-tables.txt
4     +++ b/Documentation/x86/exception-tables.txt
5     @@ -290,3 +290,38 @@ Due to the way that the exception table is built and needs to be ordered,
6     only use exceptions for code in the .text section. Any other section
7     will cause the exception table to not be sorted correctly, and the
8     exceptions will fail.
9     +
10     +Things changed when 64-bit support was added to x86 Linux. Rather than
11     +double the size of the exception table by expanding the two entries
12     +from 32-bits to 64 bits, a clever trick was used to store addresses
13     +as relative offsets from the table itself. The assembly code changed
14     +from:
15     + .long 1b,3b
16     +to:
17     + .long (from) - .
18     + .long (to) - .
19     +
20     +and the C-code that uses these values converts back to absolute addresses
21     +like this:
22     +
23     + ex_insn_addr(const struct exception_table_entry *x)
24     + {
25     + return (unsigned long)&x->insn + x->insn;
26     + }
27     +
28     +In v4.6 the exception table entry was expanded with a new field "handler".
29     +This is also 32-bits wide and contains a third relative function
30     +pointer which points to one of:
31     +
32     +1) int ex_handler_default(const struct exception_table_entry *fixup)
33     + This is legacy case that just jumps to the fixup code
34     +2) int ex_handler_fault(const struct exception_table_entry *fixup)
35     + This case provides the fault number of the trap that occurred at
36     + entry->insn. It is used to distinguish page faults from machine
37     + check.
38     +3) int ex_handler_ext(const struct exception_table_entry *fixup)
39     + This case is used for uaccess_err ... we need to set a flag
40     + in the task structure. Before the handler functions existed this
41     + case was handled by adding a large offset to the fixup to tag
42     + it as special.
43     +More functions can easily be added.
44     diff --git a/Makefile b/Makefile
45     index 391294301aaf..19d7d9f68e35 100644
46     --- a/Makefile
47     +++ b/Makefile
48     @@ -1,6 +1,6 @@
49     VERSION = 4
50     PATCHLEVEL = 4
51     -SUBLEVEL = 28
52     +SUBLEVEL = 29
53     EXTRAVERSION =
54     NAME = Blurry Fish Butt
55    
56     diff --git a/arch/arm/crypto/ghash-ce-glue.c b/arch/arm/crypto/ghash-ce-glue.c
57     index 03a39fe29246..9d9ba9acdddc 100644
58     --- a/arch/arm/crypto/ghash-ce-glue.c
59     +++ b/arch/arm/crypto/ghash-ce-glue.c
60     @@ -226,6 +226,27 @@ static int ghash_async_digest(struct ahash_request *req)
61     }
62     }
63    
64     +static int ghash_async_import(struct ahash_request *req, const void *in)
65     +{
66     + struct ahash_request *cryptd_req = ahash_request_ctx(req);
67     + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
68     + struct ghash_async_ctx *ctx = crypto_ahash_ctx(tfm);
69     + struct shash_desc *desc = cryptd_shash_desc(cryptd_req);
70     +
71     + desc->tfm = cryptd_ahash_child(ctx->cryptd_tfm);
72     + desc->flags = req->base.flags;
73     +
74     + return crypto_shash_import(desc, in);
75     +}
76     +
77     +static int ghash_async_export(struct ahash_request *req, void *out)
78     +{
79     + struct ahash_request *cryptd_req = ahash_request_ctx(req);
80     + struct shash_desc *desc = cryptd_shash_desc(cryptd_req);
81     +
82     + return crypto_shash_export(desc, out);
83     +}
84     +
85     static int ghash_async_setkey(struct crypto_ahash *tfm, const u8 *key,
86     unsigned int keylen)
87     {
88     @@ -274,7 +295,10 @@ static struct ahash_alg ghash_async_alg = {
89     .final = ghash_async_final,
90     .setkey = ghash_async_setkey,
91     .digest = ghash_async_digest,
92     + .import = ghash_async_import,
93     + .export = ghash_async_export,
94     .halg.digestsize = GHASH_DIGEST_SIZE,
95     + .halg.statesize = sizeof(struct ghash_desc_ctx),
96     .halg.base = {
97     .cra_name = "ghash",
98     .cra_driver_name = "ghash-ce",
99     diff --git a/arch/arm/mach-pxa/pxa_cplds_irqs.c b/arch/arm/mach-pxa/pxa_cplds_irqs.c
100     index 2385052b0ce1..e362f865fcd2 100644
101     --- a/arch/arm/mach-pxa/pxa_cplds_irqs.c
102     +++ b/arch/arm/mach-pxa/pxa_cplds_irqs.c
103     @@ -41,30 +41,35 @@ static irqreturn_t cplds_irq_handler(int in_irq, void *d)
104     unsigned long pending;
105     unsigned int bit;
106    
107     - pending = readl(fpga->base + FPGA_IRQ_SET_CLR) & fpga->irq_mask;
108     - for_each_set_bit(bit, &pending, CPLDS_NB_IRQ)
109     - generic_handle_irq(irq_find_mapping(fpga->irqdomain, bit));
110     + do {
111     + pending = readl(fpga->base + FPGA_IRQ_SET_CLR) & fpga->irq_mask;
112     + for_each_set_bit(bit, &pending, CPLDS_NB_IRQ) {
113     + generic_handle_irq(irq_find_mapping(fpga->irqdomain,
114     + bit));
115     + }
116     + } while (pending);
117    
118     return IRQ_HANDLED;
119     }
120    
121     -static void cplds_irq_mask_ack(struct irq_data *d)
122     +static void cplds_irq_mask(struct irq_data *d)
123     {
124     struct cplds *fpga = irq_data_get_irq_chip_data(d);
125     unsigned int cplds_irq = irqd_to_hwirq(d);
126     - unsigned int set, bit = BIT(cplds_irq);
127     + unsigned int bit = BIT(cplds_irq);
128    
129     fpga->irq_mask &= ~bit;
130     writel(fpga->irq_mask, fpga->base + FPGA_IRQ_MASK_EN);
131     - set = readl(fpga->base + FPGA_IRQ_SET_CLR);
132     - writel(set & ~bit, fpga->base + FPGA_IRQ_SET_CLR);
133     }
134    
135     static void cplds_irq_unmask(struct irq_data *d)
136     {
137     struct cplds *fpga = irq_data_get_irq_chip_data(d);
138     unsigned int cplds_irq = irqd_to_hwirq(d);
139     - unsigned int bit = BIT(cplds_irq);
140     + unsigned int set, bit = BIT(cplds_irq);
141     +
142     + set = readl(fpga->base + FPGA_IRQ_SET_CLR);
143     + writel(set & ~bit, fpga->base + FPGA_IRQ_SET_CLR);
144    
145     fpga->irq_mask |= bit;
146     writel(fpga->irq_mask, fpga->base + FPGA_IRQ_MASK_EN);
147     @@ -72,7 +77,8 @@ static void cplds_irq_unmask(struct irq_data *d)
148    
149     static struct irq_chip cplds_irq_chip = {
150     .name = "pxa_cplds",
151     - .irq_mask_ack = cplds_irq_mask_ack,
152     + .irq_ack = cplds_irq_mask,
153     + .irq_mask = cplds_irq_mask,
154     .irq_unmask = cplds_irq_unmask,
155     .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SKIP_SET_WAKE,
156     };
157     diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
158     index 247a0dc012f1..c07bfb52275e 100644
159     --- a/arch/powerpc/kernel/eeh_driver.c
160     +++ b/arch/powerpc/kernel/eeh_driver.c
161     @@ -909,6 +909,14 @@ static void eeh_handle_special_event(void)
162     /* Notify all devices to be down */
163     eeh_pe_state_clear(pe, EEH_PE_PRI_BUS);
164     bus = eeh_pe_bus_get(phb_pe);
165     + if (!bus) {
166     + pr_err("%s: Cannot find PCI bus for "
167     + "PHB#%d-PE#%x\n",
168     + __func__,
169     + pe->phb->global_number,
170     + pe->addr);
171     + break;
172     + }
173     eeh_pe_dev_traverse(pe,
174     eeh_report_failure, NULL);
175     pcibios_remove_pci_devices(bus);
176     diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
177     index 32e26526f7e4..1eb698f653b4 100644
178     --- a/arch/powerpc/kernel/nvram_64.c
179     +++ b/arch/powerpc/kernel/nvram_64.c
180     @@ -969,7 +969,7 @@ int __init nvram_remove_partition(const char *name, int sig,
181    
182     /* Make partition a free partition */
183     part->header.signature = NVRAM_SIG_FREE;
184     - strncpy(part->header.name, "wwwwwwwwwwww", 12);
185     + memset(part->header.name, 'w', 12);
186     part->header.checksum = nvram_checksum(&part->header);
187     rc = nvram_write_header(part);
188     if (rc <= 0) {
189     @@ -987,8 +987,8 @@ int __init nvram_remove_partition(const char *name, int sig,
190     }
191     if (prev) {
192     prev->header.length += part->header.length;
193     - prev->header.checksum = nvram_checksum(&part->header);
194     - rc = nvram_write_header(part);
195     + prev->header.checksum = nvram_checksum(&prev->header);
196     + rc = nvram_write_header(prev);
197     if (rc <= 0) {
198     printk(KERN_ERR "nvram_remove_partition: nvram_write failed (%d)\n", rc);
199     return rc;
200     diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
201     index ba0cae69a396..92736851c795 100644
202     --- a/arch/powerpc/platforms/powernv/eeh-powernv.c
203     +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
204     @@ -956,6 +956,11 @@ static int pnv_eeh_reset(struct eeh_pe *pe, int option)
205     }
206    
207     bus = eeh_pe_bus_get(pe);
208     + if (!bus) {
209     + pr_err("%s: Cannot find PCI bus for PHB#%d-PE#%x\n",
210     + __func__, pe->phb->global_number, pe->addr);
211     + return -EIO;
212     + }
213     if (pci_is_root_bus(bus) ||
214     pci_is_root_bus(bus->parent))
215     ret = pnv_eeh_root_reset(hose, option);
216     diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h
217     index 189679aba703..f5063b6659eb 100644
218     --- a/arch/x86/include/asm/asm.h
219     +++ b/arch/x86/include/asm/asm.h
220     @@ -44,19 +44,22 @@
221    
222     /* Exception table entry */
223     #ifdef __ASSEMBLY__
224     -# define _ASM_EXTABLE(from,to) \
225     +# define _ASM_EXTABLE_HANDLE(from, to, handler) \
226     .pushsection "__ex_table","a" ; \
227     - .balign 8 ; \
228     + .balign 4 ; \
229     .long (from) - . ; \
230     .long (to) - . ; \
231     + .long (handler) - . ; \
232     .popsection
233    
234     -# define _ASM_EXTABLE_EX(from,to) \
235     - .pushsection "__ex_table","a" ; \
236     - .balign 8 ; \
237     - .long (from) - . ; \
238     - .long (to) - . + 0x7ffffff0 ; \
239     - .popsection
240     +# define _ASM_EXTABLE(from, to) \
241     + _ASM_EXTABLE_HANDLE(from, to, ex_handler_default)
242     +
243     +# define _ASM_EXTABLE_FAULT(from, to) \
244     + _ASM_EXTABLE_HANDLE(from, to, ex_handler_fault)
245     +
246     +# define _ASM_EXTABLE_EX(from, to) \
247     + _ASM_EXTABLE_HANDLE(from, to, ex_handler_ext)
248    
249     # define _ASM_NOKPROBE(entry) \
250     .pushsection "_kprobe_blacklist","aw" ; \
251     @@ -89,19 +92,24 @@
252     .endm
253    
254     #else
255     -# define _ASM_EXTABLE(from,to) \
256     +# define _EXPAND_EXTABLE_HANDLE(x) #x
257     +# define _ASM_EXTABLE_HANDLE(from, to, handler) \
258     " .pushsection \"__ex_table\",\"a\"\n" \
259     - " .balign 8\n" \
260     + " .balign 4\n" \
261     " .long (" #from ") - .\n" \
262     " .long (" #to ") - .\n" \
263     + " .long (" _EXPAND_EXTABLE_HANDLE(handler) ") - .\n" \
264     " .popsection\n"
265    
266     -# define _ASM_EXTABLE_EX(from,to) \
267     - " .pushsection \"__ex_table\",\"a\"\n" \
268     - " .balign 8\n" \
269     - " .long (" #from ") - .\n" \
270     - " .long (" #to ") - . + 0x7ffffff0\n" \
271     - " .popsection\n"
272     +# define _ASM_EXTABLE(from, to) \
273     + _ASM_EXTABLE_HANDLE(from, to, ex_handler_default)
274     +
275     +# define _ASM_EXTABLE_FAULT(from, to) \
276     + _ASM_EXTABLE_HANDLE(from, to, ex_handler_fault)
277     +
278     +# define _ASM_EXTABLE_EX(from, to) \
279     + _ASM_EXTABLE_HANDLE(from, to, ex_handler_ext)
280     +
281     /* For C file, we already have NOKPROBE_SYMBOL macro */
282     #endif
283    
284     diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h
285     index d42252ce9b4d..3794c7331cfc 100644
286     --- a/arch/x86/include/asm/uaccess.h
287     +++ b/arch/x86/include/asm/uaccess.h
288     @@ -90,12 +90,11 @@ static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size, un
289     likely(!__range_not_ok(addr, size, user_addr_max()))
290    
291     /*
292     - * The exception table consists of pairs of addresses relative to the
293     - * exception table enty itself: the first is the address of an
294     - * instruction that is allowed to fault, and the second is the address
295     - * at which the program should continue. No registers are modified,
296     - * so it is entirely up to the continuation code to figure out what to
297     - * do.
298     + * The exception table consists of triples of addresses relative to the
299     + * exception table entry itself. The first address is of an instruction
300     + * that is allowed to fault, the second is the target at which the program
301     + * should continue. The third is a handler function to deal with the fault
302     + * caused by the instruction in the first field.
303     *
304     * All the routines below use bits of fixup code that are out of line
305     * with the main instruction path. This means when everything is well,
306     @@ -104,13 +103,14 @@ static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size, un
307     */
308    
309     struct exception_table_entry {
310     - int insn, fixup;
311     + int insn, fixup, handler;
312     };
313     /* This is not the generic standard exception_table_entry format */
314     #define ARCH_HAS_SORT_EXTABLE
315     #define ARCH_HAS_SEARCH_EXTABLE
316    
317     -extern int fixup_exception(struct pt_regs *regs);
318     +extern int fixup_exception(struct pt_regs *regs, int trapnr);
319     +extern bool ex_has_fault_handler(unsigned long ip);
320     extern int early_fixup_exception(unsigned long *ip);
321    
322     /*
323     diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
324     index 9fdf1d330727..a257d6077d1b 100644
325     --- a/arch/x86/kernel/early-quirks.c
326     +++ b/arch/x86/kernel/early-quirks.c
327     @@ -331,12 +331,11 @@ static u32 __init i85x_stolen_base(int num, int slot, int func, size_t stolen_si
328    
329     static u32 __init i865_stolen_base(int num, int slot, int func, size_t stolen_size)
330     {
331     - /*
332     - * FIXME is the graphics stolen memory region
333     - * always at TOUD? Ie. is it always the last
334     - * one to be allocated by the BIOS?
335     - */
336     - return read_pci_config_16(0, 0, 0, I865_TOUD) << 16;
337     + u16 toud = 0;
338     +
339     + toud = read_pci_config_16(0, 0, 0, I865_TOUD);
340     +
341     + return (phys_addr_t)(toud << 16) + i845_tseg_size();
342     }
343    
344     static size_t __init i830_stolen_size(int num, int slot, int func)
345     diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
346     index 023c442c33bb..e1d1f6cbaf11 100644
347     --- a/arch/x86/kernel/kprobes/core.c
348     +++ b/arch/x86/kernel/kprobes/core.c
349     @@ -1000,7 +1000,7 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
350     * In case the user-specified fault handler returned
351     * zero, try to fix up.
352     */
353     - if (fixup_exception(regs))
354     + if (fixup_exception(regs, trapnr))
355     return 1;
356    
357     /*
358     diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
359     index 679302c312f8..5621f882645e 100644
360     --- a/arch/x86/kernel/traps.c
361     +++ b/arch/x86/kernel/traps.c
362     @@ -199,7 +199,7 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
363     }
364    
365     if (!user_mode(regs)) {
366     - if (!fixup_exception(regs)) {
367     + if (!fixup_exception(regs, trapnr)) {
368     tsk->thread.error_code = error_code;
369     tsk->thread.trap_nr = trapnr;
370     die(str, regs, error_code);
371     @@ -453,7 +453,7 @@ do_general_protection(struct pt_regs *regs, long error_code)
372    
373     tsk = current;
374     if (!user_mode(regs)) {
375     - if (fixup_exception(regs))
376     + if (fixup_exception(regs, X86_TRAP_GP))
377     return;
378    
379     tsk->thread.error_code = error_code;
380     @@ -699,7 +699,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
381     conditional_sti(regs);
382    
383     if (!user_mode(regs)) {
384     - if (!fixup_exception(regs)) {
385     + if (!fixup_exception(regs, trapnr)) {
386     task->thread.error_code = error_code;
387     task->thread.trap_nr = trapnr;
388     die(str, regs, error_code);
389     diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c
390     index 903ec1e9c326..9dd7e4b7fcde 100644
391     --- a/arch/x86/mm/extable.c
392     +++ b/arch/x86/mm/extable.c
393     @@ -3,6 +3,9 @@
394     #include <linux/sort.h>
395     #include <asm/uaccess.h>
396    
397     +typedef bool (*ex_handler_t)(const struct exception_table_entry *,
398     + struct pt_regs *, int);
399     +
400     static inline unsigned long
401     ex_insn_addr(const struct exception_table_entry *x)
402     {
403     @@ -13,11 +16,56 @@ ex_fixup_addr(const struct exception_table_entry *x)
404     {
405     return (unsigned long)&x->fixup + x->fixup;
406     }
407     +static inline ex_handler_t
408     +ex_fixup_handler(const struct exception_table_entry *x)
409     +{
410     + return (ex_handler_t)((unsigned long)&x->handler + x->handler);
411     +}
412    
413     -int fixup_exception(struct pt_regs *regs)
414     +bool ex_handler_default(const struct exception_table_entry *fixup,
415     + struct pt_regs *regs, int trapnr)
416     {
417     - const struct exception_table_entry *fixup;
418     - unsigned long new_ip;
419     + regs->ip = ex_fixup_addr(fixup);
420     + return true;
421     +}
422     +EXPORT_SYMBOL(ex_handler_default);
423     +
424     +bool ex_handler_fault(const struct exception_table_entry *fixup,
425     + struct pt_regs *regs, int trapnr)
426     +{
427     + regs->ip = ex_fixup_addr(fixup);
428     + regs->ax = trapnr;
429     + return true;
430     +}
431     +EXPORT_SYMBOL_GPL(ex_handler_fault);
432     +
433     +bool ex_handler_ext(const struct exception_table_entry *fixup,
434     + struct pt_regs *regs, int trapnr)
435     +{
436     + /* Special hack for uaccess_err */
437     + current_thread_info()->uaccess_err = 1;
438     + regs->ip = ex_fixup_addr(fixup);
439     + return true;
440     +}
441     +EXPORT_SYMBOL(ex_handler_ext);
442     +
443     +bool ex_has_fault_handler(unsigned long ip)
444     +{
445     + const struct exception_table_entry *e;
446     + ex_handler_t handler;
447     +
448     + e = search_exception_tables(ip);
449     + if (!e)
450     + return false;
451     + handler = ex_fixup_handler(e);
452     +
453     + return handler == ex_handler_fault;
454     +}
455     +
456     +int fixup_exception(struct pt_regs *regs, int trapnr)
457     +{
458     + const struct exception_table_entry *e;
459     + ex_handler_t handler;
460    
461     #ifdef CONFIG_PNPBIOS
462     if (unlikely(SEGMENT_IS_PNP_CODE(regs->cs))) {
463     @@ -33,42 +81,34 @@ int fixup_exception(struct pt_regs *regs)
464     }
465     #endif
466    
467     - fixup = search_exception_tables(regs->ip);
468     - if (fixup) {
469     - new_ip = ex_fixup_addr(fixup);
470     -
471     - if (fixup->fixup - fixup->insn >= 0x7ffffff0 - 4) {
472     - /* Special hack for uaccess_err */
473     - current_thread_info()->uaccess_err = 1;
474     - new_ip -= 0x7ffffff0;
475     - }
476     - regs->ip = new_ip;
477     - return 1;
478     - }
479     + e = search_exception_tables(regs->ip);
480     + if (!e)
481     + return 0;
482    
483     - return 0;
484     + handler = ex_fixup_handler(e);
485     + return handler(e, regs, trapnr);
486     }
487    
488     /* Restricted version used during very early boot */
489     int __init early_fixup_exception(unsigned long *ip)
490     {
491     - const struct exception_table_entry *fixup;
492     + const struct exception_table_entry *e;
493     unsigned long new_ip;
494     + ex_handler_t handler;
495    
496     - fixup = search_exception_tables(*ip);
497     - if (fixup) {
498     - new_ip = ex_fixup_addr(fixup);
499     + e = search_exception_tables(*ip);
500     + if (!e)
501     + return 0;
502    
503     - if (fixup->fixup - fixup->insn >= 0x7ffffff0 - 4) {
504     - /* uaccess handling not supported during early boot */
505     - return 0;
506     - }
507     + new_ip = ex_fixup_addr(e);
508     + handler = ex_fixup_handler(e);
509    
510     - *ip = new_ip;
511     - return 1;
512     - }
513     + /* special handling not supported during early boot */
514     + if (handler != ex_handler_default)
515     + return 0;
516    
517     - return 0;
518     + *ip = new_ip;
519     + return 1;
520     }
521    
522     /*
523     @@ -133,6 +173,8 @@ void sort_extable(struct exception_table_entry *start,
524     i += 4;
525     p->fixup += i;
526     i += 4;
527     + p->handler += i;
528     + i += 4;
529     }
530    
531     sort(start, finish - start, sizeof(struct exception_table_entry),
532     @@ -145,6 +187,8 @@ void sort_extable(struct exception_table_entry *start,
533     i += 4;
534     p->fixup -= i;
535     i += 4;
536     + p->handler -= i;
537     + i += 4;
538     }
539     }
540    
541     diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
542     index e830c71a1323..03898aea6e0f 100644
543     --- a/arch/x86/mm/fault.c
544     +++ b/arch/x86/mm/fault.c
545     @@ -663,7 +663,7 @@ no_context(struct pt_regs *regs, unsigned long error_code,
546     int sig;
547    
548     /* Are we prepared to handle this kernel fault? */
549     - if (fixup_exception(regs)) {
550     + if (fixup_exception(regs, X86_TRAP_PF)) {
551     /*
552     * Any interrupt that takes a fault gets the fixup. This makes
553     * the below recursive fault logic only apply to a faults from
554     diff --git a/crypto/gcm.c b/crypto/gcm.c
555     index d9ea5f9c0574..1238b3c5a321 100644
556     --- a/crypto/gcm.c
557     +++ b/crypto/gcm.c
558     @@ -117,7 +117,7 @@ static int crypto_gcm_setkey(struct crypto_aead *aead, const u8 *key,
559     struct crypto_ablkcipher *ctr = ctx->ctr;
560     struct {
561     be128 hash;
562     - u8 iv[8];
563     + u8 iv[16];
564    
565     struct crypto_gcm_setkey_result result;
566    
567     diff --git a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c
568     index 01d4be2c354b..f5c26a5f6875 100644
569     --- a/drivers/char/hw_random/omap-rng.c
570     +++ b/drivers/char/hw_random/omap-rng.c
571     @@ -385,7 +385,7 @@ static int omap_rng_probe(struct platform_device *pdev)
572    
573     pm_runtime_enable(&pdev->dev);
574     ret = pm_runtime_get_sync(&pdev->dev);
575     - if (ret) {
576     + if (ret < 0) {
577     dev_err(&pdev->dev, "Failed to runtime_get device: %d\n", ret);
578     pm_runtime_put_noidle(&pdev->dev);
579     goto err_ioremap;
580     @@ -443,7 +443,7 @@ static int __maybe_unused omap_rng_resume(struct device *dev)
581     int ret;
582    
583     ret = pm_runtime_get_sync(dev);
584     - if (ret) {
585     + if (ret < 0) {
586     dev_err(dev, "Failed to runtime_get device: %d\n", ret);
587     pm_runtime_put_noidle(dev);
588     return ret;
589     diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
590     index bbf206e3da0d..ac9582de64a5 100644
591     --- a/drivers/clk/clk-divider.c
592     +++ b/drivers/clk/clk-divider.c
593     @@ -354,7 +354,7 @@ static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,
594    
595     /* if read only, just return current value */
596     if (divider->flags & CLK_DIVIDER_READ_ONLY) {
597     - bestdiv = readl(divider->reg) >> divider->shift;
598     + bestdiv = clk_readl(divider->reg) >> divider->shift;
599     bestdiv &= div_mask(divider->width);
600     bestdiv = _get_div(divider->table, bestdiv, divider->flags,
601     divider->width);
602     diff --git a/drivers/clk/clk-qoriq.c b/drivers/clk/clk-qoriq.c
603     index 7bc1c4527ae4..8b77abb6bc22 100644
604     --- a/drivers/clk/clk-qoriq.c
605     +++ b/drivers/clk/clk-qoriq.c
606     @@ -766,7 +766,11 @@ static struct clk * __init create_one_cmux(struct clockgen *cg, int idx)
607     if (!hwc)
608     return NULL;
609    
610     - hwc->reg = cg->regs + 0x20 * idx;
611     + if (cg->info.flags & CG_VER3)
612     + hwc->reg = cg->regs + 0x70000 + 0x20 * idx;
613     + else
614     + hwc->reg = cg->regs + 0x20 * idx;
615     +
616     hwc->info = cg->info.cmux_groups[cg->info.cmux_to_group[idx]];
617    
618     /*
619     diff --git a/drivers/clk/imx/clk-imx35.c b/drivers/clk/imx/clk-imx35.c
620     index b0978d3b83e2..d302ed3b8225 100644
621     --- a/drivers/clk/imx/clk-imx35.c
622     +++ b/drivers/clk/imx/clk-imx35.c
623     @@ -115,7 +115,7 @@ static void __init _mx35_clocks_init(void)
624     }
625    
626     clk[ckih] = imx_clk_fixed("ckih", 24000000);
627     - clk[ckil] = imx_clk_fixed("ckih", 32768);
628     + clk[ckil] = imx_clk_fixed("ckil", 32768);
629     clk[mpll] = imx_clk_pllv1(IMX_PLLV1_IMX35, "mpll", "ckih", base + MX35_CCM_MPCTL);
630     clk[ppll] = imx_clk_pllv1(IMX_PLLV1_IMX35, "ppll", "ckih", base + MX35_CCM_PPCTL);
631    
632     diff --git a/drivers/dma/ipu/ipu_irq.c b/drivers/dma/ipu/ipu_irq.c
633     index 2bf37e68ad0f..dd184b50e5b4 100644
634     --- a/drivers/dma/ipu/ipu_irq.c
635     +++ b/drivers/dma/ipu/ipu_irq.c
636     @@ -286,22 +286,21 @@ static void ipu_irq_handler(struct irq_desc *desc)
637     raw_spin_unlock(&bank_lock);
638     while ((line = ffs(status))) {
639     struct ipu_irq_map *map;
640     - unsigned int irq = NO_IRQ;
641     + unsigned int irq;
642    
643     line--;
644     status &= ~(1UL << line);
645    
646     raw_spin_lock(&bank_lock);
647     map = src2map(32 * i + line);
648     - if (map)
649     - irq = map->irq;
650     - raw_spin_unlock(&bank_lock);
651     -
652     if (!map) {
653     + raw_spin_unlock(&bank_lock);
654     pr_err("IPU: Interrupt on unmapped source %u bank %d\n",
655     line, i);
656     continue;
657     }
658     + irq = map->irq;
659     + raw_spin_unlock(&bank_lock);
660     generic_handle_irq(irq);
661     }
662     }
663     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
664     index fe36caf1b7d7..14f57d9915e3 100644
665     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
666     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
667     @@ -113,24 +113,26 @@ void amdgpu_dpm_print_ps_status(struct amdgpu_device *adev,
668     printk("\n");
669     }
670    
671     +
672     u32 amdgpu_dpm_get_vblank_time(struct amdgpu_device *adev)
673     {
674     struct drm_device *dev = adev->ddev;
675     struct drm_crtc *crtc;
676     struct amdgpu_crtc *amdgpu_crtc;
677     - u32 line_time_us, vblank_lines;
678     + u32 vblank_in_pixels;
679     u32 vblank_time_us = 0xffffffff; /* if the displays are off, vblank time is max */
680    
681     if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) {
682     list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
683     amdgpu_crtc = to_amdgpu_crtc(crtc);
684     if (crtc->enabled && amdgpu_crtc->enabled && amdgpu_crtc->hw_mode.clock) {
685     - line_time_us = (amdgpu_crtc->hw_mode.crtc_htotal * 1000) /
686     - amdgpu_crtc->hw_mode.clock;
687     - vblank_lines = amdgpu_crtc->hw_mode.crtc_vblank_end -
688     + vblank_in_pixels =
689     + amdgpu_crtc->hw_mode.crtc_htotal *
690     + (amdgpu_crtc->hw_mode.crtc_vblank_end -
691     amdgpu_crtc->hw_mode.crtc_vdisplay +
692     - (amdgpu_crtc->v_border * 2);
693     - vblank_time_us = vblank_lines * line_time_us;
694     + (amdgpu_crtc->v_border * 2));
695     +
696     + vblank_time_us = vblank_in_pixels * 1000 / amdgpu_crtc->hw_mode.clock;
697     break;
698     }
699     }
700     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
701     index 4488e82f87b0..a5c824078472 100644
702     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
703     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
704     @@ -227,7 +227,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
705     type = AMD_IP_BLOCK_TYPE_UVD;
706     ring_mask = adev->uvd.ring.ready ? 1 : 0;
707     ib_start_alignment = AMDGPU_GPU_PAGE_SIZE;
708     - ib_size_alignment = 8;
709     + ib_size_alignment = 16;
710     break;
711     case AMDGPU_HW_IP_VCE:
712     type = AMD_IP_BLOCK_TYPE_VCE;
713     diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
714     index 4dcc8fba5792..5b261adb4b69 100644
715     --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
716     +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
717     @@ -419,16 +419,6 @@ static void dce_v10_0_hpd_init(struct amdgpu_device *adev)
718     list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
719     struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
720    
721     - if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
722     - connector->connector_type == DRM_MODE_CONNECTOR_LVDS) {
723     - /* don't try to enable hpd on eDP or LVDS avoid breaking the
724     - * aux dp channel on imac and help (but not completely fix)
725     - * https://bugzilla.redhat.com/show_bug.cgi?id=726143
726     - * also avoid interrupt storms during dpms.
727     - */
728     - continue;
729     - }
730     -
731     switch (amdgpu_connector->hpd.hpd) {
732     case AMDGPU_HPD_1:
733     idx = 0;
734     @@ -452,6 +442,19 @@ static void dce_v10_0_hpd_init(struct amdgpu_device *adev)
735     continue;
736     }
737    
738     + if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
739     + connector->connector_type == DRM_MODE_CONNECTOR_LVDS) {
740     + /* don't try to enable hpd on eDP or LVDS avoid breaking the
741     + * aux dp channel on imac and help (but not completely fix)
742     + * https://bugzilla.redhat.com/show_bug.cgi?id=726143
743     + * also avoid interrupt storms during dpms.
744     + */
745     + tmp = RREG32(mmDC_HPD_INT_CONTROL + hpd_offsets[idx]);
746     + tmp = REG_SET_FIELD(tmp, DC_HPD_INT_CONTROL, DC_HPD_INT_EN, 0);
747     + WREG32(mmDC_HPD_INT_CONTROL + hpd_offsets[idx], tmp);
748     + continue;
749     + }
750     +
751     tmp = RREG32(mmDC_HPD_CONTROL + hpd_offsets[idx]);
752     tmp = REG_SET_FIELD(tmp, DC_HPD_CONTROL, DC_HPD_EN, 1);
753     WREG32(mmDC_HPD_CONTROL + hpd_offsets[idx], tmp);
754     diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
755     index 8f1e51128b33..c161eeda417b 100644
756     --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
757     +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
758     @@ -409,16 +409,6 @@ static void dce_v11_0_hpd_init(struct amdgpu_device *adev)
759     list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
760     struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
761    
762     - if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
763     - connector->connector_type == DRM_MODE_CONNECTOR_LVDS) {
764     - /* don't try to enable hpd on eDP or LVDS avoid breaking the
765     - * aux dp channel on imac and help (but not completely fix)
766     - * https://bugzilla.redhat.com/show_bug.cgi?id=726143
767     - * also avoid interrupt storms during dpms.
768     - */
769     - continue;
770     - }
771     -
772     switch (amdgpu_connector->hpd.hpd) {
773     case AMDGPU_HPD_1:
774     idx = 0;
775     @@ -442,6 +432,19 @@ static void dce_v11_0_hpd_init(struct amdgpu_device *adev)
776     continue;
777     }
778    
779     + if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
780     + connector->connector_type == DRM_MODE_CONNECTOR_LVDS) {
781     + /* don't try to enable hpd on eDP or LVDS avoid breaking the
782     + * aux dp channel on imac and help (but not completely fix)
783     + * https://bugzilla.redhat.com/show_bug.cgi?id=726143
784     + * also avoid interrupt storms during dpms.
785     + */
786     + tmp = RREG32(mmDC_HPD_INT_CONTROL + hpd_offsets[idx]);
787     + tmp = REG_SET_FIELD(tmp, DC_HPD_INT_CONTROL, DC_HPD_INT_EN, 0);
788     + WREG32(mmDC_HPD_INT_CONTROL + hpd_offsets[idx], tmp);
789     + continue;
790     + }
791     +
792     tmp = RREG32(mmDC_HPD_CONTROL + hpd_offsets[idx]);
793     tmp = REG_SET_FIELD(tmp, DC_HPD_CONTROL, DC_HPD_EN, 1);
794     WREG32(mmDC_HPD_CONTROL + hpd_offsets[idx], tmp);
795     @@ -3030,6 +3033,7 @@ static int dce_v11_0_sw_fini(void *handle)
796    
797     dce_v11_0_afmt_fini(adev);
798    
799     + drm_mode_config_cleanup(adev->ddev);
800     adev->mode_info.mode_config_initialized = false;
801    
802     return 0;
803     diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
804     index 42d954dc436d..9b4dcf76ce6c 100644
805     --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
806     +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
807     @@ -392,15 +392,6 @@ static void dce_v8_0_hpd_init(struct amdgpu_device *adev)
808     list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
809     struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
810    
811     - if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
812     - connector->connector_type == DRM_MODE_CONNECTOR_LVDS) {
813     - /* don't try to enable hpd on eDP or LVDS avoid breaking the
814     - * aux dp channel on imac and help (but not completely fix)
815     - * https://bugzilla.redhat.com/show_bug.cgi?id=726143
816     - * also avoid interrupt storms during dpms.
817     - */
818     - continue;
819     - }
820     switch (amdgpu_connector->hpd.hpd) {
821     case AMDGPU_HPD_1:
822     WREG32(mmDC_HPD1_CONTROL, tmp);
823     @@ -423,6 +414,45 @@ static void dce_v8_0_hpd_init(struct amdgpu_device *adev)
824     default:
825     break;
826     }
827     +
828     + if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
829     + connector->connector_type == DRM_MODE_CONNECTOR_LVDS) {
830     + /* don't try to enable hpd on eDP or LVDS avoid breaking the
831     + * aux dp channel on imac and help (but not completely fix)
832     + * https://bugzilla.redhat.com/show_bug.cgi?id=726143
833     + * also avoid interrupt storms during dpms.
834     + */
835     + u32 dc_hpd_int_cntl_reg, dc_hpd_int_cntl;
836     +
837     + switch (amdgpu_connector->hpd.hpd) {
838     + case AMDGPU_HPD_1:
839     + dc_hpd_int_cntl_reg = mmDC_HPD1_INT_CONTROL;
840     + break;
841     + case AMDGPU_HPD_2:
842     + dc_hpd_int_cntl_reg = mmDC_HPD2_INT_CONTROL;
843     + break;
844     + case AMDGPU_HPD_3:
845     + dc_hpd_int_cntl_reg = mmDC_HPD3_INT_CONTROL;
846     + break;
847     + case AMDGPU_HPD_4:
848     + dc_hpd_int_cntl_reg = mmDC_HPD4_INT_CONTROL;
849     + break;
850     + case AMDGPU_HPD_5:
851     + dc_hpd_int_cntl_reg = mmDC_HPD5_INT_CONTROL;
852     + break;
853     + case AMDGPU_HPD_6:
854     + dc_hpd_int_cntl_reg = mmDC_HPD6_INT_CONTROL;
855     + break;
856     + default:
857     + continue;
858     + }
859     +
860     + dc_hpd_int_cntl = RREG32(dc_hpd_int_cntl_reg);
861     + dc_hpd_int_cntl &= ~DC_HPD1_INT_CONTROL__DC_HPD1_INT_EN_MASK;
862     + WREG32(dc_hpd_int_cntl_reg, dc_hpd_int_cntl);
863     + continue;
864     + }
865     +
866     dce_v8_0_hpd_set_polarity(adev, amdgpu_connector->hpd.hpd);
867     amdgpu_irq_get(adev, &adev->hpd_irq, amdgpu_connector->hpd.hpd);
868     }
869     diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
870     index 9f935f55d74c..968b31f39884 100644
871     --- a/drivers/gpu/drm/drm_prime.c
872     +++ b/drivers/gpu/drm/drm_prime.c
873     @@ -339,14 +339,17 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = {
874     * using the PRIME helpers.
875     */
876     struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
877     - struct drm_gem_object *obj, int flags)
878     + struct drm_gem_object *obj,
879     + int flags)
880     {
881     - DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
882     -
883     - exp_info.ops = &drm_gem_prime_dmabuf_ops;
884     - exp_info.size = obj->size;
885     - exp_info.flags = flags;
886     - exp_info.priv = obj;
887     + struct dma_buf_export_info exp_info = {
888     + .exp_name = KBUILD_MODNAME, /* white lie for debug */
889     + .owner = dev->driver->fops->owner,
890     + .ops = &drm_gem_prime_dmabuf_ops,
891     + .size = obj->size,
892     + .flags = flags,
893     + .priv = obj,
894     + };
895    
896     if (dev->driver->gem_prime_res_obj)
897     exp_info.resv = dev->driver->gem_prime_res_obj(obj);
898     diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
899     index d400d6773bbb..fb9f647bb5cd 100644
900     --- a/drivers/gpu/drm/i915/i915_drv.h
901     +++ b/drivers/gpu/drm/i915/i915_drv.h
902     @@ -2150,21 +2150,19 @@ struct drm_i915_gem_object {
903     /** Record of address bit 17 of each page at last unbind. */
904     unsigned long *bit_17;
905    
906     - union {
907     - /** for phy allocated objects */
908     - struct drm_dma_handle *phys_handle;
909     -
910     - struct i915_gem_userptr {
911     - uintptr_t ptr;
912     - unsigned read_only :1;
913     - unsigned workers :4;
914     + struct i915_gem_userptr {
915     + uintptr_t ptr;
916     + unsigned read_only :1;
917     + unsigned workers :4;
918     #define I915_GEM_USERPTR_MAX_WORKERS 15
919    
920     - struct i915_mm_struct *mm;
921     - struct i915_mmu_object *mmu_object;
922     - struct work_struct *work;
923     - } userptr;
924     - };
925     + struct i915_mm_struct *mm;
926     + struct i915_mmu_object *mmu_object;
927     + struct work_struct *work;
928     + } userptr;
929     +
930     + /** for phys allocated objects */
931     + struct drm_dma_handle *phys_handle;
932     };
933     #define to_intel_bo(x) container_of(x, struct drm_i915_gem_object, base)
934    
935     diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
936     index 87e919a06b27..5d2323a40c25 100644
937     --- a/drivers/gpu/drm/i915/i915_gem_stolen.c
938     +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
939     @@ -108,17 +108,28 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev)
940     pci_read_config_dword(dev->pdev, 0x5c, &base);
941     base &= ~((1<<20) - 1);
942     } else if (IS_I865G(dev)) {
943     + u32 tseg_size = 0;
944     u16 toud = 0;
945     + u8 tmp;
946     +
947     + pci_bus_read_config_byte(dev->pdev->bus, PCI_DEVFN(0, 0),
948     + I845_ESMRAMC, &tmp);
949     +
950     + if (tmp & TSEG_ENABLE) {
951     + switch (tmp & I845_TSEG_SIZE_MASK) {
952     + case I845_TSEG_SIZE_512K:
953     + tseg_size = KB(512);
954     + break;
955     + case I845_TSEG_SIZE_1M:
956     + tseg_size = MB(1);
957     + break;
958     + }
959     + }
960    
961     - /*
962     - * FIXME is the graphics stolen memory region
963     - * always at TOUD? Ie. is it always the last
964     - * one to be allocated by the BIOS?
965     - */
966     pci_bus_read_config_word(dev->pdev->bus, PCI_DEVFN(0, 0),
967     I865_TOUD, &toud);
968    
969     - base = toud << 16;
970     + base = (toud << 16) + tseg_size;
971     } else if (IS_I85X(dev)) {
972     u32 tseg_size = 0;
973     u32 tom;
974     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
975     index ebbd23407a80..0f8367da0663 100644
976     --- a/drivers/gpu/drm/i915/intel_dp.c
977     +++ b/drivers/gpu/drm/i915/intel_dp.c
978     @@ -4648,7 +4648,7 @@ static bool bxt_digital_port_connected(struct drm_i915_private *dev_priv,
979     *
980     * Return %true if @port is connected, %false otherwise.
981     */
982     -bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
983     +static bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
984     struct intel_digital_port *port)
985     {
986     if (HAS_PCH_IBX(dev_priv))
987     diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
988     index 41442e619595..722aa159cd28 100644
989     --- a/drivers/gpu/drm/i915/intel_drv.h
990     +++ b/drivers/gpu/drm/i915/intel_drv.h
991     @@ -1231,8 +1231,6 @@ void intel_edp_drrs_disable(struct intel_dp *intel_dp);
992     void intel_edp_drrs_invalidate(struct drm_device *dev,
993     unsigned frontbuffer_bits);
994     void intel_edp_drrs_flush(struct drm_device *dev, unsigned frontbuffer_bits);
995     -bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
996     - struct intel_digital_port *port);
997     void hsw_dp_set_ddi_pll_sel(struct intel_crtc_state *pipe_config);
998    
999     /* intel_dp_mst.c */
1000     diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
1001     index dff69fef47e0..3b92cad8bef2 100644
1002     --- a/drivers/gpu/drm/i915/intel_hdmi.c
1003     +++ b/drivers/gpu/drm/i915/intel_hdmi.c
1004     @@ -1331,19 +1331,18 @@ intel_hdmi_unset_edid(struct drm_connector *connector)
1005     }
1006    
1007     static bool
1008     -intel_hdmi_set_edid(struct drm_connector *connector, bool force)
1009     +intel_hdmi_set_edid(struct drm_connector *connector)
1010     {
1011     struct drm_i915_private *dev_priv = to_i915(connector->dev);
1012     struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
1013     - struct edid *edid = NULL;
1014     + struct edid *edid;
1015     bool connected = false;
1016    
1017     intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
1018    
1019     - if (force)
1020     - edid = drm_get_edid(connector,
1021     - intel_gmbus_get_adapter(dev_priv,
1022     - intel_hdmi->ddc_bus));
1023     + edid = drm_get_edid(connector,
1024     + intel_gmbus_get_adapter(dev_priv,
1025     + intel_hdmi->ddc_bus));
1026    
1027     intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
1028    
1029     @@ -1371,37 +1370,16 @@ static enum drm_connector_status
1030     intel_hdmi_detect(struct drm_connector *connector, bool force)
1031     {
1032     enum drm_connector_status status;
1033     - struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
1034     struct drm_i915_private *dev_priv = to_i915(connector->dev);
1035     - bool live_status = false;
1036     - unsigned int try;
1037    
1038     DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
1039     connector->base.id, connector->name);
1040    
1041     intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
1042    
1043     - for (try = 0; !live_status && try < 9; try++) {
1044     - if (try)
1045     - msleep(10);
1046     - live_status = intel_digital_port_connected(dev_priv,
1047     - hdmi_to_dig_port(intel_hdmi));
1048     - }
1049     -
1050     - if (!live_status) {
1051     - DRM_DEBUG_KMS("HDMI live status down\n");
1052     - /*
1053     - * Live status register is not reliable on all intel platforms.
1054     - * So consider live_status only for certain platforms, for
1055     - * others, read EDID to determine presence of sink.
1056     - */
1057     - if (INTEL_INFO(dev_priv)->gen < 7 || IS_IVYBRIDGE(dev_priv))
1058     - live_status = true;
1059     - }
1060     -
1061     intel_hdmi_unset_edid(connector);
1062    
1063     - if (intel_hdmi_set_edid(connector, live_status)) {
1064     + if (intel_hdmi_set_edid(connector)) {
1065     struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
1066    
1067     hdmi_to_dig_port(intel_hdmi)->base.type = INTEL_OUTPUT_HDMI;
1068     @@ -1427,7 +1405,7 @@ intel_hdmi_force(struct drm_connector *connector)
1069     if (connector->status != connector_status_connected)
1070     return;
1071    
1072     - intel_hdmi_set_edid(connector, true);
1073     + intel_hdmi_set_edid(connector);
1074     hdmi_to_dig_port(intel_hdmi)->base.type = INTEL_OUTPUT_HDMI;
1075     }
1076    
1077     diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
1078     index 1e851e037c29..3f802163f7d4 100644
1079     --- a/drivers/gpu/drm/i915/intel_pm.c
1080     +++ b/drivers/gpu/drm/i915/intel_pm.c
1081     @@ -2097,32 +2097,34 @@ static void intel_read_wm_latency(struct drm_device *dev, uint16_t wm[8])
1082     GEN9_MEM_LATENCY_LEVEL_MASK;
1083    
1084     /*
1085     + * If a level n (n > 1) has a 0us latency, all levels m (m >= n)
1086     + * need to be disabled. We make sure to sanitize the values out
1087     + * of the punit to satisfy this requirement.
1088     + */
1089     + for (level = 1; level <= max_level; level++) {
1090     + if (wm[level] == 0) {
1091     + for (i = level + 1; i <= max_level; i++)
1092     + wm[i] = 0;
1093     + break;
1094     + }
1095     + }
1096     +
1097     + /*
1098     * WaWmMemoryReadLatency:skl
1099     *
1100     * punit doesn't take into account the read latency so we need
1101     - * to add 2us to the various latency levels we retrieve from
1102     - * the punit.
1103     - * - W0 is a bit special in that it's the only level that
1104     - * can't be disabled if we want to have display working, so
1105     - * we always add 2us there.
1106     - * - For levels >=1, punit returns 0us latency when they are
1107     - * disabled, so we respect that and don't add 2us then
1108     - *
1109     - * Additionally, if a level n (n > 1) has a 0us latency, all
1110     - * levels m (m >= n) need to be disabled. We make sure to
1111     - * sanitize the values out of the punit to satisfy this
1112     - * requirement.
1113     + * to add 2us to the various latency levels we retrieve from the
1114     + * punit when level 0 response data us 0us.
1115     */
1116     - wm[0] += 2;
1117     - for (level = 1; level <= max_level; level++)
1118     - if (wm[level] != 0)
1119     + if (wm[0] == 0) {
1120     + wm[0] += 2;
1121     + for (level = 1; level <= max_level; level++) {
1122     + if (wm[level] == 0)
1123     + break;
1124     wm[level] += 2;
1125     - else {
1126     - for (i = level + 1; i <= max_level; i++)
1127     - wm[i] = 0;
1128     -
1129     - break;
1130     }
1131     + }
1132     +
1133     } else if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
1134     uint64_t sskpd = I915_READ64(MCH_SSKPD);
1135    
1136     diff --git a/drivers/gpu/drm/radeon/r600_dpm.c b/drivers/gpu/drm/radeon/r600_dpm.c
1137     index fa2154493cf1..470af4aa4a6a 100644
1138     --- a/drivers/gpu/drm/radeon/r600_dpm.c
1139     +++ b/drivers/gpu/drm/radeon/r600_dpm.c
1140     @@ -156,19 +156,20 @@ u32 r600_dpm_get_vblank_time(struct radeon_device *rdev)
1141     struct drm_device *dev = rdev->ddev;
1142     struct drm_crtc *crtc;
1143     struct radeon_crtc *radeon_crtc;
1144     - u32 line_time_us, vblank_lines;
1145     + u32 vblank_in_pixels;
1146     u32 vblank_time_us = 0xffffffff; /* if the displays are off, vblank time is max */
1147    
1148     if (rdev->num_crtc && rdev->mode_info.mode_config_initialized) {
1149     list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
1150     radeon_crtc = to_radeon_crtc(crtc);
1151     if (crtc->enabled && radeon_crtc->enabled && radeon_crtc->hw_mode.clock) {
1152     - line_time_us = (radeon_crtc->hw_mode.crtc_htotal * 1000) /
1153     - radeon_crtc->hw_mode.clock;
1154     - vblank_lines = radeon_crtc->hw_mode.crtc_vblank_end -
1155     - radeon_crtc->hw_mode.crtc_vdisplay +
1156     - (radeon_crtc->v_border * 2);
1157     - vblank_time_us = vblank_lines * line_time_us;
1158     + vblank_in_pixels =
1159     + radeon_crtc->hw_mode.crtc_htotal *
1160     + (radeon_crtc->hw_mode.crtc_vblank_end -
1161     + radeon_crtc->hw_mode.crtc_vdisplay +
1162     + (radeon_crtc->v_border * 2));
1163     +
1164     + vblank_time_us = vblank_in_pixels * 1000 / radeon_crtc->hw_mode.clock;
1165     break;
1166     }
1167     }
1168     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
1169     index e2dd5d19c32c..4aa2cbe4c85f 100644
1170     --- a/drivers/gpu/drm/radeon/radeon_device.c
1171     +++ b/drivers/gpu/drm/radeon/radeon_device.c
1172     @@ -660,8 +660,9 @@ bool radeon_card_posted(struct radeon_device *rdev)
1173     {
1174     uint32_t reg;
1175    
1176     - /* for pass through, always force asic_init */
1177     - if (radeon_device_is_virtual())
1178     + /* for pass through, always force asic_init for CI */
1179     + if (rdev->family >= CHIP_BONAIRE &&
1180     + radeon_device_is_virtual())
1181     return false;
1182    
1183     /* required for EFI mode on macbook2,1 which uses an r5xx asic */
1184     diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
1185     index 3aaa07dafc00..472e0771832e 100644
1186     --- a/drivers/gpu/drm/radeon/si_dpm.c
1187     +++ b/drivers/gpu/drm/radeon/si_dpm.c
1188     @@ -4112,7 +4112,7 @@ static int si_populate_smc_voltage_tables(struct radeon_device *rdev,
1189     &rdev->pm.dpm.dyn_state.phase_shedding_limits_table)) {
1190     si_populate_smc_voltage_table(rdev, &si_pi->vddc_phase_shed_table, table);
1191    
1192     - table->phaseMaskTable.lowMask[SISLANDS_SMC_VOLTAGEMASK_VDDC] =
1193     + table->phaseMaskTable.lowMask[SISLANDS_SMC_VOLTAGEMASK_VDDC_PHASE_SHEDDING] =
1194     cpu_to_be32(si_pi->vddc_phase_shed_table.mask_low);
1195    
1196     si_write_smc_soft_register(rdev, SI_SMC_SOFT_REGISTER_phase_shedding_delay,
1197     diff --git a/drivers/gpu/drm/radeon/sislands_smc.h b/drivers/gpu/drm/radeon/sislands_smc.h
1198     index 3c779838d9ab..966e3a556011 100644
1199     --- a/drivers/gpu/drm/radeon/sislands_smc.h
1200     +++ b/drivers/gpu/drm/radeon/sislands_smc.h
1201     @@ -194,6 +194,7 @@ typedef struct SISLANDS_SMC_SWSTATE SISLANDS_SMC_SWSTATE;
1202     #define SISLANDS_SMC_VOLTAGEMASK_VDDC 0
1203     #define SISLANDS_SMC_VOLTAGEMASK_MVDD 1
1204     #define SISLANDS_SMC_VOLTAGEMASK_VDDCI 2
1205     +#define SISLANDS_SMC_VOLTAGEMASK_VDDC_PHASE_SHEDDING 3
1206     #define SISLANDS_SMC_VOLTAGEMASK_MAX 4
1207    
1208     struct SISLANDS_SMC_VOLTAGEMASKTABLE
1209     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1210     index 4948c1529836..ecf15cf0c3fd 100644
1211     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1212     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1213     @@ -3830,14 +3830,14 @@ static void *vmw_execbuf_cmdbuf(struct vmw_private *dev_priv,
1214     int ret;
1215    
1216     *header = NULL;
1217     - if (!dev_priv->cman || kernel_commands)
1218     - return kernel_commands;
1219     -
1220     if (command_size > SVGA_CB_MAX_SIZE) {
1221     DRM_ERROR("Command buffer is too large.\n");
1222     return ERR_PTR(-EINVAL);
1223     }
1224    
1225     + if (!dev_priv->cman || kernel_commands)
1226     + return kernel_commands;
1227     +
1228     /* If possible, add a little space for fencing. */
1229     cmdbuf_size = command_size + 512;
1230     cmdbuf_size = min_t(size_t, cmdbuf_size, SVGA_CB_MAX_SIZE);
1231     diff --git a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
1232     index 71493d2af912..70a6985334d5 100644
1233     --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
1234     +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
1235     @@ -4102,7 +4102,7 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
1236     (u8 *)&settings->beacon.head[ie_offset],
1237     settings->beacon.head_len - ie_offset,
1238     WLAN_EID_SSID);
1239     - if (!ssid_ie)
1240     + if (!ssid_ie || ssid_ie->len > IEEE80211_MAX_SSID_LEN)
1241     return -EINVAL;
1242    
1243     memcpy(ssid_le.SSID, ssid_ie->data, ssid_ie->len);
1244     diff --git a/drivers/net/wireless/mwifiex/join.c b/drivers/net/wireless/mwifiex/join.c
1245     index 3cda1f956f0b..6378dfd3b4e8 100644
1246     --- a/drivers/net/wireless/mwifiex/join.c
1247     +++ b/drivers/net/wireless/mwifiex/join.c
1248     @@ -661,9 +661,8 @@ int mwifiex_ret_802_11_associate(struct mwifiex_private *priv,
1249     priv->assoc_rsp_size = min(le16_to_cpu(resp->size) - S_DS_GEN,
1250     sizeof(priv->assoc_rsp_buf));
1251    
1252     - memcpy(priv->assoc_rsp_buf, &resp->params, priv->assoc_rsp_size);
1253     -
1254     assoc_rsp->a_id = cpu_to_le16(aid);
1255     + memcpy(priv->assoc_rsp_buf, &resp->params, priv->assoc_rsp_size);
1256    
1257     if (status_code) {
1258     priv->adapter->dbg.num_cmd_assoc_failure++;
1259     diff --git a/drivers/power/bq24257_charger.c b/drivers/power/bq24257_charger.c
1260     index 1fea2c7ef97f..6fc31bdc639b 100644
1261     --- a/drivers/power/bq24257_charger.c
1262     +++ b/drivers/power/bq24257_charger.c
1263     @@ -1068,6 +1068,12 @@ static int bq24257_probe(struct i2c_client *client,
1264     return ret;
1265     }
1266    
1267     + ret = bq24257_power_supply_init(bq);
1268     + if (ret < 0) {
1269     + dev_err(dev, "Failed to register power supply\n");
1270     + return ret;
1271     + }
1272     +
1273     ret = devm_request_threaded_irq(dev, client->irq, NULL,
1274     bq24257_irq_handler_thread,
1275     IRQF_TRIGGER_FALLING |
1276     @@ -1078,12 +1084,6 @@ static int bq24257_probe(struct i2c_client *client,
1277     return ret;
1278     }
1279    
1280     - ret = bq24257_power_supply_init(bq);
1281     - if (ret < 0) {
1282     - dev_err(dev, "Failed to register power supply\n");
1283     - return ret;
1284     - }
1285     -
1286     ret = sysfs_create_group(&bq->charger->dev.kobj, &bq24257_attr_group);
1287     if (ret < 0) {
1288     dev_err(dev, "Can't create sysfs entries\n");
1289     diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c
1290     index 7c511add5aa7..bae98521c808 100644
1291     --- a/drivers/s390/char/con3270.c
1292     +++ b/drivers/s390/char/con3270.c
1293     @@ -124,7 +124,12 @@ con3270_create_status(struct con3270 *cp)
1294     static void
1295     con3270_update_string(struct con3270 *cp, struct string *s, int nr)
1296     {
1297     - if (s->len >= cp->view.cols - 5)
1298     + if (s->len < 4) {
1299     + /* This indicates a bug, but printing a warning would
1300     + * cause a deadlock. */
1301     + return;
1302     + }
1303     + if (s->string[s->len - 4] != TO_RA)
1304     return;
1305     raw3270_buffer_address(cp->view.dev, s->string + s->len - 3,
1306     cp->view.cols * (nr + 1));
1307     @@ -461,11 +466,11 @@ con3270_cline_end(struct con3270 *cp)
1308     cp->cline->len + 4 : cp->view.cols;
1309     s = con3270_alloc_string(cp, size);
1310     memcpy(s->string, cp->cline->string, cp->cline->len);
1311     - if (s->len < cp->view.cols - 5) {
1312     + if (cp->cline->len < cp->view.cols - 5) {
1313     s->string[s->len - 4] = TO_RA;
1314     s->string[s->len - 1] = 0;
1315     } else {
1316     - while (--size > cp->cline->len)
1317     + while (--size >= cp->cline->len)
1318     s->string[size] = cp->view.ascebc[' '];
1319     }
1320     /* Replace cline with allocated line s and reset cline. */
1321     diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c
1322     index c424c0c7367e..1e16331891a9 100644
1323     --- a/drivers/s390/cio/chsc.c
1324     +++ b/drivers/s390/cio/chsc.c
1325     @@ -95,12 +95,13 @@ struct chsc_ssd_area {
1326     int chsc_get_ssd_info(struct subchannel_id schid, struct chsc_ssd_info *ssd)
1327     {
1328     struct chsc_ssd_area *ssd_area;
1329     + unsigned long flags;
1330     int ccode;
1331     int ret;
1332     int i;
1333     int mask;
1334    
1335     - spin_lock_irq(&chsc_page_lock);
1336     + spin_lock_irqsave(&chsc_page_lock, flags);
1337     memset(chsc_page, 0, PAGE_SIZE);
1338     ssd_area = chsc_page;
1339     ssd_area->request.length = 0x0010;
1340     @@ -144,7 +145,7 @@ int chsc_get_ssd_info(struct subchannel_id schid, struct chsc_ssd_info *ssd)
1341     ssd->fla[i] = ssd_area->fla[i];
1342     }
1343     out:
1344     - spin_unlock_irq(&chsc_page_lock);
1345     + spin_unlock_irqrestore(&chsc_page_lock, flags);
1346     return ret;
1347     }
1348    
1349     @@ -832,9 +833,10 @@ int __chsc_do_secm(struct channel_subsystem *css, int enable)
1350     u32 fmt : 4;
1351     u32 : 16;
1352     } __attribute__ ((packed)) *secm_area;
1353     + unsigned long flags;
1354     int ret, ccode;
1355    
1356     - spin_lock_irq(&chsc_page_lock);
1357     + spin_lock_irqsave(&chsc_page_lock, flags);
1358     memset(chsc_page, 0, PAGE_SIZE);
1359     secm_area = chsc_page;
1360     secm_area->request.length = 0x0050;
1361     @@ -864,7 +866,7 @@ int __chsc_do_secm(struct channel_subsystem *css, int enable)
1362     CIO_CRW_EVENT(2, "chsc: secm failed (rc=%04x)\n",
1363     secm_area->response.code);
1364     out:
1365     - spin_unlock_irq(&chsc_page_lock);
1366     + spin_unlock_irqrestore(&chsc_page_lock, flags);
1367     return ret;
1368     }
1369    
1370     @@ -993,6 +995,7 @@ chsc_initialize_cmg_chars(struct channel_path *chp, u8 cmcv,
1371    
1372     int chsc_get_channel_measurement_chars(struct channel_path *chp)
1373     {
1374     + unsigned long flags;
1375     int ccode, ret;
1376    
1377     struct {
1378     @@ -1022,7 +1025,7 @@ int chsc_get_channel_measurement_chars(struct channel_path *chp)
1379     if (!css_chsc_characteristics.scmc || !css_chsc_characteristics.secm)
1380     return 0;
1381    
1382     - spin_lock_irq(&chsc_page_lock);
1383     + spin_lock_irqsave(&chsc_page_lock, flags);
1384     memset(chsc_page, 0, PAGE_SIZE);
1385     scmc_area = chsc_page;
1386     scmc_area->request.length = 0x0010;
1387     @@ -1054,7 +1057,7 @@ int chsc_get_channel_measurement_chars(struct channel_path *chp)
1388     chsc_initialize_cmg_chars(chp, scmc_area->cmcv,
1389     (struct cmg_chars *) &scmc_area->data);
1390     out:
1391     - spin_unlock_irq(&chsc_page_lock);
1392     + spin_unlock_irqrestore(&chsc_page_lock, flags);
1393     return ret;
1394     }
1395    
1396     @@ -1135,6 +1138,7 @@ struct css_chsc_char css_chsc_characteristics;
1397     int __init
1398     chsc_determine_css_characteristics(void)
1399     {
1400     + unsigned long flags;
1401     int result;
1402     struct {
1403     struct chsc_header request;
1404     @@ -1147,7 +1151,7 @@ chsc_determine_css_characteristics(void)
1405     u32 chsc_char[508];
1406     } __attribute__ ((packed)) *scsc_area;
1407    
1408     - spin_lock_irq(&chsc_page_lock);
1409     + spin_lock_irqsave(&chsc_page_lock, flags);
1410     memset(chsc_page, 0, PAGE_SIZE);
1411     scsc_area = chsc_page;
1412     scsc_area->request.length = 0x0010;
1413     @@ -1169,7 +1173,7 @@ chsc_determine_css_characteristics(void)
1414     CIO_CRW_EVENT(2, "chsc: scsc failed (rc=%04x)\n",
1415     scsc_area->response.code);
1416     exit:
1417     - spin_unlock_irq(&chsc_page_lock);
1418     + spin_unlock_irqrestore(&chsc_page_lock, flags);
1419     return result;
1420     }
1421    
1422     diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
1423     index 6180f7970bbf..0969cea1089a 100644
1424     --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
1425     +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
1426     @@ -4510,7 +4510,7 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
1427     le16_to_cpu(mpi_reply->DevHandle));
1428     mpt3sas_trigger_scsi(ioc, data.skey, data.asc, data.ascq);
1429    
1430     - if (!(ioc->logging_level & MPT_DEBUG_REPLY) &&
1431     + if ((ioc->logging_level & MPT_DEBUG_REPLY) &&
1432     ((scmd->sense_buffer[2] == UNIT_ATTENTION) ||
1433     (scmd->sense_buffer[2] == MEDIUM_ERROR) ||
1434     (scmd->sense_buffer[2] == HARDWARE_ERROR)))
1435     diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
1436     index 39412c9097c6..a3965cac1b34 100644
1437     --- a/drivers/spi/spi-fsl-dspi.c
1438     +++ b/drivers/spi/spi-fsl-dspi.c
1439     @@ -753,7 +753,6 @@ static int dspi_remove(struct platform_device *pdev)
1440     /* Disconnect from the SPI framework */
1441     clk_disable_unprepare(dspi->clk);
1442     spi_unregister_master(dspi->master);
1443     - spi_master_put(dspi->master);
1444    
1445     return 0;
1446     }
1447     diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c
1448     index 9b7026e7d55b..45d0a87f55d2 100644
1449     --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c
1450     +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c
1451     @@ -718,13 +718,13 @@ u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr)
1452     u8 res = _SUCCESS;
1453    
1454    
1455     - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
1456     + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
1457     if (ph2c == NULL) {
1458     res = _FAIL;
1459     goto exit;
1460     }
1461    
1462     - paddbareq_parm = kzalloc(sizeof(struct addBaReq_parm), GFP_KERNEL);
1463     + paddbareq_parm = kzalloc(sizeof(struct addBaReq_parm), GFP_ATOMIC);
1464     if (paddbareq_parm == NULL) {
1465     kfree(ph2c);
1466     res = _FAIL;
1467     diff --git a/drivers/uio/uio_dmem_genirq.c b/drivers/uio/uio_dmem_genirq.c
1468     index 915facbf552e..e1134a4d97f3 100644
1469     --- a/drivers/uio/uio_dmem_genirq.c
1470     +++ b/drivers/uio/uio_dmem_genirq.c
1471     @@ -229,7 +229,7 @@ static int uio_dmem_genirq_probe(struct platform_device *pdev)
1472     ++uiomem;
1473     }
1474    
1475     - priv->dmem_region_start = i;
1476     + priv->dmem_region_start = uiomem - &uioinfo->mem[0];
1477     priv->num_dmem_regions = pdata->num_dynamic_regions;
1478    
1479     for (i = 0; i < pdata->num_dynamic_regions; ++i) {
1480     diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c
1481     index 531e76474983..0e0eb10f82a0 100644
1482     --- a/drivers/xen/xenbus/xenbus_dev_frontend.c
1483     +++ b/drivers/xen/xenbus/xenbus_dev_frontend.c
1484     @@ -316,7 +316,7 @@ static int xenbus_write_transaction(unsigned msg_type,
1485     rc = -ENOMEM;
1486     goto out;
1487     }
1488     - } else {
1489     + } else if (msg_type == XS_TRANSACTION_END) {
1490     list_for_each_entry(trans, &u->transactions, list)
1491     if (trans->handle.id == u->u.msg.tx_id)
1492     break;
1493     diff --git a/fs/9p/acl.c b/fs/9p/acl.c
1494     index a7e28890f5ef..929b618da43b 100644
1495     --- a/fs/9p/acl.c
1496     +++ b/fs/9p/acl.c
1497     @@ -282,32 +282,26 @@ static int v9fs_xattr_set_acl(const struct xattr_handler *handler,
1498     switch (handler->flags) {
1499     case ACL_TYPE_ACCESS:
1500     if (acl) {
1501     - umode_t mode = inode->i_mode;
1502     - retval = posix_acl_equiv_mode(acl, &mode);
1503     - if (retval < 0)
1504     + struct iattr iattr;
1505     +
1506     + retval = posix_acl_update_mode(inode, &iattr.ia_mode, &acl);
1507     + if (retval)
1508     goto err_out;
1509     - else {
1510     - struct iattr iattr;
1511     - if (retval == 0) {
1512     - /*
1513     - * ACL can be represented
1514     - * by the mode bits. So don't
1515     - * update ACL.
1516     - */
1517     - acl = NULL;
1518     - value = NULL;
1519     - size = 0;
1520     - }
1521     - /* Updte the mode bits */
1522     - iattr.ia_mode = ((mode & S_IALLUGO) |
1523     - (inode->i_mode & ~S_IALLUGO));
1524     - iattr.ia_valid = ATTR_MODE;
1525     - /* FIXME should we update ctime ?
1526     - * What is the following setxattr update the
1527     - * mode ?
1528     + if (!acl) {
1529     + /*
1530     + * ACL can be represented
1531     + * by the mode bits. So don't
1532     + * update ACL.
1533     */
1534     - v9fs_vfs_setattr_dotl(dentry, &iattr);
1535     + value = NULL;
1536     + size = 0;
1537     }
1538     + iattr.ia_valid = ATTR_MODE;
1539     + /* FIXME should we update ctime ?
1540     + * What is the following setxattr update the
1541     + * mode ?
1542     + */
1543     + v9fs_vfs_setattr_dotl(dentry, &iattr);
1544     }
1545     break;
1546     case ACL_TYPE_DEFAULT:
1547     diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c
1548     index 9a0124a95851..fb3e64d37cb4 100644
1549     --- a/fs/btrfs/acl.c
1550     +++ b/fs/btrfs/acl.c
1551     @@ -83,11 +83,9 @@ static int __btrfs_set_acl(struct btrfs_trans_handle *trans,
1552     case ACL_TYPE_ACCESS:
1553     name = POSIX_ACL_XATTR_ACCESS;
1554     if (acl) {
1555     - ret = posix_acl_equiv_mode(acl, &inode->i_mode);
1556     - if (ret < 0)
1557     + ret = posix_acl_update_mode(inode, &inode->i_mode, &acl);
1558     + if (ret)
1559     return ret;
1560     - if (ret == 0)
1561     - acl = NULL;
1562     }
1563     ret = 0;
1564     break;
1565     diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c
1566     index 8f84646f10e9..4d8caeb94a11 100644
1567     --- a/fs/ceph/acl.c
1568     +++ b/fs/ceph/acl.c
1569     @@ -94,11 +94,9 @@ int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type)
1570     case ACL_TYPE_ACCESS:
1571     name = POSIX_ACL_XATTR_ACCESS;
1572     if (acl) {
1573     - ret = posix_acl_equiv_mode(acl, &new_mode);
1574     - if (ret < 0)
1575     + ret = posix_acl_update_mode(inode, &new_mode, &acl);
1576     + if (ret)
1577     goto out;
1578     - if (ret == 0)
1579     - acl = NULL;
1580     }
1581     break;
1582     case ACL_TYPE_DEFAULT:
1583     diff --git a/fs/ext2/acl.c b/fs/ext2/acl.c
1584     index 27695e6f4e46..d6aeb84e90b6 100644
1585     --- a/fs/ext2/acl.c
1586     +++ b/fs/ext2/acl.c
1587     @@ -193,15 +193,11 @@ ext2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
1588     case ACL_TYPE_ACCESS:
1589     name_index = EXT2_XATTR_INDEX_POSIX_ACL_ACCESS;
1590     if (acl) {
1591     - error = posix_acl_equiv_mode(acl, &inode->i_mode);
1592     - if (error < 0)
1593     + error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
1594     + if (error)
1595     return error;
1596     - else {
1597     - inode->i_ctime = CURRENT_TIME_SEC;
1598     - mark_inode_dirty(inode);
1599     - if (error == 0)
1600     - acl = NULL;
1601     - }
1602     + inode->i_ctime = CURRENT_TIME_SEC;
1603     + mark_inode_dirty(inode);
1604     }
1605     break;
1606    
1607     diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c
1608     index 69b1e73026a5..c3fe1e323951 100644
1609     --- a/fs/ext4/acl.c
1610     +++ b/fs/ext4/acl.c
1611     @@ -196,15 +196,11 @@ __ext4_set_acl(handle_t *handle, struct inode *inode, int type,
1612     case ACL_TYPE_ACCESS:
1613     name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS;
1614     if (acl) {
1615     - error = posix_acl_equiv_mode(acl, &inode->i_mode);
1616     - if (error < 0)
1617     + error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
1618     + if (error)
1619     return error;
1620     - else {
1621     - inode->i_ctime = ext4_current_time(inode);
1622     - ext4_mark_inode_dirty(handle, inode);
1623     - if (error == 0)
1624     - acl = NULL;
1625     - }
1626     + inode->i_ctime = ext4_current_time(inode);
1627     + ext4_mark_inode_dirty(handle, inode);
1628     }
1629     break;
1630    
1631     diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
1632     index c8f25f7241f0..e9a8d676c6bc 100644
1633     --- a/fs/f2fs/acl.c
1634     +++ b/fs/f2fs/acl.c
1635     @@ -214,12 +214,10 @@ static int __f2fs_set_acl(struct inode *inode, int type,
1636     case ACL_TYPE_ACCESS:
1637     name_index = F2FS_XATTR_INDEX_POSIX_ACL_ACCESS;
1638     if (acl) {
1639     - error = posix_acl_equiv_mode(acl, &inode->i_mode);
1640     - if (error < 0)
1641     + error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
1642     + if (error)
1643     return error;
1644     set_acl_inode(fi, inode->i_mode);
1645     - if (error == 0)
1646     - acl = NULL;
1647     }
1648     break;
1649    
1650     diff --git a/fs/gfs2/acl.c b/fs/gfs2/acl.c
1651     index 1be3b061c05c..ff0ac96a8e7b 100644
1652     --- a/fs/gfs2/acl.c
1653     +++ b/fs/gfs2/acl.c
1654     @@ -79,17 +79,11 @@ int gfs2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
1655     if (type == ACL_TYPE_ACCESS) {
1656     umode_t mode = inode->i_mode;
1657    
1658     - error = posix_acl_equiv_mode(acl, &mode);
1659     - if (error < 0)
1660     + error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
1661     + if (error)
1662     return error;
1663     -
1664     - if (error == 0)
1665     - acl = NULL;
1666     -
1667     - if (mode != inode->i_mode) {
1668     - inode->i_mode = mode;
1669     + if (mode != inode->i_mode)
1670     mark_inode_dirty(inode);
1671     - }
1672     }
1673    
1674     if (acl) {
1675     diff --git a/fs/hfsplus/posix_acl.c b/fs/hfsplus/posix_acl.c
1676     index df0c9af68d05..71b3087b7e32 100644
1677     --- a/fs/hfsplus/posix_acl.c
1678     +++ b/fs/hfsplus/posix_acl.c
1679     @@ -68,8 +68,8 @@ int hfsplus_set_posix_acl(struct inode *inode, struct posix_acl *acl,
1680     case ACL_TYPE_ACCESS:
1681     xattr_name = POSIX_ACL_XATTR_ACCESS;
1682     if (acl) {
1683     - err = posix_acl_equiv_mode(acl, &inode->i_mode);
1684     - if (err < 0)
1685     + err = posix_acl_update_mode(inode, &inode->i_mode, &acl);
1686     + if (err)
1687     return err;
1688     }
1689     err = 0;
1690     diff --git a/fs/jffs2/acl.c b/fs/jffs2/acl.c
1691     index 2f7a3c090489..f9f86f87d32b 100644
1692     --- a/fs/jffs2/acl.c
1693     +++ b/fs/jffs2/acl.c
1694     @@ -235,9 +235,10 @@ int jffs2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
1695     case ACL_TYPE_ACCESS:
1696     xprefix = JFFS2_XPREFIX_ACL_ACCESS;
1697     if (acl) {
1698     - umode_t mode = inode->i_mode;
1699     - rc = posix_acl_equiv_mode(acl, &mode);
1700     - if (rc < 0)
1701     + umode_t mode;
1702     +
1703     + rc = posix_acl_update_mode(inode, &mode, &acl);
1704     + if (rc)
1705     return rc;
1706     if (inode->i_mode != mode) {
1707     struct iattr attr;
1708     @@ -249,8 +250,6 @@ int jffs2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
1709     if (rc < 0)
1710     return rc;
1711     }
1712     - if (rc == 0)
1713     - acl = NULL;
1714     }
1715     break;
1716     case ACL_TYPE_DEFAULT:
1717     diff --git a/fs/jfs/acl.c b/fs/jfs/acl.c
1718     index 0c8ca830b113..9fad9f4fe883 100644
1719     --- a/fs/jfs/acl.c
1720     +++ b/fs/jfs/acl.c
1721     @@ -84,13 +84,11 @@ static int __jfs_set_acl(tid_t tid, struct inode *inode, int type,
1722     case ACL_TYPE_ACCESS:
1723     ea_name = POSIX_ACL_XATTR_ACCESS;
1724     if (acl) {
1725     - rc = posix_acl_equiv_mode(acl, &inode->i_mode);
1726     - if (rc < 0)
1727     + rc = posix_acl_update_mode(inode, &inode->i_mode, &acl);
1728     + if (rc)
1729     return rc;
1730     inode->i_ctime = CURRENT_TIME;
1731     mark_inode_dirty(inode);
1732     - if (rc == 0)
1733     - acl = NULL;
1734     }
1735     break;
1736     case ACL_TYPE_DEFAULT:
1737     diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
1738     index 2162434728c0..164307b99405 100644
1739     --- a/fs/ocfs2/acl.c
1740     +++ b/fs/ocfs2/acl.c
1741     @@ -241,13 +241,11 @@ int ocfs2_set_acl(handle_t *handle,
1742     case ACL_TYPE_ACCESS:
1743     name_index = OCFS2_XATTR_INDEX_POSIX_ACL_ACCESS;
1744     if (acl) {
1745     - umode_t mode = inode->i_mode;
1746     - ret = posix_acl_equiv_mode(acl, &mode);
1747     - if (ret < 0)
1748     - return ret;
1749     + umode_t mode;
1750    
1751     - if (ret == 0)
1752     - acl = NULL;
1753     + ret = posix_acl_update_mode(inode, &mode, &acl);
1754     + if (ret)
1755     + return ret;
1756    
1757     ret = ocfs2_acl_set_mode(inode, di_bh,
1758     handle, mode);
1759     diff --git a/fs/posix_acl.c b/fs/posix_acl.c
1760     index 34bd1bd354e6..a60d3cc5b55d 100644
1761     --- a/fs/posix_acl.c
1762     +++ b/fs/posix_acl.c
1763     @@ -592,6 +592,37 @@ no_mem:
1764     }
1765     EXPORT_SYMBOL_GPL(posix_acl_create);
1766    
1767     +/**
1768     + * posix_acl_update_mode - update mode in set_acl
1769     + *
1770     + * Update the file mode when setting an ACL: compute the new file permission
1771     + * bits based on the ACL. In addition, if the ACL is equivalent to the new
1772     + * file mode, set *acl to NULL to indicate that no ACL should be set.
1773     + *
1774     + * As with chmod, clear the setgit bit if the caller is not in the owning group
1775     + * or capable of CAP_FSETID (see inode_change_ok).
1776     + *
1777     + * Called from set_acl inode operations.
1778     + */
1779     +int posix_acl_update_mode(struct inode *inode, umode_t *mode_p,
1780     + struct posix_acl **acl)
1781     +{
1782     + umode_t mode = inode->i_mode;
1783     + int error;
1784     +
1785     + error = posix_acl_equiv_mode(*acl, &mode);
1786     + if (error < 0)
1787     + return error;
1788     + if (error == 0)
1789     + *acl = NULL;
1790     + if (!in_group_p(inode->i_gid) &&
1791     + !capable_wrt_inode_uidgid(inode, CAP_FSETID))
1792     + mode &= ~S_ISGID;
1793     + *mode_p = mode;
1794     + return 0;
1795     +}
1796     +EXPORT_SYMBOL(posix_acl_update_mode);
1797     +
1798     /*
1799     * Fix up the uids and gids in posix acl extended attributes in place.
1800     */
1801     diff --git a/fs/reiserfs/xattr_acl.c b/fs/reiserfs/xattr_acl.c
1802     index 4b34b9dc03dd..9b1824f35501 100644
1803     --- a/fs/reiserfs/xattr_acl.c
1804     +++ b/fs/reiserfs/xattr_acl.c
1805     @@ -246,13 +246,9 @@ __reiserfs_set_acl(struct reiserfs_transaction_handle *th, struct inode *inode,
1806     case ACL_TYPE_ACCESS:
1807     name = POSIX_ACL_XATTR_ACCESS;
1808     if (acl) {
1809     - error = posix_acl_equiv_mode(acl, &inode->i_mode);
1810     - if (error < 0)
1811     + error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
1812     + if (error)
1813     return error;
1814     - else {
1815     - if (error == 0)
1816     - acl = NULL;
1817     - }
1818     }
1819     break;
1820     case ACL_TYPE_DEFAULT:
1821     diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c
1822     index 6bb470fbb8e8..c5101a3295d8 100644
1823     --- a/fs/xfs/xfs_acl.c
1824     +++ b/fs/xfs/xfs_acl.c
1825     @@ -288,16 +288,11 @@ xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
1826     return error;
1827    
1828     if (type == ACL_TYPE_ACCESS) {
1829     - umode_t mode = inode->i_mode;
1830     - error = posix_acl_equiv_mode(acl, &mode);
1831     -
1832     - if (error <= 0) {
1833     - acl = NULL;
1834     -
1835     - if (error < 0)
1836     - return error;
1837     - }
1838     + umode_t mode;
1839    
1840     + error = posix_acl_update_mode(inode, &mode, &acl);
1841     + if (error)
1842     + return error;
1843     error = xfs_set_mode(inode, mode);
1844     if (error)
1845     return error;
1846     diff --git a/include/drm/drmP.h b/include/drm/drmP.h
1847     index 0a271ca1f7c7..a31976c860f6 100644
1848     --- a/include/drm/drmP.h
1849     +++ b/include/drm/drmP.h
1850     @@ -1029,7 +1029,8 @@ static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
1851     #endif
1852    
1853     extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
1854     - struct drm_gem_object *obj, int flags);
1855     + struct drm_gem_object *obj,
1856     + int flags);
1857     extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
1858     struct drm_file *file_priv, uint32_t handle, uint32_t flags,
1859     int *prime_fd);
1860     diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
1861     index 4e9c75226f07..12b4d54a8ffa 100644
1862     --- a/include/linux/netdevice.h
1863     +++ b/include/linux/netdevice.h
1864     @@ -1986,8 +1986,8 @@ struct napi_gro_cb {
1865     /* This is non-zero if the packet may be of the same flow. */
1866     u8 same_flow:1;
1867    
1868     - /* Used in udp_gro_receive */
1869     - u8 udp_mark:1;
1870     + /* Used in tunnel GRO receive */
1871     + u8 encap_mark:1;
1872    
1873     /* GRO checksum is valid */
1874     u8 csum_valid:1;
1875     diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h
1876     index 3e96a6a76103..d1a8ad7e5ae4 100644
1877     --- a/include/linux/posix_acl.h
1878     +++ b/include/linux/posix_acl.h
1879     @@ -95,6 +95,7 @@ extern int set_posix_acl(struct inode *, int, struct posix_acl *);
1880     extern int posix_acl_chmod(struct inode *, umode_t);
1881     extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **,
1882     struct posix_acl **);
1883     +extern int posix_acl_update_mode(struct inode *, umode_t *, struct posix_acl **);
1884    
1885     extern int simple_set_acl(struct inode *, struct posix_acl *, int);
1886     extern int simple_acl_create(struct inode *, struct inode *);
1887     diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
1888     index af40bc586a1b..86a7bdd61d1a 100644
1889     --- a/include/net/ip_tunnels.h
1890     +++ b/include/net/ip_tunnels.h
1891     @@ -283,6 +283,22 @@ struct metadata_dst *iptunnel_metadata_reply(struct metadata_dst *md,
1892     struct sk_buff *iptunnel_handle_offloads(struct sk_buff *skb, bool gre_csum,
1893     int gso_type_mask);
1894    
1895     +static inline int iptunnel_pull_offloads(struct sk_buff *skb)
1896     +{
1897     + if (skb_is_gso(skb)) {
1898     + int err;
1899     +
1900     + err = skb_unclone(skb, GFP_ATOMIC);
1901     + if (unlikely(err))
1902     + return err;
1903     + skb_shinfo(skb)->gso_type &= ~(NETIF_F_GSO_ENCAP_ALL >>
1904     + NETIF_F_GSO_SHIFT);
1905     + }
1906     +
1907     + skb->encapsulation = 0;
1908     + return 0;
1909     +}
1910     +
1911     static inline void iptunnel_xmit_stats(int err,
1912     struct net_device_stats *err_stats,
1913     struct pcpu_sw_netstats __percpu *stats)
1914     diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c
1915     index abd286afbd27..a4775f3451b9 100644
1916     --- a/kernel/irq/generic-chip.c
1917     +++ b/kernel/irq/generic-chip.c
1918     @@ -411,8 +411,29 @@ int irq_map_generic_chip(struct irq_domain *d, unsigned int virq,
1919     }
1920     EXPORT_SYMBOL_GPL(irq_map_generic_chip);
1921    
1922     +static void irq_unmap_generic_chip(struct irq_domain *d, unsigned int virq)
1923     +{
1924     + struct irq_data *data = irq_domain_get_irq_data(d, virq);
1925     + struct irq_domain_chip_generic *dgc = d->gc;
1926     + unsigned int hw_irq = data->hwirq;
1927     + struct irq_chip_generic *gc;
1928     + int irq_idx;
1929     +
1930     + gc = irq_get_domain_generic_chip(d, hw_irq);
1931     + if (!gc)
1932     + return;
1933     +
1934     + irq_idx = hw_irq % dgc->irqs_per_chip;
1935     +
1936     + clear_bit(irq_idx, &gc->installed);
1937     + irq_domain_set_info(d, virq, hw_irq, &no_irq_chip, NULL, NULL, NULL,
1938     + NULL);
1939     +
1940     +}
1941     +
1942     struct irq_domain_ops irq_generic_chip_ops = {
1943     .map = irq_map_generic_chip,
1944     + .unmap = irq_unmap_generic_chip,
1945     .xlate = irq_domain_xlate_onetwocell,
1946     };
1947     EXPORT_SYMBOL_GPL(irq_generic_chip_ops);
1948     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1949     index 125c7dd55322..4434cdd4cd9a 100644
1950     --- a/mm/hugetlb.c
1951     +++ b/mm/hugetlb.c
1952     @@ -1416,12 +1416,13 @@ static void dissolve_free_huge_page(struct page *page)
1953     {
1954     spin_lock(&hugetlb_lock);
1955     if (PageHuge(page) && !page_count(page)) {
1956     - struct hstate *h = page_hstate(page);
1957     - int nid = page_to_nid(page);
1958     - list_del(&page->lru);
1959     + struct page *head = compound_head(page);
1960     + struct hstate *h = page_hstate(head);
1961     + int nid = page_to_nid(head);
1962     + list_del(&head->lru);
1963     h->free_huge_pages--;
1964     h->free_huge_pages_node[nid]--;
1965     - update_and_free_page(h, page);
1966     + update_and_free_page(h, head);
1967     }
1968     spin_unlock(&hugetlb_lock);
1969     }
1970     @@ -1429,7 +1430,8 @@ static void dissolve_free_huge_page(struct page *page)
1971     /*
1972     * Dissolve free hugepages in a given pfn range. Used by memory hotplug to
1973     * make specified memory blocks removable from the system.
1974     - * Note that start_pfn should aligned with (minimum) hugepage size.
1975     + * Note that this will dissolve a free gigantic hugepage completely, if any
1976     + * part of it lies within the given range.
1977     */
1978     void dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn)
1979     {
1980     @@ -1438,7 +1440,6 @@ void dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn)
1981     if (!hugepages_supported())
1982     return;
1983    
1984     - VM_BUG_ON(!IS_ALIGNED(start_pfn, 1 << minimum_order));
1985     for (pfn = start_pfn; pfn < end_pfn; pfn += 1 << minimum_order)
1986     dissolve_free_huge_page(pfn_to_page(pfn));
1987     }
1988     diff --git a/net/core/dev.c b/net/core/dev.c
1989     index de4ed2b5a221..0989fea88c44 100644
1990     --- a/net/core/dev.c
1991     +++ b/net/core/dev.c
1992     @@ -4239,7 +4239,7 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff
1993     NAPI_GRO_CB(skb)->same_flow = 0;
1994     NAPI_GRO_CB(skb)->flush = 0;
1995     NAPI_GRO_CB(skb)->free = 0;
1996     - NAPI_GRO_CB(skb)->udp_mark = 0;
1997     + NAPI_GRO_CB(skb)->encap_mark = 0;
1998     NAPI_GRO_CB(skb)->gro_remcsum_start = 0;
1999    
2000     /* Setup for GRO checksum validation */
2001     diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
2002     index 5c5db6636704..1a5c1ca3ad3c 100644
2003     --- a/net/ipv4/af_inet.c
2004     +++ b/net/ipv4/af_inet.c
2005     @@ -1383,6 +1383,19 @@ out:
2006     return pp;
2007     }
2008    
2009     +static struct sk_buff **ipip_gro_receive(struct sk_buff **head,
2010     + struct sk_buff *skb)
2011     +{
2012     + if (NAPI_GRO_CB(skb)->encap_mark) {
2013     + NAPI_GRO_CB(skb)->flush = 1;
2014     + return NULL;
2015     + }
2016     +
2017     + NAPI_GRO_CB(skb)->encap_mark = 1;
2018     +
2019     + return inet_gro_receive(head, skb);
2020     +}
2021     +
2022     int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
2023     {
2024     if (sk->sk_family == AF_INET)
2025     @@ -1425,6 +1438,13 @@ out_unlock:
2026     return err;
2027     }
2028    
2029     +static int ipip_gro_complete(struct sk_buff *skb, int nhoff)
2030     +{
2031     + skb->encapsulation = 1;
2032     + skb_shinfo(skb)->gso_type |= SKB_GSO_IPIP;
2033     + return inet_gro_complete(skb, nhoff);
2034     +}
2035     +
2036     int inet_ctl_sock_create(struct sock **sk, unsigned short family,
2037     unsigned short type, unsigned char protocol,
2038     struct net *net)
2039     @@ -1652,8 +1672,8 @@ static struct packet_offload ip_packet_offload __read_mostly = {
2040     static const struct net_offload ipip_offload = {
2041     .callbacks = {
2042     .gso_segment = inet_gso_segment,
2043     - .gro_receive = inet_gro_receive,
2044     - .gro_complete = inet_gro_complete,
2045     + .gro_receive = ipip_gro_receive,
2046     + .gro_complete = ipip_gro_complete,
2047     },
2048     };
2049    
2050     diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c
2051     index bd903fe0f750..08d7de55e57e 100644
2052     --- a/net/ipv4/fou.c
2053     +++ b/net/ipv4/fou.c
2054     @@ -48,7 +48,7 @@ static inline struct fou *fou_from_sock(struct sock *sk)
2055     return sk->sk_user_data;
2056     }
2057    
2058     -static void fou_recv_pull(struct sk_buff *skb, size_t len)
2059     +static int fou_recv_pull(struct sk_buff *skb, size_t len)
2060     {
2061     struct iphdr *iph = ip_hdr(skb);
2062    
2063     @@ -59,6 +59,7 @@ static void fou_recv_pull(struct sk_buff *skb, size_t len)
2064     __skb_pull(skb, len);
2065     skb_postpull_rcsum(skb, udp_hdr(skb), len);
2066     skb_reset_transport_header(skb);
2067     + return iptunnel_pull_offloads(skb);
2068     }
2069    
2070     static int fou_udp_recv(struct sock *sk, struct sk_buff *skb)
2071     @@ -68,9 +69,14 @@ static int fou_udp_recv(struct sock *sk, struct sk_buff *skb)
2072     if (!fou)
2073     return 1;
2074    
2075     - fou_recv_pull(skb, sizeof(struct udphdr));
2076     + if (fou_recv_pull(skb, sizeof(struct udphdr)))
2077     + goto drop;
2078    
2079     return -fou->protocol;
2080     +
2081     +drop:
2082     + kfree_skb(skb);
2083     + return 0;
2084     }
2085    
2086     static struct guehdr *gue_remcsum(struct sk_buff *skb, struct guehdr *guehdr,
2087     @@ -170,6 +176,9 @@ static int gue_udp_recv(struct sock *sk, struct sk_buff *skb)
2088     __skb_pull(skb, sizeof(struct udphdr) + hdrlen);
2089     skb_reset_transport_header(skb);
2090    
2091     + if (iptunnel_pull_offloads(skb))
2092     + goto drop;
2093     +
2094     return -guehdr->proto_ctype;
2095    
2096     drop:
2097     diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
2098     index 5a8ee3282550..e603004c1af8 100644
2099     --- a/net/ipv4/gre_offload.c
2100     +++ b/net/ipv4/gre_offload.c
2101     @@ -128,6 +128,11 @@ static struct sk_buff **gre_gro_receive(struct sk_buff **head,
2102     struct packet_offload *ptype;
2103     __be16 type;
2104    
2105     + if (NAPI_GRO_CB(skb)->encap_mark)
2106     + goto out;
2107     +
2108     + NAPI_GRO_CB(skb)->encap_mark = 1;
2109     +
2110     off = skb_gro_offset(skb);
2111     hlen = off + sizeof(*greh);
2112     greh = skb_gro_header_fast(skb, off);
2113     diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c
2114     index 6cb9009c3d96..dbda0565781c 100644
2115     --- a/net/ipv4/ip_tunnel_core.c
2116     +++ b/net/ipv4/ip_tunnel_core.c
2117     @@ -116,7 +116,8 @@ int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto)
2118     skb->vlan_tci = 0;
2119     skb_set_queue_mapping(skb, 0);
2120     skb->pkt_type = PACKET_HOST;
2121     - return 0;
2122     +
2123     + return iptunnel_pull_offloads(skb);
2124     }
2125     EXPORT_SYMBOL_GPL(iptunnel_pull_header);
2126    
2127     diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
2128     index f9386160cbee..0e36e56dfd22 100644
2129     --- a/net/ipv4/udp_offload.c
2130     +++ b/net/ipv4/udp_offload.c
2131     @@ -299,14 +299,14 @@ struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb,
2132     unsigned int off = skb_gro_offset(skb);
2133     int flush = 1;
2134    
2135     - if (NAPI_GRO_CB(skb)->udp_mark ||
2136     + if (NAPI_GRO_CB(skb)->encap_mark ||
2137     (skb->ip_summed != CHECKSUM_PARTIAL &&
2138     NAPI_GRO_CB(skb)->csum_cnt == 0 &&
2139     !NAPI_GRO_CB(skb)->csum_valid))
2140     goto out;
2141    
2142     - /* mark that this skb passed once through the udp gro layer */
2143     - NAPI_GRO_CB(skb)->udp_mark = 1;
2144     + /* mark that this skb passed once through the tunnel gro layer */
2145     + NAPI_GRO_CB(skb)->encap_mark = 1;
2146    
2147     rcu_read_lock();
2148     uo_priv = rcu_dereference(udp_offload_base);
2149     diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
2150     index eeca943f12dc..82e9f3076028 100644
2151     --- a/net/ipv6/ip6_offload.c
2152     +++ b/net/ipv6/ip6_offload.c
2153     @@ -258,6 +258,19 @@ out:
2154     return pp;
2155     }
2156    
2157     +static struct sk_buff **sit_gro_receive(struct sk_buff **head,
2158     + struct sk_buff *skb)
2159     +{
2160     + if (NAPI_GRO_CB(skb)->encap_mark) {
2161     + NAPI_GRO_CB(skb)->flush = 1;
2162     + return NULL;
2163     + }
2164     +
2165     + NAPI_GRO_CB(skb)->encap_mark = 1;
2166     +
2167     + return ipv6_gro_receive(head, skb);
2168     +}
2169     +
2170     static int ipv6_gro_complete(struct sk_buff *skb, int nhoff)
2171     {
2172     const struct net_offload *ops;
2173     @@ -302,7 +315,7 @@ static struct packet_offload ipv6_packet_offload __read_mostly = {
2174     static const struct net_offload sit_offload = {
2175     .callbacks = {
2176     .gso_segment = ipv6_gso_segment,
2177     - .gro_receive = ipv6_gro_receive,
2178     + .gro_receive = sit_gro_receive,
2179     .gro_complete = sit_gro_complete,
2180     },
2181     };
2182     diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
2183     index ba3d2f3d66d2..3da2b16356eb 100644
2184     --- a/net/ipv6/sit.c
2185     +++ b/net/ipv6/sit.c
2186     @@ -681,14 +681,15 @@ static int ipip6_rcv(struct sk_buff *skb)
2187     skb->mac_header = skb->network_header;
2188     skb_reset_network_header(skb);
2189     IPCB(skb)->flags = 0;
2190     - skb->protocol = htons(ETH_P_IPV6);
2191     + skb->dev = tunnel->dev;
2192    
2193     if (packet_is_spoofed(skb, iph, tunnel)) {
2194     tunnel->dev->stats.rx_errors++;
2195     goto out;
2196     }
2197    
2198     - __skb_tunnel_rx(skb, tunnel->dev, tunnel->net);
2199     + if (iptunnel_pull_header(skb, 0, htons(ETH_P_IPV6)))
2200     + goto out;
2201    
2202     err = IP_ECN_decapsulate(iph, skb);
2203     if (unlikely(err)) {
2204     diff --git a/scripts/sortextable.c b/scripts/sortextable.c
2205     index c2423d913b46..7b29fb14f870 100644
2206     --- a/scripts/sortextable.c
2207     +++ b/scripts/sortextable.c
2208     @@ -209,6 +209,35 @@ static int compare_relative_table(const void *a, const void *b)
2209     return 0;
2210     }
2211    
2212     +static void x86_sort_relative_table(char *extab_image, int image_size)
2213     +{
2214     + int i;
2215     +
2216     + i = 0;
2217     + while (i < image_size) {
2218     + uint32_t *loc = (uint32_t *)(extab_image + i);
2219     +
2220     + w(r(loc) + i, loc);
2221     + w(r(loc + 1) + i + 4, loc + 1);
2222     + w(r(loc + 2) + i + 8, loc + 2);
2223     +
2224     + i += sizeof(uint32_t) * 3;
2225     + }
2226     +
2227     + qsort(extab_image, image_size / 12, 12, compare_relative_table);
2228     +
2229     + i = 0;
2230     + while (i < image_size) {
2231     + uint32_t *loc = (uint32_t *)(extab_image + i);
2232     +
2233     + w(r(loc) - i, loc);
2234     + w(r(loc + 1) - (i + 4), loc + 1);
2235     + w(r(loc + 2) - (i + 8), loc + 2);
2236     +
2237     + i += sizeof(uint32_t) * 3;
2238     + }
2239     +}
2240     +
2241     static void sort_relative_table(char *extab_image, int image_size)
2242     {
2243     int i;
2244     @@ -281,6 +310,9 @@ do_file(char const *const fname)
2245     break;
2246     case EM_386:
2247     case EM_X86_64:
2248     + custom_sort = x86_sort_relative_table;
2249     + break;
2250     +
2251     case EM_S390:
2252     custom_sort = sort_relative_table;
2253     break;
2254     diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
2255     index afb70a5d4fd3..b8a256dfed7e 100644
2256     --- a/sound/soc/soc-dapm.c
2257     +++ b/sound/soc/soc-dapm.c
2258     @@ -823,6 +823,7 @@ static int dapm_create_or_share_kcontrol(struct snd_soc_dapm_widget *w,
2259     case snd_soc_dapm_switch:
2260     case snd_soc_dapm_mixer:
2261     case snd_soc_dapm_pga:
2262     + case snd_soc_dapm_out_drv:
2263     wname_in_long_name = true;
2264     kcname_in_long_name = true;
2265     break;
2266     @@ -3015,6 +3016,9 @@ int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol,
2267     }
2268     mutex_unlock(&card->dapm_mutex);
2269    
2270     + if (ret)
2271     + return ret;
2272     +
2273     if (invert)
2274     ucontrol->value.integer.value[0] = max - val;
2275     else
2276     @@ -3166,7 +3170,7 @@ int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
2277     if (e->shift_l != e->shift_r) {
2278     if (item[1] > e->items)
2279     return -EINVAL;
2280     - val |= snd_soc_enum_item_to_val(e, item[1]) << e->shift_l;
2281     + val |= snd_soc_enum_item_to_val(e, item[1]) << e->shift_r;
2282     mask |= e->mask << e->shift_r;
2283     }
2284    
2285     diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
2286     index 6963ba20991c..70396d3f6472 100644
2287     --- a/sound/soc/soc-topology.c
2288     +++ b/sound/soc/soc-topology.c
2289     @@ -1484,6 +1484,7 @@ widget:
2290     if (widget == NULL) {
2291     dev_err(tplg->dev, "ASoC: failed to create widget %s controls\n",
2292     w->name);
2293     + ret = -ENOMEM;
2294     goto hdr_err;
2295     }
2296    
2297     diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
2298     index 3900386a3629..d802938644b5 100644
2299     --- a/tools/perf/ui/browsers/hists.c
2300     +++ b/tools/perf/ui/browsers/hists.c
2301     @@ -684,7 +684,6 @@ static int __hpp__slsmg_color_printf(struct perf_hpp *hpp, const char *fmt, ...)
2302     ret = scnprintf(hpp->buf, hpp->size, fmt, len, percent);
2303     ui_browser__printf(arg->b, "%s", hpp->buf);
2304    
2305     - advance_hpp(hpp, ret);
2306     return ret;
2307     }
2308    
2309     diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
2310     index 4a3a72cb5805..6ce624cb7001 100644
2311     --- a/tools/perf/util/stat.c
2312     +++ b/tools/perf/util/stat.c
2313     @@ -311,6 +311,16 @@ int perf_stat_process_counter(struct perf_stat_config *config,
2314    
2315     aggr->val = aggr->ena = aggr->run = 0;
2316    
2317     + /*
2318     + * We calculate counter's data every interval,
2319     + * and the display code shows ps->res_stats
2320     + * avg value. We need to zero the stats for
2321     + * interval mode, otherwise overall avg running
2322     + * averages will be shown for each interval.
2323     + */
2324     + if (config->interval)
2325     + init_stats(ps->res_stats);
2326     +
2327     if (counter->per_pkg)
2328     zero_per_pkg(counter);
2329    
2330     diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
2331     index 475d88d0a1c9..27ae382feb2d 100644
2332     --- a/tools/perf/util/symbol-elf.c
2333     +++ b/tools/perf/util/symbol-elf.c
2334     @@ -1091,9 +1091,8 @@ new_symbol:
2335     * For misannotated, zeroed, ASM function sizes.
2336     */
2337     if (nr > 0) {
2338     - if (!symbol_conf.allow_aliases)
2339     - symbols__fixup_duplicate(&dso->symbols[map->type]);
2340     symbols__fixup_end(&dso->symbols[map->type]);
2341     + symbols__fixup_duplicate(&dso->symbols[map->type]);
2342     if (kmap) {
2343     /*
2344     * We need to fixup this here too because we create new
2345     diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
2346     index cd08027a6d2c..520a32a12f8a 100644
2347     --- a/tools/perf/util/symbol.c
2348     +++ b/tools/perf/util/symbol.c
2349     @@ -151,6 +151,9 @@ void symbols__fixup_duplicate(struct rb_root *symbols)
2350     struct rb_node *nd;
2351     struct symbol *curr, *next;
2352    
2353     + if (symbol_conf.allow_aliases)
2354     + return;
2355     +
2356     nd = rb_first(symbols);
2357    
2358     while (nd) {
2359     @@ -1275,8 +1278,8 @@ int dso__load_kallsyms(struct dso *dso, const char *filename,
2360     if (kallsyms__delta(map, filename, &delta))
2361     return -1;
2362    
2363     - symbols__fixup_duplicate(&dso->symbols[map->type]);
2364     symbols__fixup_end(&dso->symbols[map->type]);
2365     + symbols__fixup_duplicate(&dso->symbols[map->type]);
2366    
2367     if (dso->kernel == DSO_TYPE_GUEST_KERNEL)
2368     dso->symtab_type = DSO_BINARY_TYPE__GUEST_KALLSYMS;