Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.2/0115-3.2.16-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1747 - (hide annotations) (download)
Mon Apr 23 16:05:01 2012 UTC (12 years, 1 month ago) by niro
File size: 67988 byte(s)
-linux 3.2.16
1 niro 1747 diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
2     index c2effc9..9c18ebd 100644
3     --- a/arch/arm/boot/compressed/head.S
4     +++ b/arch/arm/boot/compressed/head.S
5     @@ -273,7 +273,7 @@ restart: adr r0, LC0
6     add r0, r0, #0x100
7     mov r1, r6
8     sub r2, sp, r6
9     - blne atags_to_fdt
10     + bleq atags_to_fdt
11    
12     ldmfd sp!, {r0-r3, ip, lr}
13     sub sp, sp, #0x10000
14     diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
15     index 82ef81d..785365e 100644
16     --- a/arch/arm/mm/proc-v7.S
17     +++ b/arch/arm/mm/proc-v7.S
18     @@ -382,6 +382,18 @@ __v7_setup:
19     mcr p15, 0, r5, c10, c2, 0 @ write PRRR
20     mcr p15, 0, r6, c10, c2, 1 @ write NMRR
21     #endif
22     +#ifndef CONFIG_ARM_THUMBEE
23     + mrc p15, 0, r0, c0, c1, 0 @ read ID_PFR0 for ThumbEE
24     + and r0, r0, #(0xf << 12) @ ThumbEE enabled field
25     + teq r0, #(1 << 12) @ check if ThumbEE is present
26     + bne 1f
27     + mov r5, #0
28     + mcr p14, 6, r5, c1, c0, 0 @ Initialize TEEHBR to 0
29     + mrc p14, 6, r0, c0, c0, 0 @ load TEECR
30     + orr r0, r0, #1 @ set the 1st bit in order to
31     + mcr p14, 6, r0, c0, c0, 0 @ stop userspace TEEHBR access
32     +1:
33     +#endif
34     adr r5, v7_crval
35     ldmia r5, {r5, r6}
36     #ifdef CONFIG_CPU_ENDIAN_BE8
37     diff --git a/arch/ia64/include/asm/futex.h b/arch/ia64/include/asm/futex.h
38     index 8428525..21ab376 100644
39     --- a/arch/ia64/include/asm/futex.h
40     +++ b/arch/ia64/include/asm/futex.h
41     @@ -107,15 +107,16 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
42     return -EFAULT;
43    
44     {
45     - register unsigned long r8 __asm ("r8") = 0;
46     + register unsigned long r8 __asm ("r8");
47     unsigned long prev;
48     __asm__ __volatile__(
49     " mf;; \n"
50     - " mov ar.ccv=%3;; \n"
51     - "[1:] cmpxchg4.acq %0=[%1],%2,ar.ccv \n"
52     + " mov %0=r0 \n"
53     + " mov ar.ccv=%4;; \n"
54     + "[1:] cmpxchg4.acq %1=[%2],%3,ar.ccv \n"
55     " .xdata4 \"__ex_table\", 1b-., 2f-. \n"
56     "[2:]"
57     - : "=r" (prev)
58     + : "=r" (r8), "=r" (prev)
59     : "r" (uaddr), "r" (newval),
60     "rO" ((long) (unsigned) oldval)
61     : "memory");
62     diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
63     index f929db9..a3c40e8 100644
64     --- a/arch/s390/Kconfig
65     +++ b/arch/s390/Kconfig
66     @@ -90,7 +90,6 @@ config S390
67     select HAVE_GET_USER_PAGES_FAST
68     select HAVE_ARCH_MUTEX_CPU_RELAX
69     select HAVE_ARCH_JUMP_LABEL if !MARCH_G5
70     - select HAVE_RCU_TABLE_FREE if SMP
71     select ARCH_SAVE_PAGE_KEYS if HIBERNATION
72     select ARCH_INLINE_SPIN_TRYLOCK
73     select ARCH_INLINE_SPIN_TRYLOCK_BH
74     diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h
75     index 8eef9b5..78e3041 100644
76     --- a/arch/s390/include/asm/pgalloc.h
77     +++ b/arch/s390/include/asm/pgalloc.h
78     @@ -22,10 +22,7 @@ void crst_table_free(struct mm_struct *, unsigned long *);
79    
80     unsigned long *page_table_alloc(struct mm_struct *, unsigned long);
81     void page_table_free(struct mm_struct *, unsigned long *);
82     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
83     void page_table_free_rcu(struct mmu_gather *, unsigned long *);
84     -void __tlb_remove_table(void *_table);
85     -#endif
86    
87     static inline void clear_table(unsigned long *s, unsigned long val, size_t n)
88     {
89     diff --git a/arch/s390/include/asm/tlb.h b/arch/s390/include/asm/tlb.h
90     index c687a2c..775a5ee 100644
91     --- a/arch/s390/include/asm/tlb.h
92     +++ b/arch/s390/include/asm/tlb.h
93     @@ -30,14 +30,10 @@
94    
95     struct mmu_gather {
96     struct mm_struct *mm;
97     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
98     struct mmu_table_batch *batch;
99     -#endif
100     unsigned int fullmm;
101     - unsigned int need_flush;
102     };
103    
104     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
105     struct mmu_table_batch {
106     struct rcu_head rcu;
107     unsigned int nr;
108     @@ -49,7 +45,6 @@ struct mmu_table_batch {
109    
110     extern void tlb_table_flush(struct mmu_gather *tlb);
111     extern void tlb_remove_table(struct mmu_gather *tlb, void *table);
112     -#endif
113    
114     static inline void tlb_gather_mmu(struct mmu_gather *tlb,
115     struct mm_struct *mm,
116     @@ -57,29 +52,20 @@ static inline void tlb_gather_mmu(struct mmu_gather *tlb,
117     {
118     tlb->mm = mm;
119     tlb->fullmm = full_mm_flush;
120     - tlb->need_flush = 0;
121     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
122     tlb->batch = NULL;
123     -#endif
124     if (tlb->fullmm)
125     __tlb_flush_mm(mm);
126     }
127    
128     static inline void tlb_flush_mmu(struct mmu_gather *tlb)
129     {
130     - if (!tlb->need_flush)
131     - return;
132     - tlb->need_flush = 0;
133     - __tlb_flush_mm(tlb->mm);
134     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
135     tlb_table_flush(tlb);
136     -#endif
137     }
138    
139     static inline void tlb_finish_mmu(struct mmu_gather *tlb,
140     unsigned long start, unsigned long end)
141     {
142     - tlb_flush_mmu(tlb);
143     + tlb_table_flush(tlb);
144     }
145    
146     /*
147     @@ -105,10 +91,8 @@ static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
148     static inline void pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
149     unsigned long address)
150     {
151     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
152     if (!tlb->fullmm)
153     return page_table_free_rcu(tlb, (unsigned long *) pte);
154     -#endif
155     page_table_free(tlb->mm, (unsigned long *) pte);
156     }
157    
158     @@ -125,10 +109,8 @@ static inline void pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
159     #ifdef __s390x__
160     if (tlb->mm->context.asce_limit <= (1UL << 31))
161     return;
162     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
163     if (!tlb->fullmm)
164     return tlb_remove_table(tlb, pmd);
165     -#endif
166     crst_table_free(tlb->mm, (unsigned long *) pmd);
167     #endif
168     }
169     @@ -146,10 +128,8 @@ static inline void pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
170     #ifdef __s390x__
171     if (tlb->mm->context.asce_limit <= (1UL << 42))
172     return;
173     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
174     if (!tlb->fullmm)
175     return tlb_remove_table(tlb, pud);
176     -#endif
177     crst_table_free(tlb->mm, (unsigned long *) pud);
178     #endif
179     }
180     diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
181     index 301c84d..f8ceac4 100644
182     --- a/arch/s390/mm/pgtable.c
183     +++ b/arch/s390/mm/pgtable.c
184     @@ -687,8 +687,6 @@ void page_table_free(struct mm_struct *mm, unsigned long *table)
185     }
186     }
187    
188     -#ifdef CONFIG_HAVE_RCU_TABLE_FREE
189     -
190     static void __page_table_free_rcu(void *table, unsigned bit)
191     {
192     struct page *page;
193     @@ -742,7 +740,66 @@ void __tlb_remove_table(void *_table)
194     free_pages((unsigned long) table, ALLOC_ORDER);
195     }
196    
197     -#endif
198     +static void tlb_remove_table_smp_sync(void *arg)
199     +{
200     + /* Simply deliver the interrupt */
201     +}
202     +
203     +static void tlb_remove_table_one(void *table)
204     +{
205     + /*
206     + * This isn't an RCU grace period and hence the page-tables cannot be
207     + * assumed to be actually RCU-freed.
208     + *
209     + * It is however sufficient for software page-table walkers that rely
210     + * on IRQ disabling. See the comment near struct mmu_table_batch.
211     + */
212     + smp_call_function(tlb_remove_table_smp_sync, NULL, 1);
213     + __tlb_remove_table(table);
214     +}
215     +
216     +static void tlb_remove_table_rcu(struct rcu_head *head)
217     +{
218     + struct mmu_table_batch *batch;
219     + int i;
220     +
221     + batch = container_of(head, struct mmu_table_batch, rcu);
222     +
223     + for (i = 0; i < batch->nr; i++)
224     + __tlb_remove_table(batch->tables[i]);
225     +
226     + free_page((unsigned long)batch);
227     +}
228     +
229     +void tlb_table_flush(struct mmu_gather *tlb)
230     +{
231     + struct mmu_table_batch **batch = &tlb->batch;
232     +
233     + if (*batch) {
234     + __tlb_flush_mm(tlb->mm);
235     + call_rcu_sched(&(*batch)->rcu, tlb_remove_table_rcu);
236     + *batch = NULL;
237     + }
238     +}
239     +
240     +void tlb_remove_table(struct mmu_gather *tlb, void *table)
241     +{
242     + struct mmu_table_batch **batch = &tlb->batch;
243     +
244     + if (*batch == NULL) {
245     + *batch = (struct mmu_table_batch *)
246     + __get_free_page(GFP_NOWAIT | __GFP_NOWARN);
247     + if (*batch == NULL) {
248     + __tlb_flush_mm(tlb->mm);
249     + tlb_remove_table_one(table);
250     + return;
251     + }
252     + (*batch)->nr = 0;
253     + }
254     + (*batch)->tables[(*batch)->nr++] = table;
255     + if ((*batch)->nr == MAX_TABLE_BATCH)
256     + tlb_table_flush(tlb);
257     +}
258    
259     /*
260     * switch on pgstes for its userspace process (for kvm)
261     diff --git a/arch/sparc/kernel/ds.c b/arch/sparc/kernel/ds.c
262     index 381edcd..27728e1 100644
263     --- a/arch/sparc/kernel/ds.c
264     +++ b/arch/sparc/kernel/ds.c
265     @@ -1267,4 +1267,4 @@ static int __init ds_init(void)
266     return vio_register_driver(&ds_driver);
267     }
268    
269     -subsys_initcall(ds_init);
270     +fs_initcall(ds_init);
271     diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S
272     index 77f1b95..9171fc2 100644
273     --- a/arch/sparc/kernel/rtrap_64.S
274     +++ b/arch/sparc/kernel/rtrap_64.S
275     @@ -20,11 +20,6 @@
276    
277     .text
278     .align 32
279     -__handle_softirq:
280     - call do_softirq
281     - nop
282     - ba,a,pt %xcc, __handle_softirq_continue
283     - nop
284     __handle_preemption:
285     call schedule
286     wrpr %g0, RTRAP_PSTATE, %pstate
287     @@ -89,9 +84,7 @@ rtrap:
288     cmp %l1, 0
289    
290     /* mm/ultra.S:xcall_report_regs KNOWS about this load. */
291     - bne,pn %icc, __handle_softirq
292     ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
293     -__handle_softirq_continue:
294     rtrap_xcall:
295     sethi %hi(0xf << 20), %l4
296     and %l1, %l4, %l4
297     diff --git a/drivers/acpi/acpica/acobject.h b/drivers/acpi/acpica/acobject.h
298     index 1055769..6d276c2 100644
299     --- a/drivers/acpi/acpica/acobject.h
300     +++ b/drivers/acpi/acpica/acobject.h
301     @@ -358,6 +358,7 @@ typedef enum {
302     */
303     struct acpi_object_extra {
304     ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *method_REG; /* _REG method for this region (if any) */
305     + struct acpi_namespace_node *scope_node;
306     void *region_context; /* Region-specific data */
307     u8 *aml_start;
308     u32 aml_length;
309     diff --git a/drivers/acpi/acpica/dsargs.c b/drivers/acpi/acpica/dsargs.c
310     index 42163d8..d69e4a5 100644
311     --- a/drivers/acpi/acpica/dsargs.c
312     +++ b/drivers/acpi/acpica/dsargs.c
313     @@ -384,7 +384,7 @@ acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *obj_desc)
314    
315     /* Execute the argument AML */
316    
317     - status = acpi_ds_execute_arguments(node, node->parent,
318     + status = acpi_ds_execute_arguments(node, extra_desc->extra.scope_node,
319     extra_desc->extra.aml_length,
320     extra_desc->extra.aml_start);
321     if (ACPI_FAILURE(status)) {
322     diff --git a/drivers/acpi/acpica/excreate.c b/drivers/acpi/acpica/excreate.c
323     index 110711a..8a06dc5 100644
324     --- a/drivers/acpi/acpica/excreate.c
325     +++ b/drivers/acpi/acpica/excreate.c
326     @@ -330,6 +330,12 @@ acpi_ex_create_region(u8 * aml_start,
327     region_obj2 = obj_desc->common.next_object;
328     region_obj2->extra.aml_start = aml_start;
329     region_obj2->extra.aml_length = aml_length;
330     + if (walk_state->scope_info) {
331     + region_obj2->extra.scope_node =
332     + walk_state->scope_info->scope.node;
333     + } else {
334     + region_obj2->extra.scope_node = node;
335     + }
336    
337     /* Init the region from the operands */
338    
339     diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c
340     index e820b68..acda773 100644
341     --- a/drivers/block/cciss_scsi.c
342     +++ b/drivers/block/cciss_scsi.c
343     @@ -866,6 +866,7 @@ cciss_scsi_detect(ctlr_info_t *h)
344     sh->can_queue = cciss_tape_cmds;
345     sh->sg_tablesize = h->maxsgentries;
346     sh->max_cmd_len = MAX_COMMAND_SIZE;
347     + sh->max_sectors = h->cciss_max_sectors;
348    
349     ((struct cciss_scsi_adapter_data_t *)
350     h->scsi_ctlr)->scsi_host = sh;
351     @@ -1410,7 +1411,7 @@ static void cciss_scatter_gather(ctlr_info_t *h, CommandList_struct *c,
352     /* track how many SG entries we are using */
353     if (request_nsgs > h->maxSG)
354     h->maxSG = request_nsgs;
355     - c->Header.SGTotal = (__u8) request_nsgs + chained;
356     + c->Header.SGTotal = (u16) request_nsgs + chained;
357     if (request_nsgs > h->max_cmd_sgentries)
358     c->Header.SGList = h->max_cmd_sgentries;
359     else
360     diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
361     index db811d2..003cd8d 100644
362     --- a/drivers/bluetooth/ath3k.c
363     +++ b/drivers/bluetooth/ath3k.c
364     @@ -71,6 +71,8 @@ static struct usb_device_id ath3k_table[] = {
365    
366     /* Atheros AR3012 with sflash firmware*/
367     { USB_DEVICE(0x0CF3, 0x3004) },
368     + { USB_DEVICE(0x0CF3, 0x311D) },
369     + { USB_DEVICE(0x13d3, 0x3375) },
370    
371     /* Atheros AR5BBU12 with sflash firmware */
372     { USB_DEVICE(0x0489, 0xE02C) },
373     @@ -87,6 +89,8 @@ static struct usb_device_id ath3k_blist_tbl[] = {
374    
375     /* Atheros AR3012 with sflash firmware*/
376     { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
377     + { USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 },
378     + { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
379    
380     { } /* Terminating entry */
381     };
382     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
383     index c16c750..db44ad5 100644
384     --- a/drivers/bluetooth/btusb.c
385     +++ b/drivers/bluetooth/btusb.c
386     @@ -101,6 +101,7 @@ static struct usb_device_id btusb_table[] = {
387     { USB_DEVICE(0x0c10, 0x0000) },
388    
389     /* Broadcom BCM20702A0 */
390     + { USB_DEVICE(0x0a5c, 0x21e3) },
391     { USB_DEVICE(0x413c, 0x8197) },
392    
393     { } /* Terminating entry */
394     @@ -126,6 +127,8 @@ static struct usb_device_id blacklist_table[] = {
395    
396     /* Atheros 3012 with sflash firmware */
397     { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
398     + { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
399     + { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
400    
401     /* Atheros AR5BBU12 with sflash firmware */
402     { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
403     diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
404     index 48ad2a7..8f3d6db 100644
405     --- a/drivers/bluetooth/hci_ldisc.c
406     +++ b/drivers/bluetooth/hci_ldisc.c
407     @@ -237,7 +237,6 @@ static void hci_uart_destruct(struct hci_dev *hdev)
408     return;
409    
410     BT_DBG("%s", hdev->name);
411     - kfree(hdev->driver_data);
412     }
413    
414     /* ------ LDISC part ------ */
415     @@ -310,12 +309,13 @@ static void hci_uart_tty_close(struct tty_struct *tty)
416     hci_uart_close(hdev);
417    
418     if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
419     - hu->proto->close(hu);
420     if (hdev) {
421     hci_unregister_dev(hdev);
422     hci_free_dev(hdev);
423     }
424     + hu->proto->close(hu);
425     }
426     + kfree(hu);
427     }
428     }
429    
430     diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
431     index 5a99bb3..da85c0d 100644
432     --- a/drivers/dma/Kconfig
433     +++ b/drivers/dma/Kconfig
434     @@ -201,18 +201,17 @@ config PL330_DMA
435     platform_data for a dma-pl330 device.
436    
437     config PCH_DMA
438     - tristate "Intel EG20T PCH / OKI Semi IOH(ML7213/ML7223) DMA support"
439     + tristate "Intel EG20T PCH / OKI Semi IOH(ML7213/ML7223/ML7831) DMA support"
440     depends on PCI && X86
441     select DMA_ENGINE
442     help
443     Enable support for Intel EG20T PCH DMA engine.
444     -
445     This driver also can be used for OKI SEMICONDUCTOR IOH(Input/
446     - Output Hub), ML7213 and ML7223.
447     - ML7213 IOH is for IVI(In-Vehicle Infotainment) use and ML7223 IOH is
448     - for MP(Media Phone) use.
449     - ML7213/ML7223 is companion chip for Intel Atom E6xx series.
450     - ML7213/ML7223 is completely compatible for Intel EG20T PCH.
451     + Output Hub), ML7213, ML7223 and ML7831.
452     + ML7213 IOH is for IVI(In-Vehicle Infotainment) use, ML7223 IOH is
453     + for MP(Media Phone) use and ML7831 IOH is for general purpose use.
454     + ML7213/ML7223/ML7831 is companion chip for Intel Atom E6xx series.
455     + ML7213/ML7223/ML7831 is completely compatible for Intel EG20T PCH.
456    
457     config IMX_SDMA
458     tristate "i.MX SDMA support"
459     diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
460     index a6d0e3d..629c430 100644
461     --- a/drivers/dma/pch_dma.c
462     +++ b/drivers/dma/pch_dma.c
463     @@ -1018,6 +1018,8 @@ static void __devexit pch_dma_remove(struct pci_dev *pdev)
464     #define PCI_DEVICE_ID_ML7223_DMA2_4CH 0x800E
465     #define PCI_DEVICE_ID_ML7223_DMA3_4CH 0x8017
466     #define PCI_DEVICE_ID_ML7223_DMA4_4CH 0x803B
467     +#define PCI_DEVICE_ID_ML7831_DMA1_8CH 0x8810
468     +#define PCI_DEVICE_ID_ML7831_DMA2_4CH 0x8815
469    
470     DEFINE_PCI_DEVICE_TABLE(pch_dma_id_table) = {
471     { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_EG20T_PCH_DMA_8CH), 8 },
472     @@ -1030,6 +1032,8 @@ DEFINE_PCI_DEVICE_TABLE(pch_dma_id_table) = {
473     { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7223_DMA2_4CH), 4}, /* Video SPI */
474     { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7223_DMA3_4CH), 4}, /* Security */
475     { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7223_DMA4_4CH), 4}, /* FPGA */
476     + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7831_DMA1_8CH), 8}, /* UART */
477     + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7831_DMA2_4CH), 4}, /* SPI */
478     { 0, },
479     };
480    
481     @@ -1057,7 +1061,7 @@ static void __exit pch_dma_exit(void)
482     module_init(pch_dma_init);
483     module_exit(pch_dma_exit);
484    
485     -MODULE_DESCRIPTION("Intel EG20T PCH / OKI SEMICONDUCTOR ML7213 IOH "
486     - "DMA controller driver");
487     +MODULE_DESCRIPTION("Intel EG20T PCH / OKI SEMICON ML7213/ML7223/ML7831 IOH"
488     + "DMA controller driver");
489     MODULE_AUTHOR("Yong Wang <yong.y.wang@intel.com>");
490     MODULE_LICENSE("GPL v2");
491     diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
492     index 8482a23..4e04157 100644
493     --- a/drivers/gpio/Kconfig
494     +++ b/drivers/gpio/Kconfig
495     @@ -387,7 +387,7 @@ config GPIO_LANGWELL
496     Say Y here to support Intel Langwell/Penwell GPIO.
497    
498     config GPIO_PCH
499     - tristate "Intel EG20T PCH / OKI SEMICONDUCTOR ML7223 IOH GPIO"
500     + tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7223/ML7831) GPIO"
501     depends on PCI && X86
502     select GENERIC_IRQ_CHIP
503     help
504     @@ -395,11 +395,12 @@ config GPIO_PCH
505     which is an IOH(Input/Output Hub) for x86 embedded processor.
506     This driver can access PCH GPIO device.
507    
508     - This driver also can be used for OKI SEMICONDUCTOR IOH(Input/
509     - Output Hub), ML7223.
510     + This driver also can be used for LAPIS Semiconductor IOH(Input/
511     + Output Hub), ML7223 and ML7831.
512     ML7223 IOH is for MP(Media Phone) use.
513     - ML7223 is companion chip for Intel Atom E6xx series.
514     - ML7223 is completely compatible for Intel EG20T PCH.
515     + ML7831 IOH is for general purpose use.
516     + ML7223/ML7831 is companion chip for Intel Atom E6xx series.
517     + ML7223/ML7831 is completely compatible for Intel EG20T PCH.
518    
519     config GPIO_ML_IOH
520     tristate "OKI SEMICONDUCTOR ML7213 IOH GPIO support"
521     diff --git a/drivers/gpio/gpio-pch.c b/drivers/gpio/gpio-pch.c
522     index a6008e1..779ff70 100644
523     --- a/drivers/gpio/gpio-pch.c
524     +++ b/drivers/gpio/gpio-pch.c
525     @@ -392,6 +392,7 @@ static int __devinit pch_gpio_probe(struct pci_dev *pdev,
526     chip->reg = chip->base;
527     pci_set_drvdata(pdev, chip);
528     mutex_init(&chip->lock);
529     + spin_lock_init(&chip->spinlock);
530     pch_gpio_setup(chip);
531     ret = gpiochip_add(&chip->gpio);
532     if (ret) {
533     @@ -524,6 +525,7 @@ static DEFINE_PCI_DEVICE_TABLE(pch_gpio_pcidev_id) = {
534     { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8803) },
535     { PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8014) },
536     { PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8043) },
537     + { PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8803) },
538     { 0, }
539     };
540     MODULE_DEVICE_TABLE(pci, pch_gpio_pcidev_id);
541     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
542     index e52b705..d0f8830 100644
543     --- a/drivers/gpu/drm/i915/i915_drv.c
544     +++ b/drivers/gpu/drm/i915/i915_drv.c
545     @@ -64,7 +64,7 @@ MODULE_PARM_DESC(semaphores,
546     "Use semaphores for inter-ring sync (default: -1 (use per-chip defaults))");
547    
548     int i915_enable_rc6 __read_mostly = -1;
549     -module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0600);
550     +module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0400);
551     MODULE_PARM_DESC(i915_enable_rc6,
552     "Enable power-saving render C-state 6 (default: -1 (use per-chip default)");
553    
554     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
555     index 9011f48..390768f 100644
556     --- a/drivers/gpu/drm/i915/intel_display.c
557     +++ b/drivers/gpu/drm/i915/intel_display.c
558     @@ -5646,12 +5646,15 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
559     if (is_lvds) {
560     temp = I915_READ(PCH_LVDS);
561     temp |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP;
562     - if (HAS_PCH_CPT(dev))
563     + if (HAS_PCH_CPT(dev)) {
564     + temp &= ~PORT_TRANS_SEL_MASK;
565     temp |= PORT_TRANS_SEL_CPT(pipe);
566     - else if (pipe == 1)
567     - temp |= LVDS_PIPEB_SELECT;
568     - else
569     - temp &= ~LVDS_PIPEB_SELECT;
570     + } else {
571     + if (pipe == 1)
572     + temp |= LVDS_PIPEB_SELECT;
573     + else
574     + temp &= ~LVDS_PIPEB_SELECT;
575     + }
576    
577     /* set the corresponsding LVDS_BORDER bit */
578     temp |= dev_priv->lvds_border_bits;
579     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
580     index 94f860c..12eb789 100644
581     --- a/drivers/gpu/drm/i915/intel_dp.c
582     +++ b/drivers/gpu/drm/i915/intel_dp.c
583     @@ -219,14 +219,38 @@ intel_dp_max_data_rate(int max_link_clock, int max_lanes)
584     return (max_link_clock * max_lanes * 8) / 10;
585     }
586    
587     +static bool
588     +intel_dp_adjust_dithering(struct intel_dp *intel_dp,
589     + struct drm_display_mode *mode,
590     + struct drm_display_mode *adjusted_mode)
591     +{
592     + int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp));
593     + int max_lanes = intel_dp_max_lane_count(intel_dp);
594     + int max_rate, mode_rate;
595     +
596     + mode_rate = intel_dp_link_required(mode->clock, 24);
597     + max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
598     +
599     + if (mode_rate > max_rate) {
600     + mode_rate = intel_dp_link_required(mode->clock, 18);
601     + if (mode_rate > max_rate)
602     + return false;
603     +
604     + if (adjusted_mode)
605     + adjusted_mode->private_flags
606     + |= INTEL_MODE_DP_FORCE_6BPC;
607     +
608     + return true;
609     + }
610     +
611     + return true;
612     +}
613     +
614     static int
615     intel_dp_mode_valid(struct drm_connector *connector,
616     struct drm_display_mode *mode)
617     {
618     struct intel_dp *intel_dp = intel_attached_dp(connector);
619     - int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp));
620     - int max_lanes = intel_dp_max_lane_count(intel_dp);
621     - int max_rate, mode_rate;
622    
623     if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) {
624     if (mode->hdisplay > intel_dp->panel_fixed_mode->hdisplay)
625     @@ -236,16 +260,8 @@ intel_dp_mode_valid(struct drm_connector *connector,
626     return MODE_PANEL;
627     }
628    
629     - mode_rate = intel_dp_link_required(mode->clock, 24);
630     - max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
631     -
632     - if (mode_rate > max_rate) {
633     - mode_rate = intel_dp_link_required(mode->clock, 18);
634     - if (mode_rate > max_rate)
635     - return MODE_CLOCK_HIGH;
636     - else
637     - mode->private_flags |= INTEL_MODE_DP_FORCE_6BPC;
638     - }
639     + if (!intel_dp_adjust_dithering(intel_dp, mode, NULL))
640     + return MODE_CLOCK_HIGH;
641    
642     if (mode->clock < 10000)
643     return MODE_CLOCK_LOW;
644     @@ -673,7 +689,7 @@ intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,
645     int lane_count, clock;
646     int max_lane_count = intel_dp_max_lane_count(intel_dp);
647     int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0;
648     - int bpp = mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24;
649     + int bpp;
650     static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 };
651    
652     if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) {
653     @@ -687,6 +703,11 @@ intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,
654     mode->clock = intel_dp->panel_fixed_mode->clock;
655     }
656    
657     + if (!intel_dp_adjust_dithering(intel_dp, mode, adjusted_mode))
658     + return false;
659     +
660     + bpp = adjusted_mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24;
661     +
662     for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
663     for (clock = 0; clock <= max_clock; clock++) {
664     int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count);
665     diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
666     index 30a9af9..8673581 100644
667     --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
668     +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
669     @@ -1052,7 +1052,7 @@ int intel_init_ring_buffer(struct drm_device *dev,
670     * of the buffer.
671     */
672     ring->effective_size = ring->size;
673     - if (IS_I830(ring->dev))
674     + if (IS_I830(ring->dev) || IS_845G(ring->dev))
675     ring->effective_size -= 128;
676    
677     return 0;
678     diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
679     index 0f8eb48..5351ee1 100644
680     --- a/drivers/gpu/drm/radeon/atombios_encoders.c
681     +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
682     @@ -246,6 +246,10 @@ atombios_dvo_setup(struct drm_encoder *encoder, int action)
683     if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev))
684     return;
685    
686     + /* some R4xx chips have the wrong frev */
687     + if (rdev->family <= CHIP_RV410)
688     + frev = 1;
689     +
690     switch (frev) {
691     case 1:
692     switch (crev) {
693     diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
694     index f7d39ac..4a4493f 100644
695     --- a/drivers/gpu/drm/radeon/radeon_connectors.c
696     +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
697     @@ -946,7 +946,7 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
698    
699     encoder = obj_to_encoder(obj);
700    
701     - if (encoder->encoder_type != DRM_MODE_ENCODER_DAC ||
702     + if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
703     encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
704     continue;
705    
706     @@ -976,6 +976,7 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
707     * cases the DVI port is actually a virtual KVM port connected to the service
708     * processor.
709     */
710     +out:
711     if ((!rdev->is_atom_bios) &&
712     (ret == connector_status_disconnected) &&
713     rdev->mode_info.bios_hardcoded_edid_size) {
714     @@ -983,7 +984,6 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
715     ret = connector_status_connected;
716     }
717    
718     -out:
719     /* updated in get modes as well since we need to know if it's analog or digital */
720     radeon_connector_update_scratch_regs(connector, ret);
721     return ret;
722     diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c
723     index 7bb1b07..1441b00 100644
724     --- a/drivers/gpu/drm/radeon/radeon_i2c.c
725     +++ b/drivers/gpu/drm/radeon/radeon_i2c.c
726     @@ -890,6 +890,10 @@ struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
727     struct radeon_i2c_chan *i2c;
728     int ret;
729    
730     + /* don't add the mm_i2c bus unless hw_i2c is enabled */
731     + if (rec->mm_i2c && (radeon_hw_i2c == 0))
732     + return NULL;
733     +
734     i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL);
735     if (i2c == NULL)
736     return NULL;
737     diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
738     index e7ddb49..baa019e 100644
739     --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
740     +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
741     @@ -143,6 +143,12 @@ static bool radeon_msi_ok(struct radeon_device *rdev)
742     (rdev->pdev->subsystem_device == 0x01fd))
743     return true;
744    
745     + /* RV515 seems to have MSI issues where it loses
746     + * MSI rearms occasionally. This leads to lockups and freezes.
747     + * disable it by default.
748     + */
749     + if (rdev->family == CHIP_RV515)
750     + return false;
751     if (rdev->flags & RADEON_IS_IGP) {
752     /* APUs work fine with MSIs */
753     if (rdev->family >= CHIP_PALM)
754     diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
755     index 2a8722b..62a8e68 100644
756     --- a/drivers/md/bitmap.c
757     +++ b/drivers/md/bitmap.c
758     @@ -1819,7 +1819,9 @@ int bitmap_load(struct mddev *mddev)
759     * re-add of a missing device */
760     start = mddev->recovery_cp;
761    
762     + mutex_lock(&mddev->bitmap_info.mutex);
763     err = bitmap_init_from_disk(bitmap, start);
764     + mutex_unlock(&mddev->bitmap_info.mutex);
765    
766     if (err)
767     goto out;
768     diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
769     index 48406ca..43c7b25 100644
770     --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
771     +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
772     @@ -1745,6 +1745,12 @@ int pch_gbe_up(struct pch_gbe_adapter *adapter)
773     struct pch_gbe_rx_ring *rx_ring = adapter->rx_ring;
774     int err;
775    
776     + /* Ensure we have a valid MAC */
777     + if (!is_valid_ether_addr(adapter->hw.mac.addr)) {
778     + pr_err("Error: Invalid MAC address\n");
779     + return -EINVAL;
780     + }
781     +
782     /* hardware has been reset, we need to reload some things */
783     pch_gbe_set_multi(netdev);
784    
785     @@ -2467,9 +2473,14 @@ static int pch_gbe_probe(struct pci_dev *pdev,
786    
787     memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len);
788     if (!is_valid_ether_addr(netdev->dev_addr)) {
789     - dev_err(&pdev->dev, "Invalid MAC Address\n");
790     - ret = -EIO;
791     - goto err_free_adapter;
792     + /*
793     + * If the MAC is invalid (or just missing), display a warning
794     + * but do not abort setting up the device. pch_gbe_up will
795     + * prevent the interface from being brought up until a valid MAC
796     + * is set.
797     + */
798     + dev_err(&pdev->dev, "Invalid MAC address, "
799     + "interface disabled.\n");
800     }
801     setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog,
802     (unsigned long)adapter);
803     diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
804     index 9cb5f91..29e23be 100644
805     --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
806     +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
807     @@ -321,10 +321,10 @@ static void pch_gbe_check_copper_options(struct pch_gbe_adapter *adapter)
808     pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n");
809     hw->phy.autoneg_advertised = opt.def;
810     } else {
811     - hw->phy.autoneg_advertised = AutoNeg;
812     - pch_gbe_validate_option(
813     - (int *)(&hw->phy.autoneg_advertised),
814     - &opt, adapter);
815     + int tmp = AutoNeg;
816     +
817     + pch_gbe_validate_option(&tmp, &opt, adapter);
818     + hw->phy.autoneg_advertised = tmp;
819     }
820     }
821    
822     @@ -495,9 +495,10 @@ void pch_gbe_check_options(struct pch_gbe_adapter *adapter)
823     .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list),
824     .p = fc_list } }
825     };
826     - hw->mac.fc = FlowControl;
827     - pch_gbe_validate_option((int *)(&hw->mac.fc),
828     - &opt, adapter);
829     + int tmp = FlowControl;
830     +
831     + pch_gbe_validate_option(&tmp, &opt, adapter);
832     + hw->mac.fc = tmp;
833     }
834    
835     pch_gbe_check_copper_options(adapter);
836     diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c
837     index 8ddef3e..d771de5 100644
838     --- a/drivers/net/wireless/ath/ath9k/calib.c
839     +++ b/drivers/net/wireless/ath/ath9k/calib.c
840     @@ -20,7 +20,6 @@
841    
842     /* Common calibration code */
843    
844     -#define ATH9K_NF_TOO_HIGH -60
845    
846     static int16_t ath9k_hw_get_nf_hist_mid(int16_t *nfCalBuffer)
847     {
848     @@ -348,10 +347,10 @@ static void ath9k_hw_nf_sanitize(struct ath_hw *ah, s16 *nf)
849     "NF calibrated [%s] [chain %d] is %d\n",
850     (i >= 3 ? "ext" : "ctl"), i % 3, nf[i]);
851    
852     - if (nf[i] > ATH9K_NF_TOO_HIGH) {
853     + if (nf[i] > limit->max) {
854     ath_dbg(common, ATH_DBG_CALIBRATE,
855     "NF[%d] (%d) > MAX (%d), correcting to MAX\n",
856     - i, nf[i], ATH9K_NF_TOO_HIGH);
857     + i, nf[i], limit->max);
858     nf[i] = limit->max;
859     } else if (nf[i] < limit->min) {
860     ath_dbg(common, ATH_DBG_CALIBRATE,
861     diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
862     index 9afcad3..d44d398 100644
863     --- a/drivers/net/wireless/rtlwifi/pci.c
864     +++ b/drivers/net/wireless/rtlwifi/pci.c
865     @@ -926,8 +926,13 @@ static void _rtl_pci_prepare_bcn_tasklet(struct ieee80211_hw *hw)
866     memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc));
867     ring = &rtlpci->tx_ring[BEACON_QUEUE];
868     pskb = __skb_dequeue(&ring->queue);
869     - if (pskb)
870     + if (pskb) {
871     + struct rtl_tx_desc *entry = &ring->desc[ring->idx];
872     + pci_unmap_single(rtlpci->pdev, rtlpriv->cfg->ops->get_desc(
873     + (u8 *) entry, true, HW_DESC_TXBUFF_ADDR),
874     + pskb->len, PCI_DMA_TODEVICE);
875     kfree_skb(pskb);
876     + }
877    
878     /*NB: the beacon data buffer must be 32-bit aligned. */
879     pskb = ieee80211_beacon_get(hw, mac->vif);
880     diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c
881     index ff1b84b..e86edfc 100644
882     --- a/drivers/rtc/rtc-pl031.c
883     +++ b/drivers/rtc/rtc-pl031.c
884     @@ -339,8 +339,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
885     dev_dbg(&adev->dev, "revision = 0x%01x\n", ldata->hw_revision);
886    
887     /* Enable the clockwatch on ST Variants */
888     - if ((ldata->hw_designer == AMBA_VENDOR_ST) &&
889     - (ldata->hw_revision > 1))
890     + if (ldata->hw_designer == AMBA_VENDOR_ST)
891     writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN,
892     ldata->base + RTC_CR);
893    
894     diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
895     index 8ba4510..7587796 100644
896     --- a/drivers/spi/Kconfig
897     +++ b/drivers/spi/Kconfig
898     @@ -346,14 +346,14 @@ config SPI_TI_SSP
899     serial port.
900    
901     config SPI_TOPCLIFF_PCH
902     - tristate "Intel EG20T PCH/OKI SEMICONDUCTOR ML7213 IOH SPI controller"
903     + tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) SPI"
904     depends on PCI
905     help
906     SPI driver for the Topcliff PCH (Platform Controller Hub) SPI bus
907     used in some x86 embedded processors.
908    
909     - This driver also supports the ML7213, a companion chip for the
910     - Atom E6xx series and compatible with the Intel EG20T PCH.
911     + This driver also supports the ML7213/ML7223/ML7831, a companion chip
912     + for the Atom E6xx series and compatible with the Intel EG20T PCH.
913    
914     config SPI_TXX9
915     tristate "Toshiba TXx9 SPI controller"
916     diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c
917     index 027b6d0..54b9d2e 100644
918     --- a/drivers/spi/spi-topcliff-pch.c
919     +++ b/drivers/spi/spi-topcliff-pch.c
920     @@ -95,16 +95,18 @@
921     #define PCH_CLOCK_HZ 50000000
922     #define PCH_MAX_SPBR 1023
923    
924     -/* Definition for ML7213 by OKI SEMICONDUCTOR */
925     +/* Definition for ML7213/ML7831 by OKI SEMICONDUCTOR */
926     #define PCI_VENDOR_ID_ROHM 0x10DB
927     #define PCI_DEVICE_ID_ML7213_SPI 0x802c
928     #define PCI_DEVICE_ID_ML7223_SPI 0x800F
929     +#define PCI_DEVICE_ID_ML7831_SPI 0x8816
930    
931     /*
932     * Set the number of SPI instance max
933     * Intel EG20T PCH : 1ch
934     * OKI SEMICONDUCTOR ML7213 IOH : 2ch
935     * OKI SEMICONDUCTOR ML7223 IOH : 1ch
936     + * OKI SEMICONDUCTOR ML7831 IOH : 1ch
937     */
938     #define PCH_SPI_MAX_DEV 2
939    
940     @@ -218,6 +220,7 @@ static struct pci_device_id pch_spi_pcidev_id[] = {
941     { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_GE_SPI), 1, },
942     { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7213_SPI), 2, },
943     { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7223_SPI), 1, },
944     + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7831_SPI), 1, },
945     { }
946     };
947    
948     @@ -315,22 +318,23 @@ static void pch_spi_handler_sub(struct pch_spi_data *data, u32 reg_spsr_val,
949     data->tx_index = tx_index;
950     data->rx_index = rx_index;
951    
952     - }
953     -
954     - /* if transfer complete interrupt */
955     - if (reg_spsr_val & SPSR_FI_BIT) {
956     - if ((tx_index == bpw_len) && (rx_index == tx_index)) {
957     - /* disable interrupts */
958     - pch_spi_setclr_reg(data->master, PCH_SPCR, 0, PCH_ALL);
959     -
960     - /* transfer is completed;
961     - inform pch_spi_process_messages */
962     - data->transfer_complete = true;
963     - data->transfer_active = false;
964     - wake_up(&data->wait);
965     - } else {
966     - dev_err(&data->master->dev,
967     - "%s : Transfer is not completed", __func__);
968     + /* if transfer complete interrupt */
969     + if (reg_spsr_val & SPSR_FI_BIT) {
970     + if ((tx_index == bpw_len) && (rx_index == tx_index)) {
971     + /* disable interrupts */
972     + pch_spi_setclr_reg(data->master, PCH_SPCR, 0,
973     + PCH_ALL);
974     +
975     + /* transfer is completed;
976     + inform pch_spi_process_messages */
977     + data->transfer_complete = true;
978     + data->transfer_active = false;
979     + wake_up(&data->wait);
980     + } else {
981     + dev_err(&data->master->dev,
982     + "%s : Transfer is not completed",
983     + __func__);
984     + }
985     }
986     }
987     }
988     diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
989     index fc9ee97..870db4f 100644
990     --- a/drivers/staging/iio/magnetometer/hmc5843.c
991     +++ b/drivers/staging/iio/magnetometer/hmc5843.c
992     @@ -521,7 +521,9 @@ static int hmc5843_detect(struct i2c_client *client,
993     /* Called when we have found a new HMC5843. */
994     static void hmc5843_init_client(struct i2c_client *client)
995     {
996     - struct hmc5843_data *data = i2c_get_clientdata(client);
997     + struct iio_dev *indio_dev = i2c_get_clientdata(client);
998     + struct hmc5843_data *data = iio_priv(indio_dev);
999     +
1000     hmc5843_set_meas_conf(client, data->meas_conf);
1001     hmc5843_set_rate(client, data->rate);
1002     hmc5843_configure(client, data->operating_mode);
1003     diff --git a/drivers/tty/serial/altera_uart.c b/drivers/tty/serial/altera_uart.c
1004     index 1d04c50..5ba0898 100644
1005     --- a/drivers/tty/serial/altera_uart.c
1006     +++ b/drivers/tty/serial/altera_uart.c
1007     @@ -555,7 +555,7 @@ static int __devinit altera_uart_probe(struct platform_device *pdev)
1008     res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1009     if (res_mem)
1010     port->mapbase = res_mem->start;
1011     - else if (platp->mapbase)
1012     + else if (platp)
1013     port->mapbase = platp->mapbase;
1014     else
1015     return -EINVAL;
1016     @@ -563,7 +563,7 @@ static int __devinit altera_uart_probe(struct platform_device *pdev)
1017     res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1018     if (res_irq)
1019     port->irq = res_irq->start;
1020     - else if (platp->irq)
1021     + else if (platp)
1022     port->irq = platp->irq;
1023    
1024     /* Check platform data first so we can override device node data */
1025     diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
1026     index 8e00926..6da8cf8 100644
1027     --- a/drivers/tty/serial/amba-pl011.c
1028     +++ b/drivers/tty/serial/amba-pl011.c
1029     @@ -1380,6 +1380,10 @@ static int pl011_startup(struct uart_port *port)
1030    
1031     uap->port.uartclk = clk_get_rate(uap->clk);
1032    
1033     + /* Clear pending error and receive interrupts */
1034     + writew(UART011_OEIS | UART011_BEIS | UART011_PEIS | UART011_FEIS |
1035     + UART011_RTIS | UART011_RXIS, uap->port.membase + UART011_ICR);
1036     +
1037     /*
1038     * Allocate the IRQ
1039     */
1040     @@ -1414,10 +1418,6 @@ static int pl011_startup(struct uart_port *port)
1041     cr = UART01x_CR_UARTEN | UART011_CR_RXE | UART011_CR_TXE;
1042     writew(cr, uap->port.membase + UART011_CR);
1043    
1044     - /* Clear pending error interrupts */
1045     - writew(UART011_OEIS | UART011_BEIS | UART011_PEIS | UART011_FEIS,
1046     - uap->port.membase + UART011_ICR);
1047     -
1048     /*
1049     * initialise the old status of the modem signals
1050     */
1051     @@ -1432,6 +1432,9 @@ static int pl011_startup(struct uart_port *port)
1052     * as well.
1053     */
1054     spin_lock_irq(&uap->port.lock);
1055     + /* Clear out any spuriously appearing RX interrupts */
1056     + writew(UART011_RTIS | UART011_RXIS,
1057     + uap->port.membase + UART011_ICR);
1058     uap->im = UART011_RTIM;
1059     if (!pl011_dma_rx_running(uap))
1060     uap->im |= UART011_RXIM;
1061     @@ -1932,6 +1935,10 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)
1062     uap->port.line = i;
1063     pl011_dma_probe(uap);
1064    
1065     + /* Ensure interrupts from this UART are masked and cleared */
1066     + writew(0, uap->port.membase + UART011_IMSC);
1067     + writew(0xffff, uap->port.membase + UART011_ICR);
1068     +
1069     snprintf(uap->type, sizeof(uap->type), "PL011 rev%u", amba_rev(dev));
1070    
1071     amba_ports[i] = uap;
1072     diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
1073     index d6aba8c..da776a0 100644
1074     --- a/drivers/tty/serial/pch_uart.c
1075     +++ b/drivers/tty/serial/pch_uart.c
1076     @@ -1438,6 +1438,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,
1077     }
1078    
1079     pci_enable_msi(pdev);
1080     + pci_set_master(pdev);
1081    
1082     iobase = pci_resource_start(pdev, 0);
1083     mapbase = pci_resource_start(pdev, 1);
1084     diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
1085     index 45887a0..c77f0d6 100644
1086     --- a/drivers/usb/core/driver.c
1087     +++ b/drivers/usb/core/driver.c
1088     @@ -1198,8 +1198,13 @@ static int usb_suspend_both(struct usb_device *udev, pm_message_t msg)
1089     if (status == 0) {
1090     status = usb_suspend_device(udev, msg);
1091    
1092     - /* Again, ignore errors during system sleep transitions */
1093     - if (!PMSG_IS_AUTO(msg))
1094     + /*
1095     + * Ignore errors from non-root-hub devices during
1096     + * system sleep transitions. For the most part,
1097     + * these devices should go to low power anyway when
1098     + * the entire bus is suspended.
1099     + */
1100     + if (udev->parent && !PMSG_IS_AUTO(msg))
1101     status = 0;
1102     }
1103    
1104     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1105     index bc06a8f..e238b3b 100644
1106     --- a/drivers/usb/core/hub.c
1107     +++ b/drivers/usb/core/hub.c
1108     @@ -3072,6 +3072,22 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
1109     if (retval)
1110     goto fail;
1111    
1112     + /*
1113     + * Some superspeed devices have finished the link training process
1114     + * and attached to a superspeed hub port, but the device descriptor
1115     + * got from those devices show they aren't superspeed devices. Warm
1116     + * reset the port attached by the devices can fix them.
1117     + */
1118     + if ((udev->speed == USB_SPEED_SUPER) &&
1119     + (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0300)) {
1120     + dev_err(&udev->dev, "got a wrong device descriptor, "
1121     + "warm reset device\n");
1122     + hub_port_reset(hub, port1, udev,
1123     + HUB_BH_RESET_TIME, true);
1124     + retval = -EINVAL;
1125     + goto fail;
1126     + }
1127     +
1128     if (udev->descriptor.bMaxPacketSize0 == 0xff ||
1129     udev->speed == USB_SPEED_SUPER)
1130     i = 512;
1131     diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
1132     index b3bdfed..aed3e07 100644
1133     --- a/drivers/usb/core/message.c
1134     +++ b/drivers/usb/core/message.c
1135     @@ -308,7 +308,8 @@ static void sg_complete(struct urb *urb)
1136     retval = usb_unlink_urb(io->urbs [i]);
1137     if (retval != -EINPROGRESS &&
1138     retval != -ENODEV &&
1139     - retval != -EBUSY)
1140     + retval != -EBUSY &&
1141     + retval != -EIDRM)
1142     dev_err(&io->dev->dev,
1143     "%s, unlink --> %d\n",
1144     __func__, retval);
1145     @@ -317,7 +318,6 @@ static void sg_complete(struct urb *urb)
1146     }
1147     spin_lock(&io->lock);
1148     }
1149     - urb->dev = NULL;
1150    
1151     /* on the last completion, signal usb_sg_wait() */
1152     io->bytes += urb->actual_length;
1153     @@ -524,7 +524,6 @@ void usb_sg_wait(struct usb_sg_request *io)
1154     case -ENXIO: /* hc didn't queue this one */
1155     case -EAGAIN:
1156     case -ENOMEM:
1157     - io->urbs[i]->dev = NULL;
1158     retval = 0;
1159     yield();
1160     break;
1161     @@ -542,7 +541,6 @@ void usb_sg_wait(struct usb_sg_request *io)
1162    
1163     /* fail any uncompleted urbs */
1164     default:
1165     - io->urbs[i]->dev = NULL;
1166     io->urbs[i]->status = retval;
1167     dev_dbg(&io->dev->dev, "%s, submit --> %d\n",
1168     __func__, retval);
1169     @@ -593,7 +591,10 @@ void usb_sg_cancel(struct usb_sg_request *io)
1170     if (!io->urbs [i]->dev)
1171     continue;
1172     retval = usb_unlink_urb(io->urbs [i]);
1173     - if (retval != -EINPROGRESS && retval != -EBUSY)
1174     + if (retval != -EINPROGRESS
1175     + && retval != -ENODEV
1176     + && retval != -EBUSY
1177     + && retval != -EIDRM)
1178     dev_warn(&io->dev->dev, "%s, unlink --> %d\n",
1179     __func__, retval);
1180     }
1181     diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c
1182     index 5048a0c..e7fb1a3 100644
1183     --- a/drivers/usb/gadget/pch_udc.c
1184     +++ b/drivers/usb/gadget/pch_udc.c
1185     @@ -311,6 +311,7 @@ struct pch_udc_ep {
1186     * @registered: driver regsitered with system
1187     * @suspended: driver in suspended state
1188     * @connected: gadget driver associated
1189     + * @vbus_session: required vbus_session state
1190     * @set_cfg_not_acked: pending acknowledgement 4 setup
1191     * @waiting_zlp_ack: pending acknowledgement 4 ZLP
1192     * @data_requests: DMA pool for data requests
1193     @@ -337,6 +338,7 @@ struct pch_udc_dev {
1194     registered:1,
1195     suspended:1,
1196     connected:1,
1197     + vbus_session:1,
1198     set_cfg_not_acked:1,
1199     waiting_zlp_ack:1;
1200     struct pci_pool *data_requests;
1201     @@ -554,6 +556,29 @@ static void pch_udc_clear_disconnect(struct pch_udc_dev *dev)
1202     }
1203    
1204     /**
1205     + * pch_udc_reconnect() - This API initializes usb device controller,
1206     + * and clear the disconnect status.
1207     + * @dev: Reference to pch_udc_regs structure
1208     + */
1209     +static void pch_udc_init(struct pch_udc_dev *dev);
1210     +static void pch_udc_reconnect(struct pch_udc_dev *dev)
1211     +{
1212     + pch_udc_init(dev);
1213     +
1214     + /* enable device interrupts */
1215     + /* pch_udc_enable_interrupts() */
1216     + pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR,
1217     + UDC_DEVINT_UR | UDC_DEVINT_ENUM);
1218     +
1219     + /* Clear the disconnect */
1220     + pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
1221     + pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
1222     + mdelay(1);
1223     + /* Resume USB signalling */
1224     + pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
1225     +}
1226     +
1227     +/**
1228     * pch_udc_vbus_session() - set or clearr the disconnect status.
1229     * @dev: Reference to pch_udc_regs structure
1230     * @is_active: Parameter specifying the action
1231     @@ -563,10 +588,18 @@ static void pch_udc_clear_disconnect(struct pch_udc_dev *dev)
1232     static inline void pch_udc_vbus_session(struct pch_udc_dev *dev,
1233     int is_active)
1234     {
1235     - if (is_active)
1236     - pch_udc_clear_disconnect(dev);
1237     - else
1238     + if (is_active) {
1239     + pch_udc_reconnect(dev);
1240     + dev->vbus_session = 1;
1241     + } else {
1242     + if (dev->driver && dev->driver->disconnect) {
1243     + spin_unlock(&dev->lock);
1244     + dev->driver->disconnect(&dev->gadget);
1245     + spin_lock(&dev->lock);
1246     + }
1247     pch_udc_set_disconnect(dev);
1248     + dev->vbus_session = 0;
1249     + }
1250     }
1251    
1252     /**
1253     @@ -1126,7 +1159,17 @@ static int pch_udc_pcd_pullup(struct usb_gadget *gadget, int is_on)
1254     if (!gadget)
1255     return -EINVAL;
1256     dev = container_of(gadget, struct pch_udc_dev, gadget);
1257     - pch_udc_vbus_session(dev, is_on);
1258     + if (is_on) {
1259     + pch_udc_reconnect(dev);
1260     + } else {
1261     + if (dev->driver && dev->driver->disconnect) {
1262     + spin_unlock(&dev->lock);
1263     + dev->driver->disconnect(&dev->gadget);
1264     + spin_lock(&dev->lock);
1265     + }
1266     + pch_udc_set_disconnect(dev);
1267     + }
1268     +
1269     return 0;
1270     }
1271    
1272     @@ -2335,8 +2378,11 @@ static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev)
1273     /* Complete request queue */
1274     empty_req_queue(ep);
1275     }
1276     - if (dev->driver && dev->driver->disconnect)
1277     + if (dev->driver && dev->driver->disconnect) {
1278     + spin_unlock(&dev->lock);
1279     dev->driver->disconnect(&dev->gadget);
1280     + spin_lock(&dev->lock);
1281     + }
1282     }
1283    
1284     /**
1285     @@ -2371,6 +2417,11 @@ static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev)
1286     pch_udc_set_dma(dev, DMA_DIR_TX);
1287     pch_udc_set_dma(dev, DMA_DIR_RX);
1288     pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX]));
1289     +
1290     + /* enable device interrupts */
1291     + pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
1292     + UDC_DEVINT_ES | UDC_DEVINT_ENUM |
1293     + UDC_DEVINT_SI | UDC_DEVINT_SC);
1294     }
1295    
1296     /**
1297     @@ -2472,8 +2523,24 @@ static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr)
1298     if (dev_intr & UDC_DEVINT_SC)
1299     pch_udc_svc_cfg_interrupt(dev);
1300     /* USB Suspend interrupt */
1301     - if (dev_intr & UDC_DEVINT_US)
1302     + if (dev_intr & UDC_DEVINT_US) {
1303     + if (dev->driver
1304     + && dev->driver->suspend) {
1305     + spin_unlock(&dev->lock);
1306     + dev->driver->suspend(&dev->gadget);
1307     + spin_lock(&dev->lock);
1308     + }
1309     +
1310     + if (dev->vbus_session == 0) {
1311     + if (dev->driver && dev->driver->disconnect) {
1312     + spin_unlock(&dev->lock);
1313     + dev->driver->disconnect(&dev->gadget);
1314     + spin_lock(&dev->lock);
1315     + }
1316     + pch_udc_reconnect(dev);
1317     + }
1318     dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n");
1319     + }
1320     /* Clear the SOF interrupt, if enabled */
1321     if (dev_intr & UDC_DEVINT_SOF)
1322     dev_dbg(&dev->pdev->dev, "SOF\n");
1323     @@ -2499,6 +2566,14 @@ static irqreturn_t pch_udc_isr(int irq, void *pdev)
1324     dev_intr = pch_udc_read_device_interrupts(dev);
1325     ep_intr = pch_udc_read_ep_interrupts(dev);
1326    
1327     + /* For a hot plug, this find that the controller is hung up. */
1328     + if (dev_intr == ep_intr)
1329     + if (dev_intr == pch_udc_readl(dev, UDC_DEVCFG_ADDR)) {
1330     + dev_dbg(&dev->pdev->dev, "UDC: Hung up\n");
1331     + /* The controller is reset */
1332     + pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1333     + return IRQ_HANDLED;
1334     + }
1335     if (dev_intr)
1336     /* Clear device interrupts */
1337     pch_udc_write_device_interrupts(dev, dev_intr);
1338     @@ -2912,8 +2987,10 @@ static int pch_udc_probe(struct pci_dev *pdev,
1339     }
1340     pch_udc = dev;
1341     /* initialize the hardware */
1342     - if (pch_udc_pcd_init(dev))
1343     + if (pch_udc_pcd_init(dev)) {
1344     + retval = -ENODEV;
1345     goto finished;
1346     + }
1347     if (request_irq(pdev->irq, pch_udc_isr, IRQF_SHARED, KBUILD_MODNAME,
1348     dev)) {
1349     dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__,
1350     diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
1351     index 7732d69..2afff88 100644
1352     --- a/drivers/usb/host/pci-quirks.c
1353     +++ b/drivers/usb/host/pci-quirks.c
1354     @@ -825,9 +825,13 @@ static void __devinit quirk_usb_handoff_xhci(struct pci_dev *pdev)
1355     }
1356     }
1357    
1358     - /* Disable any BIOS SMIs */
1359     - writel(XHCI_LEGACY_DISABLE_SMI,
1360     - base + ext_cap_offset + XHCI_LEGACY_CONTROL_OFFSET);
1361     + val = readl(base + ext_cap_offset + XHCI_LEGACY_CONTROL_OFFSET);
1362     + /* Mask off (turn off) any enabled SMIs */
1363     + val &= XHCI_LEGACY_DISABLE_SMI;
1364     + /* Mask all SMI events bits, RW1C */
1365     + val |= XHCI_LEGACY_SMI_EVENTS;
1366     + /* Disable any BIOS SMIs and clear all SMI events*/
1367     + writel(val, base + ext_cap_offset + XHCI_LEGACY_CONTROL_OFFSET);
1368    
1369     if (usb_is_intel_switchable_xhci(pdev))
1370     usb_enable_xhci_ports(pdev);
1371     diff --git a/drivers/usb/host/xhci-ext-caps.h b/drivers/usb/host/xhci-ext-caps.h
1372     index c7f3312..377f424 100644
1373     --- a/drivers/usb/host/xhci-ext-caps.h
1374     +++ b/drivers/usb/host/xhci-ext-caps.h
1375     @@ -62,8 +62,9 @@
1376     /* USB Legacy Support Control and Status Register - section 7.1.2 */
1377     /* Add this offset, plus the value of xECP in HCCPARAMS to the base address */
1378     #define XHCI_LEGACY_CONTROL_OFFSET (0x04)
1379     -/* bits 1:2, 5:12, and 17:19 need to be preserved; bits 21:28 should be zero */
1380     -#define XHCI_LEGACY_DISABLE_SMI ((0x3 << 1) + (0xff << 5) + (0x7 << 17))
1381     +/* bits 1:3, 5:12, and 17:19 need to be preserved; bits 21:28 should be zero */
1382     +#define XHCI_LEGACY_DISABLE_SMI ((0x7 << 1) + (0xff << 5) + (0x7 << 17))
1383     +#define XHCI_LEGACY_SMI_EVENTS (0x7 << 29)
1384    
1385     /* USB 2.0 xHCI 0.96 L1C capability - section 7.2.2.1.3.2 */
1386     #define XHCI_L1C (1 << 16)
1387     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
1388     index c69cf54..01c3800 100644
1389     --- a/drivers/usb/host/xhci-mem.c
1390     +++ b/drivers/usb/host/xhci-mem.c
1391     @@ -1704,11 +1704,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1392     int i;
1393    
1394     /* Free the Event Ring Segment Table and the actual Event Ring */
1395     - if (xhci->ir_set) {
1396     - xhci_writel(xhci, 0, &xhci->ir_set->erst_size);
1397     - xhci_write_64(xhci, 0, &xhci->ir_set->erst_base);
1398     - xhci_write_64(xhci, 0, &xhci->ir_set->erst_dequeue);
1399     - }
1400     size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries);
1401     if (xhci->erst.entries)
1402     dma_free_coherent(&pdev->dev, size,
1403     @@ -1720,7 +1715,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1404     xhci->event_ring = NULL;
1405     xhci_dbg(xhci, "Freed event ring\n");
1406    
1407     - xhci_write_64(xhci, 0, &xhci->op_regs->cmd_ring);
1408     if (xhci->cmd_ring)
1409     xhci_ring_free(xhci, xhci->cmd_ring);
1410     xhci->cmd_ring = NULL;
1411     @@ -1749,7 +1743,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1412     xhci->medium_streams_pool = NULL;
1413     xhci_dbg(xhci, "Freed medium stream array pool\n");
1414    
1415     - xhci_write_64(xhci, 0, &xhci->op_regs->dcbaa_ptr);
1416     if (xhci->dcbaa)
1417     dma_free_coherent(&pdev->dev, sizeof(*xhci->dcbaa),
1418     xhci->dcbaa, xhci->dcbaa->dma);
1419     @@ -2358,6 +2351,8 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
1420    
1421     fail:
1422     xhci_warn(xhci, "Couldn't initialize memory\n");
1423     + xhci_halt(xhci);
1424     + xhci_reset(xhci);
1425     xhci_mem_cleanup(xhci);
1426     return -ENOMEM;
1427     }
1428     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1429     index ef98b38..211296a 100644
1430     --- a/drivers/usb/host/xhci-pci.c
1431     +++ b/drivers/usb/host/xhci-pci.c
1432     @@ -95,6 +95,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
1433     xhci->quirks |= XHCI_RESET_ON_RESUME;
1434     xhci_dbg(xhci, "QUIRK: Resetting on resume\n");
1435     }
1436     + if (pdev->vendor == PCI_VENDOR_ID_VIA)
1437     + xhci->quirks |= XHCI_RESET_ON_RESUME;
1438     }
1439    
1440     /* called during probe() after chip reset completes */
1441     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1442     index ae92dc4..43b3447 100644
1443     --- a/drivers/usb/host/xhci-ring.c
1444     +++ b/drivers/usb/host/xhci-ring.c
1445     @@ -2343,7 +2343,7 @@ hw_died:
1446     u32 irq_pending;
1447     /* Acknowledge the PCI interrupt */
1448     irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending);
1449     - irq_pending |= 0x3;
1450     + irq_pending |= IMAN_IP;
1451     xhci_writel(xhci, irq_pending, &xhci->ir_set->irq_pending);
1452     }
1453    
1454     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
1455     index 034f554..4c00606 100644
1456     --- a/drivers/usb/host/xhci.c
1457     +++ b/drivers/usb/host/xhci.c
1458     @@ -664,11 +664,11 @@ static void xhci_save_registers(struct xhci_hcd *xhci)
1459     xhci->s3.dev_nt = xhci_readl(xhci, &xhci->op_regs->dev_notification);
1460     xhci->s3.dcbaa_ptr = xhci_read_64(xhci, &xhci->op_regs->dcbaa_ptr);
1461     xhci->s3.config_reg = xhci_readl(xhci, &xhci->op_regs->config_reg);
1462     - xhci->s3.irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending);
1463     - xhci->s3.irq_control = xhci_readl(xhci, &xhci->ir_set->irq_control);
1464     xhci->s3.erst_size = xhci_readl(xhci, &xhci->ir_set->erst_size);
1465     xhci->s3.erst_base = xhci_read_64(xhci, &xhci->ir_set->erst_base);
1466     xhci->s3.erst_dequeue = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue);
1467     + xhci->s3.irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending);
1468     + xhci->s3.irq_control = xhci_readl(xhci, &xhci->ir_set->irq_control);
1469     }
1470    
1471     static void xhci_restore_registers(struct xhci_hcd *xhci)
1472     @@ -677,10 +677,11 @@ static void xhci_restore_registers(struct xhci_hcd *xhci)
1473     xhci_writel(xhci, xhci->s3.dev_nt, &xhci->op_regs->dev_notification);
1474     xhci_write_64(xhci, xhci->s3.dcbaa_ptr, &xhci->op_regs->dcbaa_ptr);
1475     xhci_writel(xhci, xhci->s3.config_reg, &xhci->op_regs->config_reg);
1476     - xhci_writel(xhci, xhci->s3.irq_pending, &xhci->ir_set->irq_pending);
1477     - xhci_writel(xhci, xhci->s3.irq_control, &xhci->ir_set->irq_control);
1478     xhci_writel(xhci, xhci->s3.erst_size, &xhci->ir_set->erst_size);
1479     xhci_write_64(xhci, xhci->s3.erst_base, &xhci->ir_set->erst_base);
1480     + xhci_write_64(xhci, xhci->s3.erst_dequeue, &xhci->ir_set->erst_dequeue);
1481     + xhci_writel(xhci, xhci->s3.irq_pending, &xhci->ir_set->irq_pending);
1482     + xhci_writel(xhci, xhci->s3.irq_control, &xhci->ir_set->irq_control);
1483     }
1484    
1485     static void xhci_set_cmd_ring_deq(struct xhci_hcd *xhci)
1486     diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
1487     index 09eda3a..4850c4d 100644
1488     --- a/drivers/usb/host/xhci.h
1489     +++ b/drivers/usb/host/xhci.h
1490     @@ -205,6 +205,10 @@ struct xhci_op_regs {
1491     #define CMD_PM_INDEX (1 << 11)
1492     /* bits 12:31 are reserved (and should be preserved on writes). */
1493    
1494     +/* IMAN - Interrupt Management Register */
1495     +#define IMAN_IP (1 << 1)
1496     +#define IMAN_IE (1 << 0)
1497     +
1498     /* USBSTS - USB status - status bitmasks */
1499     /* HC not running - set to 1 when run/stop bit is cleared. */
1500     #define STS_HALT XHCI_STS_HALT
1501     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1502     index f2c9ef7..c4cf3f3 100644
1503     --- a/drivers/usb/serial/ftdi_sio.c
1504     +++ b/drivers/usb/serial/ftdi_sio.c
1505     @@ -75,7 +75,8 @@ struct ftdi_private {
1506     unsigned long last_dtr_rts; /* saved modem control outputs */
1507     struct async_icount icount;
1508     wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */
1509     - char prev_status, diff_status; /* Used for TIOCMIWAIT */
1510     + char prev_status; /* Used for TIOCMIWAIT */
1511     + bool dev_gone; /* Used to abort TIOCMIWAIT */
1512     char transmit_empty; /* If transmitter is empty or not */
1513     struct usb_serial_port *port;
1514     __u16 interface; /* FT2232C, FT2232H or FT4232H port interface
1515     @@ -1679,6 +1680,7 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)
1516     init_waitqueue_head(&priv->delta_msr_wait);
1517    
1518     priv->flags = ASYNC_LOW_LATENCY;
1519     + priv->dev_gone = false;
1520    
1521     if (quirk && quirk->port_probe)
1522     quirk->port_probe(priv);
1523     @@ -1836,6 +1838,9 @@ static int ftdi_sio_port_remove(struct usb_serial_port *port)
1524    
1525     dbg("%s", __func__);
1526    
1527     + priv->dev_gone = true;
1528     + wake_up_interruptible_all(&priv->delta_msr_wait);
1529     +
1530     remove_sysfs_attrs(port);
1531    
1532     kref_put(&priv->kref, ftdi_sio_priv_release);
1533     @@ -1979,17 +1984,19 @@ static int ftdi_process_packet(struct tty_struct *tty,
1534     N.B. packet may be processed more than once, but differences
1535     are only processed once. */
1536     status = packet[0] & FTDI_STATUS_B0_MASK;
1537     - if (status & FTDI_RS0_CTS)
1538     - priv->icount.cts++;
1539     - if (status & FTDI_RS0_DSR)
1540     - priv->icount.dsr++;
1541     - if (status & FTDI_RS0_RI)
1542     - priv->icount.rng++;
1543     - if (status & FTDI_RS0_RLSD)
1544     - priv->icount.dcd++;
1545     if (status != priv->prev_status) {
1546     - priv->diff_status |= status ^ priv->prev_status;
1547     - wake_up_interruptible(&priv->delta_msr_wait);
1548     + char diff_status = status ^ priv->prev_status;
1549     +
1550     + if (diff_status & FTDI_RS0_CTS)
1551     + priv->icount.cts++;
1552     + if (diff_status & FTDI_RS0_DSR)
1553     + priv->icount.dsr++;
1554     + if (diff_status & FTDI_RS0_RI)
1555     + priv->icount.rng++;
1556     + if (diff_status & FTDI_RS0_RLSD)
1557     + priv->icount.dcd++;
1558     +
1559     + wake_up_interruptible_all(&priv->delta_msr_wait);
1560     priv->prev_status = status;
1561     }
1562    
1563     @@ -2388,15 +2395,12 @@ static int ftdi_ioctl(struct tty_struct *tty,
1564     */
1565     case TIOCMIWAIT:
1566     cprev = priv->icount;
1567     - while (1) {
1568     + while (!priv->dev_gone) {
1569     interruptible_sleep_on(&priv->delta_msr_wait);
1570     /* see if a signal did it */
1571     if (signal_pending(current))
1572     return -ERESTARTSYS;
1573     cnow = priv->icount;
1574     - if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr &&
1575     - cnow.dcd == cprev.dcd && cnow.cts == cprev.cts)
1576     - return -EIO; /* no change => error */
1577     if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
1578     ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
1579     ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) ||
1580     @@ -2405,7 +2409,7 @@ static int ftdi_ioctl(struct tty_struct *tty,
1581     }
1582     cprev = cnow;
1583     }
1584     - /* not reached */
1585     + return -EIO;
1586     break;
1587     case TIOCSERGETLSR:
1588     return get_lsr_info(port, (struct serial_struct __user *)arg);
1589     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1590     index 54898c9..cbe3451 100644
1591     --- a/drivers/usb/serial/option.c
1592     +++ b/drivers/usb/serial/option.c
1593     @@ -708,6 +708,7 @@ static const struct usb_device_id option_ids[] = {
1594     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) },
1595     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) },
1596     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) },
1597     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED) },
1598     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED3) },
1599     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED4) },
1600     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED5) },
1601     diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
1602     index fc2d66f..5532ea5 100644
1603     --- a/drivers/usb/serial/pl2303.c
1604     +++ b/drivers/usb/serial/pl2303.c
1605     @@ -421,7 +421,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
1606     control = priv->line_control;
1607     if ((cflag & CBAUD) == B0)
1608     priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
1609     - else
1610     + else if ((old_termios->c_cflag & CBAUD) == B0)
1611     priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
1612     if (control != priv->line_control) {
1613     control = priv->line_control;
1614     diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
1615     index b18179b..7c3ec9e 100644
1616     --- a/drivers/usb/serial/sierra.c
1617     +++ b/drivers/usb/serial/sierra.c
1618     @@ -289,6 +289,7 @@ static const struct usb_device_id id_table[] = {
1619     { USB_DEVICE(0x1199, 0x6856) }, /* Sierra Wireless AirCard 881 U */
1620     { USB_DEVICE(0x1199, 0x6859) }, /* Sierra Wireless AirCard 885 E */
1621     { USB_DEVICE(0x1199, 0x685A) }, /* Sierra Wireless AirCard 885 E */
1622     + { USB_DEVICE(0x1199, 0x68A2) }, /* Sierra Wireless MC7710 */
1623     /* Sierra Wireless C885 */
1624     { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6880, 0xFF, 0xFF, 0xFF)},
1625     /* Sierra Wireless C888, Air Card 501, USB 303, USB 304 */
1626     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
1627     index cc274fd..38d7ebd 100644
1628     --- a/drivers/usb/serial/usb-serial.c
1629     +++ b/drivers/usb/serial/usb-serial.c
1630     @@ -1059,6 +1059,12 @@ int usb_serial_probe(struct usb_interface *interface,
1631     serial->attached = 1;
1632     }
1633    
1634     + /* Avoid race with tty_open and serial_install by setting the
1635     + * disconnected flag and not clearing it until all ports have been
1636     + * registered.
1637     + */
1638     + serial->disconnected = 1;
1639     +
1640     if (get_free_serial(serial, num_ports, &minor) == NULL) {
1641     dev_err(&interface->dev, "No more free serial devices\n");
1642     goto probe_error;
1643     @@ -1083,6 +1089,8 @@ int usb_serial_probe(struct usb_interface *interface,
1644     }
1645     }
1646    
1647     + serial->disconnected = 0;
1648     +
1649     usb_serial_console_init(debug, minor);
1650    
1651     exit:
1652     diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c
1653     index 7f8472c..8813588 100644
1654     --- a/drivers/video/uvesafb.c
1655     +++ b/drivers/video/uvesafb.c
1656     @@ -815,8 +815,15 @@ static int __devinit uvesafb_vbe_init(struct fb_info *info)
1657     par->pmi_setpal = pmi_setpal;
1658     par->ypan = ypan;
1659    
1660     - if (par->pmi_setpal || par->ypan)
1661     - uvesafb_vbe_getpmi(task, par);
1662     + if (par->pmi_setpal || par->ypan) {
1663     + if (__supported_pte_mask & _PAGE_NX) {
1664     + par->pmi_setpal = par->ypan = 0;
1665     + printk(KERN_WARNING "uvesafb: NX protection is actively."
1666     + "We have better not to use the PMI.\n");
1667     + } else {
1668     + uvesafb_vbe_getpmi(task, par);
1669     + }
1670     + }
1671     #else
1672     /* The protected mode interface is not available on non-x86. */
1673     par->pmi_setpal = par->ypan = 0;
1674     diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
1675     index dbae4d9..7b1cd5c 100644
1676     --- a/fs/ext4/ext4.h
1677     +++ b/fs/ext4/ext4.h
1678     @@ -1185,9 +1185,6 @@ struct ext4_sb_info {
1679     unsigned long s_ext_blocks;
1680     unsigned long s_ext_extents;
1681     #endif
1682     - /* ext4 extent cache stats */
1683     - unsigned long extent_cache_hits;
1684     - unsigned long extent_cache_misses;
1685    
1686     /* for buddy allocator */
1687     struct ext4_group_info ***s_group_info;
1688     diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
1689     index 7507036..c2a2012 100644
1690     --- a/fs/ext4/extents.c
1691     +++ b/fs/ext4/extents.c
1692     @@ -2052,10 +2052,6 @@ static int ext4_ext_check_cache(struct inode *inode, ext4_lblk_t block,
1693     ret = 1;
1694     }
1695     errout:
1696     - if (!ret)
1697     - sbi->extent_cache_misses++;
1698     - else
1699     - sbi->extent_cache_hits++;
1700     trace_ext4_ext_in_cache(inode, block, ret);
1701     spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);
1702     return ret;
1703     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
1704     index 9281dbe..961059b 100644
1705     --- a/fs/ext4/super.c
1706     +++ b/fs/ext4/super.c
1707     @@ -2504,18 +2504,6 @@ static ssize_t lifetime_write_kbytes_show(struct ext4_attr *a,
1708     EXT4_SB(sb)->s_sectors_written_start) >> 1)));
1709     }
1710    
1711     -static ssize_t extent_cache_hits_show(struct ext4_attr *a,
1712     - struct ext4_sb_info *sbi, char *buf)
1713     -{
1714     - return snprintf(buf, PAGE_SIZE, "%lu\n", sbi->extent_cache_hits);
1715     -}
1716     -
1717     -static ssize_t extent_cache_misses_show(struct ext4_attr *a,
1718     - struct ext4_sb_info *sbi, char *buf)
1719     -{
1720     - return snprintf(buf, PAGE_SIZE, "%lu\n", sbi->extent_cache_misses);
1721     -}
1722     -
1723     static ssize_t inode_readahead_blks_store(struct ext4_attr *a,
1724     struct ext4_sb_info *sbi,
1725     const char *buf, size_t count)
1726     @@ -2573,8 +2561,6 @@ static struct ext4_attr ext4_attr_##name = __ATTR(name, mode, show, store)
1727     EXT4_RO_ATTR(delayed_allocation_blocks);
1728     EXT4_RO_ATTR(session_write_kbytes);
1729     EXT4_RO_ATTR(lifetime_write_kbytes);
1730     -EXT4_RO_ATTR(extent_cache_hits);
1731     -EXT4_RO_ATTR(extent_cache_misses);
1732     EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show,
1733     inode_readahead_blks_store, s_inode_readahead_blks);
1734     EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal);
1735     @@ -2590,8 +2576,6 @@ static struct attribute *ext4_attrs[] = {
1736     ATTR_LIST(delayed_allocation_blocks),
1737     ATTR_LIST(session_write_kbytes),
1738     ATTR_LIST(lifetime_write_kbytes),
1739     - ATTR_LIST(extent_cache_hits),
1740     - ATTR_LIST(extent_cache_misses),
1741     ATTR_LIST(inode_readahead_blks),
1742     ATTR_LIST(inode_goal),
1743     ATTR_LIST(mb_stats),
1744     diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
1745     index aaf79af..a7e13bf 100644
1746     --- a/include/net/bluetooth/hci.h
1747     +++ b/include/net/bluetooth/hci.h
1748     @@ -84,6 +84,7 @@ enum {
1749     HCI_SERVICE_CACHE,
1750     HCI_LINK_KEYS,
1751     HCI_DEBUG_KEYS,
1752     + HCI_UNREGISTER,
1753    
1754     HCI_RESET,
1755     };
1756     diff --git a/kernel/futex.c b/kernel/futex.c
1757     index 0677023..866c9d5 100644
1758     --- a/kernel/futex.c
1759     +++ b/kernel/futex.c
1760     @@ -59,6 +59,7 @@
1761     #include <linux/magic.h>
1762     #include <linux/pid.h>
1763     #include <linux/nsproxy.h>
1764     +#include <linux/ptrace.h>
1765    
1766     #include <asm/futex.h>
1767    
1768     @@ -2443,40 +2444,29 @@ SYSCALL_DEFINE3(get_robust_list, int, pid,
1769     {
1770     struct robust_list_head __user *head;
1771     unsigned long ret;
1772     - const struct cred *cred = current_cred(), *pcred;
1773     + struct task_struct *p;
1774    
1775     if (!futex_cmpxchg_enabled)
1776     return -ENOSYS;
1777    
1778     + rcu_read_lock();
1779     +
1780     + ret = -ESRCH;
1781     if (!pid)
1782     - head = current->robust_list;
1783     + p = current;
1784     else {
1785     - struct task_struct *p;
1786     -
1787     - ret = -ESRCH;
1788     - rcu_read_lock();
1789     p = find_task_by_vpid(pid);
1790     if (!p)
1791     goto err_unlock;
1792     - ret = -EPERM;
1793     - pcred = __task_cred(p);
1794     - /* If victim is in different user_ns, then uids are not
1795     - comparable, so we must have CAP_SYS_PTRACE */
1796     - if (cred->user->user_ns != pcred->user->user_ns) {
1797     - if (!ns_capable(pcred->user->user_ns, CAP_SYS_PTRACE))
1798     - goto err_unlock;
1799     - goto ok;
1800     - }
1801     - /* If victim is in same user_ns, then uids are comparable */
1802     - if (cred->euid != pcred->euid &&
1803     - cred->euid != pcred->uid &&
1804     - !ns_capable(pcred->user->user_ns, CAP_SYS_PTRACE))
1805     - goto err_unlock;
1806     -ok:
1807     - head = p->robust_list;
1808     - rcu_read_unlock();
1809     }
1810    
1811     + ret = -EPERM;
1812     + if (!ptrace_may_access(p, PTRACE_MODE_READ))
1813     + goto err_unlock;
1814     +
1815     + head = p->robust_list;
1816     + rcu_read_unlock();
1817     +
1818     if (put_user(sizeof(*head), len_ptr))
1819     return -EFAULT;
1820     return put_user(head, head_ptr);
1821     diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c
1822     index 5f9e689..a9642d5 100644
1823     --- a/kernel/futex_compat.c
1824     +++ b/kernel/futex_compat.c
1825     @@ -10,6 +10,7 @@
1826     #include <linux/compat.h>
1827     #include <linux/nsproxy.h>
1828     #include <linux/futex.h>
1829     +#include <linux/ptrace.h>
1830    
1831     #include <asm/uaccess.h>
1832    
1833     @@ -136,40 +137,29 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
1834     {
1835     struct compat_robust_list_head __user *head;
1836     unsigned long ret;
1837     - const struct cred *cred = current_cred(), *pcred;
1838     + struct task_struct *p;
1839    
1840     if (!futex_cmpxchg_enabled)
1841     return -ENOSYS;
1842    
1843     + rcu_read_lock();
1844     +
1845     + ret = -ESRCH;
1846     if (!pid)
1847     - head = current->compat_robust_list;
1848     + p = current;
1849     else {
1850     - struct task_struct *p;
1851     -
1852     - ret = -ESRCH;
1853     - rcu_read_lock();
1854     p = find_task_by_vpid(pid);
1855     if (!p)
1856     goto err_unlock;
1857     - ret = -EPERM;
1858     - pcred = __task_cred(p);
1859     - /* If victim is in different user_ns, then uids are not
1860     - comparable, so we must have CAP_SYS_PTRACE */
1861     - if (cred->user->user_ns != pcred->user->user_ns) {
1862     - if (!ns_capable(pcred->user->user_ns, CAP_SYS_PTRACE))
1863     - goto err_unlock;
1864     - goto ok;
1865     - }
1866     - /* If victim is in same user_ns, then uids are comparable */
1867     - if (cred->euid != pcred->euid &&
1868     - cred->euid != pcred->uid &&
1869     - !ns_capable(pcred->user->user_ns, CAP_SYS_PTRACE))
1870     - goto err_unlock;
1871     -ok:
1872     - head = p->compat_robust_list;
1873     - rcu_read_unlock();
1874     }
1875    
1876     + ret = -EPERM;
1877     + if (!ptrace_may_access(p, PTRACE_MODE_READ))
1878     + goto err_unlock;
1879     +
1880     + head = p->compat_robust_list;
1881     + rcu_read_unlock();
1882     +
1883     if (put_user(sizeof(*head), len_ptr))
1884     return -EFAULT;
1885     return put_user(ptr_to_compat(head), head_ptr);
1886     diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
1887     index 4042064..c923640 100644
1888     --- a/kernel/time/tick-sched.c
1889     +++ b/kernel/time/tick-sched.c
1890     @@ -508,9 +508,9 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now)
1891     hrtimer_get_expires(&ts->sched_timer), 0))
1892     break;
1893     }
1894     - /* Update jiffies and reread time */
1895     - tick_do_update_jiffies64(now);
1896     + /* Reread time and update jiffies */
1897     now = ktime_get();
1898     + tick_do_update_jiffies64(now);
1899     }
1900     }
1901    
1902     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1903     index 2316840..bd936ed 100644
1904     --- a/mm/hugetlb.c
1905     +++ b/mm/hugetlb.c
1906     @@ -2686,6 +2686,7 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
1907     * so no worry about deadlock.
1908     */
1909     page = pte_page(entry);
1910     + get_page(page);
1911     if (page != pagecache_page)
1912     lock_page(page);
1913    
1914     @@ -2717,6 +2718,7 @@ out_page_table_lock:
1915     }
1916     if (page != pagecache_page)
1917     unlock_page(page);
1918     + put_page(page);
1919    
1920     out_mutex:
1921     mutex_unlock(&hugetlb_instantiation_mutex);
1922     diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
1923     index b84458d..857dc88 100644
1924     --- a/net/bluetooth/hci_core.c
1925     +++ b/net/bluetooth/hci_core.c
1926     @@ -510,6 +510,11 @@ int hci_dev_open(__u16 dev)
1927    
1928     hci_req_lock(hdev);
1929    
1930     + if (test_bit(HCI_UNREGISTER, &hdev->flags)) {
1931     + ret = -ENODEV;
1932     + goto done;
1933     + }
1934     +
1935     if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
1936     ret = -ERFKILL;
1937     goto done;
1938     @@ -1540,6 +1545,8 @@ int hci_unregister_dev(struct hci_dev *hdev)
1939    
1940     BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
1941    
1942     + set_bit(HCI_UNREGISTER, &hdev->flags);
1943     +
1944     write_lock_bh(&hci_dev_list_lock);
1945     list_del(&hdev->list);
1946     write_unlock_bh(&hci_dev_list_lock);
1947     diff --git a/security/commoncap.c b/security/commoncap.c
1948     index ee4f848..12440ee 100644
1949     --- a/security/commoncap.c
1950     +++ b/security/commoncap.c
1951     @@ -28,6 +28,7 @@
1952     #include <linux/prctl.h>
1953     #include <linux/securebits.h>
1954     #include <linux/user_namespace.h>
1955     +#include <linux/personality.h>
1956    
1957     /*
1958     * If a non-root user executes a setuid-root binary in
1959     @@ -514,6 +515,11 @@ int cap_bprm_set_creds(struct linux_binprm *bprm)
1960     }
1961     skip:
1962    
1963     + /* if we have fs caps, clear dangerous personality flags */
1964     + if (!cap_issubset(new->cap_permitted, old->cap_permitted))
1965     + bprm->per_clear |= PER_CLEAR_ON_SETID;
1966     +
1967     +
1968     /* Don't let someone trace a set[ug]id/setpcap binary with the revised
1969     * credentials unless they have the appropriate permit
1970     */
1971     diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
1972     index 216e33a..adb372d 100644
1973     --- a/tools/perf/util/hist.c
1974     +++ b/tools/perf/util/hist.c
1975     @@ -230,6 +230,18 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
1976     if (!cmp) {
1977     he->period += period;
1978     ++he->nr_events;
1979     +
1980     + /* If the map of an existing hist_entry has
1981     + * become out-of-date due to an exec() or
1982     + * similar, update it. Otherwise we will
1983     + * mis-adjust symbol addresses when computing
1984     + * the history counter to increment.
1985     + */
1986     + if (he->ms.map != entry->ms.map) {
1987     + he->ms.map = entry->ms.map;
1988     + if (he->ms.map)
1989     + he->ms.map->referenced = true;
1990     + }
1991     goto out;
1992     }
1993