Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1747 - (show annotations) (download)
Mon Apr 23 16:05:01 2012 UTC (12 years ago) by niro
File size: 67988 byte(s)
-linux 3.2.16
1 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