Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.12/0115-3.12.16-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2430 - (hide annotations) (download)
Tue May 13 11:02:41 2014 UTC (10 years ago) by niro
File size: 72316 byte(s)
-linux-3.12.16
1 niro 2430 diff --git a/Makefile b/Makefile
2     index 517391a3093e..4aab3be88e9b 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 12
8     -SUBLEVEL = 15
9     +SUBLEVEL = 16
10     EXTRAVERSION =
11     NAME = One Giant Leap for Frogkind
12    
13     diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
14     index 5689c18c85f5..ceb4807ee8b2 100644
15     --- a/arch/arm/include/asm/pgtable-3level.h
16     +++ b/arch/arm/include/asm/pgtable-3level.h
17     @@ -120,11 +120,14 @@
18     /*
19     * 2nd stage PTE definitions for LPAE.
20     */
21     -#define L_PTE_S2_MT_UNCACHED (_AT(pteval_t, 0x5) << 2) /* MemAttr[3:0] */
22     -#define L_PTE_S2_MT_WRITETHROUGH (_AT(pteval_t, 0xa) << 2) /* MemAttr[3:0] */
23     -#define L_PTE_S2_MT_WRITEBACK (_AT(pteval_t, 0xf) << 2) /* MemAttr[3:0] */
24     -#define L_PTE_S2_RDONLY (_AT(pteval_t, 1) << 6) /* HAP[1] */
25     -#define L_PTE_S2_RDWR (_AT(pteval_t, 3) << 6) /* HAP[2:1] */
26     +#define L_PTE_S2_MT_UNCACHED (_AT(pteval_t, 0x0) << 2) /* strongly ordered */
27     +#define L_PTE_S2_MT_WRITETHROUGH (_AT(pteval_t, 0xa) << 2) /* normal inner write-through */
28     +#define L_PTE_S2_MT_WRITEBACK (_AT(pteval_t, 0xf) << 2) /* normal inner write-back */
29     +#define L_PTE_S2_MT_DEV_SHARED (_AT(pteval_t, 0x1) << 2) /* device */
30     +#define L_PTE_S2_MT_MASK (_AT(pteval_t, 0xf) << 2)
31     +
32     +#define L_PTE_S2_RDONLY (_AT(pteval_t, 1) << 6) /* HAP[1] */
33     +#define L_PTE_S2_RDWR (_AT(pteval_t, 3) << 6) /* HAP[2:1] */
34    
35     /*
36     * Hyp-mode PL2 PTE definitions for LPAE.
37     diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
38     index 0e1e2b3afa45..2a767d262c17 100644
39     --- a/arch/arm/kernel/setup.c
40     +++ b/arch/arm/kernel/setup.c
41     @@ -622,6 +622,7 @@ void __init dump_machine_table(void)
42     int __init arm_add_memory(phys_addr_t start, phys_addr_t size)
43     {
44     struct membank *bank = &meminfo.bank[meminfo.nr_banks];
45     + u64 aligned_start;
46    
47     if (meminfo.nr_banks >= NR_BANKS) {
48     printk(KERN_CRIT "NR_BANKS too low, "
49     @@ -634,10 +635,16 @@ int __init arm_add_memory(phys_addr_t start, phys_addr_t size)
50     * Size is appropriately rounded down, start is rounded up.
51     */
52     size -= start & ~PAGE_MASK;
53     - bank->start = PAGE_ALIGN(start);
54     + aligned_start = PAGE_ALIGN(start);
55    
56     -#ifndef CONFIG_ARM_LPAE
57     - if (bank->start + size < bank->start) {
58     +#ifndef CONFIG_ARCH_PHYS_ADDR_T_64BIT
59     + if (aligned_start > ULONG_MAX) {
60     + printk(KERN_CRIT "Ignoring memory at 0x%08llx outside "
61     + "32-bit physical address space\n", (long long)start);
62     + return -EINVAL;
63     + }
64     +
65     + if (aligned_start + size > ULONG_MAX) {
66     printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
67     "32-bit physical address space\n", (long long)start);
68     /*
69     @@ -645,10 +652,25 @@ int __init arm_add_memory(phys_addr_t start, phys_addr_t size)
70     * 32 bits, we use ULONG_MAX as the upper limit rather than 4GB.
71     * This means we lose a page after masking.
72     */
73     - size = ULONG_MAX - bank->start;
74     + size = ULONG_MAX - aligned_start;
75     }
76     #endif
77    
78     + if (aligned_start < PHYS_OFFSET) {
79     + if (aligned_start + size <= PHYS_OFFSET) {
80     + pr_info("Ignoring memory below PHYS_OFFSET: 0x%08llx-0x%08llx\n",
81     + aligned_start, aligned_start + size);
82     + return -EINVAL;
83     + }
84     +
85     + pr_info("Ignoring memory below PHYS_OFFSET: 0x%08llx-0x%08llx\n",
86     + aligned_start, (u64)PHYS_OFFSET);
87     +
88     + size -= PHYS_OFFSET - aligned_start;
89     + aligned_start = PHYS_OFFSET;
90     + }
91     +
92     + bank->start = aligned_start;
93     bank->size = size & ~(phys_addr_t)(PAGE_SIZE - 1);
94    
95     /*
96     diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
97     index 94a119a35af8..3c405f43ca39 100644
98     --- a/arch/arm/mach-tegra/common.c
99     +++ b/arch/arm/mach-tegra/common.c
100     @@ -22,6 +22,7 @@
101     #include <linux/io.h>
102     #include <linux/clk.h>
103     #include <linux/delay.h>
104     +#include <linux/of.h>
105     #include <linux/reboot.h>
106     #include <linux/irqchip.h>
107     #include <linux/clk-provider.h>
108     @@ -82,10 +83,20 @@ void tegra_assert_system_reset(enum reboot_mode mode, const char *cmd)
109     static void __init tegra_init_cache(void)
110     {
111     #ifdef CONFIG_CACHE_L2X0
112     + static const struct of_device_id pl310_ids[] __initconst = {
113     + { .compatible = "arm,pl310-cache", },
114     + {}
115     + };
116     +
117     + struct device_node *np;
118     int ret;
119     void __iomem *p = IO_ADDRESS(TEGRA_ARM_PERIF_BASE) + 0x3000;
120     u32 aux_ctrl, cache_type;
121    
122     + np = of_find_matching_node(NULL, pl310_ids);
123     + if (!np)
124     + return;
125     +
126     cache_type = readl(p + L2X0_CACHE_TYPE);
127     aux_ctrl = (cache_type & 0x700) << (17-8);
128     aux_ctrl |= 0x7C400001;
129     diff --git a/arch/arm/mm/mm.h b/arch/arm/mm/mm.h
130     index d5a4e9ad8f0f..33eab618b3f1 100644
131     --- a/arch/arm/mm/mm.h
132     +++ b/arch/arm/mm/mm.h
133     @@ -38,6 +38,7 @@ static inline pmd_t *pmd_off_k(unsigned long virt)
134    
135     struct mem_type {
136     pteval_t prot_pte;
137     + pteval_t prot_pte_s2;
138     pmdval_t prot_l1;
139     pmdval_t prot_sect;
140     unsigned int domain;
141     diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
142     index b1d17eeb59b8..0222ba7603af 100644
143     --- a/arch/arm/mm/mmu.c
144     +++ b/arch/arm/mm/mmu.c
145     @@ -229,12 +229,16 @@ __setup("noalign", noalign_setup);
146     #endif /* ifdef CONFIG_CPU_CP15 / else */
147    
148     #define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_XN
149     +#define PROT_PTE_S2_DEVICE PROT_PTE_DEVICE
150     #define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE
151    
152     static struct mem_type mem_types[] = {
153     [MT_DEVICE] = { /* Strongly ordered / ARMv6 shared device */
154     .prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_SHARED |
155     L_PTE_SHARED,
156     + .prot_pte_s2 = s2_policy(PROT_PTE_S2_DEVICE) |
157     + s2_policy(L_PTE_S2_MT_DEV_SHARED) |
158     + L_PTE_SHARED,
159     .prot_l1 = PMD_TYPE_TABLE,
160     .prot_sect = PROT_SECT_DEVICE | PMD_SECT_S,
161     .domain = DOMAIN_IO,
162     @@ -456,7 +460,8 @@ static void __init build_mem_type_table(void)
163     cp = &cache_policies[cachepolicy];
164     vecs_pgprot = kern_pgprot = user_pgprot = cp->pte;
165     s2_pgprot = cp->pte_s2;
166     - hyp_device_pgprot = s2_device_pgprot = mem_types[MT_DEVICE].prot_pte;
167     + hyp_device_pgprot = mem_types[MT_DEVICE].prot_pte;
168     + s2_device_pgprot = mem_types[MT_DEVICE].prot_pte_s2;
169    
170     /*
171     * ARMv6 and above have extended page tables.
172     diff --git a/arch/arm64/boot/dts/foundation-v8.dts b/arch/arm64/boot/dts/foundation-v8.dts
173     index 84fcc5018284..519c4b2c0687 100644
174     --- a/arch/arm64/boot/dts/foundation-v8.dts
175     +++ b/arch/arm64/boot/dts/foundation-v8.dts
176     @@ -6,6 +6,8 @@
177    
178     /dts-v1/;
179    
180     +/memreserve/ 0x80000000 0x00010000;
181     +
182     / {
183     model = "Foundation-v8A";
184     compatible = "arm,foundation-aarch64", "arm,vexpress";
185     diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
186     index 965c28ff7b3b..82d95a7e9466 100644
187     --- a/arch/arm64/include/asm/pgtable.h
188     +++ b/arch/arm64/include/asm/pgtable.h
189     @@ -255,7 +255,7 @@ static inline int has_transparent_hugepage(void)
190     #define pgprot_noncached(prot) \
191     __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRnE))
192     #define pgprot_writecombine(prot) \
193     - __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_GRE))
194     + __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC))
195     #define pgprot_dmacoherent(prot) \
196     __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC))
197     #define __HAVE_PHYS_MEM_ACCESS_PROT
198     diff --git a/arch/arm64/include/asm/syscall.h b/arch/arm64/include/asm/syscall.h
199     index 89c047f9a971..70ba9d4ee978 100644
200     --- a/arch/arm64/include/asm/syscall.h
201     +++ b/arch/arm64/include/asm/syscall.h
202     @@ -59,6 +59,9 @@ static inline void syscall_get_arguments(struct task_struct *task,
203     unsigned int i, unsigned int n,
204     unsigned long *args)
205     {
206     + if (n == 0)
207     + return;
208     +
209     if (i + n > SYSCALL_MAX_ARGS) {
210     unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
211     unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
212     @@ -82,6 +85,9 @@ static inline void syscall_set_arguments(struct task_struct *task,
213     unsigned int i, unsigned int n,
214     const unsigned long *args)
215     {
216     + if (n == 0)
217     + return;
218     +
219     if (i + n > SYSCALL_MAX_ARGS) {
220     pr_warning("%s called with max args %d, handling only %d\n",
221     __func__, i + n, SYSCALL_MAX_ARGS);
222     diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h
223     index d3e5e9bc8f94..e37db7f2a5fa 100644
224     --- a/arch/powerpc/include/asm/eeh.h
225     +++ b/arch/powerpc/include/asm/eeh.h
226     @@ -117,6 +117,16 @@ static inline struct pci_dev *eeh_dev_to_pci_dev(struct eeh_dev *edev)
227     return edev ? edev->pdev : NULL;
228     }
229    
230     +/* Return values from eeh_ops::next_error */
231     +enum {
232     + EEH_NEXT_ERR_NONE = 0,
233     + EEH_NEXT_ERR_INF,
234     + EEH_NEXT_ERR_FROZEN_PE,
235     + EEH_NEXT_ERR_FENCED_PHB,
236     + EEH_NEXT_ERR_DEAD_PHB,
237     + EEH_NEXT_ERR_DEAD_IOC
238     +};
239     +
240     /*
241     * The struct is used to trace the registered EEH operation
242     * callback functions. Actually, those operation callback
243     diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
244     index 36bed5a12750..d3a132c9127c 100644
245     --- a/arch/powerpc/kernel/eeh_driver.c
246     +++ b/arch/powerpc/kernel/eeh_driver.c
247     @@ -626,84 +626,90 @@ static void eeh_handle_special_event(void)
248     {
249     struct eeh_pe *pe, *phb_pe;
250     struct pci_bus *bus;
251     - struct pci_controller *hose, *tmp;
252     + struct pci_controller *hose;
253     unsigned long flags;
254     - int rc = 0;
255     + int rc;
256    
257     - /*
258     - * The return value from next_error() has been classified as follows.
259     - * It might be good to enumerate them. However, next_error() is only
260     - * supported by PowerNV platform for now. So it would be fine to use
261     - * integer directly:
262     - *
263     - * 4 - Dead IOC 3 - Dead PHB
264     - * 2 - Fenced PHB 1 - Frozen PE
265     - * 0 - No error found
266     - *
267     - */
268     - rc = eeh_ops->next_error(&pe);
269     - if (rc <= 0)
270     - return;
271    
272     - switch (rc) {
273     - case 4:
274     - /* Mark all PHBs in dead state */
275     - eeh_serialize_lock(&flags);
276     - list_for_each_entry_safe(hose, tmp,
277     - &hose_list, list_node) {
278     - phb_pe = eeh_phb_pe_get(hose);
279     - if (!phb_pe) continue;
280     -
281     - eeh_pe_state_mark(phb_pe,
282     - EEH_PE_ISOLATED | EEH_PE_PHB_DEAD);
283     + do {
284     + rc = eeh_ops->next_error(&pe);
285     +
286     + switch (rc) {
287     + case EEH_NEXT_ERR_DEAD_IOC:
288     + /* Mark all PHBs in dead state */
289     + eeh_serialize_lock(&flags);
290     +
291     + /* Purge all events */
292     + eeh_remove_event(NULL);
293     +
294     + list_for_each_entry(hose, &hose_list, list_node) {
295     + phb_pe = eeh_phb_pe_get(hose);
296     + if (!phb_pe) continue;
297     +
298     + eeh_pe_state_mark(phb_pe,
299     + EEH_PE_ISOLATED | EEH_PE_PHB_DEAD);
300     + }
301     +
302     + eeh_serialize_unlock(flags);
303     +
304     + break;
305     + case EEH_NEXT_ERR_FROZEN_PE:
306     + case EEH_NEXT_ERR_FENCED_PHB:
307     + case EEH_NEXT_ERR_DEAD_PHB:
308     + /* Mark the PE in fenced state */
309     + eeh_serialize_lock(&flags);
310     +
311     + /* Purge all events of the PHB */
312     + eeh_remove_event(pe);
313     +
314     + if (rc == EEH_NEXT_ERR_DEAD_PHB)
315     + eeh_pe_state_mark(pe,
316     + EEH_PE_ISOLATED | EEH_PE_PHB_DEAD);
317     + else
318     + eeh_pe_state_mark(pe,
319     + EEH_PE_ISOLATED | EEH_PE_RECOVERING);
320     +
321     + eeh_serialize_unlock(flags);
322     +
323     + break;
324     + case EEH_NEXT_ERR_NONE:
325     + return;
326     + default:
327     + pr_warn("%s: Invalid value %d from next_error()\n",
328     + __func__, rc);
329     + return;
330     }
331     - eeh_serialize_unlock(flags);
332     -
333     - /* Purge all events */
334     - eeh_remove_event(NULL);
335     - break;
336     - case 3:
337     - case 2:
338     - case 1:
339     - /* Mark the PE in fenced state */
340     - eeh_serialize_lock(&flags);
341     - if (rc == 3)
342     - eeh_pe_state_mark(pe,
343     - EEH_PE_ISOLATED | EEH_PE_PHB_DEAD);
344     - else
345     - eeh_pe_state_mark(pe,
346     - EEH_PE_ISOLATED | EEH_PE_RECOVERING);
347     - eeh_serialize_unlock(flags);
348     -
349     - /* Purge all events of the PHB */
350     - eeh_remove_event(pe);
351     - break;
352     - default:
353     - pr_err("%s: Invalid value %d from next_error()\n",
354     - __func__, rc);
355     - return;
356     - }
357    
358     - /*
359     - * For fenced PHB and frozen PE, it's handled as normal
360     - * event. We have to remove the affected PHBs for dead
361     - * PHB and IOC
362     - */
363     - if (rc == 2 || rc == 1)
364     - eeh_handle_normal_event(pe);
365     - else {
366     - list_for_each_entry_safe(hose, tmp,
367     - &hose_list, list_node) {
368     - phb_pe = eeh_phb_pe_get(hose);
369     - if (!phb_pe || !(phb_pe->state & EEH_PE_PHB_DEAD))
370     - continue;
371     -
372     - bus = eeh_pe_bus_get(phb_pe);
373     - /* Notify all devices that they're about to go down. */
374     - eeh_pe_dev_traverse(pe, eeh_report_failure, NULL);
375     - pcibios_remove_pci_devices(bus);
376     + /*
377     + * For fenced PHB and frozen PE, it's handled as normal
378     + * event. We have to remove the affected PHBs for dead
379     + * PHB and IOC
380     + */
381     + if (rc == EEH_NEXT_ERR_FROZEN_PE ||
382     + rc == EEH_NEXT_ERR_FENCED_PHB) {
383     + eeh_handle_normal_event(pe);
384     + } else {
385     + list_for_each_entry(hose, &hose_list, list_node) {
386     + phb_pe = eeh_phb_pe_get(hose);
387     + if (!phb_pe ||
388     + !(phb_pe->state & EEH_PE_PHB_DEAD))
389     + continue;
390     +
391     + /* Notify all devices to be down */
392     + bus = eeh_pe_bus_get(phb_pe);
393     + eeh_pe_dev_traverse(pe,
394     + eeh_report_failure, NULL);
395     + pcibios_remove_pci_devices(bus);
396     + }
397     }
398     - }
399     +
400     + /*
401     + * If we have detected dead IOC, we needn't proceed
402     + * any more since all PHBs would have been removed
403     + */
404     + if (rc == EEH_NEXT_ERR_DEAD_IOC)
405     + break;
406     + } while (rc != EEH_NEXT_ERR_NONE);
407     }
408    
409     /**
410     diff --git a/arch/powerpc/platforms/powernv/eeh-ioda.c b/arch/powerpc/platforms/powernv/eeh-ioda.c
411     index b7eb5d4f4c89..227c7fe4067f 100644
412     --- a/arch/powerpc/platforms/powernv/eeh-ioda.c
413     +++ b/arch/powerpc/platforms/powernv/eeh-ioda.c
414     @@ -766,12 +766,12 @@ static int ioda_eeh_get_pe(struct pci_controller *hose,
415     */
416     static int ioda_eeh_next_error(struct eeh_pe **pe)
417     {
418     - struct pci_controller *hose, *tmp;
419     + struct pci_controller *hose;
420     struct pnv_phb *phb;
421     u64 frozen_pe_no;
422     u16 err_type, severity;
423     long rc;
424     - int ret = 1;
425     + int ret = EEH_NEXT_ERR_NONE;
426    
427     /*
428     * While running here, it's safe to purge the event queue.
429     @@ -781,7 +781,7 @@ static int ioda_eeh_next_error(struct eeh_pe **pe)
430     eeh_remove_event(NULL);
431     opal_notifier_update_evt(OPAL_EVENT_PCI_ERROR, 0x0ul);
432    
433     - list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
434     + list_for_each_entry(hose, &hose_list, list_node) {
435     /*
436     * If the subordinate PCI buses of the PHB has been
437     * removed, we needn't take care of it any more.
438     @@ -820,19 +820,19 @@ static int ioda_eeh_next_error(struct eeh_pe **pe)
439     switch (err_type) {
440     case OPAL_EEH_IOC_ERROR:
441     if (severity == OPAL_EEH_SEV_IOC_DEAD) {
442     - list_for_each_entry_safe(hose, tmp,
443     - &hose_list, list_node) {
444     + list_for_each_entry(hose, &hose_list,
445     + list_node) {
446     phb = hose->private_data;
447     phb->eeh_state |= PNV_EEH_STATE_REMOVED;
448     }
449    
450     pr_err("EEH: dead IOC detected\n");
451     - ret = 4;
452     - goto out;
453     + ret = EEH_NEXT_ERR_DEAD_IOC;
454     } else if (severity == OPAL_EEH_SEV_INF) {
455     pr_info("EEH: IOC informative error "
456     "detected\n");
457     ioda_eeh_hub_diag(hose);
458     + ret = EEH_NEXT_ERR_NONE;
459     }
460    
461     break;
462     @@ -844,21 +844,20 @@ static int ioda_eeh_next_error(struct eeh_pe **pe)
463     pr_err("EEH: dead PHB#%x detected\n",
464     hose->global_number);
465     phb->eeh_state |= PNV_EEH_STATE_REMOVED;
466     - ret = 3;
467     - goto out;
468     + ret = EEH_NEXT_ERR_DEAD_PHB;
469     } else if (severity == OPAL_EEH_SEV_PHB_FENCED) {
470     if (ioda_eeh_get_phb_pe(hose, pe))
471     break;
472    
473     pr_err("EEH: fenced PHB#%x detected\n",
474     hose->global_number);
475     - ret = 2;
476     - goto out;
477     + ret = EEH_NEXT_ERR_FENCED_PHB;
478     } else if (severity == OPAL_EEH_SEV_INF) {
479     pr_info("EEH: PHB#%x informative error "
480     "detected\n",
481     hose->global_number);
482     ioda_eeh_phb_diag(hose);
483     + ret = EEH_NEXT_ERR_NONE;
484     }
485    
486     break;
487     @@ -868,13 +867,23 @@ static int ioda_eeh_next_error(struct eeh_pe **pe)
488    
489     pr_err("EEH: Frozen PE#%x on PHB#%x detected\n",
490     (*pe)->addr, (*pe)->phb->global_number);
491     - ret = 1;
492     - goto out;
493     + ret = EEH_NEXT_ERR_FROZEN_PE;
494     + break;
495     + default:
496     + pr_warn("%s: Unexpected error type %d\n",
497     + __func__, err_type);
498     }
499     +
500     + /*
501     + * If we have no errors on the specific PHB or only
502     + * informative error there, we continue poking it.
503     + * Otherwise, we need actions to be taken by upper
504     + * layer.
505     + */
506     + if (ret > EEH_NEXT_ERR_INF)
507     + break;
508     }
509    
510     - ret = 0;
511     -out:
512     return ret;
513     }
514    
515     diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
516     index dce0df8150df..74dd12952ea8 100644
517     --- a/arch/x86/kvm/mmu.c
518     +++ b/arch/x86/kvm/mmu.c
519     @@ -2664,6 +2664,9 @@ static int __direct_map(struct kvm_vcpu *vcpu, gpa_t v, int write,
520     int emulate = 0;
521     gfn_t pseudo_gfn;
522    
523     + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa))
524     + return 0;
525     +
526     for_each_shadow_entry(vcpu, (u64)gfn << PAGE_SHIFT, iterator) {
527     if (iterator.level == level) {
528     mmu_set_spte(vcpu, iterator.sptep, ACC_ALL,
529     @@ -2834,6 +2837,9 @@ static bool fast_page_fault(struct kvm_vcpu *vcpu, gva_t gva, int level,
530     bool ret = false;
531     u64 spte = 0ull;
532    
533     + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa))
534     + return false;
535     +
536     if (!page_fault_can_be_fast(error_code))
537     return false;
538    
539     @@ -3229,6 +3235,9 @@ static u64 walk_shadow_page_get_mmio_spte(struct kvm_vcpu *vcpu, u64 addr)
540     struct kvm_shadow_walk_iterator iterator;
541     u64 spte = 0ull;
542    
543     + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa))
544     + return spte;
545     +
546     walk_shadow_page_lockless_begin(vcpu);
547     for_each_shadow_entry_lockless(vcpu, addr, iterator, spte)
548     if (!is_shadow_present_pte(spte))
549     @@ -4557,6 +4566,9 @@ int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4])
550     u64 spte;
551     int nr_sptes = 0;
552    
553     + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa))
554     + return nr_sptes;
555     +
556     walk_shadow_page_lockless_begin(vcpu);
557     for_each_shadow_entry_lockless(vcpu, addr, iterator, spte) {
558     sptes[iterator.level-1] = spte;
559     diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
560     index ad75d77999d0..cba218a2f08d 100644
561     --- a/arch/x86/kvm/paging_tmpl.h
562     +++ b/arch/x86/kvm/paging_tmpl.h
563     @@ -569,6 +569,9 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr,
564     if (FNAME(gpte_changed)(vcpu, gw, top_level))
565     goto out_gpte_changed;
566    
567     + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa))
568     + goto out_gpte_changed;
569     +
570     for (shadow_walk_init(&it, vcpu, addr);
571     shadow_walk_okay(&it) && it.level > gw->level;
572     shadow_walk_next(&it)) {
573     @@ -820,6 +823,11 @@ static void FNAME(invlpg)(struct kvm_vcpu *vcpu, gva_t gva)
574     */
575     mmu_topup_memory_caches(vcpu);
576    
577     + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) {
578     + WARN_ON(1);
579     + return;
580     + }
581     +
582     spin_lock(&vcpu->kvm->mmu_lock);
583     for_each_shadow_entry(vcpu, gva, iterator) {
584     level = iterator.level;
585     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
586     index 6128914ee873..59181e653826 100644
587     --- a/arch/x86/kvm/vmx.c
588     +++ b/arch/x86/kvm/vmx.c
589     @@ -7294,8 +7294,8 @@ static void vmx_free_vcpu(struct kvm_vcpu *vcpu)
590     struct vcpu_vmx *vmx = to_vmx(vcpu);
591    
592     free_vpid(vmx);
593     - free_nested(vmx);
594     free_loaded_vmcs(vmx->loaded_vmcs);
595     + free_nested(vmx);
596     kfree(vmx->guest_msrs);
597     kvm_vcpu_uninit(vcpu);
598     kmem_cache_free(kvm_vcpu_cache, vmx);
599     diff --git a/arch/x86/net/bpf_jit.S b/arch/x86/net/bpf_jit.S
600     index 877b9a1b2152..01495755701b 100644
601     --- a/arch/x86/net/bpf_jit.S
602     +++ b/arch/x86/net/bpf_jit.S
603     @@ -140,7 +140,7 @@ bpf_slow_path_byte_msh:
604     push %r9; \
605     push SKBDATA; \
606     /* rsi already has offset */ \
607     - mov $SIZE,%ecx; /* size */ \
608     + mov $SIZE,%edx; /* size */ \
609     call bpf_internal_load_pointer_neg_helper; \
610     test %rax,%rax; \
611     pop SKBDATA; \
612     diff --git a/drivers/clocksource/vf_pit_timer.c b/drivers/clocksource/vf_pit_timer.c
613     index 587e0202a70b..e5590953630e 100644
614     --- a/drivers/clocksource/vf_pit_timer.c
615     +++ b/drivers/clocksource/vf_pit_timer.c
616     @@ -54,7 +54,7 @@ static inline void pit_irq_acknowledge(void)
617    
618     static unsigned int pit_read_sched_clock(void)
619     {
620     - return __raw_readl(clksrc_base + PITCVAL);
621     + return ~__raw_readl(clksrc_base + PITCVAL);
622     }
623    
624     static int __init pit_clocksource_init(unsigned long rate)
625     diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
626     index fe4a7d16e261..c077df094ae5 100644
627     --- a/drivers/gpu/drm/i915/i915_gem_stolen.c
628     +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
629     @@ -201,6 +201,13 @@ int i915_gem_init_stolen(struct drm_device *dev)
630     struct drm_i915_private *dev_priv = dev->dev_private;
631     int bios_reserved = 0;
632    
633     +#ifdef CONFIG_INTEL_IOMMU
634     + if (intel_iommu_gfx_mapped) {
635     + DRM_INFO("DMAR active, disabling use of stolen memory\n");
636     + return 0;
637     + }
638     +#endif
639     +
640     if (dev_priv->gtt.stolen_size == 0)
641     return 0;
642    
643     diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
644     index 49f6cc0f9919..351805362290 100644
645     --- a/drivers/hid/hid-lg4ff.c
646     +++ b/drivers/hid/hid-lg4ff.c
647     @@ -574,17 +574,6 @@ int lg4ff_init(struct hid_device *hid)
648     if (error)
649     return error;
650    
651     - /* Check if autocentering is available and
652     - * set the centering force to zero by default */
653     - if (test_bit(FF_AUTOCENTER, dev->ffbit)) {
654     - if (rev_maj == FFEX_REV_MAJ && rev_min == FFEX_REV_MIN) /* Formula Force EX expects different autocentering command */
655     - dev->ff->set_autocenter = hid_lg4ff_set_autocenter_ffex;
656     - else
657     - dev->ff->set_autocenter = hid_lg4ff_set_autocenter_default;
658     -
659     - dev->ff->set_autocenter(dev, 0);
660     - }
661     -
662     /* Get private driver data */
663     drv_data = hid_get_drvdata(hid);
664     if (!drv_data) {
665     @@ -605,6 +594,17 @@ int lg4ff_init(struct hid_device *hid)
666     entry->max_range = lg4ff_devices[i].max_range;
667     entry->set_range = lg4ff_devices[i].set_range;
668    
669     + /* Check if autocentering is available and
670     + * set the centering force to zero by default */
671     + if (test_bit(FF_AUTOCENTER, dev->ffbit)) {
672     + if (rev_maj == FFEX_REV_MAJ && rev_min == FFEX_REV_MIN) /* Formula Force EX expects different autocentering command */
673     + dev->ff->set_autocenter = hid_lg4ff_set_autocenter_ffex;
674     + else
675     + dev->ff->set_autocenter = hid_lg4ff_set_autocenter_default;
676     +
677     + dev->ff->set_autocenter(dev, 0);
678     + }
679     +
680     /* Create sysfs interface */
681     error = device_create_file(&hid->dev, &dev_attr_range);
682     if (error)
683     diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c
684     index 6a6dd5cd7833..d0a0034d1734 100644
685     --- a/drivers/hid/hidraw.c
686     +++ b/drivers/hid/hidraw.c
687     @@ -313,13 +313,13 @@ static void drop_ref(struct hidraw *hidraw, int exists_bit)
688     hid_hw_close(hidraw->hid);
689     wake_up_interruptible(&hidraw->wait);
690     }
691     + device_destroy(hidraw_class,
692     + MKDEV(hidraw_major, hidraw->minor));
693     } else {
694     --hidraw->open;
695     }
696     if (!hidraw->open) {
697     if (!hidraw->exist) {
698     - device_destroy(hidraw_class,
699     - MKDEV(hidraw_major, hidraw->minor));
700     hidraw_table[hidraw->minor] = NULL;
701     kfree(hidraw);
702     } else {
703     diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
704     index ba93ef85652d..09c71293ab4b 100644
705     --- a/drivers/infiniband/ulp/isert/ib_isert.c
706     +++ b/drivers/infiniband/ulp/isert/ib_isert.c
707     @@ -1652,7 +1652,6 @@ isert_cq_tx_comp_err(struct iser_tx_desc *tx_desc, struct isert_conn *isert_conn
708     static void
709     isert_cq_rx_comp_err(struct isert_conn *isert_conn)
710     {
711     - struct ib_device *ib_dev = isert_conn->conn_cm_id->device;
712     struct iscsi_conn *conn = isert_conn->conn;
713    
714     if (isert_conn->post_recv_buf_count)
715     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
716     index 597e9b8fc18d..ef1cf52f8bb9 100644
717     --- a/drivers/input/mouse/elantech.c
718     +++ b/drivers/input/mouse/elantech.c
719     @@ -486,6 +486,7 @@ static void elantech_input_sync_v4(struct psmouse *psmouse)
720     unsigned char *packet = psmouse->packet;
721    
722     input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
723     + input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
724     input_mt_report_pointer_emulation(dev, true);
725     input_sync(dev);
726     }
727     @@ -984,6 +985,44 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
728     }
729    
730     /*
731     + * Advertise INPUT_PROP_BUTTONPAD for clickpads. The testing of bit 12 in
732     + * fw_version for this is based on the following fw_version & caps table:
733     + *
734     + * Laptop-model: fw_version: caps: buttons:
735     + * Acer S3 0x461f00 10, 13, 0e clickpad
736     + * Acer S7-392 0x581f01 50, 17, 0d clickpad
737     + * Acer V5-131 0x461f02 01, 16, 0c clickpad
738     + * Acer V5-551 0x461f00 ? clickpad
739     + * Asus K53SV 0x450f01 78, 15, 0c 2 hw buttons
740     + * Asus G46VW 0x460f02 00, 18, 0c 2 hw buttons
741     + * Asus G750JX 0x360f00 00, 16, 0c 2 hw buttons
742     + * Asus UX31 0x361f00 20, 15, 0e clickpad
743     + * Asus UX32VD 0x361f02 00, 15, 0e clickpad
744     + * Avatar AVIU-145A2 0x361f00 ? clickpad
745     + * Gigabyte U2442 0x450f01 58, 17, 0c 2 hw buttons
746     + * Lenovo L430 0x350f02 b9, 15, 0c 2 hw buttons (*)
747     + * Samsung NF210 0x150b00 78, 14, 0a 2 hw buttons
748     + * Samsung NP770Z5E 0x575f01 10, 15, 0f clickpad
749     + * Samsung NP700Z5B 0x361f06 21, 15, 0f clickpad
750     + * Samsung NP900X3E-A02 0x575f03 ? clickpad
751     + * Samsung NP-QX410 0x851b00 19, 14, 0c clickpad
752     + * Samsung RC512 0x450f00 08, 15, 0c 2 hw buttons
753     + * Samsung RF710 0x450f00 ? 2 hw buttons
754     + * System76 Pangolin 0x250f01 ? 2 hw buttons
755     + * (*) + 3 trackpoint buttons
756     + */
757     +static void elantech_set_buttonpad_prop(struct psmouse *psmouse)
758     +{
759     + struct input_dev *dev = psmouse->dev;
760     + struct elantech_data *etd = psmouse->private;
761     +
762     + if (etd->fw_version & 0x001000) {
763     + __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
764     + __clear_bit(BTN_RIGHT, dev->keybit);
765     + }
766     +}
767     +
768     +/*
769     * Set the appropriate event bits for the input subsystem
770     */
771     static int elantech_set_input_params(struct psmouse *psmouse)
772     @@ -1026,6 +1065,8 @@ static int elantech_set_input_params(struct psmouse *psmouse)
773     __set_bit(INPUT_PROP_SEMI_MT, dev->propbit);
774     /* fall through */
775     case 3:
776     + if (etd->hw_version == 3)
777     + elantech_set_buttonpad_prop(psmouse);
778     input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
779     input_set_abs_params(dev, ABS_Y, y_min, y_max, 0, 0);
780     if (etd->reports_pressure) {
781     @@ -1047,9 +1088,7 @@ static int elantech_set_input_params(struct psmouse *psmouse)
782     */
783     psmouse_warn(psmouse, "couldn't query resolution data.\n");
784     }
785     - /* v4 is clickpad, with only one button. */
786     - __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
787     - __clear_bit(BTN_RIGHT, dev->keybit);
788     + elantech_set_buttonpad_prop(psmouse);
789     __set_bit(BTN_TOOL_QUADTAP, dev->keybit);
790     /* For X to recognize me as touchpad. */
791     input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
792     diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
793     index e53416a4d7f3..a6debe13d5b9 100644
794     --- a/drivers/input/tablet/wacom_sys.c
795     +++ b/drivers/input/tablet/wacom_sys.c
796     @@ -304,7 +304,7 @@ static int wacom_parse_hid(struct usb_interface *intf,
797     struct usb_device *dev = interface_to_usbdev(intf);
798     char limit = 0;
799     /* result has to be defined as int for some devices */
800     - int result = 0;
801     + int result = 0, touch_max = 0;
802     int i = 0, usage = WCM_UNDEFINED, finger = 0, pen = 0;
803     unsigned char *report;
804    
805     @@ -351,7 +351,8 @@ static int wacom_parse_hid(struct usb_interface *intf,
806     if (usage == WCM_DESKTOP) {
807     if (finger) {
808     features->device_type = BTN_TOOL_FINGER;
809     -
810     + /* touch device at least supports one touch point */
811     + touch_max = 1;
812     switch (features->type) {
813     case TABLETPC2FG:
814     features->pktlen = WACOM_PKGLEN_TPC2FG;
815     @@ -504,6 +505,8 @@ static int wacom_parse_hid(struct usb_interface *intf,
816     }
817    
818     out:
819     + if (!features->touch_max && touch_max)
820     + features->touch_max = touch_max;
821     result = 0;
822     kfree(report);
823     return result;
824     diff --git a/drivers/media/pci/cx18/cx18-driver.c b/drivers/media/pci/cx18/cx18-driver.c
825     index 6386ced910c2..91c694ba42f4 100644
826     --- a/drivers/media/pci/cx18/cx18-driver.c
827     +++ b/drivers/media/pci/cx18/cx18-driver.c
828     @@ -327,13 +327,16 @@ void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv)
829     struct i2c_client *c;
830     u8 eedata[256];
831    
832     + memset(tv, 0, sizeof(*tv));
833     +
834     c = kzalloc(sizeof(*c), GFP_KERNEL);
835     + if (!c)
836     + return;
837    
838     strlcpy(c->name, "cx18 tveeprom tmp", sizeof(c->name));
839     c->adapter = &cx->i2c_adap[0];
840     c->addr = 0xa0 >> 1;
841    
842     - memset(tv, 0, sizeof(*tv));
843     if (tveeprom_read(c, eedata, sizeof(eedata)))
844     goto ret;
845    
846     diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c
847     index 20e345d9fe8f..a1c641e18362 100644
848     --- a/drivers/media/usb/dvb-usb/cxusb.c
849     +++ b/drivers/media/usb/dvb-usb/cxusb.c
850     @@ -149,6 +149,7 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
851     int num)
852     {
853     struct dvb_usb_device *d = i2c_get_adapdata(adap);
854     + int ret;
855     int i;
856    
857     if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
858     @@ -173,7 +174,8 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
859     if (1 + msg[i].len > sizeof(ibuf)) {
860     warn("i2c rd: len=%d is too big!\n",
861     msg[i].len);
862     - return -EOPNOTSUPP;
863     + ret = -EOPNOTSUPP;
864     + goto unlock;
865     }
866     obuf[0] = 0;
867     obuf[1] = msg[i].len;
868     @@ -193,12 +195,14 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
869     if (3 + msg[i].len > sizeof(obuf)) {
870     warn("i2c wr: len=%d is too big!\n",
871     msg[i].len);
872     - return -EOPNOTSUPP;
873     + ret = -EOPNOTSUPP;
874     + goto unlock;
875     }
876     if (1 + msg[i + 1].len > sizeof(ibuf)) {
877     warn("i2c rd: len=%d is too big!\n",
878     msg[i + 1].len);
879     - return -EOPNOTSUPP;
880     + ret = -EOPNOTSUPP;
881     + goto unlock;
882     }
883     obuf[0] = msg[i].len;
884     obuf[1] = msg[i+1].len;
885     @@ -223,7 +227,8 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
886     if (2 + msg[i].len > sizeof(obuf)) {
887     warn("i2c wr: len=%d is too big!\n",
888     msg[i].len);
889     - return -EOPNOTSUPP;
890     + ret = -EOPNOTSUPP;
891     + goto unlock;
892     }
893     obuf[0] = msg[i].addr;
894     obuf[1] = msg[i].len;
895     @@ -237,8 +242,14 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
896     }
897     }
898    
899     + if (i == num)
900     + ret = num;
901     + else
902     + ret = -EREMOTEIO;
903     +
904     +unlock:
905     mutex_unlock(&d->i2c_mutex);
906     - return i == num ? num : -EREMOTEIO;
907     + return ret;
908     }
909    
910     static u32 cxusb_i2c_func(struct i2c_adapter *adapter)
911     diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
912     index 71b22f5a05ce..4170a45d17e0 100644
913     --- a/drivers/media/usb/dvb-usb/dw2102.c
914     +++ b/drivers/media/usb/dvb-usb/dw2102.c
915     @@ -301,6 +301,7 @@ static int dw2102_serit_i2c_transfer(struct i2c_adapter *adap,
916     static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], int num)
917     {
918     struct dvb_usb_device *d = i2c_get_adapdata(adap);
919     + int ret;
920    
921     if (!d)
922     return -ENODEV;
923     @@ -316,7 +317,8 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms
924     if (2 + msg[1].len > sizeof(ibuf)) {
925     warn("i2c rd: len=%d is too big!\n",
926     msg[1].len);
927     - return -EOPNOTSUPP;
928     + ret = -EOPNOTSUPP;
929     + goto unlock;
930     }
931    
932     obuf[0] = msg[0].addr << 1;
933     @@ -340,7 +342,8 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms
934     if (2 + msg[0].len > sizeof(obuf)) {
935     warn("i2c wr: len=%d is too big!\n",
936     msg[1].len);
937     - return -EOPNOTSUPP;
938     + ret = -EOPNOTSUPP;
939     + goto unlock;
940     }
941    
942     obuf[0] = msg[0].addr << 1;
943     @@ -357,7 +360,8 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms
944     if (2 + msg[0].len > sizeof(obuf)) {
945     warn("i2c wr: len=%d is too big!\n",
946     msg[1].len);
947     - return -EOPNOTSUPP;
948     + ret = -EOPNOTSUPP;
949     + goto unlock;
950     }
951    
952     obuf[0] = msg[0].addr << 1;
953     @@ -386,15 +390,17 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms
954    
955     break;
956     }
957     + ret = num;
958    
959     +unlock:
960     mutex_unlock(&d->i2c_mutex);
961     - return num;
962     + return ret;
963     }
964    
965     static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], int num)
966     {
967     struct dvb_usb_device *d = i2c_get_adapdata(adap);
968     - int len, i, j;
969     + int len, i, j, ret;
970    
971     if (!d)
972     return -ENODEV;
973     @@ -430,7 +436,8 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i
974     if (2 + msg[j].len > sizeof(ibuf)) {
975     warn("i2c rd: len=%d is too big!\n",
976     msg[j].len);
977     - return -EOPNOTSUPP;
978     + ret = -EOPNOTSUPP;
979     + goto unlock;
980     }
981    
982     dw210x_op_rw(d->udev, 0xc3,
983     @@ -466,7 +473,8 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i
984     if (2 + msg[j].len > sizeof(obuf)) {
985     warn("i2c wr: len=%d is too big!\n",
986     msg[j].len);
987     - return -EOPNOTSUPP;
988     + ret = -EOPNOTSUPP;
989     + goto unlock;
990     }
991    
992     obuf[0] = msg[j].addr << 1;
993     @@ -481,15 +489,18 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i
994     }
995    
996     }
997     + ret = num;
998    
999     +unlock:
1000     mutex_unlock(&d->i2c_mutex);
1001     - return num;
1002     + return ret;
1003     }
1004    
1005     static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1006     int num)
1007     {
1008     struct dvb_usb_device *d = i2c_get_adapdata(adap);
1009     + int ret;
1010     int i;
1011    
1012     if (!d)
1013     @@ -506,7 +517,8 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1014     if (2 + msg[1].len > sizeof(ibuf)) {
1015     warn("i2c rd: len=%d is too big!\n",
1016     msg[1].len);
1017     - return -EOPNOTSUPP;
1018     + ret = -EOPNOTSUPP;
1019     + goto unlock;
1020     }
1021     obuf[0] = msg[0].addr << 1;
1022     obuf[1] = msg[0].len;
1023     @@ -530,7 +542,8 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1024     if (2 + msg[0].len > sizeof(obuf)) {
1025     warn("i2c wr: len=%d is too big!\n",
1026     msg[0].len);
1027     - return -EOPNOTSUPP;
1028     + ret = -EOPNOTSUPP;
1029     + goto unlock;
1030     }
1031     obuf[0] = msg[0].addr << 1;
1032     obuf[1] = msg[0].len;
1033     @@ -556,9 +569,11 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1034     msg[i].flags == 0 ? ">>>" : "<<<");
1035     debug_dump(msg[i].buf, msg[i].len, deb_xfer);
1036     }
1037     + ret = num;
1038    
1039     +unlock:
1040     mutex_unlock(&d->i2c_mutex);
1041     - return num;
1042     + return ret;
1043     }
1044    
1045     static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1046     @@ -566,7 +581,7 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1047     {
1048     struct dvb_usb_device *d = i2c_get_adapdata(adap);
1049     struct usb_device *udev;
1050     - int len, i, j;
1051     + int len, i, j, ret;
1052    
1053     if (!d)
1054     return -ENODEV;
1055     @@ -618,7 +633,8 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1056     if (msg[j].len > sizeof(ibuf)) {
1057     warn("i2c rd: len=%d is too big!\n",
1058     msg[j].len);
1059     - return -EOPNOTSUPP;
1060     + ret = -EOPNOTSUPP;
1061     + goto unlock;
1062     }
1063    
1064     dw210x_op_rw(d->udev, 0x91, 0, 0,
1065     @@ -652,7 +668,8 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1066     if (2 + msg[j].len > sizeof(obuf)) {
1067     warn("i2c wr: len=%d is too big!\n",
1068     msg[j].len);
1069     - return -EOPNOTSUPP;
1070     + ret = -EOPNOTSUPP;
1071     + goto unlock;
1072     }
1073    
1074     obuf[0] = msg[j + 1].len;
1075     @@ -671,7 +688,8 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1076     if (2 + msg[j].len > sizeof(obuf)) {
1077     warn("i2c wr: len=%d is too big!\n",
1078     msg[j].len);
1079     - return -EOPNOTSUPP;
1080     + ret = -EOPNOTSUPP;
1081     + goto unlock;
1082     }
1083     obuf[0] = msg[j].len + 1;
1084     obuf[1] = (msg[j].addr << 1);
1085     @@ -685,9 +703,11 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1086     }
1087     }
1088     }
1089     + ret = num;
1090    
1091     +unlock:
1092     mutex_unlock(&d->i2c_mutex);
1093     - return num;
1094     + return ret;
1095     }
1096    
1097     static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
1098     diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
1099     index 5d41aee69d16..6c0fd8e0f9bf 100644
1100     --- a/drivers/net/ethernet/ibm/ibmveth.c
1101     +++ b/drivers/net/ethernet/ibm/ibmveth.c
1102     @@ -523,10 +523,21 @@ retry:
1103     return rc;
1104     }
1105    
1106     +static u64 ibmveth_encode_mac_addr(u8 *mac)
1107     +{
1108     + int i;
1109     + u64 encoded = 0;
1110     +
1111     + for (i = 0; i < ETH_ALEN; i++)
1112     + encoded = (encoded << 8) | mac[i];
1113     +
1114     + return encoded;
1115     +}
1116     +
1117     static int ibmveth_open(struct net_device *netdev)
1118     {
1119     struct ibmveth_adapter *adapter = netdev_priv(netdev);
1120     - u64 mac_address = 0;
1121     + u64 mac_address;
1122     int rxq_entries = 1;
1123     unsigned long lpar_rc;
1124     int rc;
1125     @@ -580,8 +591,7 @@ static int ibmveth_open(struct net_device *netdev)
1126     adapter->rx_queue.num_slots = rxq_entries;
1127     adapter->rx_queue.toggle = 1;
1128    
1129     - memcpy(&mac_address, netdev->dev_addr, netdev->addr_len);
1130     - mac_address = mac_address >> 16;
1131     + mac_address = ibmveth_encode_mac_addr(netdev->dev_addr);
1132    
1133     rxq_desc.fields.flags_len = IBMVETH_BUF_VALID |
1134     adapter->rx_queue.queue_len;
1135     @@ -1184,8 +1194,8 @@ static void ibmveth_set_multicast_list(struct net_device *netdev)
1136     /* add the addresses to the filter table */
1137     netdev_for_each_mc_addr(ha, netdev) {
1138     /* add the multicast address to the filter table */
1139     - unsigned long mcast_addr = 0;
1140     - memcpy(((char *)&mcast_addr)+2, ha->addr, 6);
1141     + u64 mcast_addr;
1142     + mcast_addr = ibmveth_encode_mac_addr(ha->addr);
1143     lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
1144     IbmVethMcastAddFilter,
1145     mcast_addr);
1146     @@ -1369,9 +1379,6 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
1147    
1148     netif_napi_add(netdev, &adapter->napi, ibmveth_poll, 16);
1149    
1150     - adapter->mac_addr = 0;
1151     - memcpy(&adapter->mac_addr, mac_addr_p, 6);
1152     -
1153     netdev->irq = dev->irq;
1154     netdev->netdev_ops = &ibmveth_netdev_ops;
1155     netdev->ethtool_ops = &netdev_ethtool_ops;
1156     @@ -1380,7 +1387,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
1157     NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
1158     netdev->features |= netdev->hw_features;
1159    
1160     - memcpy(netdev->dev_addr, &adapter->mac_addr, netdev->addr_len);
1161     + memcpy(netdev->dev_addr, mac_addr_p, ETH_ALEN);
1162    
1163     for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) {
1164     struct kobject *kobj = &adapter->rx_buff_pool[i].kobj;
1165     diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
1166     index 84066bafe057..2c636cbf1341 100644
1167     --- a/drivers/net/ethernet/ibm/ibmveth.h
1168     +++ b/drivers/net/ethernet/ibm/ibmveth.h
1169     @@ -139,7 +139,6 @@ struct ibmveth_adapter {
1170     struct napi_struct napi;
1171     struct net_device_stats stats;
1172     unsigned int mcastFilterSize;
1173     - unsigned long mac_addr;
1174     void * buffer_list_addr;
1175     void * filter_list_addr;
1176     dma_addr_t buffer_list_dma;
1177     diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
1178     index ada6e210279f..48f0b06f4448 100644
1179     --- a/drivers/net/ethernet/intel/e100.c
1180     +++ b/drivers/net/ethernet/intel/e100.c
1181     @@ -3036,7 +3036,7 @@ static void __e100_shutdown(struct pci_dev *pdev, bool *enable_wake)
1182     *enable_wake = false;
1183     }
1184    
1185     - pci_disable_device(pdev);
1186     + pci_clear_master(pdev);
1187     }
1188    
1189     static int __e100_power_off(struct pci_dev *pdev, bool wake)
1190     diff --git a/drivers/net/ethernet/sfc/efx.h b/drivers/net/ethernet/sfc/efx.h
1191     index 34d00f5771fe..b6b601cebb9e 100644
1192     --- a/drivers/net/ethernet/sfc/efx.h
1193     +++ b/drivers/net/ethernet/sfc/efx.h
1194     @@ -67,6 +67,9 @@ extern void efx_schedule_slow_fill(struct efx_rx_queue *rx_queue);
1195     #define EFX_RXQ_MIN_ENT 128U
1196     #define EFX_TXQ_MIN_ENT(efx) (2 * efx_tx_max_skb_descs(efx))
1197    
1198     +#define EFX_TXQ_MAX_ENT(efx) (EFX_WORKAROUND_35388(efx) ? \
1199     + EFX_MAX_DMAQ_SIZE / 2 : EFX_MAX_DMAQ_SIZE)
1200     +
1201     /* Filters */
1202    
1203     /**
1204     diff --git a/drivers/net/ethernet/sfc/ethtool.c b/drivers/net/ethernet/sfc/ethtool.c
1205     index 5b471cf5c323..3b2356bc6fba 100644
1206     --- a/drivers/net/ethernet/sfc/ethtool.c
1207     +++ b/drivers/net/ethernet/sfc/ethtool.c
1208     @@ -582,7 +582,7 @@ static void efx_ethtool_get_ringparam(struct net_device *net_dev,
1209     struct efx_nic *efx = netdev_priv(net_dev);
1210    
1211     ring->rx_max_pending = EFX_MAX_DMAQ_SIZE;
1212     - ring->tx_max_pending = EFX_MAX_DMAQ_SIZE;
1213     + ring->tx_max_pending = EFX_TXQ_MAX_ENT(efx);
1214     ring->rx_pending = efx->rxq_entries;
1215     ring->tx_pending = efx->txq_entries;
1216     }
1217     @@ -595,7 +595,7 @@ static int efx_ethtool_set_ringparam(struct net_device *net_dev,
1218    
1219     if (ring->rx_mini_pending || ring->rx_jumbo_pending ||
1220     ring->rx_pending > EFX_MAX_DMAQ_SIZE ||
1221     - ring->tx_pending > EFX_MAX_DMAQ_SIZE)
1222     + ring->tx_pending > EFX_TXQ_MAX_ENT(efx))
1223     return -EINVAL;
1224    
1225     if (ring->rx_pending < EFX_RXQ_MIN_ENT) {
1226     diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
1227     index 6a32ef9d63ae..2b0aab130205 100644
1228     --- a/drivers/net/ethernet/ti/davinci_emac.c
1229     +++ b/drivers/net/ethernet/ti/davinci_emac.c
1230     @@ -1531,7 +1531,7 @@ static int emac_dev_open(struct net_device *ndev)
1231     struct device *emac_dev = &ndev->dev;
1232     u32 cnt;
1233     struct resource *res;
1234     - int ret;
1235     + int q, m, ret;
1236     int i = 0;
1237     int k = 0;
1238     struct emac_priv *priv = netdev_priv(ndev);
1239     @@ -1566,8 +1566,7 @@ static int emac_dev_open(struct net_device *ndev)
1240    
1241     while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) {
1242     for (i = res->start; i <= res->end; i++) {
1243     - if (devm_request_irq(&priv->pdev->dev, i, emac_irq,
1244     - 0, ndev->name, ndev))
1245     + if (request_irq(i, emac_irq, 0, ndev->name, ndev))
1246     goto rollback;
1247     }
1248     k++;
1249     @@ -1640,7 +1639,15 @@ static int emac_dev_open(struct net_device *ndev)
1250    
1251     rollback:
1252    
1253     - dev_err(emac_dev, "DaVinci EMAC: devm_request_irq() failed");
1254     + dev_err(emac_dev, "DaVinci EMAC: request_irq() failed");
1255     +
1256     + for (q = k; k >= 0; k--) {
1257     + for (m = i; m >= res->start; m--)
1258     + free_irq(m, ndev);
1259     + res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k-1);
1260     + m = res->end;
1261     + }
1262     +
1263     ret = -EBUSY;
1264     err:
1265     pm_runtime_put(&priv->pdev->dev);
1266     @@ -1658,6 +1665,9 @@ err:
1267     */
1268     static int emac_dev_stop(struct net_device *ndev)
1269     {
1270     + struct resource *res;
1271     + int i = 0;
1272     + int irq_num;
1273     struct emac_priv *priv = netdev_priv(ndev);
1274     struct device *emac_dev = &ndev->dev;
1275    
1276     @@ -1673,6 +1683,13 @@ static int emac_dev_stop(struct net_device *ndev)
1277     if (priv->phydev)
1278     phy_disconnect(priv->phydev);
1279    
1280     + /* Free IRQ */
1281     + while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, i))) {
1282     + for (irq_num = res->start; irq_num <= res->end; irq_num++)
1283     + free_irq(irq_num, priv->ndev);
1284     + i++;
1285     + }
1286     +
1287     if (netif_msg_drv(priv))
1288     dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name);
1289    
1290     diff --git a/drivers/net/wireless/iwlwifi/mvm/bt-coex.c b/drivers/net/wireless/iwlwifi/mvm/bt-coex.c
1291     index 0fad98b85f60..eee2ef6ce248 100644
1292     --- a/drivers/net/wireless/iwlwifi/mvm/bt-coex.c
1293     +++ b/drivers/net/wireless/iwlwifi/mvm/bt-coex.c
1294     @@ -596,8 +596,11 @@ void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1295    
1296     mutex_lock(&mvm->mutex);
1297    
1298     - /* Rssi update while not associated ?! */
1299     - if (WARN_ON_ONCE(mvmvif->ap_sta_id == IWL_MVM_STATION_COUNT))
1300     + /*
1301     + * Rssi update while not associated - can happen since the statistics
1302     + * are handled asynchronously
1303     + */
1304     + if (mvmvif->ap_sta_id == IWL_MVM_STATION_COUNT)
1305     goto out_unlock;
1306    
1307     /* No open connection - reports should be disabled */
1308     diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c
1309     index f95de0d16216..1de59b0f8fa8 100644
1310     --- a/drivers/net/wireless/p54/txrx.c
1311     +++ b/drivers/net/wireless/p54/txrx.c
1312     @@ -587,7 +587,7 @@ static void p54_rx_stats(struct p54_common *priv, struct sk_buff *skb)
1313     chan = priv->curchan;
1314     if (chan) {
1315     struct survey_info *survey = &priv->survey[chan->hw_value];
1316     - survey->noise = clamp_t(s8, priv->noise, -128, 127);
1317     + survey->noise = clamp(priv->noise, -128, 127);
1318     survey->channel_time = priv->survey_raw.active;
1319     survey->channel_time_tx = priv->survey_raw.tx;
1320     survey->channel_time_busy = priv->survey_raw.tx +
1321     diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
1322     index d97fbf4eb65b..ea83084cb7d9 100644
1323     --- a/drivers/regulator/core.c
1324     +++ b/drivers/regulator/core.c
1325     @@ -1806,8 +1806,6 @@ static int _regulator_do_disable(struct regulator_dev *rdev)
1326    
1327     trace_regulator_disable_complete(rdev_get_name(rdev));
1328    
1329     - _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
1330     - NULL);
1331     return 0;
1332     }
1333    
1334     @@ -1831,6 +1829,8 @@ static int _regulator_disable(struct regulator_dev *rdev)
1335     rdev_err(rdev, "failed to disable\n");
1336     return ret;
1337     }
1338     + _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
1339     + NULL);
1340     }
1341    
1342     rdev->use_count = 0;
1343     @@ -1883,20 +1883,16 @@ static int _regulator_force_disable(struct regulator_dev *rdev)
1344     {
1345     int ret = 0;
1346    
1347     - /* force disable */
1348     - if (rdev->desc->ops->disable) {
1349     - /* ah well, who wants to live forever... */
1350     - ret = rdev->desc->ops->disable(rdev);
1351     - if (ret < 0) {
1352     - rdev_err(rdev, "failed to force disable\n");
1353     - return ret;
1354     - }
1355     - /* notify other consumers that power has been forced off */
1356     - _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
1357     - REGULATOR_EVENT_DISABLE, NULL);
1358     + ret = _regulator_do_disable(rdev);
1359     + if (ret < 0) {
1360     + rdev_err(rdev, "failed to force disable\n");
1361     + return ret;
1362     }
1363    
1364     - return ret;
1365     + _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
1366     + REGULATOR_EVENT_DISABLE, NULL);
1367     +
1368     + return 0;
1369     }
1370    
1371     /**
1372     @@ -3569,8 +3565,6 @@ int regulator_suspend_finish(void)
1373    
1374     mutex_lock(&regulator_list_mutex);
1375     list_for_each_entry(rdev, &regulator_list, list) {
1376     - struct regulator_ops *ops = rdev->desc->ops;
1377     -
1378     mutex_lock(&rdev->mutex);
1379     if (rdev->use_count > 0 || rdev->constraints->always_on) {
1380     error = _regulator_do_enable(rdev);
1381     @@ -3579,12 +3573,10 @@ int regulator_suspend_finish(void)
1382     } else {
1383     if (!has_full_constraints)
1384     goto unlock;
1385     - if (!ops->disable)
1386     - goto unlock;
1387     if (!_regulator_is_enabled(rdev))
1388     goto unlock;
1389    
1390     - error = ops->disable(rdev);
1391     + error = _regulator_do_disable(rdev);
1392     if (error)
1393     ret = error;
1394     }
1395     @@ -3774,7 +3766,7 @@ static int __init regulator_init_complete(void)
1396     ops = rdev->desc->ops;
1397     c = rdev->constraints;
1398    
1399     - if (!ops->disable || (c && c->always_on))
1400     + if (c && c->always_on)
1401     continue;
1402    
1403     mutex_lock(&rdev->mutex);
1404     @@ -3795,7 +3787,7 @@ static int __init regulator_init_complete(void)
1405     /* We log since this may kill the system if it
1406     * goes wrong. */
1407     rdev_info(rdev, "disabling\n");
1408     - ret = ops->disable(rdev);
1409     + ret = _regulator_do_disable(rdev);
1410     if (ret != 0) {
1411     rdev_err(rdev, "couldn't disable: %d\n", ret);
1412     }
1413     diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
1414     index 451bf99582ff..846d5c6609d8 100644
1415     --- a/drivers/s390/block/dasd.c
1416     +++ b/drivers/s390/block/dasd.c
1417     @@ -2978,12 +2978,12 @@ static int dasd_alloc_queue(struct dasd_block *block)
1418    
1419     elevator_exit(block->request_queue->elevator);
1420     block->request_queue->elevator = NULL;
1421     + mutex_lock(&block->request_queue->sysfs_lock);
1422     rc = elevator_init(block->request_queue, "deadline");
1423     - if (rc) {
1424     + if (rc)
1425     blk_cleanup_queue(block->request_queue);
1426     - return rc;
1427     - }
1428     - return 0;
1429     + mutex_unlock(&block->request_queue->sysfs_lock);
1430     + return rc;
1431     }
1432    
1433     /*
1434     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1435     index 73f5208714a4..1af67a214d33 100644
1436     --- a/drivers/usb/host/xhci-pci.c
1437     +++ b/drivers/usb/host/xhci-pci.c
1438     @@ -142,6 +142,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
1439     "QUIRK: Resetting on resume");
1440     xhci->quirks |= XHCI_TRUST_TX_LENGTH;
1441     }
1442     + if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
1443     + pdev->device == 0x0015 &&
1444     + pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG &&
1445     + pdev->subsystem_device == 0xc0cd)
1446     + xhci->quirks |= XHCI_RESET_ON_RESUME;
1447     if (pdev->vendor == PCI_VENDOR_ID_VIA)
1448     xhci->quirks |= XHCI_RESET_ON_RESUME;
1449     }
1450     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1451     index a53651743d4d..5a5fb98edb8a 100644
1452     --- a/fs/nfs/nfs4proc.c
1453     +++ b/fs/nfs/nfs4proc.c
1454     @@ -5779,21 +5779,20 @@ struct nfs_release_lockowner_data {
1455     struct nfs4_lock_state *lsp;
1456     struct nfs_server *server;
1457     struct nfs_release_lockowner_args args;
1458     - struct nfs4_sequence_args seq_args;
1459     - struct nfs4_sequence_res seq_res;
1460     + struct nfs_release_lockowner_res res;
1461     };
1462    
1463     static void nfs4_release_lockowner_prepare(struct rpc_task *task, void *calldata)
1464     {
1465     struct nfs_release_lockowner_data *data = calldata;
1466     nfs40_setup_sequence(data->server,
1467     - &data->seq_args, &data->seq_res, task);
1468     + &data->args.seq_args, &data->res.seq_res, task);
1469     }
1470    
1471     static void nfs4_release_lockowner_done(struct rpc_task *task, void *calldata)
1472     {
1473     struct nfs_release_lockowner_data *data = calldata;
1474     - nfs40_sequence_done(task, &data->seq_res);
1475     + nfs40_sequence_done(task, &data->res.seq_res);
1476     }
1477    
1478     static void nfs4_release_lockowner_release(void *calldata)
1479     @@ -5822,7 +5821,6 @@ static int nfs4_release_lockowner(struct nfs_server *server, struct nfs4_lock_st
1480     data = kmalloc(sizeof(*data), GFP_NOFS);
1481     if (!data)
1482     return -ENOMEM;
1483     - nfs4_init_sequence(&data->seq_args, &data->seq_res, 0);
1484     data->lsp = lsp;
1485     data->server = server;
1486     data->args.lock_owner.clientid = server->nfs_client->cl_clientid;
1487     @@ -5830,6 +5828,8 @@ static int nfs4_release_lockowner(struct nfs_server *server, struct nfs4_lock_st
1488     data->args.lock_owner.s_dev = server->s_dev;
1489    
1490     msg.rpc_argp = &data->args;
1491     + msg.rpc_resp = &data->res;
1492     + nfs4_init_sequence(&data->args.seq_args, &data->res.seq_res, 0);
1493     rpc_call_async(server->client, &msg, 0, &nfs4_release_lockowner_ops, data);
1494     return 0;
1495     }
1496     diff --git a/fs/proc/proc_devtree.c b/fs/proc/proc_devtree.c
1497     index 106a83570630..9fa215473b1d 100644
1498     --- a/fs/proc/proc_devtree.c
1499     +++ b/fs/proc/proc_devtree.c
1500     @@ -235,6 +235,7 @@ void __init proc_device_tree_init(void)
1501     return;
1502     root = of_find_node_by_path("/");
1503     if (root == NULL) {
1504     + remove_proc_entry("device-tree", NULL);
1505     pr_debug("/proc/device-tree: can't find root\n");
1506     return;
1507     }
1508     diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h
1509     index 7c1420bb1dce..6ade97de7a85 100644
1510     --- a/include/linux/ceph/messenger.h
1511     +++ b/include/linux/ceph/messenger.h
1512     @@ -157,7 +157,7 @@ struct ceph_msg {
1513     bool front_is_vmalloc;
1514     bool more_to_follow;
1515     bool needs_out_seq;
1516     - int front_max;
1517     + int front_alloc_len;
1518     unsigned long ack_stamp; /* tx: when we were acked */
1519    
1520     struct ceph_msgpool *pool;
1521     diff --git a/include/linux/ceph/osd_client.h b/include/linux/ceph/osd_client.h
1522     index 8f47625a0661..4fb6a8938957 100644
1523     --- a/include/linux/ceph/osd_client.h
1524     +++ b/include/linux/ceph/osd_client.h
1525     @@ -138,6 +138,7 @@ struct ceph_osd_request {
1526     __le64 *r_request_pool;
1527     void *r_request_pgid;
1528     __le32 *r_request_attempts;
1529     + bool r_paused;
1530     struct ceph_eversion *r_request_reassert_version;
1531    
1532     int r_result;
1533     diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
1534     index 3561d305b1e0..7b3a119c51c2 100644
1535     --- a/include/linux/cgroup.h
1536     +++ b/include/linux/cgroup.h
1537     @@ -169,6 +169,8 @@ struct cgroup {
1538     *
1539     * The ID of the root cgroup is always 0, and a new cgroup
1540     * will be assigned with a smallest available ID.
1541     + *
1542     + * Allocating/Removing ID must be protected by cgroup_mutex.
1543     */
1544     int id;
1545    
1546     diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
1547     index 5eaa746735ff..20aebdbab9a4 100644
1548     --- a/include/linux/ftrace_event.h
1549     +++ b/include/linux/ftrace_event.h
1550     @@ -325,10 +325,6 @@ enum {
1551     FILTER_TRACE_FN,
1552     };
1553    
1554     -#define EVENT_STORAGE_SIZE 128
1555     -extern struct mutex event_storage_mutex;
1556     -extern char event_storage[EVENT_STORAGE_SIZE];
1557     -
1558     extern int trace_event_raw_init(struct ftrace_event_call *call);
1559     extern int trace_define_field(struct ftrace_event_call *call, const char *type,
1560     const char *name, int offset, int size,
1561     diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
1562     index ea9e076a91bf..2b307018979d 100644
1563     --- a/include/linux/nfs_xdr.h
1564     +++ b/include/linux/nfs_xdr.h
1565     @@ -467,9 +467,14 @@ struct nfs_lockt_res {
1566     };
1567    
1568     struct nfs_release_lockowner_args {
1569     + struct nfs4_sequence_args seq_args;
1570     struct nfs_lowner lock_owner;
1571     };
1572    
1573     +struct nfs_release_lockowner_res {
1574     + struct nfs4_sequence_res seq_res;
1575     +};
1576     +
1577     struct nfs4_delegreturnargs {
1578     struct nfs4_sequence_args seq_args;
1579     const struct nfs_fh *fhandle;
1580     diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
1581     index 712ea36067ab..645d749d3c9c 100644
1582     --- a/include/trace/ftrace.h
1583     +++ b/include/trace/ftrace.h
1584     @@ -303,15 +303,12 @@ static struct trace_event_functions ftrace_event_type_funcs_##call = { \
1585     #undef __array
1586     #define __array(type, item, len) \
1587     do { \
1588     - mutex_lock(&event_storage_mutex); \
1589     + char *type_str = #type"["__stringify(len)"]"; \
1590     BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \
1591     - snprintf(event_storage, sizeof(event_storage), \
1592     - "%s[%d]", #type, len); \
1593     - ret = trace_define_field(event_call, event_storage, #item, \
1594     + ret = trace_define_field(event_call, type_str, #item, \
1595     offsetof(typeof(field), item), \
1596     sizeof(field.item), \
1597     is_signed_type(type), FILTER_OTHER); \
1598     - mutex_unlock(&event_storage_mutex); \
1599     if (ret) \
1600     return ret; \
1601     } while (0);
1602     diff --git a/kernel/cgroup.c b/kernel/cgroup.c
1603     index c4f8bc79d075..1c204fdb85d8 100644
1604     --- a/kernel/cgroup.c
1605     +++ b/kernel/cgroup.c
1606     @@ -4410,16 +4410,6 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
1607     rcu_assign_pointer(cgrp->name, name);
1608    
1609     /*
1610     - * Temporarily set the pointer to NULL, so idr_find() won't return
1611     - * a half-baked cgroup.
1612     - */
1613     - cgrp->id = idr_alloc(&root->cgroup_idr, NULL, 1, 0, GFP_KERNEL);
1614     - if (cgrp->id < 0) {
1615     - err = -ENOMEM;
1616     - goto err_free_name;
1617     - }
1618     -
1619     - /*
1620     * Only live parents can have children. Note that the liveliness
1621     * check isn't strictly necessary because cgroup_mkdir() and
1622     * cgroup_rmdir() are fully synchronized by i_mutex; however, do it
1623     @@ -4428,7 +4418,7 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
1624     */
1625     if (!cgroup_lock_live_group(parent)) {
1626     err = -ENODEV;
1627     - goto err_free_id;
1628     + goto err_free_name;
1629     }
1630    
1631     /* Grab a reference on the superblock so the hierarchy doesn't
1632     @@ -4438,6 +4428,16 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
1633     * fs */
1634     atomic_inc(&sb->s_active);
1635    
1636     + /*
1637     + * Temporarily set the pointer to NULL, so idr_find() won't return
1638     + * a half-baked cgroup.
1639     + */
1640     + cgrp->id = idr_alloc(&root->cgroup_idr, NULL, 1, 0, GFP_KERNEL);
1641     + if (cgrp->id < 0) {
1642     + err = -ENOMEM;
1643     + goto err_unlock;
1644     + }
1645     +
1646     init_cgroup_housekeeping(cgrp);
1647    
1648     dentry->d_fsdata = cgrp;
1649     @@ -4544,11 +4544,11 @@ err_free_all:
1650     ss->css_free(css);
1651     }
1652     }
1653     + idr_remove(&root->cgroup_idr, cgrp->id);
1654     +err_unlock:
1655     mutex_unlock(&cgroup_mutex);
1656     /* Release the reference count that we took on the superblock */
1657     deactivate_super(sb);
1658     -err_free_id:
1659     - idr_remove(&root->cgroup_idr, cgrp->id);
1660     err_free_name:
1661     kfree(rcu_dereference_raw(cgrp->name));
1662     err_free_cgrp:
1663     diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
1664     index b4e8500afdb3..c59896c65ac3 100644
1665     --- a/kernel/printk/printk.c
1666     +++ b/kernel/printk/printk.c
1667     @@ -1080,7 +1080,6 @@ static int syslog_print_all(char __user *buf, int size, bool clear)
1668     next_seq = log_next_seq;
1669    
1670     len = 0;
1671     - prev = 0;
1672     while (len >= 0 && seq < next_seq) {
1673     struct printk_log *msg = log_from_idx(idx);
1674     int textlen;
1675     @@ -2790,7 +2789,6 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
1676     next_idx = idx;
1677    
1678     l = 0;
1679     - prev = 0;
1680     while (seq < dumper->next_seq) {
1681     struct printk_log *msg = log_from_idx(idx);
1682    
1683     diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
1684     index b03b1f897b5e..bc1bd20f7942 100644
1685     --- a/kernel/trace/trace_events.c
1686     +++ b/kernel/trace/trace_events.c
1687     @@ -27,12 +27,6 @@
1688    
1689     DEFINE_MUTEX(event_mutex);
1690    
1691     -DEFINE_MUTEX(event_storage_mutex);
1692     -EXPORT_SYMBOL_GPL(event_storage_mutex);
1693     -
1694     -char event_storage[EVENT_STORAGE_SIZE];
1695     -EXPORT_SYMBOL_GPL(event_storage);
1696     -
1697     LIST_HEAD(ftrace_events);
1698     static LIST_HEAD(ftrace_common_fields);
1699    
1700     diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c
1701     index d21a74670088..d7d0b50b1b70 100644
1702     --- a/kernel/trace/trace_export.c
1703     +++ b/kernel/trace/trace_export.c
1704     @@ -95,15 +95,12 @@ static void __always_unused ____ftrace_check_##name(void) \
1705     #undef __array
1706     #define __array(type, item, len) \
1707     do { \
1708     + char *type_str = #type"["__stringify(len)"]"; \
1709     BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \
1710     - mutex_lock(&event_storage_mutex); \
1711     - snprintf(event_storage, sizeof(event_storage), \
1712     - "%s[%d]", #type, len); \
1713     - ret = trace_define_field(event_call, event_storage, #item, \
1714     + ret = trace_define_field(event_call, type_str, #item, \
1715     offsetof(typeof(field), item), \
1716     sizeof(field.item), \
1717     is_signed_type(type), filter_type); \
1718     - mutex_unlock(&event_storage_mutex); \
1719     if (ret) \
1720     return ret; \
1721     } while (0);
1722     diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
1723     index 4a5df7b1cc9f..464303f61730 100644
1724     --- a/net/ceph/messenger.c
1725     +++ b/net/ceph/messenger.c
1726     @@ -3126,7 +3126,6 @@ struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags,
1727     INIT_LIST_HEAD(&m->data);
1728    
1729     /* front */
1730     - m->front_max = front_len;
1731     if (front_len) {
1732     if (front_len > PAGE_CACHE_SIZE) {
1733     m->front.iov_base = __vmalloc(front_len, flags,
1734     @@ -3143,7 +3142,7 @@ struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags,
1735     } else {
1736     m->front.iov_base = NULL;
1737     }
1738     - m->front.iov_len = front_len;
1739     + m->front_alloc_len = m->front.iov_len = front_len;
1740    
1741     dout("ceph_msg_new %p front %d\n", m, front_len);
1742     return m;
1743     @@ -3301,8 +3300,8 @@ EXPORT_SYMBOL(ceph_msg_last_put);
1744    
1745     void ceph_msg_dump(struct ceph_msg *msg)
1746     {
1747     - pr_debug("msg_dump %p (front_max %d length %zd)\n", msg,
1748     - msg->front_max, msg->data_length);
1749     + pr_debug("msg_dump %p (front_alloc_len %d length %zd)\n", msg,
1750     + msg->front_alloc_len, msg->data_length);
1751     print_hex_dump(KERN_DEBUG, "header: ",
1752     DUMP_PREFIX_OFFSET, 16, 1,
1753     &msg->hdr, sizeof(msg->hdr), true);
1754     diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c
1755     index 1fe25cd29d0e..2ac9ef35110b 100644
1756     --- a/net/ceph/mon_client.c
1757     +++ b/net/ceph/mon_client.c
1758     @@ -152,7 +152,7 @@ static int __open_session(struct ceph_mon_client *monc)
1759     /* initiatiate authentication handshake */
1760     ret = ceph_auth_build_hello(monc->auth,
1761     monc->m_auth->front.iov_base,
1762     - monc->m_auth->front_max);
1763     + monc->m_auth->front_alloc_len);
1764     __send_prepared_auth_request(monc, ret);
1765     } else {
1766     dout("open_session mon%d already open\n", monc->cur_mon);
1767     @@ -196,7 +196,7 @@ static void __send_subscribe(struct ceph_mon_client *monc)
1768     int num;
1769    
1770     p = msg->front.iov_base;
1771     - end = p + msg->front_max;
1772     + end = p + msg->front_alloc_len;
1773    
1774     num = 1 + !!monc->want_next_osdmap + !!monc->want_mdsmap;
1775     ceph_encode_32(&p, num);
1776     @@ -897,7 +897,7 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
1777     ret = ceph_handle_auth_reply(monc->auth, msg->front.iov_base,
1778     msg->front.iov_len,
1779     monc->m_auth->front.iov_base,
1780     - monc->m_auth->front_max);
1781     + monc->m_auth->front_alloc_len);
1782     if (ret < 0) {
1783     monc->client->auth_err = ret;
1784     wake_up_all(&monc->client->auth_wq);
1785     @@ -939,7 +939,7 @@ static int __validate_auth(struct ceph_mon_client *monc)
1786     return 0;
1787    
1788     ret = ceph_build_auth(monc->auth, monc->m_auth->front.iov_base,
1789     - monc->m_auth->front_max);
1790     + monc->m_auth->front_alloc_len);
1791     if (ret <= 0)
1792     return ret; /* either an error, or no need to authenticate */
1793     __send_prepared_auth_request(monc, ret);
1794     diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
1795     index 2b4b32aaa893..e6b2db68b4fa 100644
1796     --- a/net/ceph/osd_client.c
1797     +++ b/net/ceph/osd_client.c
1798     @@ -1232,6 +1232,22 @@ void ceph_osdc_set_request_linger(struct ceph_osd_client *osdc,
1799     EXPORT_SYMBOL(ceph_osdc_set_request_linger);
1800    
1801     /*
1802     + * Returns whether a request should be blocked from being sent
1803     + * based on the current osdmap and osd_client settings.
1804     + *
1805     + * Caller should hold map_sem for read.
1806     + */
1807     +static bool __req_should_be_paused(struct ceph_osd_client *osdc,
1808     + struct ceph_osd_request *req)
1809     +{
1810     + bool pauserd = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD);
1811     + bool pausewr = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR) ||
1812     + ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL);
1813     + return (req->r_flags & CEPH_OSD_FLAG_READ && pauserd) ||
1814     + (req->r_flags & CEPH_OSD_FLAG_WRITE && pausewr);
1815     +}
1816     +
1817     +/*
1818     * Pick an osd (the first 'up' osd in the pg), allocate the osd struct
1819     * (as needed), and set the request r_osd appropriately. If there is
1820     * no up osd, set r_osd to NULL. Move the request to the appropriate list
1821     @@ -1248,6 +1264,7 @@ static int __map_request(struct ceph_osd_client *osdc,
1822     int acting[CEPH_PG_MAX_SIZE];
1823     int o = -1, num = 0;
1824     int err;
1825     + bool was_paused;
1826    
1827     dout("map_request %p tid %lld\n", req, req->r_tid);
1828     err = ceph_calc_ceph_pg(&pgid, req->r_oid, osdc->osdmap,
1829     @@ -1264,12 +1281,18 @@ static int __map_request(struct ceph_osd_client *osdc,
1830     num = err;
1831     }
1832    
1833     + was_paused = req->r_paused;
1834     + req->r_paused = __req_should_be_paused(osdc, req);
1835     + if (was_paused && !req->r_paused)
1836     + force_resend = 1;
1837     +
1838     if ((!force_resend &&
1839     req->r_osd && req->r_osd->o_osd == o &&
1840     req->r_sent >= req->r_osd->o_incarnation &&
1841     req->r_num_pg_osds == num &&
1842     memcmp(req->r_pg_osds, acting, sizeof(acting[0])*num) == 0) ||
1843     - (req->r_osd == NULL && o == -1))
1844     + (req->r_osd == NULL && o == -1) ||
1845     + req->r_paused)
1846     return 0; /* no change */
1847    
1848     dout("map_request tid %llu pgid %lld.%x osd%d (was osd%d)\n",
1849     @@ -1613,14 +1636,17 @@ static void reset_changed_osds(struct ceph_osd_client *osdc)
1850     *
1851     * Caller should hold map_sem for read.
1852     */
1853     -static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
1854     +static void kick_requests(struct ceph_osd_client *osdc, bool force_resend,
1855     + bool force_resend_writes)
1856     {
1857     struct ceph_osd_request *req, *nreq;
1858     struct rb_node *p;
1859     int needmap = 0;
1860     int err;
1861     + bool force_resend_req;
1862    
1863     - dout("kick_requests %s\n", force_resend ? " (force resend)" : "");
1864     + dout("kick_requests %s %s\n", force_resend ? " (force resend)" : "",
1865     + force_resend_writes ? " (force resend writes)" : "");
1866     mutex_lock(&osdc->request_mutex);
1867     for (p = rb_first(&osdc->requests); p; ) {
1868     req = rb_entry(p, struct ceph_osd_request, r_node);
1869     @@ -1645,7 +1671,10 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
1870     continue;
1871     }
1872    
1873     - err = __map_request(osdc, req, force_resend);
1874     + force_resend_req = force_resend ||
1875     + (force_resend_writes &&
1876     + req->r_flags & CEPH_OSD_FLAG_WRITE);
1877     + err = __map_request(osdc, req, force_resend_req);
1878     if (err < 0)
1879     continue; /* error */
1880     if (req->r_osd == NULL) {
1881     @@ -1665,7 +1694,8 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
1882     r_linger_item) {
1883     dout("linger req=%p req->r_osd=%p\n", req, req->r_osd);
1884    
1885     - err = __map_request(osdc, req, force_resend);
1886     + err = __map_request(osdc, req,
1887     + force_resend || force_resend_writes);
1888     dout("__map_request returned %d\n", err);
1889     if (err == 0)
1890     continue; /* no change and no osd was specified */
1891     @@ -1707,6 +1737,7 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg)
1892     struct ceph_osdmap *newmap = NULL, *oldmap;
1893     int err;
1894     struct ceph_fsid fsid;
1895     + bool was_full;
1896    
1897     dout("handle_map have %u\n", osdc->osdmap ? osdc->osdmap->epoch : 0);
1898     p = msg->front.iov_base;
1899     @@ -1720,6 +1751,8 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg)
1900    
1901     down_write(&osdc->map_sem);
1902    
1903     + was_full = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL);
1904     +
1905     /* incremental maps */
1906     ceph_decode_32_safe(&p, end, nr_maps, bad);
1907     dout(" %d inc maps\n", nr_maps);
1908     @@ -1744,7 +1777,10 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg)
1909     ceph_osdmap_destroy(osdc->osdmap);
1910     osdc->osdmap = newmap;
1911     }
1912     - kick_requests(osdc, 0);
1913     + was_full = was_full ||
1914     + ceph_osdmap_flag(osdc->osdmap,
1915     + CEPH_OSDMAP_FULL);
1916     + kick_requests(osdc, 0, was_full);
1917     } else {
1918     dout("ignoring incremental map %u len %d\n",
1919     epoch, maplen);
1920     @@ -1787,7 +1823,10 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg)
1921     skipped_map = 1;
1922     ceph_osdmap_destroy(oldmap);
1923     }
1924     - kick_requests(osdc, skipped_map);
1925     + was_full = was_full ||
1926     + ceph_osdmap_flag(osdc->osdmap,
1927     + CEPH_OSDMAP_FULL);
1928     + kick_requests(osdc, skipped_map, was_full);
1929     }
1930     p += maplen;
1931     nr_maps--;
1932     @@ -1804,7 +1843,9 @@ done:
1933     * we find out when we are no longer full and stop returning
1934     * ENOSPC.
1935     */
1936     - if (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL))
1937     + if (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) ||
1938     + ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD) ||
1939     + ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR))
1940     ceph_monc_request_next_osdmap(&osdc->client->monc);
1941    
1942     mutex_lock(&osdc->request_mutex);
1943     @@ -2454,7 +2495,7 @@ static struct ceph_msg *get_reply(struct ceph_connection *con,
1944     struct ceph_osd_client *osdc = osd->o_osdc;
1945     struct ceph_msg *m;
1946     struct ceph_osd_request *req;
1947     - int front = le32_to_cpu(hdr->front_len);
1948     + int front_len = le32_to_cpu(hdr->front_len);
1949     int data_len = le32_to_cpu(hdr->data_len);
1950     u64 tid;
1951    
1952     @@ -2474,12 +2515,13 @@ static struct ceph_msg *get_reply(struct ceph_connection *con,
1953     req->r_reply, req->r_reply->con);
1954     ceph_msg_revoke_incoming(req->r_reply);
1955    
1956     - if (front > req->r_reply->front.iov_len) {
1957     + if (front_len > req->r_reply->front_alloc_len) {
1958     pr_warning("get_reply front %d > preallocated %d (%u#%llu)\n",
1959     - front, (int)req->r_reply->front.iov_len,
1960     + front_len, req->r_reply->front_alloc_len,
1961     (unsigned int)con->peer_name.type,
1962     le64_to_cpu(con->peer_name.num));
1963     - m = ceph_msg_new(CEPH_MSG_OSD_OPREPLY, front, GFP_NOFS, false);
1964     + m = ceph_msg_new(CEPH_MSG_OSD_OPREPLY, front_len, GFP_NOFS,
1965     + false);
1966     if (!m)
1967     goto out;
1968     ceph_msg_put(req->r_reply);
1969     diff --git a/scripts/package/builddeb b/scripts/package/builddeb
1970     index 90e521fde35f..c1bb9be00fa0 100644
1971     --- a/scripts/package/builddeb
1972     +++ b/scripts/package/builddeb
1973     @@ -41,9 +41,9 @@ create_package() {
1974     parisc*)
1975     debarch=hppa ;;
1976     mips*)
1977     - debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el) ;;
1978     + debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;;
1979     arm*)
1980     - debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el) ;;
1981     + debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;;
1982     *)
1983     echo "" >&2
1984     echo "** ** ** WARNING ** ** **" >&2
1985     @@ -62,7 +62,7 @@ create_package() {
1986     fi
1987    
1988     # Create the package
1989     - dpkg-gencontrol -isp $forcearch -p$pname -P"$pdir"
1990     + dpkg-gencontrol -isp $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir"
1991     dpkg --build "$pdir" ..
1992     }
1993    
1994     @@ -288,15 +288,14 @@ mkdir -p "$destdir"
1995     (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be
1996     ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
1997     rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
1998     -arch=$(dpkg --print-architecture)
1999    
2000     cat <<EOF >> debian/control
2001    
2002     Package: $kernel_headers_packagename
2003     Provides: linux-headers, linux-headers-2.6
2004     -Architecture: $arch
2005     -Description: Linux kernel headers for $KERNELRELEASE on $arch
2006     - This package provides kernel header files for $KERNELRELEASE on $arch
2007     +Architecture: any
2008     +Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch}
2009     + This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch}
2010     .
2011     This is useful for people who need to build external modules
2012     EOF
2013     diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
2014     index d9af6387f37c..dac296a7faad 100644
2015     --- a/sound/core/compress_offload.c
2016     +++ b/sound/core/compress_offload.c
2017     @@ -133,7 +133,7 @@ static int snd_compr_open(struct inode *inode, struct file *f)
2018     kfree(data);
2019     }
2020     snd_card_unref(compr->card);
2021     - return 0;
2022     + return ret;
2023     }
2024    
2025     static int snd_compr_free(struct inode *inode, struct file *f)
2026     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
2027     index ccf5eb6b3d37..b5c4c2e4360b 100644
2028     --- a/sound/pci/hda/hda_intel.c
2029     +++ b/sound/pci/hda/hda_intel.c
2030     @@ -4007,6 +4007,9 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
2031     .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
2032     { PCI_DEVICE(0x8086, 0x0d0c),
2033     .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
2034     + /* Broadwell */
2035     + { PCI_DEVICE(0x8086, 0x160c),
2036     + .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
2037     /* 5 Series/3400 */
2038     { PCI_DEVICE(0x8086, 0x3b56),
2039     .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
2040     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
2041     index adb374babd18..23e0bc6d6568 100644
2042     --- a/sound/pci/hda/patch_hdmi.c
2043     +++ b/sound/pci/hda/patch_hdmi.c
2044     @@ -45,6 +45,9 @@ module_param(static_hdmi_pcm, bool, 0644);
2045     MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");
2046    
2047     #define is_haswell(codec) ((codec)->vendor_id == 0x80862807)
2048     +#define is_broadwell(codec) ((codec)->vendor_id == 0x80862808)
2049     +#define is_haswell_plus(codec) (is_haswell(codec) || is_broadwell(codec))
2050     +
2051     #define is_valleyview(codec) ((codec)->vendor_id == 0x80862882)
2052    
2053     struct hdmi_spec_per_cvt {
2054     @@ -1014,7 +1017,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
2055     if (!channels)
2056     return;
2057    
2058     - if (is_haswell(codec))
2059     + if (is_haswell_plus(codec))
2060     snd_hda_codec_write(codec, pin_nid, 0,
2061     AC_VERB_SET_AMP_GAIN_MUTE,
2062     AMP_OUT_UNMUTE);
2063     @@ -1196,7 +1199,7 @@ static int hdmi_setup_stream(struct hda_codec *codec, hda_nid_t cvt_nid,
2064     int pinctl;
2065     int new_pinctl = 0;
2066    
2067     - if (is_haswell(codec))
2068     + if (is_haswell_plus(codec))
2069     haswell_verify_D0(codec, cvt_nid, pin_nid);
2070    
2071     if (snd_hda_query_pin_caps(codec, pin_nid) & AC_PINCAP_HBR) {
2072     @@ -1357,7 +1360,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
2073     mux_idx);
2074    
2075     /* configure unused pins to choose other converters */
2076     - if (is_haswell(codec) || is_valleyview(codec))
2077     + if (is_haswell_plus(codec) || is_valleyview(codec))
2078     intel_not_share_assigned_cvt(codec, per_pin->pin_nid, mux_idx);
2079    
2080     snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid);
2081     @@ -1543,7 +1546,7 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
2082     if (get_defcfg_connect(config) == AC_JACK_PORT_NONE)
2083     return 0;
2084    
2085     - if (is_haswell(codec))
2086     + if (is_haswell_plus(codec))
2087     intel_haswell_fixup_connect_list(codec, pin_nid);
2088    
2089     pin_idx = spec->num_pins;
2090     @@ -2169,7 +2172,7 @@ static int patch_generic_hdmi(struct hda_codec *codec)
2091     codec->spec = spec;
2092     hdmi_array_init(spec, 4);
2093    
2094     - if (is_haswell(codec)) {
2095     + if (is_haswell_plus(codec)) {
2096     intel_haswell_enable_all_pins(codec, true);
2097     intel_haswell_fixup_enable_dp12(codec);
2098     }
2099     @@ -2180,7 +2183,7 @@ static int patch_generic_hdmi(struct hda_codec *codec)
2100     return -EINVAL;
2101     }
2102     codec->patch_ops = generic_hdmi_patch_ops;
2103     - if (is_haswell(codec)) {
2104     + if (is_haswell_plus(codec)) {
2105     codec->patch_ops.set_power_state = haswell_set_power_state;
2106     codec->dp_mst = true;
2107     }
2108     @@ -2846,6 +2849,7 @@ static const struct hda_codec_preset snd_hda_preset_hdmi[] = {
2109     { .id = 0x80862805, .name = "CougarPoint HDMI", .patch = patch_generic_hdmi },
2110     { .id = 0x80862806, .name = "PantherPoint HDMI", .patch = patch_generic_hdmi },
2111     { .id = 0x80862807, .name = "Haswell HDMI", .patch = patch_generic_hdmi },
2112     +{ .id = 0x80862808, .name = "Broadwell HDMI", .patch = patch_generic_hdmi },
2113     { .id = 0x80862880, .name = "CedarTrail HDMI", .patch = patch_generic_hdmi },
2114     { .id = 0x80862882, .name = "Valleyview2 HDMI", .patch = patch_generic_hdmi },
2115     { .id = 0x808629fb, .name = "Crestline HDMI", .patch = patch_generic_hdmi },
2116     @@ -2901,6 +2905,7 @@ MODULE_ALIAS("snd-hda-codec-id:80862804");
2117     MODULE_ALIAS("snd-hda-codec-id:80862805");
2118     MODULE_ALIAS("snd-hda-codec-id:80862806");
2119     MODULE_ALIAS("snd-hda-codec-id:80862807");
2120     +MODULE_ALIAS("snd-hda-codec-id:80862808");
2121     MODULE_ALIAS("snd-hda-codec-id:80862880");
2122     MODULE_ALIAS("snd-hda-codec-id:80862882");
2123     MODULE_ALIAS("snd-hda-codec-id:808629fb");
2124     diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
2125     index 5f728808eed4..8bddf3f20a5e 100644
2126     --- a/sound/soc/codecs/max98090.c
2127     +++ b/sound/soc/codecs/max98090.c
2128     @@ -336,6 +336,7 @@ static bool max98090_readable_register(struct device *dev, unsigned int reg)
2129     case M98090_REG_RECORD_TDM_SLOT:
2130     case M98090_REG_SAMPLE_RATE:
2131     case M98090_REG_DMIC34_BIQUAD_BASE ... M98090_REG_DMIC34_BIQUAD_BASE + 0x0E:
2132     + case M98090_REG_REVISION_ID:
2133     return true;
2134     default:
2135     return false;