Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.9/0105-3.9.6-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2210 - (hide annotations) (download)
Fri Jun 14 10:30:22 2013 UTC (10 years, 11 months ago) by niro
File size: 96270 byte(s)
-linux-3.9.6
1 niro 2210 diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
2     index afed28e..27f3604 100644
3     --- a/arch/arm/boot/compressed/Makefile
4     +++ b/arch/arm/boot/compressed/Makefile
5     @@ -121,7 +121,7 @@ KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
6     endif
7    
8     ccflags-y := -fpic -mno-single-pic-base -fno-builtin -I$(obj)
9     -asflags-y := -Wa,-march=all -DZIMAGE
10     +asflags-y := -DZIMAGE
11    
12     # Supply kernel BSS size to the decompressor via a linker symbol.
13     KBSS_SZ = $(shell $(CROSS_COMPILE)size $(obj)/../../../../vmlinux | \
14     diff --git a/arch/arm/boot/compressed/head-sa1100.S b/arch/arm/boot/compressed/head-sa1100.S
15     index 6179d94..3115e31 100644
16     --- a/arch/arm/boot/compressed/head-sa1100.S
17     +++ b/arch/arm/boot/compressed/head-sa1100.S
18     @@ -11,6 +11,7 @@
19     #include <asm/mach-types.h>
20    
21     .section ".start", "ax"
22     + .arch armv4
23    
24     __SA1100_start:
25    
26     diff --git a/arch/arm/boot/compressed/head-shark.S b/arch/arm/boot/compressed/head-shark.S
27     index 089c560..92b5689 100644
28     --- a/arch/arm/boot/compressed/head-shark.S
29     +++ b/arch/arm/boot/compressed/head-shark.S
30     @@ -18,6 +18,7 @@
31    
32     .section ".start", "ax"
33    
34     + .arch armv4
35     b __beginning
36    
37     __ofw_data: .long 0 @ the number of memory blocks
38     diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
39     index fe4d9c3..6938559 100644
40     --- a/arch/arm/boot/compressed/head.S
41     +++ b/arch/arm/boot/compressed/head.S
42     @@ -11,6 +11,7 @@
43     #include <linux/linkage.h>
44     #include <asm/assembler.h>
45    
46     + .arch armv7-a
47     /*
48     * Debugging stuff
49     *
50     diff --git a/arch/arm/include/asm/percpu.h b/arch/arm/include/asm/percpu.h
51     index 968c0a1..209e650 100644
52     --- a/arch/arm/include/asm/percpu.h
53     +++ b/arch/arm/include/asm/percpu.h
54     @@ -30,8 +30,15 @@ static inline void set_my_cpu_offset(unsigned long off)
55     static inline unsigned long __my_cpu_offset(void)
56     {
57     unsigned long off;
58     - /* Read TPIDRPRW */
59     - asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : : "memory");
60     + register unsigned long *sp asm ("sp");
61     +
62     + /*
63     + * Read TPIDRPRW.
64     + * We want to allow caching the value, so avoid using volatile and
65     + * instead use a fake stack read to hazard against barrier().
66     + */
67     + asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : "Q" (*sp));
68     +
69     return off;
70     }
71     #define __my_cpu_offset __my_cpu_offset()
72     diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c
73     index 79282eb..606b9538 100644
74     --- a/arch/arm/kernel/topology.c
75     +++ b/arch/arm/kernel/topology.c
76     @@ -13,6 +13,7 @@
77    
78     #include <linux/cpu.h>
79     #include <linux/cpumask.h>
80     +#include <linux/export.h>
81     #include <linux/init.h>
82     #include <linux/percpu.h>
83     #include <linux/node.h>
84     @@ -200,6 +201,7 @@ static inline void update_cpu_power(unsigned int cpuid, unsigned int mpidr) {}
85     * cpu topology table
86     */
87     struct cputopo_arm cpu_topology[NR_CPUS];
88     +EXPORT_SYMBOL_GPL(cpu_topology);
89    
90     const struct cpumask *cpu_coregroup_mask(int cpu)
91     {
92     diff --git a/arch/arm/mach-kirkwood/board-ts219.c b/arch/arm/mach-kirkwood/board-ts219.c
93     index acb0187..4695d5f 100644
94     --- a/arch/arm/mach-kirkwood/board-ts219.c
95     +++ b/arch/arm/mach-kirkwood/board-ts219.c
96     @@ -41,13 +41,3 @@ void __init qnap_dt_ts219_init(void)
97    
98     pm_power_off = qnap_tsx1x_power_off;
99     }
100     -
101     -/* FIXME: Will not work with DT. Maybe use MPP40_GPIO? */
102     -static int __init ts219_pci_init(void)
103     -{
104     - if (machine_is_ts219())
105     - kirkwood_pcie_init(KW_PCIE0);
106     -
107     - return 0;
108     -}
109     -subsys_initcall(ts219_pci_init);
110     diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h
111     index fb3245e..6e11f78 100644
112     --- a/arch/powerpc/include/asm/cputable.h
113     +++ b/arch/powerpc/include/asm/cputable.h
114     @@ -175,6 +175,7 @@ extern const char *powerpc_base_platform;
115     #define CPU_FTR_BCTAR LONG_ASM_CONST(0x0100000000000000)
116     #define CPU_FTR_HAS_PPR LONG_ASM_CONST(0x0200000000000000)
117     #define CPU_FTR_DAWR LONG_ASM_CONST(0x0400000000000000)
118     +#define CPU_FTR_DABRX LONG_ASM_CONST(0x0800000000000000)
119    
120     #ifndef __ASSEMBLY__
121    
122     @@ -391,19 +392,20 @@ extern const char *powerpc_base_platform;
123     CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_201 | \
124     CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA | \
125     CPU_FTR_CP_USE_DCBTZ | CPU_FTR_STCX_CHECKS_ADDRESS | \
126     - CPU_FTR_HVMODE)
127     + CPU_FTR_HVMODE | CPU_FTR_DABRX)
128     #define CPU_FTRS_POWER5 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
129     CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
130     CPU_FTR_MMCRA | CPU_FTR_SMT | \
131     CPU_FTR_COHERENT_ICACHE | CPU_FTR_PURR | \
132     - CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB)
133     + CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_DABRX)
134     #define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
135     CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
136     CPU_FTR_MMCRA | CPU_FTR_SMT | \
137     CPU_FTR_COHERENT_ICACHE | \
138     CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
139     CPU_FTR_DSCR | CPU_FTR_UNALIGNED_LD_STD | \
140     - CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_CFAR)
141     + CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_CFAR | \
142     + CPU_FTR_DABRX)
143     #define CPU_FTRS_POWER7 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
144     CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\
145     CPU_FTR_MMCRA | CPU_FTR_SMT | \
146     @@ -412,7 +414,7 @@ extern const char *powerpc_base_platform;
147     CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \
148     CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \
149     CPU_FTR_ICSWX | CPU_FTR_CFAR | CPU_FTR_HVMODE | \
150     - CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR)
151     + CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR | CPU_FTR_DABRX)
152     #define CPU_FTRS_POWER8 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
153     CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\
154     CPU_FTR_MMCRA | CPU_FTR_SMT | \
155     @@ -427,14 +429,15 @@ extern const char *powerpc_base_platform;
156     CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
157     CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
158     CPU_FTR_PAUSE_ZERO | CPU_FTR_CELL_TB_BUG | CPU_FTR_CP_USE_DCBTZ | \
159     - CPU_FTR_UNALIGNED_LD_STD)
160     + CPU_FTR_UNALIGNED_LD_STD | CPU_FTR_DABRX)
161     #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
162     CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP | \
163     - CPU_FTR_PURR | CPU_FTR_REAL_LE)
164     + CPU_FTR_PURR | CPU_FTR_REAL_LE | CPU_FTR_DABRX)
165     #define CPU_FTRS_COMPATIBLE (CPU_FTR_USE_TB | CPU_FTR_PPCAS_ARCH_V2)
166    
167     #define CPU_FTRS_A2 (CPU_FTR_USE_TB | CPU_FTR_SMT | CPU_FTR_DBELL | \
168     - CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN | CPU_FTR_ICSWX)
169     + CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN | \
170     + CPU_FTR_ICSWX | CPU_FTR_DABRX )
171    
172     #ifdef __powerpc64__
173     #ifdef CONFIG_PPC_BOOK3E
174     diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
175     index 3d6b410..ccfe2c8 100644
176     --- a/arch/powerpc/include/asm/machdep.h
177     +++ b/arch/powerpc/include/asm/machdep.h
178     @@ -29,6 +29,7 @@ struct rtc_time;
179     struct file;
180     struct pci_controller;
181     struct kimage;
182     +struct pci_host_bridge;
183    
184     struct machdep_calls {
185     char *name;
186     @@ -107,6 +108,8 @@ struct machdep_calls {
187     void (*pcibios_fixup)(void);
188     int (*pci_probe_mode)(struct pci_bus *);
189     void (*pci_irq_fixup)(struct pci_dev *dev);
190     + int (*pcibios_root_bridge_prepare)(struct pci_host_bridge
191     + *bridge);
192    
193     /* To setup PHBs when using automatic OF platform driver for PCI */
194     int (*pci_setup_phb)(struct pci_controller *host);
195     diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
196     index 025a130..bb21f5a 100644
197     --- a/arch/powerpc/include/asm/pci-bridge.h
198     +++ b/arch/powerpc/include/asm/pci-bridge.h
199     @@ -154,6 +154,8 @@ struct pci_dn {
200    
201     int pci_ext_config_space; /* for pci devices */
202    
203     + int force_32bit_msi:1;
204     +
205     struct pci_dev *pcidev; /* back-pointer to the pci device */
206     #ifdef CONFIG_EEH
207     struct eeh_dev *edev; /* eeh device */
208     diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
209     index fa12ae4..9b315e5 100644
210     --- a/arch/powerpc/kernel/pci-common.c
211     +++ b/arch/powerpc/kernel/pci-common.c
212     @@ -30,6 +30,7 @@
213     #include <linux/irq.h>
214     #include <linux/vmalloc.h>
215     #include <linux/slab.h>
216     +#include <linux/vgaarb.h>
217    
218     #include <asm/processor.h>
219     #include <asm/io.h>
220     @@ -844,6 +845,14 @@ int pci_proc_domain(struct pci_bus *bus)
221     return 1;
222     }
223    
224     +int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
225     +{
226     + if (ppc_md.pcibios_root_bridge_prepare)
227     + return ppc_md.pcibios_root_bridge_prepare(bridge);
228     +
229     + return 0;
230     +}
231     +
232     /* This header fixup will do the resource fixup for all devices as they are
233     * probed, but not for bridge ranges
234     */
235     @@ -1725,3 +1734,15 @@ static void fixup_hide_host_resource_fsl(struct pci_dev *dev)
236     }
237     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MOTOROLA, PCI_ANY_ID, fixup_hide_host_resource_fsl);
238     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, fixup_hide_host_resource_fsl);
239     +
240     +static void fixup_vga(struct pci_dev *pdev)
241     +{
242     + u16 cmd;
243     +
244     + pci_read_config_word(pdev, PCI_COMMAND, &cmd);
245     + if ((cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) || !vga_default_device())
246     + vga_set_default_device(pdev);
247     +
248     +}
249     +DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
250     + PCI_CLASS_DISPLAY_VGA, 8, fixup_vga);
251     diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
252     index 16e77a8..9600c36 100644
253     --- a/arch/powerpc/kernel/process.c
254     +++ b/arch/powerpc/kernel/process.c
255     @@ -392,7 +392,8 @@ static inline int __set_dabr(unsigned long dabr, unsigned long dabrx)
256     static inline int __set_dabr(unsigned long dabr, unsigned long dabrx)
257     {
258     mtspr(SPRN_DABR, dabr);
259     - mtspr(SPRN_DABRX, dabrx);
260     + if (cpu_has_feature(CPU_FTR_DABRX))
261     + mtspr(SPRN_DABRX, dabrx);
262     return 0;
263     }
264     #else
265     diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
266     index 1c22b2d..29857c6 100644
267     --- a/arch/powerpc/kernel/traps.c
268     +++ b/arch/powerpc/kernel/traps.c
269     @@ -1151,7 +1151,7 @@ void alignment_exception(struct pt_regs *regs)
270     local_irq_enable();
271    
272     if (tm_abort_check(regs, TM_CAUSE_ALIGNMENT | TM_CAUSE_PERSISTENT))
273     - goto bail;
274     + return;
275    
276     /* we don't implement logging of alignment exceptions */
277     if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS))
278     diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
279     index 65362e9..9d858b0 100644
280     --- a/arch/powerpc/perf/core-book3s.c
281     +++ b/arch/powerpc/perf/core-book3s.c
282     @@ -1528,7 +1528,7 @@ static void perf_event_interrupt(struct pt_regs *regs)
283     }
284     }
285     }
286     - if ((!found) && printk_ratelimit())
287     + if (!found && !nmi && printk_ratelimit())
288     printk(KERN_WARNING "Can't find PMC that caused IRQ\n");
289    
290     /*
291     diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c
292     index 19506f9..b456b15 100644
293     --- a/arch/powerpc/platforms/pseries/eeh_pseries.c
294     +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c
295     @@ -83,7 +83,11 @@ static int pseries_eeh_init(void)
296     ibm_configure_pe = rtas_token("ibm,configure-pe");
297     ibm_configure_bridge = rtas_token("ibm,configure-bridge");
298    
299     - /* necessary sanity check */
300     + /*
301     + * Necessary sanity check. We needn't check "get-config-addr-info"
302     + * and its variant since the old firmware probably support address
303     + * of domain/bus/slot/function for EEH RTAS operations.
304     + */
305     if (ibm_set_eeh_option == RTAS_UNKNOWN_SERVICE) {
306     pr_warning("%s: RTAS service <ibm,set-eeh-option> invalid\n",
307     __func__);
308     @@ -102,12 +106,6 @@ static int pseries_eeh_init(void)
309     pr_warning("%s: RTAS service <ibm,slot-error-detail> invalid\n",
310     __func__);
311     return -EINVAL;
312     - } else if (ibm_get_config_addr_info2 == RTAS_UNKNOWN_SERVICE &&
313     - ibm_get_config_addr_info == RTAS_UNKNOWN_SERVICE) {
314     - pr_warning("%s: RTAS service <ibm,get-config-addr-info2> and "
315     - "<ibm,get-config-addr-info> invalid\n",
316     - __func__);
317     - return -EINVAL;
318     } else if (ibm_configure_pe == RTAS_UNKNOWN_SERVICE &&
319     ibm_configure_bridge == RTAS_UNKNOWN_SERVICE) {
320     pr_warning("%s: RTAS service <ibm,configure-pe> and "
321     diff --git a/arch/powerpc/platforms/pseries/msi.c b/arch/powerpc/platforms/pseries/msi.c
322     index e5b0847..77b18a2 100644
323     --- a/arch/powerpc/platforms/pseries/msi.c
324     +++ b/arch/powerpc/platforms/pseries/msi.c
325     @@ -24,6 +24,7 @@ static int query_token, change_token;
326     #define RTAS_RESET_FN 2
327     #define RTAS_CHANGE_MSI_FN 3
328     #define RTAS_CHANGE_MSIX_FN 4
329     +#define RTAS_CHANGE_32MSI_FN 5
330    
331     static struct pci_dn *get_pdn(struct pci_dev *pdev)
332     {
333     @@ -58,7 +59,8 @@ static int rtas_change_msi(struct pci_dn *pdn, u32 func, u32 num_irqs)
334    
335     seq_num = 1;
336     do {
337     - if (func == RTAS_CHANGE_MSI_FN || func == RTAS_CHANGE_MSIX_FN)
338     + if (func == RTAS_CHANGE_MSI_FN || func == RTAS_CHANGE_MSIX_FN ||
339     + func == RTAS_CHANGE_32MSI_FN)
340     rc = rtas_call(change_token, 6, 4, rtas_ret, addr,
341     BUID_HI(buid), BUID_LO(buid),
342     func, num_irqs, seq_num);
343     @@ -392,6 +394,25 @@ static int check_msix_entries(struct pci_dev *pdev)
344     return 0;
345     }
346    
347     +static void rtas_hack_32bit_msi_gen2(struct pci_dev *pdev)
348     +{
349     + u32 addr_hi, addr_lo;
350     + int pos;
351     +
352     + /*
353     + * We should only get in here for IODA1 configs. This is based on the
354     + * fact that we using RTAS for MSIs, we don't have the 32 bit MSI RTAS
355     + * support, and we are in a PCIe Gen2 slot.
356     + */
357     + dev_info(&pdev->dev,
358     + "rtas_msi: No 32 bit MSI firmware support, forcing 32 bit MSI\n");
359     + pos = pci_find_capability(pdev, PCI_CAP_ID_MSI);
360     + pci_read_config_dword(pdev, pos + PCI_MSI_ADDRESS_HI, &addr_hi);
361     + addr_lo = 0xffff0000 | ((addr_hi >> (48 - 32)) << 4);
362     + pci_write_config_dword(pdev, pos + PCI_MSI_ADDRESS_LO, addr_lo);
363     + pci_write_config_dword(pdev, pos + PCI_MSI_ADDRESS_HI, 0);
364     +}
365     +
366     static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type)
367     {
368     struct pci_dn *pdn;
369     @@ -399,6 +420,7 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type)
370     struct msi_desc *entry;
371     struct msi_msg msg;
372     int nvec = nvec_in;
373     + int use_32bit_msi_hack = 0;
374    
375     pdn = get_pdn(pdev);
376     if (!pdn)
377     @@ -426,12 +448,31 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type)
378     */
379     again:
380     if (type == PCI_CAP_ID_MSI) {
381     - rc = rtas_change_msi(pdn, RTAS_CHANGE_MSI_FN, nvec);
382     + if (pdn->force_32bit_msi) {
383     + rc = rtas_change_msi(pdn, RTAS_CHANGE_32MSI_FN, nvec);
384     + if (rc < 0) {
385     + /*
386     + * We only want to run the 32 bit MSI hack below if
387     + * the max bus speed is Gen2 speed
388     + */
389     + if (pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT)
390     + return rc;
391     +
392     + use_32bit_msi_hack = 1;
393     + }
394     + } else
395     + rc = -1;
396     +
397     + if (rc < 0)
398     + rc = rtas_change_msi(pdn, RTAS_CHANGE_MSI_FN, nvec);
399    
400     if (rc < 0) {
401     pr_debug("rtas_msi: trying the old firmware call.\n");
402     rc = rtas_change_msi(pdn, RTAS_CHANGE_FN, nvec);
403     }
404     +
405     + if (use_32bit_msi_hack && rc > 0)
406     + rtas_hack_32bit_msi_gen2(pdev);
407     } else
408     rc = rtas_change_msi(pdn, RTAS_CHANGE_MSIX_FN, nvec);
409    
410     @@ -512,3 +553,13 @@ static int rtas_msi_init(void)
411     return 0;
412     }
413     arch_initcall(rtas_msi_init);
414     +
415     +static void quirk_radeon(struct pci_dev *dev)
416     +{
417     + struct pci_dn *pdn = get_pdn(dev);
418     +
419     + if (pdn)
420     + pdn->force_32bit_msi = 1;
421     +}
422     +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x68f2, quirk_radeon);
423     +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0xaa68, quirk_radeon);
424     diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
425     index 0b580f4..5f93856 100644
426     --- a/arch/powerpc/platforms/pseries/pci.c
427     +++ b/arch/powerpc/platforms/pseries/pci.c
428     @@ -108,3 +108,56 @@ static void fixup_winbond_82c105(struct pci_dev* dev)
429     }
430     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105,
431     fixup_winbond_82c105);
432     +
433     +int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
434     +{
435     + struct device_node *dn, *pdn;
436     + struct pci_bus *bus;
437     + const uint32_t *pcie_link_speed_stats;
438     +
439     + bus = bridge->bus;
440     +
441     + dn = pcibios_get_phb_of_node(bus);
442     + if (!dn)
443     + return 0;
444     +
445     + for (pdn = dn; pdn != NULL; pdn = of_get_next_parent(pdn)) {
446     + pcie_link_speed_stats = (const uint32_t *) of_get_property(pdn,
447     + "ibm,pcie-link-speed-stats", NULL);
448     + if (pcie_link_speed_stats)
449     + break;
450     + }
451     +
452     + of_node_put(pdn);
453     +
454     + if (!pcie_link_speed_stats) {
455     + pr_err("no ibm,pcie-link-speed-stats property\n");
456     + return 0;
457     + }
458     +
459     + switch (pcie_link_speed_stats[0]) {
460     + case 0x01:
461     + bus->max_bus_speed = PCIE_SPEED_2_5GT;
462     + break;
463     + case 0x02:
464     + bus->max_bus_speed = PCIE_SPEED_5_0GT;
465     + break;
466     + default:
467     + bus->max_bus_speed = PCI_SPEED_UNKNOWN;
468     + break;
469     + }
470     +
471     + switch (pcie_link_speed_stats[1]) {
472     + case 0x01:
473     + bus->cur_bus_speed = PCIE_SPEED_2_5GT;
474     + break;
475     + case 0x02:
476     + bus->cur_bus_speed = PCIE_SPEED_5_0GT;
477     + break;
478     + default:
479     + bus->cur_bus_speed = PCI_SPEED_UNKNOWN;
480     + break;
481     + }
482     +
483     + return 0;
484     +}
485     diff --git a/arch/powerpc/platforms/pseries/pseries.h b/arch/powerpc/platforms/pseries/pseries.h
486     index 9a3dda0..b79393d 100644
487     --- a/arch/powerpc/platforms/pseries/pseries.h
488     +++ b/arch/powerpc/platforms/pseries/pseries.h
489     @@ -60,4 +60,8 @@ extern int dlpar_detach_node(struct device_node *);
490     /* Snooze Delay, pseries_idle */
491     DECLARE_PER_CPU(long, smt_snooze_delay);
492    
493     +/* PCI root bridge prepare function override for pseries */
494     +struct pci_host_bridge;
495     +int pseries_root_bridge_prepare(struct pci_host_bridge *bridge);
496     +
497     #endif /* _PSERIES_PSERIES_H */
498     diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
499     index 8bcc9ca..bf34cc9 100644
500     --- a/arch/powerpc/platforms/pseries/setup.c
501     +++ b/arch/powerpc/platforms/pseries/setup.c
502     @@ -466,6 +466,8 @@ static void __init pSeries_setup_arch(void)
503     else
504     ppc_md.enable_pmcs = power4_enable_pmcs;
505    
506     + ppc_md.pcibios_root_bridge_prepare = pseries_root_bridge_prepare;
507     +
508     if (firmware_has_feature(FW_FEATURE_SET_MODE)) {
509     long rc;
510     if ((rc = pSeries_enable_reloc_on_exc()) != H_SUCCESS) {
511     diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
512     index fd80015..39a1c71 100644
513     --- a/arch/s390/include/asm/pgtable.h
514     +++ b/arch/s390/include/asm/pgtable.h
515     @@ -1063,11 +1063,12 @@ static inline pte_t ptep_modify_prot_start(struct mm_struct *mm,
516     unsigned long address,
517     pte_t *ptep)
518     {
519     + pgste_t pgste;
520     pte_t pte;
521    
522     mm->context.flush_mm = 1;
523     if (mm_has_pgste(mm))
524     - pgste_get_lock(ptep);
525     + pgste = pgste_get_lock(ptep);
526    
527     pte = *ptep;
528     if (!mm_exclusive(mm))
529     diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
530     index 901177d..1dc3d7c 100644
531     --- a/arch/x86/pci/common.c
532     +++ b/arch/x86/pci/common.c
533     @@ -617,7 +617,9 @@ int pcibios_add_device(struct pci_dev *dev)
534    
535     pa_data = boot_params.hdr.setup_data;
536     while (pa_data) {
537     - data = phys_to_virt(pa_data);
538     + data = ioremap(pa_data, sizeof(*rom));
539     + if (!data)
540     + return -ENOMEM;
541    
542     if (data->type == SETUP_PCI) {
543     rom = (struct pci_setup_rom *)data;
544     @@ -634,6 +636,7 @@ int pcibios_add_device(struct pci_dev *dev)
545     }
546     }
547     pa_data = data->next;
548     + iounmap(data);
549     }
550     return 0;
551     }
552     diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
553     index 22c800a..96c4e85 100644
554     --- a/arch/x86/xen/smp.c
555     +++ b/arch/x86/xen/smp.c
556     @@ -17,6 +17,7 @@
557     #include <linux/slab.h>
558     #include <linux/smp.h>
559     #include <linux/irq_work.h>
560     +#include <linux/tick.h>
561    
562     #include <asm/paravirt.h>
563     #include <asm/desc.h>
564     @@ -436,6 +437,13 @@ static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */
565     play_dead_common();
566     HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL);
567     cpu_bringup();
568     + /*
569     + * commit 4b0c0f294 (tick: Cleanup NOHZ per cpu data on cpu down)
570     + * clears certain data that the cpu_idle loop (which called us
571     + * and that we return from) expects. The only way to get that
572     + * data back is to call:
573     + */
574     + tick_nohz_idle_enter();
575     }
576    
577     #else /* !CONFIG_HOTPLUG_CPU */
578     diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
579     index 557e58d..391010a 100644
580     --- a/drivers/acpi/device_pm.c
581     +++ b/drivers/acpi/device_pm.c
582     @@ -269,11 +269,13 @@ int acpi_bus_init_power(struct acpi_device *device)
583     if (result)
584     return result;
585     } else if (state == ACPI_STATE_UNKNOWN) {
586     - /* No power resources and missing _PSC? Try to force D0. */
587     + /*
588     + * No power resources and missing _PSC? Cross fingers and make
589     + * it D0 in hope that this is what the BIOS put the device into.
590     + * [We tried to force D0 here by executing _PS0, but that broke
591     + * Toshiba P870-303 in a nasty way.]
592     + */
593     state = ACPI_STATE_D0;
594     - result = acpi_dev_pm_explicit_set(device, state);
595     - if (result)
596     - return result;
597     }
598     device->power.state = state;
599     return 0;
600     diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
601     index 313f959..81a9335 100644
602     --- a/drivers/acpi/video.c
603     +++ b/drivers/acpi/video.c
604     @@ -447,6 +447,22 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
605     DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13 - 2000 Notebook PC"),
606     },
607     },
608     + {
609     + .callback = video_ignore_initial_backlight,
610     + .ident = "HP Pavilion g6 Notebook PC",
611     + .matches = {
612     + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
613     + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion g6 Notebook PC"),
614     + },
615     + },
616     + {
617     + .callback = video_ignore_initial_backlight,
618     + .ident = "HP Pavilion m4",
619     + .matches = {
620     + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
621     + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion m4 Notebook PC"),
622     + },
623     + },
624     {}
625     };
626    
627     diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
628     index 57a8774..bb5939b 100644
629     --- a/drivers/cpufreq/acpi-cpufreq.c
630     +++ b/drivers/cpufreq/acpi-cpufreq.c
631     @@ -347,11 +347,11 @@ static u32 get_cur_val(const struct cpumask *mask)
632     switch (per_cpu(acfreq_data, cpumask_first(mask))->cpu_feature) {
633     case SYSTEM_INTEL_MSR_CAPABLE:
634     cmd.type = SYSTEM_INTEL_MSR_CAPABLE;
635     - cmd.addr.msr.reg = MSR_IA32_PERF_STATUS;
636     + cmd.addr.msr.reg = MSR_IA32_PERF_CTL;
637     break;
638     case SYSTEM_AMD_MSR_CAPABLE:
639     cmd.type = SYSTEM_AMD_MSR_CAPABLE;
640     - cmd.addr.msr.reg = MSR_AMD_PERF_STATUS;
641     + cmd.addr.msr.reg = MSR_AMD_PERF_CTL;
642     break;
643     case SYSTEM_IO_CAPABLE:
644     cmd.type = SYSTEM_IO_CAPABLE;
645     diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
646     index 1734fee..71bf4ec 100644
647     --- a/drivers/dma/ste_dma40.c
648     +++ b/drivers/dma/ste_dma40.c
649     @@ -1566,10 +1566,12 @@ static void dma_tc_handle(struct d40_chan *d40c)
650     return;
651     }
652    
653     - if (d40_queue_start(d40c) == NULL)
654     + if (d40_queue_start(d40c) == NULL) {
655     d40c->busy = false;
656     - pm_runtime_mark_last_busy(d40c->base->dev);
657     - pm_runtime_put_autosuspend(d40c->base->dev);
658     +
659     + pm_runtime_mark_last_busy(d40c->base->dev);
660     + pm_runtime_put_autosuspend(d40c->base->dev);
661     + }
662    
663     d40_desc_remove(d40d);
664     d40_desc_done(d40c, d40d);
665     diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
666     index a6a8643..8bcce78 100644
667     --- a/drivers/gpu/drm/drm_irq.c
668     +++ b/drivers/gpu/drm/drm_irq.c
669     @@ -1054,7 +1054,7 @@ EXPORT_SYMBOL(drm_vblank_off);
670     */
671     void drm_vblank_pre_modeset(struct drm_device *dev, int crtc)
672     {
673     - /* vblank is not initialized (IRQ not installed ?) */
674     + /* vblank is not initialized (IRQ not installed ?), or has been freed */
675     if (!dev->num_crtcs)
676     return;
677     /*
678     @@ -1076,6 +1076,10 @@ void drm_vblank_post_modeset(struct drm_device *dev, int crtc)
679     {
680     unsigned long irqflags;
681    
682     + /* vblank is not initialized (IRQ not installed ?), or has been freed */
683     + if (!dev->num_crtcs)
684     + return;
685     +
686     if (dev->vblank_inmodeset[crtc]) {
687     spin_lock_irqsave(&dev->vbl_lock, irqflags);
688     dev->vblank_disable_allowed = 1;
689     diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
690     index 2590cac..8d07078 100644
691     --- a/drivers/gpu/drm/gma500/framebuffer.c
692     +++ b/drivers/gpu/drm/gma500/framebuffer.c
693     @@ -772,8 +772,8 @@ void psb_modeset_init(struct drm_device *dev)
694     for (i = 0; i < dev_priv->num_pipe; i++)
695     psb_intel_crtc_init(dev, i, mode_dev);
696    
697     - dev->mode_config.max_width = 2048;
698     - dev->mode_config.max_height = 2048;
699     + dev->mode_config.max_width = 4096;
700     + dev->mode_config.max_height = 4096;
701    
702     psb_setup_outputs(dev);
703    
704     diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
705     index 73cb479..db2cff3 100644
706     --- a/drivers/gpu/drm/i915/i915_gem.c
707     +++ b/drivers/gpu/drm/i915/i915_gem.c
708     @@ -91,14 +91,11 @@ i915_gem_wait_for_error(struct i915_gpu_error *error)
709     {
710     int ret;
711    
712     -#define EXIT_COND (!i915_reset_in_progress(error))
713     +#define EXIT_COND (!i915_reset_in_progress(error) || \
714     + i915_terminally_wedged(error))
715     if (EXIT_COND)
716     return 0;
717    
718     - /* GPU is already declared terminally dead, give up. */
719     - if (i915_terminally_wedged(error))
720     - return -EIO;
721     -
722     /*
723     * Only wait 10 seconds for the gpu reset to complete to avoid hanging
724     * userspace. If it takes that long something really bad is going on and
725     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
726     index c2d173a..2ab65b4 100644
727     --- a/drivers/gpu/drm/i915/intel_display.c
728     +++ b/drivers/gpu/drm/i915/intel_display.c
729     @@ -7960,6 +7960,21 @@ static void intel_set_config_restore_state(struct drm_device *dev,
730     }
731     }
732    
733     +static bool
734     +is_crtc_connector_off(struct drm_crtc *crtc, struct drm_connector *connectors,
735     + int num_connectors)
736     +{
737     + int i;
738     +
739     + for (i = 0; i < num_connectors; i++)
740     + if (connectors[i].encoder &&
741     + connectors[i].encoder->crtc == crtc &&
742     + connectors[i].dpms != DRM_MODE_DPMS_ON)
743     + return true;
744     +
745     + return false;
746     +}
747     +
748     static void
749     intel_set_config_compute_mode_changes(struct drm_mode_set *set,
750     struct intel_set_config *config)
751     @@ -7967,7 +7982,11 @@ intel_set_config_compute_mode_changes(struct drm_mode_set *set,
752    
753     /* We should be able to check here if the fb has the same properties
754     * and then just flip_or_move it */
755     - if (set->crtc->fb != set->fb) {
756     + if (set->connectors != NULL &&
757     + is_crtc_connector_off(set->crtc, *set->connectors,
758     + set->num_connectors)) {
759     + config->mode_changed = true;
760     + } else if (set->crtc->fb != set->fb) {
761     /* If we have no fb then treat it as a full mode set */
762     if (set->crtc->fb == NULL) {
763     DRM_DEBUG_KMS("crtc has no fb, full mode set\n");
764     @@ -7979,8 +7998,9 @@ intel_set_config_compute_mode_changes(struct drm_mode_set *set,
765     } else if (set->fb->bits_per_pixel !=
766     set->crtc->fb->bits_per_pixel) {
767     config->mode_changed = true;
768     - } else
769     + } else {
770     config->fb_changed = true;
771     + }
772     }
773    
774     if (set->fb && (set->x != set->crtc->x || set->y != set->crtc->y))
775     diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
776     index e0d6985..e2ca9c1 100644
777     --- a/drivers/gpu/drm/i915/intel_lvds.c
778     +++ b/drivers/gpu/drm/i915/intel_lvds.c
779     @@ -803,10 +803,10 @@ static const struct dmi_system_id intel_no_lvds[] = {
780     },
781     {
782     .callback = intel_no_lvds_dmi_callback,
783     - .ident = "Hewlett-Packard HP t5740e Thin Client",
784     + .ident = "Hewlett-Packard HP t5740",
785     .matches = {
786     DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
787     - DMI_MATCH(DMI_PRODUCT_NAME, "HP t5740e Thin Client"),
788     + DMI_MATCH(DMI_PRODUCT_NAME, " t5740"),
789     },
790     },
791     {
792     diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
793     index d6df786..cdd78ca 100644
794     --- a/drivers/gpu/drm/i915/intel_sdvo.c
795     +++ b/drivers/gpu/drm/i915/intel_sdvo.c
796     @@ -1770,7 +1770,7 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
797     * Assume that the preferred modes are
798     * arranged in priority order.
799     */
800     - intel_ddc_get_modes(connector, intel_sdvo->i2c);
801     + intel_ddc_get_modes(connector, &intel_sdvo->ddc);
802     if (list_empty(&connector->probed_modes) == false)
803     goto end;
804    
805     diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
806     index 713dd70..407e257 100644
807     --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
808     +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
809     @@ -1041,13 +1041,14 @@ static int mga_crtc_mode_set(struct drm_crtc *crtc,
810     else
811     hi_pri_lvl = 5;
812    
813     - WREG8(0x1fde, 0x06);
814     - WREG8(0x1fdf, hi_pri_lvl);
815     + WREG8(MGAREG_CRTCEXT_INDEX, 0x06);
816     + WREG8(MGAREG_CRTCEXT_DATA, hi_pri_lvl);
817     } else {
818     + WREG8(MGAREG_CRTCEXT_INDEX, 0x06);
819     if (mdev->reg_1e24 >= 0x01)
820     - WREG8(0x1fdf, 0x03);
821     + WREG8(MGAREG_CRTCEXT_DATA, 0x03);
822     else
823     - WREG8(0x1fdf, 0x04);
824     + WREG8(MGAREG_CRTCEXT_DATA, 0x04);
825     }
826     }
827     return 0;
828     diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
829     index 4552d4a..6cf2b52 100644
830     --- a/drivers/gpu/drm/radeon/atombios_encoders.c
831     +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
832     @@ -667,6 +667,8 @@ atombios_digital_setup(struct drm_encoder *encoder, int action)
833     int
834     atombios_get_encoder_mode(struct drm_encoder *encoder)
835     {
836     + struct drm_device *dev = encoder->dev;
837     + struct radeon_device *rdev = dev->dev_private;
838     struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
839     struct drm_connector *connector;
840     struct radeon_connector *radeon_connector;
841     @@ -693,7 +695,8 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
842     case DRM_MODE_CONNECTOR_DVII:
843     case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */
844     if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
845     - radeon_audio)
846     + radeon_audio &&
847     + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
848     return ATOM_ENCODER_MODE_HDMI;
849     else if (radeon_connector->use_digital)
850     return ATOM_ENCODER_MODE_DVI;
851     @@ -704,7 +707,8 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
852     case DRM_MODE_CONNECTOR_HDMIA:
853     default:
854     if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
855     - radeon_audio)
856     + radeon_audio &&
857     + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
858     return ATOM_ENCODER_MODE_HDMI;
859     else
860     return ATOM_ENCODER_MODE_DVI;
861     @@ -718,7 +722,8 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
862     (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
863     return ATOM_ENCODER_MODE_DP;
864     else if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
865     - radeon_audio)
866     + radeon_audio &&
867     + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
868     return ATOM_ENCODER_MODE_HDMI;
869     else
870     return ATOM_ENCODER_MODE_DVI;
871     diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
872     index 0ea6bdf..f8e36ac 100644
873     --- a/drivers/gpu/drm/radeon/evergreen.c
874     +++ b/drivers/gpu/drm/radeon/evergreen.c
875     @@ -3728,6 +3728,12 @@ static int evergreen_startup(struct radeon_device *rdev)
876     }
877    
878     /* Enable IRQ */
879     + if (!rdev->irq.installed) {
880     + r = radeon_irq_kms_init(rdev);
881     + if (r)
882     + return r;
883     + }
884     +
885     r = r600_irq_init(rdev);
886     if (r) {
887     DRM_ERROR("radeon: IH init failed (%d).\n", r);
888     @@ -3876,10 +3882,6 @@ int evergreen_init(struct radeon_device *rdev)
889     if (r)
890     return r;
891    
892     - r = radeon_irq_kms_init(rdev);
893     - if (r)
894     - return r;
895     -
896     rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
897     r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
898    
899     @@ -3944,8 +3946,7 @@ void evergreen_fini(struct radeon_device *rdev)
900    
901     void evergreen_pcie_gen2_enable(struct radeon_device *rdev)
902     {
903     - u32 link_width_cntl, speed_cntl, mask;
904     - int ret;
905     + u32 link_width_cntl, speed_cntl;
906    
907     if (radeon_pcie_gen2 == 0)
908     return;
909     @@ -3960,11 +3961,8 @@ void evergreen_pcie_gen2_enable(struct radeon_device *rdev)
910     if (ASIC_IS_X2(rdev))
911     return;
912    
913     - ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask);
914     - if (ret != 0)
915     - return;
916     -
917     - if (!(mask & DRM_PCIE_SPEED_50))
918     + if ((rdev->pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) &&
919     + (rdev->pdev->bus->max_bus_speed != PCIE_SPEED_8_0GT))
920     return;
921    
922     speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL);
923     diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
924     index 0a32d89..d7968b8 100644
925     --- a/drivers/gpu/drm/radeon/ni.c
926     +++ b/drivers/gpu/drm/radeon/ni.c
927     @@ -1711,6 +1711,12 @@ static int cayman_startup(struct radeon_device *rdev)
928     }
929    
930     /* Enable IRQ */
931     + if (!rdev->irq.installed) {
932     + r = radeon_irq_kms_init(rdev);
933     + if (r)
934     + return r;
935     + }
936     +
937     r = r600_irq_init(rdev);
938     if (r) {
939     DRM_ERROR("radeon: IH init failed (%d).\n", r);
940     @@ -1857,10 +1863,6 @@ int cayman_init(struct radeon_device *rdev)
941     if (r)
942     return r;
943    
944     - r = radeon_irq_kms_init(rdev);
945     - if (r)
946     - return r;
947     -
948     ring->ring_obj = NULL;
949     r600_ring_init(rdev, ring, 1024 * 1024);
950    
951     diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
952     index 4973bff..d0314ec 100644
953     --- a/drivers/gpu/drm/radeon/r100.c
954     +++ b/drivers/gpu/drm/radeon/r100.c
955     @@ -3869,6 +3869,12 @@ static int r100_startup(struct radeon_device *rdev)
956     }
957    
958     /* Enable IRQ */
959     + if (!rdev->irq.installed) {
960     + r = radeon_irq_kms_init(rdev);
961     + if (r)
962     + return r;
963     + }
964     +
965     r100_irq_set(rdev);
966     rdev->config.r100.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
967     /* 1M ring buffer */
968     @@ -4024,9 +4030,6 @@ int r100_init(struct radeon_device *rdev)
969     r = radeon_fence_driver_init(rdev);
970     if (r)
971     return r;
972     - r = radeon_irq_kms_init(rdev);
973     - if (r)
974     - return r;
975     /* Memory manager */
976     r = radeon_bo_init(rdev);
977     if (r)
978     diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
979     index c60350e..b9b776f 100644
980     --- a/drivers/gpu/drm/radeon/r300.c
981     +++ b/drivers/gpu/drm/radeon/r300.c
982     @@ -1382,6 +1382,12 @@ static int r300_startup(struct radeon_device *rdev)
983     }
984    
985     /* Enable IRQ */
986     + if (!rdev->irq.installed) {
987     + r = radeon_irq_kms_init(rdev);
988     + if (r)
989     + return r;
990     + }
991     +
992     r100_irq_set(rdev);
993     rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
994     /* 1M ring buffer */
995     @@ -1516,9 +1522,6 @@ int r300_init(struct radeon_device *rdev)
996     r = radeon_fence_driver_init(rdev);
997     if (r)
998     return r;
999     - r = radeon_irq_kms_init(rdev);
1000     - if (r)
1001     - return r;
1002     /* Memory manager */
1003     r = radeon_bo_init(rdev);
1004     if (r)
1005     diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
1006     index 6fce2eb..4e796ec 100644
1007     --- a/drivers/gpu/drm/radeon/r420.c
1008     +++ b/drivers/gpu/drm/radeon/r420.c
1009     @@ -265,6 +265,12 @@ static int r420_startup(struct radeon_device *rdev)
1010     }
1011    
1012     /* Enable IRQ */
1013     + if (!rdev->irq.installed) {
1014     + r = radeon_irq_kms_init(rdev);
1015     + if (r)
1016     + return r;
1017     + }
1018     +
1019     r100_irq_set(rdev);
1020     rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
1021     /* 1M ring buffer */
1022     @@ -411,10 +417,6 @@ int r420_init(struct radeon_device *rdev)
1023     if (r) {
1024     return r;
1025     }
1026     - r = radeon_irq_kms_init(rdev);
1027     - if (r) {
1028     - return r;
1029     - }
1030     /* Memory manager */
1031     r = radeon_bo_init(rdev);
1032     if (r) {
1033     diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
1034     index f795a4e..e1aece7 100644
1035     --- a/drivers/gpu/drm/radeon/r520.c
1036     +++ b/drivers/gpu/drm/radeon/r520.c
1037     @@ -194,6 +194,12 @@ static int r520_startup(struct radeon_device *rdev)
1038     }
1039    
1040     /* Enable IRQ */
1041     + if (!rdev->irq.installed) {
1042     + r = radeon_irq_kms_init(rdev);
1043     + if (r)
1044     + return r;
1045     + }
1046     +
1047     rs600_irq_set(rdev);
1048     rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
1049     /* 1M ring buffer */
1050     @@ -297,9 +303,6 @@ int r520_init(struct radeon_device *rdev)
1051     r = radeon_fence_driver_init(rdev);
1052     if (r)
1053     return r;
1054     - r = radeon_irq_kms_init(rdev);
1055     - if (r)
1056     - return r;
1057     /* Memory manager */
1058     r = radeon_bo_init(rdev);
1059     if (r)
1060     diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
1061     index 0740db3..bac1e2ac 100644
1062     --- a/drivers/gpu/drm/radeon/r600.c
1063     +++ b/drivers/gpu/drm/radeon/r600.c
1064     @@ -2940,6 +2940,12 @@ static int r600_startup(struct radeon_device *rdev)
1065     }
1066    
1067     /* Enable IRQ */
1068     + if (!rdev->irq.installed) {
1069     + r = radeon_irq_kms_init(rdev);
1070     + if (r)
1071     + return r;
1072     + }
1073     +
1074     r = r600_irq_init(rdev);
1075     if (r) {
1076     DRM_ERROR("radeon: IH init failed (%d).\n", r);
1077     @@ -3094,10 +3100,6 @@ int r600_init(struct radeon_device *rdev)
1078     if (r)
1079     return r;
1080    
1081     - r = radeon_irq_kms_init(rdev);
1082     - if (r)
1083     - return r;
1084     -
1085     rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
1086     r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
1087    
1088     @@ -4351,8 +4353,6 @@ static void r600_pcie_gen2_enable(struct radeon_device *rdev)
1089     {
1090     u32 link_width_cntl, lanes, speed_cntl, training_cntl, tmp;
1091     u16 link_cntl2;
1092     - u32 mask;
1093     - int ret;
1094    
1095     if (radeon_pcie_gen2 == 0)
1096     return;
1097     @@ -4371,11 +4371,8 @@ static void r600_pcie_gen2_enable(struct radeon_device *rdev)
1098     if (rdev->family <= CHIP_R600)
1099     return;
1100    
1101     - ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask);
1102     - if (ret != 0)
1103     - return;
1104     -
1105     - if (!(mask & DRM_PCIE_SPEED_50))
1106     + if ((rdev->pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) &&
1107     + (rdev->pdev->bus->max_bus_speed != PCIE_SPEED_8_0GT))
1108     return;
1109    
1110     speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL);
1111     diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
1112     index 73051ce..233a9b9 100644
1113     --- a/drivers/gpu/drm/radeon/rs400.c
1114     +++ b/drivers/gpu/drm/radeon/rs400.c
1115     @@ -417,6 +417,12 @@ static int rs400_startup(struct radeon_device *rdev)
1116     }
1117    
1118     /* Enable IRQ */
1119     + if (!rdev->irq.installed) {
1120     + r = radeon_irq_kms_init(rdev);
1121     + if (r)
1122     + return r;
1123     + }
1124     +
1125     r100_irq_set(rdev);
1126     rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
1127     /* 1M ring buffer */
1128     @@ -535,9 +541,6 @@ int rs400_init(struct radeon_device *rdev)
1129     r = radeon_fence_driver_init(rdev);
1130     if (r)
1131     return r;
1132     - r = radeon_irq_kms_init(rdev);
1133     - if (r)
1134     - return r;
1135     /* Memory manager */
1136     r = radeon_bo_init(rdev);
1137     if (r)
1138     diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
1139     index 46fa1b0..670b555 100644
1140     --- a/drivers/gpu/drm/radeon/rs600.c
1141     +++ b/drivers/gpu/drm/radeon/rs600.c
1142     @@ -923,6 +923,12 @@ static int rs600_startup(struct radeon_device *rdev)
1143     }
1144    
1145     /* Enable IRQ */
1146     + if (!rdev->irq.installed) {
1147     + r = radeon_irq_kms_init(rdev);
1148     + if (r)
1149     + return r;
1150     + }
1151     +
1152     rs600_irq_set(rdev);
1153     rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
1154     /* 1M ring buffer */
1155     @@ -1047,9 +1053,6 @@ int rs600_init(struct radeon_device *rdev)
1156     r = radeon_fence_driver_init(rdev);
1157     if (r)
1158     return r;
1159     - r = radeon_irq_kms_init(rdev);
1160     - if (r)
1161     - return r;
1162     /* Memory manager */
1163     r = radeon_bo_init(rdev);
1164     if (r)
1165     diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
1166     index 5706d2a..fad6633 100644
1167     --- a/drivers/gpu/drm/radeon/rs690.c
1168     +++ b/drivers/gpu/drm/radeon/rs690.c
1169     @@ -628,6 +628,12 @@ static int rs690_startup(struct radeon_device *rdev)
1170     }
1171    
1172     /* Enable IRQ */
1173     + if (!rdev->irq.installed) {
1174     + r = radeon_irq_kms_init(rdev);
1175     + if (r)
1176     + return r;
1177     + }
1178     +
1179     rs600_irq_set(rdev);
1180     rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
1181     /* 1M ring buffer */
1182     @@ -753,9 +759,6 @@ int rs690_init(struct radeon_device *rdev)
1183     r = radeon_fence_driver_init(rdev);
1184     if (r)
1185     return r;
1186     - r = radeon_irq_kms_init(rdev);
1187     - if (r)
1188     - return r;
1189     /* Memory manager */
1190     r = radeon_bo_init(rdev);
1191     if (r)
1192     diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
1193     index ffcba73..21c7d7b 100644
1194     --- a/drivers/gpu/drm/radeon/rv515.c
1195     +++ b/drivers/gpu/drm/radeon/rv515.c
1196     @@ -532,6 +532,12 @@ static int rv515_startup(struct radeon_device *rdev)
1197     }
1198    
1199     /* Enable IRQ */
1200     + if (!rdev->irq.installed) {
1201     + r = radeon_irq_kms_init(rdev);
1202     + if (r)
1203     + return r;
1204     + }
1205     +
1206     rs600_irq_set(rdev);
1207     rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
1208     /* 1M ring buffer */
1209     @@ -662,9 +668,6 @@ int rv515_init(struct radeon_device *rdev)
1210     r = radeon_fence_driver_init(rdev);
1211     if (r)
1212     return r;
1213     - r = radeon_irq_kms_init(rdev);
1214     - if (r)
1215     - return r;
1216     /* Memory manager */
1217     r = radeon_bo_init(rdev);
1218     if (r)
1219     diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
1220     index d63fe1d..c872d2b 100644
1221     --- a/drivers/gpu/drm/radeon/rv770.c
1222     +++ b/drivers/gpu/drm/radeon/rv770.c
1223     @@ -1041,6 +1041,12 @@ static int rv770_startup(struct radeon_device *rdev)
1224     }
1225    
1226     /* Enable IRQ */
1227     + if (!rdev->irq.installed) {
1228     + r = radeon_irq_kms_init(rdev);
1229     + if (r)
1230     + return r;
1231     + }
1232     +
1233     r = r600_irq_init(rdev);
1234     if (r) {
1235     DRM_ERROR("radeon: IH init failed (%d).\n", r);
1236     @@ -1180,10 +1186,6 @@ int rv770_init(struct radeon_device *rdev)
1237     if (r)
1238     return r;
1239    
1240     - r = radeon_irq_kms_init(rdev);
1241     - if (r)
1242     - return r;
1243     -
1244     rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
1245     r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
1246    
1247     @@ -1238,8 +1240,6 @@ static void rv770_pcie_gen2_enable(struct radeon_device *rdev)
1248     {
1249     u32 link_width_cntl, lanes, speed_cntl, tmp;
1250     u16 link_cntl2;
1251     - u32 mask;
1252     - int ret;
1253    
1254     if (radeon_pcie_gen2 == 0)
1255     return;
1256     @@ -1254,11 +1254,8 @@ static void rv770_pcie_gen2_enable(struct radeon_device *rdev)
1257     if (ASIC_IS_X2(rdev))
1258     return;
1259    
1260     - ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask);
1261     - if (ret != 0)
1262     - return;
1263     -
1264     - if (!(mask & DRM_PCIE_SPEED_50))
1265     + if ((rdev->pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) &&
1266     + (rdev->pdev->bus->max_bus_speed != PCIE_SPEED_8_0GT))
1267     return;
1268    
1269     DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n");
1270     diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
1271     index aefefd5..a964a96 100644
1272     --- a/drivers/gpu/drm/radeon/si.c
1273     +++ b/drivers/gpu/drm/radeon/si.c
1274     @@ -4374,6 +4374,12 @@ static int si_startup(struct radeon_device *rdev)
1275     }
1276    
1277     /* Enable IRQ */
1278     + if (!rdev->irq.installed) {
1279     + r = radeon_irq_kms_init(rdev);
1280     + if (r)
1281     + return r;
1282     + }
1283     +
1284     r = si_irq_init(rdev);
1285     if (r) {
1286     DRM_ERROR("radeon: IH init failed (%d).\n", r);
1287     @@ -4534,10 +4540,6 @@ int si_init(struct radeon_device *rdev)
1288     if (r)
1289     return r;
1290    
1291     - r = radeon_irq_kms_init(rdev);
1292     - if (r)
1293     - return r;
1294     -
1295     ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
1296     ring->ring_obj = NULL;
1297     r600_ring_init(rdev, ring, 1024 * 1024);
1298     diff --git a/drivers/hwmon/adm1021.c b/drivers/hwmon/adm1021.c
1299     index 71bcba8a..1468be8 100644
1300     --- a/drivers/hwmon/adm1021.c
1301     +++ b/drivers/hwmon/adm1021.c
1302     @@ -332,26 +332,68 @@ static int adm1021_detect(struct i2c_client *client,
1303     man_id = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID);
1304     dev_id = i2c_smbus_read_byte_data(client, ADM1021_REG_DEV_ID);
1305    
1306     + if (man_id < 0 || dev_id < 0)
1307     + return -ENODEV;
1308     +
1309     if (man_id == 0x4d && dev_id == 0x01)
1310     type_name = "max1617a";
1311     else if (man_id == 0x41) {
1312     if ((dev_id & 0xF0) == 0x30)
1313     type_name = "adm1023";
1314     - else
1315     + else if ((dev_id & 0xF0) == 0x00)
1316     type_name = "adm1021";
1317     + else
1318     + return -ENODEV;
1319     } else if (man_id == 0x49)
1320     type_name = "thmc10";
1321     else if (man_id == 0x23)
1322     type_name = "gl523sm";
1323     else if (man_id == 0x54)
1324     type_name = "mc1066";
1325     - /* LM84 Mfr ID in a different place, and it has more unused bits */
1326     - else if (conv_rate == 0x00
1327     - && (config & 0x7F) == 0x00
1328     - && (status & 0xAB) == 0x00)
1329     - type_name = "lm84";
1330     - else
1331     - type_name = "max1617";
1332     + else {
1333     + int lte, rte, lhi, rhi, llo, rlo;
1334     +
1335     + /* extra checks for LM84 and MAX1617 to avoid misdetections */
1336     +
1337     + llo = i2c_smbus_read_byte_data(client, ADM1021_REG_THYST_R(0));
1338     + rlo = i2c_smbus_read_byte_data(client, ADM1021_REG_THYST_R(1));
1339     +
1340     + /* fail if any of the additional register reads failed */
1341     + if (llo < 0 || rlo < 0)
1342     + return -ENODEV;
1343     +
1344     + lte = i2c_smbus_read_byte_data(client, ADM1021_REG_TEMP(0));
1345     + rte = i2c_smbus_read_byte_data(client, ADM1021_REG_TEMP(1));
1346     + lhi = i2c_smbus_read_byte_data(client, ADM1021_REG_TOS_R(0));
1347     + rhi = i2c_smbus_read_byte_data(client, ADM1021_REG_TOS_R(1));
1348     +
1349     + /*
1350     + * Fail for negative temperatures and negative high limits.
1351     + * This check also catches read errors on the tested registers.
1352     + */
1353     + if ((s8)lte < 0 || (s8)rte < 0 || (s8)lhi < 0 || (s8)rhi < 0)
1354     + return -ENODEV;
1355     +
1356     + /* fail if all registers hold the same value */
1357     + if (lte == rte && lte == lhi && lte == rhi && lte == llo
1358     + && lte == rlo)
1359     + return -ENODEV;
1360     +
1361     + /*
1362     + * LM84 Mfr ID is in a different place,
1363     + * and it has more unused bits.
1364     + */
1365     + if (conv_rate == 0x00
1366     + && (config & 0x7F) == 0x00
1367     + && (status & 0xAB) == 0x00) {
1368     + type_name = "lm84";
1369     + } else {
1370     + /* fail if low limits are larger than high limits */
1371     + if ((s8)llo > lhi || (s8)rlo > rhi)
1372     + return -ENODEV;
1373     + type_name = "max1617";
1374     + }
1375     + }
1376    
1377     pr_debug("adm1021: Detected chip %s at adapter %d, address 0x%02x.\n",
1378     type_name, i2c_adapter_id(adapter), client->addr);
1379     diff --git a/drivers/iio/frequency/adf4350.c b/drivers/iio/frequency/adf4350.c
1380     index a884252..e76d4ac 100644
1381     --- a/drivers/iio/frequency/adf4350.c
1382     +++ b/drivers/iio/frequency/adf4350.c
1383     @@ -212,7 +212,7 @@ static int adf4350_set_freq(struct adf4350_state *st, unsigned long long freq)
1384     (pdata->r2_user_settings & (ADF4350_REG2_PD_POLARITY_POS |
1385     ADF4350_REG2_LDP_6ns | ADF4350_REG2_LDF_INT_N |
1386     ADF4350_REG2_CHARGE_PUMP_CURR_uA(5000) |
1387     - ADF4350_REG2_MUXOUT(0x7) | ADF4350_REG2_NOISE_MODE(0x9)));
1388     + ADF4350_REG2_MUXOUT(0x7) | ADF4350_REG2_NOISE_MODE(0x3)));
1389    
1390     st->regs[ADF4350_REG3] = pdata->r3_user_settings &
1391     (ADF4350_REG3_12BIT_CLKDIV(0xFFF) |
1392     diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
1393     index b289915..8ff1a2d 100644
1394     --- a/drivers/iio/inkern.c
1395     +++ b/drivers/iio/inkern.c
1396     @@ -279,7 +279,7 @@ static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan,
1397     s64 raw64 = raw;
1398     int ret;
1399    
1400     - ret = iio_channel_read(chan, &offset, NULL, IIO_CHAN_INFO_SCALE);
1401     + ret = iio_channel_read(chan, &offset, NULL, IIO_CHAN_INFO_OFFSET);
1402     if (ret == 0)
1403     raw64 += offset;
1404    
1405     diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
1406     index 5427787..563771f 100644
1407     --- a/drivers/pci/probe.c
1408     +++ b/drivers/pci/probe.c
1409     @@ -988,7 +988,6 @@ int pci_setup_device(struct pci_dev *dev)
1410     dev->sysdata = dev->bus->sysdata;
1411     dev->dev.parent = dev->bus->bridge;
1412     dev->dev.bus = &pci_bus_type;
1413     - dev->dev.type = &pci_dev_type;
1414     dev->hdr_type = hdr_type & 0x7f;
1415     dev->multifunction = !!(hdr_type & 0x80);
1416     dev->error_state = pci_channel_io_normal;
1417     @@ -1208,6 +1207,7 @@ struct pci_dev *alloc_pci_dev(void)
1418     return NULL;
1419    
1420     INIT_LIST_HEAD(&dev->bus_list);
1421     + dev->dev.type = &pci_dev_type;
1422    
1423     return dev;
1424     }
1425     diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
1426     index 1a779bb..72184cc 100644
1427     --- a/drivers/platform/x86/hp-wmi.c
1428     +++ b/drivers/platform/x86/hp-wmi.c
1429     @@ -679,7 +679,7 @@ static int hp_wmi_rfkill_setup(struct platform_device *device)
1430     }
1431     rfkill_init_sw_state(gps_rfkill,
1432     hp_wmi_get_sw_state(HPWMI_GPS));
1433     - rfkill_set_hw_state(bluetooth_rfkill,
1434     + rfkill_set_hw_state(gps_rfkill,
1435     hp_wmi_get_hw_state(HPWMI_GPS));
1436     err = rfkill_register(gps_rfkill);
1437     if (err)
1438     diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
1439     index e8d7768..1e04b79 100644
1440     --- a/drivers/usb/dwc3/dwc3-pci.c
1441     +++ b/drivers/usb/dwc3/dwc3-pci.c
1442     @@ -196,9 +196,9 @@ static void dwc3_pci_remove(struct pci_dev *pci)
1443     {
1444     struct dwc3_pci *glue = pci_get_drvdata(pci);
1445    
1446     + platform_device_unregister(glue->dwc3);
1447     platform_device_unregister(glue->usb2_phy);
1448     platform_device_unregister(glue->usb3_phy);
1449     - platform_device_unregister(glue->dwc3);
1450     pci_set_drvdata(pci, NULL);
1451     pci_disable_device(pci);
1452     }
1453     diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
1454     index 82e160e..bab9630 100644
1455     --- a/drivers/usb/dwc3/gadget.c
1456     +++ b/drivers/usb/dwc3/gadget.c
1457     @@ -1637,10 +1637,20 @@ static void dwc3_gadget_free_endpoints(struct dwc3 *dwc)
1458    
1459     for (epnum = 0; epnum < DWC3_ENDPOINTS_NUM; epnum++) {
1460     dep = dwc->eps[epnum];
1461     - dwc3_free_trb_pool(dep);
1462    
1463     - if (epnum != 0 && epnum != 1)
1464     + /*
1465     + * Physical endpoints 0 and 1 are special; they form the
1466     + * bi-directional USB endpoint 0.
1467     + *
1468     + * For those two physical endpoints, we don't allocate a TRB
1469     + * pool nor do we add them the endpoints list. Due to that, we
1470     + * shouldn't do these two operations otherwise we would end up
1471     + * with all sorts of bugs when removing dwc3.ko.
1472     + */
1473     + if (epnum != 0 && epnum != 1) {
1474     + dwc3_free_trb_pool(dep);
1475     list_del(&dep->endpoint.ep_list);
1476     + }
1477    
1478     kfree(dep);
1479     }
1480     diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
1481     index 010f686..5a00ef3 100644
1482     --- a/drivers/usb/host/ehci-sched.c
1483     +++ b/drivers/usb/host/ehci-sched.c
1484     @@ -213,7 +213,7 @@ static inline unsigned char tt_start_uframe(struct ehci_hcd *ehci, __hc32 mask)
1485     }
1486    
1487     static const unsigned char
1488     -max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 125, 25 };
1489     +max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 30, 0 };
1490    
1491     /* carryover low/fullspeed bandwidth that crosses uframe boundries */
1492     static inline void carryover_tt_bandwidth(unsigned short tt_usecs[8])
1493     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
1494     index fd26470e428..905f38c 100644
1495     --- a/drivers/usb/host/xhci-mem.c
1496     +++ b/drivers/usb/host/xhci-mem.c
1497     @@ -1827,6 +1827,9 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1498     }
1499     spin_unlock_irqrestore(&xhci->lock, flags);
1500    
1501     + if (!xhci->rh_bw)
1502     + goto no_bw;
1503     +
1504     num_ports = HCS_MAX_PORTS(xhci->hcs_params1);
1505     for (i = 0; i < num_ports; i++) {
1506     struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table;
1507     @@ -1845,6 +1848,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1508     }
1509     }
1510    
1511     +no_bw:
1512     xhci->num_usb2_ports = 0;
1513     xhci->num_usb3_ports = 0;
1514     xhci->num_active_eps = 0;
1515     @@ -2256,6 +2260,9 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
1516     u32 page_size, temp;
1517     int i;
1518    
1519     + INIT_LIST_HEAD(&xhci->lpm_failed_devs);
1520     + INIT_LIST_HEAD(&xhci->cancel_cmd_list);
1521     +
1522     page_size = xhci_readl(xhci, &xhci->op_regs->page_size);
1523     xhci_dbg(xhci, "Supported page size register = 0x%x\n", page_size);
1524     for (i = 0; i < 16; i++) {
1525     @@ -2334,7 +2341,6 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
1526     xhci->cmd_ring = xhci_ring_alloc(xhci, 1, 1, TYPE_COMMAND, flags);
1527     if (!xhci->cmd_ring)
1528     goto fail;
1529     - INIT_LIST_HEAD(&xhci->cancel_cmd_list);
1530     xhci_dbg(xhci, "Allocated command ring at %p\n", xhci->cmd_ring);
1531     xhci_dbg(xhci, "First segment DMA is 0x%llx\n",
1532     (unsigned long long)xhci->cmd_ring->first_seg->dma);
1533     @@ -2445,8 +2451,6 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
1534     if (xhci_setup_port_arrays(xhci, flags))
1535     goto fail;
1536    
1537     - INIT_LIST_HEAD(&xhci->lpm_failed_devs);
1538     -
1539     /* Enable USB 3.0 device notifications for function remote wake, which
1540     * is necessary for allowing USB 3.0 devices to do remote wakeup from
1541     * U3 (device suspend).
1542     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1543     index 1a30c38..cc24e39 100644
1544     --- a/drivers/usb/host/xhci-pci.c
1545     +++ b/drivers/usb/host/xhci-pci.c
1546     @@ -221,6 +221,14 @@ static void xhci_pci_remove(struct pci_dev *dev)
1547     static int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)
1548     {
1549     struct xhci_hcd *xhci = hcd_to_xhci(hcd);
1550     + struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
1551     +
1552     + /*
1553     + * Systems with the TI redriver that loses port status change events
1554     + * need to have the registers polled during D3, so avoid D3cold.
1555     + */
1556     + if (xhci_compliance_mode_recovery_timer_quirk_check())
1557     + pdev->no_d3cold = true;
1558    
1559     return xhci_suspend(xhci);
1560     }
1561     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
1562     index 53b8f89..82b0809 100644
1563     --- a/drivers/usb/host/xhci.c
1564     +++ b/drivers/usb/host/xhci.c
1565     @@ -466,7 +466,7 @@ static void compliance_mode_recovery_timer_init(struct xhci_hcd *xhci)
1566     * Systems:
1567     * Vendor: Hewlett-Packard -> System Models: Z420, Z620 and Z820
1568     */
1569     -static bool compliance_mode_recovery_timer_quirk_check(void)
1570     +bool xhci_compliance_mode_recovery_timer_quirk_check(void)
1571     {
1572     const char *dmi_product_name, *dmi_sys_vendor;
1573    
1574     @@ -517,7 +517,7 @@ int xhci_init(struct usb_hcd *hcd)
1575     xhci_dbg(xhci, "Finished xhci_init\n");
1576    
1577     /* Initializing Compliance Mode Recovery Data If Needed */
1578     - if (compliance_mode_recovery_timer_quirk_check()) {
1579     + if (xhci_compliance_mode_recovery_timer_quirk_check()) {
1580     xhci->quirks |= XHCI_COMP_MODE_QUIRK;
1581     compliance_mode_recovery_timer_init(xhci);
1582     }
1583     @@ -952,6 +952,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
1584     struct usb_hcd *hcd = xhci_to_hcd(xhci);
1585     struct usb_hcd *secondary_hcd;
1586     int retval = 0;
1587     + bool comp_timer_running = false;
1588    
1589     /* Wait a bit if either of the roothubs need to settle from the
1590     * transition into bus suspend.
1591     @@ -989,6 +990,13 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
1592    
1593     /* If restore operation fails, re-initialize the HC during resume */
1594     if ((temp & STS_SRE) || hibernated) {
1595     +
1596     + if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
1597     + !(xhci_all_ports_seen_u0(xhci))) {
1598     + del_timer_sync(&xhci->comp_mode_recovery_timer);
1599     + xhci_dbg(xhci, "Compliance Mode Recovery Timer deleted!\n");
1600     + }
1601     +
1602     /* Let the USB core know _both_ roothubs lost power. */
1603     usb_root_hub_lost_power(xhci->main_hcd->self.root_hub);
1604     usb_root_hub_lost_power(xhci->shared_hcd->self.root_hub);
1605     @@ -1031,6 +1039,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
1606     retval = xhci_init(hcd->primary_hcd);
1607     if (retval)
1608     return retval;
1609     + comp_timer_running = true;
1610     +
1611     xhci_dbg(xhci, "Start the primary HCD\n");
1612     retval = xhci_run(hcd->primary_hcd);
1613     if (!retval) {
1614     @@ -1072,7 +1082,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
1615     * to suffer the Compliance Mode issue again. It doesn't matter if
1616     * ports have entered previously to U0 before system's suspension.
1617     */
1618     - if (xhci->quirks & XHCI_COMP_MODE_QUIRK)
1619     + if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) && !comp_timer_running)
1620     compliance_mode_recovery_timer_init(xhci);
1621    
1622     /* Re-enable port polling. */
1623     diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
1624     index 6358271..bde9f22 100644
1625     --- a/drivers/usb/host/xhci.h
1626     +++ b/drivers/usb/host/xhci.h
1627     @@ -1853,4 +1853,7 @@ struct xhci_input_control_ctx *xhci_get_input_control_ctx(struct xhci_hcd *xhci,
1628     struct xhci_slot_ctx *xhci_get_slot_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx);
1629     struct xhci_ep_ctx *xhci_get_ep_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx, unsigned int ep_index);
1630    
1631     +/* xHCI quirks */
1632     +bool xhci_compliance_mode_recovery_timer_quirk_check(void);
1633     +
1634     #endif /* __LINUX_XHCI_HCD_H */
1635     diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
1636     index 1ce1fcf..6f26fd8 100644
1637     --- a/drivers/usb/musb/musb_host.c
1638     +++ b/drivers/usb/musb/musb_host.c
1639     @@ -1232,7 +1232,6 @@ void musb_host_tx(struct musb *musb, u8 epnum)
1640     void __iomem *mbase = musb->mregs;
1641     struct dma_channel *dma;
1642     bool transfer_pending = false;
1643     - static bool use_sg;
1644    
1645     musb_ep_select(mbase, epnum);
1646     tx_csr = musb_readw(epio, MUSB_TXCSR);
1647     @@ -1463,9 +1462,9 @@ done:
1648     * NULL.
1649     */
1650     if (!urb->transfer_buffer)
1651     - use_sg = true;
1652     + qh->use_sg = true;
1653    
1654     - if (use_sg) {
1655     + if (qh->use_sg) {
1656     /* sg_miter_start is already done in musb_ep_program */
1657     if (!sg_miter_next(&qh->sg_miter)) {
1658     dev_err(musb->controller, "error: sg list empty\n");
1659     @@ -1484,9 +1483,9 @@ done:
1660    
1661     qh->segsize = length;
1662    
1663     - if (use_sg) {
1664     + if (qh->use_sg) {
1665     if (offset + length >= urb->transfer_buffer_length)
1666     - use_sg = false;
1667     + qh->use_sg = false;
1668     }
1669    
1670     musb_ep_select(mbase, epnum);
1671     @@ -1552,7 +1551,6 @@ void musb_host_rx(struct musb *musb, u8 epnum)
1672     bool done = false;
1673     u32 status;
1674     struct dma_channel *dma;
1675     - static bool use_sg;
1676     unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG;
1677    
1678     musb_ep_select(mbase, epnum);
1679     @@ -1878,12 +1876,12 @@ void musb_host_rx(struct musb *musb, u8 epnum)
1680     * NULL.
1681     */
1682     if (!urb->transfer_buffer) {
1683     - use_sg = true;
1684     + qh->use_sg = true;
1685     sg_miter_start(&qh->sg_miter, urb->sg, 1,
1686     sg_flags);
1687     }
1688    
1689     - if (use_sg) {
1690     + if (qh->use_sg) {
1691     if (!sg_miter_next(&qh->sg_miter)) {
1692     dev_err(musb->controller, "error: sg list empty\n");
1693     sg_miter_stop(&qh->sg_miter);
1694     @@ -1913,8 +1911,8 @@ finish:
1695     urb->actual_length += xfer_len;
1696     qh->offset += xfer_len;
1697     if (done) {
1698     - if (use_sg)
1699     - use_sg = false;
1700     + if (qh->use_sg)
1701     + qh->use_sg = false;
1702    
1703     if (urb->status == -EINPROGRESS)
1704     urb->status = status;
1705     diff --git a/drivers/usb/musb/musb_host.h b/drivers/usb/musb/musb_host.h
1706     index 5a9c8fe..738f7eb 100644
1707     --- a/drivers/usb/musb/musb_host.h
1708     +++ b/drivers/usb/musb/musb_host.h
1709     @@ -74,6 +74,7 @@ struct musb_qh {
1710     u16 frame; /* for periodic schedule */
1711     unsigned iso_idx; /* in urb->iso_frame_desc[] */
1712     struct sg_mapping_iter sg_miter; /* for highmem in PIO mode */
1713     + bool use_sg; /* to track urb using sglist */
1714     };
1715    
1716     /* map from control or bulk queue head to the first qh on that ring */
1717     diff --git a/drivers/usb/serial/ark3116.c b/drivers/usb/serial/ark3116.c
1718     index 4775f82..513d45f 100644
1719     --- a/drivers/usb/serial/ark3116.c
1720     +++ b/drivers/usb/serial/ark3116.c
1721     @@ -43,7 +43,7 @@
1722     #define DRIVER_NAME "ark3116"
1723    
1724     /* usb timeout of 1 second */
1725     -#define ARK_TIMEOUT (1*HZ)
1726     +#define ARK_TIMEOUT 1000
1727    
1728     static const struct usb_device_id id_table[] = {
1729     { USB_DEVICE(0x6547, 0x0232) },
1730     diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
1731     index ba7352e..9b145d3 100644
1732     --- a/drivers/usb/serial/cypress_m8.c
1733     +++ b/drivers/usb/serial/cypress_m8.c
1734     @@ -65,6 +65,7 @@ static const struct usb_device_id id_table_earthmate[] = {
1735     static const struct usb_device_id id_table_cyphidcomrs232[] = {
1736     { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
1737     { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
1738     + { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
1739     { } /* Terminating entry */
1740     };
1741    
1742     @@ -78,6 +79,7 @@ static const struct usb_device_id id_table_combined[] = {
1743     { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
1744     { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
1745     { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
1746     + { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
1747     { USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
1748     { } /* Terminating entry */
1749     };
1750     @@ -230,6 +232,12 @@ static struct usb_serial_driver * const serial_drivers[] = {
1751     * Cypress serial helper functions
1752     *****************************************************************************/
1753    
1754     +/* FRWD Dongle hidcom needs to skip reset and speed checks */
1755     +static inline bool is_frwd(struct usb_device *dev)
1756     +{
1757     + return ((le16_to_cpu(dev->descriptor.idVendor) == VENDOR_ID_FRWD) &&
1758     + (le16_to_cpu(dev->descriptor.idProduct) == PRODUCT_ID_CYPHIDCOM_FRWD));
1759     +}
1760    
1761     static int analyze_baud_rate(struct usb_serial_port *port, speed_t new_rate)
1762     {
1763     @@ -239,6 +247,10 @@ static int analyze_baud_rate(struct usb_serial_port *port, speed_t new_rate)
1764     if (unstable_bauds)
1765     return new_rate;
1766    
1767     + /* FRWD Dongle uses 115200 bps */
1768     + if (is_frwd(port->serial->dev))
1769     + return new_rate;
1770     +
1771     /*
1772     * The general purpose firmware for the Cypress M8 allows for
1773     * a maximum speed of 57600bps (I have no idea whether DeLorme
1774     @@ -449,7 +461,11 @@ static int cypress_generic_port_probe(struct usb_serial_port *port)
1775     return -ENOMEM;
1776     }
1777    
1778     - usb_reset_configuration(serial->dev);
1779     + /* Skip reset for FRWD device. It is a workaound:
1780     + device hangs if it receives SET_CONFIGURE in Configured
1781     + state. */
1782     + if (!is_frwd(serial->dev))
1783     + usb_reset_configuration(serial->dev);
1784    
1785     priv->cmd_ctrl = 0;
1786     priv->line_control = 0;
1787     diff --git a/drivers/usb/serial/cypress_m8.h b/drivers/usb/serial/cypress_m8.h
1788     index 67cf608..b461311 100644
1789     --- a/drivers/usb/serial/cypress_m8.h
1790     +++ b/drivers/usb/serial/cypress_m8.h
1791     @@ -24,6 +24,10 @@
1792     #define VENDOR_ID_CYPRESS 0x04b4
1793     #define PRODUCT_ID_CYPHIDCOM 0x5500
1794    
1795     +/* FRWD Dongle - a GPS sports watch */
1796     +#define VENDOR_ID_FRWD 0x6737
1797     +#define PRODUCT_ID_CYPHIDCOM_FRWD 0x0001
1798     +
1799     /* Powercom UPS, chip CY7C63723 */
1800     #define VENDOR_ID_POWERCOM 0x0d9f
1801     #define PRODUCT_ID_UPS 0x0002
1802     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1803     index 266ece7..e8e2837 100644
1804     --- a/drivers/usb/serial/ftdi_sio.c
1805     +++ b/drivers/usb/serial/ftdi_sio.c
1806     @@ -931,8 +931,8 @@ static int ftdi_get_icount(struct tty_struct *tty,
1807     static int ftdi_ioctl(struct tty_struct *tty,
1808     unsigned int cmd, unsigned long arg);
1809     static void ftdi_break_ctl(struct tty_struct *tty, int break_state);
1810     -static int ftdi_chars_in_buffer(struct tty_struct *tty);
1811     -static int ftdi_get_modem_status(struct tty_struct *tty,
1812     +static bool ftdi_tx_empty(struct usb_serial_port *port);
1813     +static int ftdi_get_modem_status(struct usb_serial_port *port,
1814     unsigned char status[2]);
1815    
1816     static unsigned short int ftdi_232am_baud_base_to_divisor(int baud, int base);
1817     @@ -968,7 +968,7 @@ static struct usb_serial_driver ftdi_sio_device = {
1818     .ioctl = ftdi_ioctl,
1819     .set_termios = ftdi_set_termios,
1820     .break_ctl = ftdi_break_ctl,
1821     - .chars_in_buffer = ftdi_chars_in_buffer,
1822     + .tx_empty = ftdi_tx_empty,
1823     };
1824    
1825     static struct usb_serial_driver * const serial_drivers[] = {
1826     @@ -2092,27 +2092,18 @@ static void ftdi_break_ctl(struct tty_struct *tty, int break_state)
1827    
1828     }
1829    
1830     -static int ftdi_chars_in_buffer(struct tty_struct *tty)
1831     +static bool ftdi_tx_empty(struct usb_serial_port *port)
1832     {
1833     - struct usb_serial_port *port = tty->driver_data;
1834     - int chars;
1835     unsigned char buf[2];
1836     int ret;
1837    
1838     - chars = usb_serial_generic_chars_in_buffer(tty);
1839     - if (chars)
1840     - goto out;
1841     -
1842     - /* Check if hardware buffer is empty. */
1843     - ret = ftdi_get_modem_status(tty, buf);
1844     + ret = ftdi_get_modem_status(port, buf);
1845     if (ret == 2) {
1846     if (!(buf[1] & FTDI_RS_TEMT))
1847     - chars = 1;
1848     + return false;
1849     }
1850     -out:
1851     - dev_dbg(&port->dev, "%s - %d\n", __func__, chars);
1852    
1853     - return chars;
1854     + return true;
1855     }
1856    
1857     /* old_termios contains the original termios settings and tty->termios contains
1858     @@ -2304,10 +2295,9 @@ no_c_cflag_changes:
1859     * Returns the number of status bytes retrieved (device dependant), or
1860     * negative error code.
1861     */
1862     -static int ftdi_get_modem_status(struct tty_struct *tty,
1863     +static int ftdi_get_modem_status(struct usb_serial_port *port,
1864     unsigned char status[2])
1865     {
1866     - struct usb_serial_port *port = tty->driver_data;
1867     struct ftdi_private *priv = usb_get_serial_port_data(port);
1868     unsigned char *buf;
1869     int len;
1870     @@ -2372,7 +2362,7 @@ static int ftdi_tiocmget(struct tty_struct *tty)
1871     unsigned char buf[2];
1872     int ret;
1873    
1874     - ret = ftdi_get_modem_status(tty, buf);
1875     + ret = ftdi_get_modem_status(port, buf);
1876     if (ret < 0)
1877     return ret;
1878    
1879     diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
1880     index 4c5c23f..7f4342b 100644
1881     --- a/drivers/usb/serial/generic.c
1882     +++ b/drivers/usb/serial/generic.c
1883     @@ -264,6 +264,37 @@ int usb_serial_generic_chars_in_buffer(struct tty_struct *tty)
1884     }
1885     EXPORT_SYMBOL_GPL(usb_serial_generic_chars_in_buffer);
1886    
1887     +void usb_serial_generic_wait_until_sent(struct tty_struct *tty, long timeout)
1888     +{
1889     + struct usb_serial_port *port = tty->driver_data;
1890     + unsigned int bps;
1891     + unsigned long period;
1892     + unsigned long expire;
1893     +
1894     + bps = tty_get_baud_rate(tty);
1895     + if (!bps)
1896     + bps = 9600; /* B0 */
1897     + /*
1898     + * Use a poll-period of roughly the time it takes to send one
1899     + * character or at least one jiffy.
1900     + */
1901     + period = max_t(unsigned long, (10 * HZ / bps), 1);
1902     + period = min_t(unsigned long, period, timeout);
1903     +
1904     + dev_dbg(&port->dev, "%s - timeout = %u ms, period = %u ms\n",
1905     + __func__, jiffies_to_msecs(timeout),
1906     + jiffies_to_msecs(period));
1907     + expire = jiffies + timeout;
1908     + while (!port->serial->type->tx_empty(port)) {
1909     + schedule_timeout_interruptible(period);
1910     + if (signal_pending(current))
1911     + break;
1912     + if (time_after(jiffies, expire))
1913     + break;
1914     + }
1915     +}
1916     +EXPORT_SYMBOL_GPL(usb_serial_generic_wait_until_sent);
1917     +
1918     static int usb_serial_generic_submit_read_urb(struct usb_serial_port *port,
1919     int index, gfp_t mem_flags)
1920     {
1921     diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
1922     index 38f2489..f26decd 100644
1923     --- a/drivers/usb/serial/io_ti.c
1924     +++ b/drivers/usb/serial/io_ti.c
1925     @@ -2033,8 +2033,6 @@ static int edge_chars_in_buffer(struct tty_struct *tty)
1926     struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1927     int chars = 0;
1928     unsigned long flags;
1929     - int ret;
1930     -
1931     if (edge_port == NULL)
1932     return 0;
1933    
1934     @@ -2042,16 +2040,22 @@ static int edge_chars_in_buffer(struct tty_struct *tty)
1935     chars = kfifo_len(&edge_port->write_fifo);
1936     spin_unlock_irqrestore(&edge_port->ep_lock, flags);
1937    
1938     - if (!chars) {
1939     - ret = tx_active(edge_port);
1940     - if (ret > 0)
1941     - chars = ret;
1942     - }
1943     -
1944     dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
1945     return chars;
1946     }
1947    
1948     +static bool edge_tx_empty(struct usb_serial_port *port)
1949     +{
1950     + struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1951     + int ret;
1952     +
1953     + ret = tx_active(edge_port);
1954     + if (ret > 0)
1955     + return false;
1956     +
1957     + return true;
1958     +}
1959     +
1960     static void edge_throttle(struct tty_struct *tty)
1961     {
1962     struct usb_serial_port *port = tty->driver_data;
1963     @@ -2622,6 +2626,7 @@ static struct usb_serial_driver edgeport_1port_device = {
1964     .write = edge_write,
1965     .write_room = edge_write_room,
1966     .chars_in_buffer = edge_chars_in_buffer,
1967     + .tx_empty = edge_tx_empty,
1968     .break_ctl = edge_break,
1969     .read_int_callback = edge_interrupt_callback,
1970     .read_bulk_callback = edge_bulk_in_callback,
1971     @@ -2653,6 +2658,7 @@ static struct usb_serial_driver edgeport_2port_device = {
1972     .write = edge_write,
1973     .write_room = edge_write_room,
1974     .chars_in_buffer = edge_chars_in_buffer,
1975     + .tx_empty = edge_tx_empty,
1976     .break_ctl = edge_break,
1977     .read_int_callback = edge_interrupt_callback,
1978     .read_bulk_callback = edge_bulk_in_callback,
1979     diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
1980     index ff77027..5687e26 100644
1981     --- a/drivers/usb/serial/iuu_phoenix.c
1982     +++ b/drivers/usb/serial/iuu_phoenix.c
1983     @@ -289,7 +289,7 @@ static int bulk_immediate(struct usb_serial_port *port, u8 *buf, u8 count)
1984     usb_bulk_msg(serial->dev,
1985     usb_sndbulkpipe(serial->dev,
1986     port->bulk_out_endpointAddress), buf,
1987     - count, &actual, HZ * 1);
1988     + count, &actual, 1000);
1989    
1990     if (status != IUU_OPERATION_OK)
1991     dev_dbg(&port->dev, "%s - error = %2x\n", __func__, status);
1992     @@ -309,7 +309,7 @@ static int read_immediate(struct usb_serial_port *port, u8 *buf, u8 count)
1993     usb_bulk_msg(serial->dev,
1994     usb_rcvbulkpipe(serial->dev,
1995     port->bulk_in_endpointAddress), buf,
1996     - count, &actual, HZ * 1);
1997     + count, &actual, 1000);
1998    
1999     if (status != IUU_OPERATION_OK)
2000     dev_dbg(&port->dev, "%s - error = %2x\n", __func__, status);
2001     diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
2002     index 1fd1935..34ed26e 100644
2003     --- a/drivers/usb/serial/keyspan.c
2004     +++ b/drivers/usb/serial/keyspan.c
2005     @@ -1594,7 +1594,7 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
2006     d_details = s_priv->device_details;
2007     device_port = port->number - port->serial->minor;
2008    
2009     - outcont_urb = d_details->outcont_endpoints[port->number];
2010     + outcont_urb = d_details->outcont_endpoints[device_port];
2011     this_urb = p_priv->outcont_urb;
2012    
2013     dev_dbg(&port->dev, "%s - endpoint %d\n", __func__, usb_pipeendpoint(this_urb->pipe));
2014     diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
2015     index e0ebec3..0923689 100644
2016     --- a/drivers/usb/serial/mos7720.c
2017     +++ b/drivers/usb/serial/mos7720.c
2018     @@ -40,7 +40,7 @@
2019     #define DRIVER_DESC "Moschip USB Serial Driver"
2020    
2021     /* default urb timeout */
2022     -#define MOS_WDR_TIMEOUT (HZ * 5)
2023     +#define MOS_WDR_TIMEOUT 5000
2024    
2025     #define MOS_MAX_PORT 0x02
2026     #define MOS_WRITE 0x0E
2027     @@ -228,11 +228,22 @@ static int read_mos_reg(struct usb_serial *serial, unsigned int serial_portnum,
2028     __u8 requesttype = (__u8)0xc0;
2029     __u16 index = get_reg_index(reg);
2030     __u16 value = get_reg_value(reg, serial_portnum);
2031     - int status = usb_control_msg(usbdev, pipe, request, requesttype, value,
2032     - index, data, 1, MOS_WDR_TIMEOUT);
2033     - if (status < 0)
2034     + u8 *buf;
2035     + int status;
2036     +
2037     + buf = kmalloc(1, GFP_KERNEL);
2038     + if (!buf)
2039     + return -ENOMEM;
2040     +
2041     + status = usb_control_msg(usbdev, pipe, request, requesttype, value,
2042     + index, buf, 1, MOS_WDR_TIMEOUT);
2043     + if (status == 1)
2044     + *data = *buf;
2045     + else if (status < 0)
2046     dev_err(&usbdev->dev,
2047     "mos7720: usb_control_msg() failed: %d", status);
2048     + kfree(buf);
2049     +
2050     return status;
2051     }
2052    
2053     @@ -1633,7 +1644,7 @@ static void change_port_settings(struct tty_struct *tty,
2054     mos7720_port->shadowMCR |= (UART_MCR_XONANY);
2055     /* To set hardware flow control to the specified *
2056     * serial port, in SP1/2_CONTROL_REG */
2057     - if (port->number)
2058     + if (port_number)
2059     write_mos_reg(serial, dummy, SP_CONTROL_REG, 0x01);
2060     else
2061     write_mos_reg(serial, dummy, SP_CONTROL_REG, 0x02);
2062     @@ -1992,7 +2003,7 @@ static int mos7720_startup(struct usb_serial *serial)
2063    
2064     /* setting configuration feature to one */
2065     usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
2066     - (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5*HZ);
2067     + (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5000);
2068    
2069     /* start the interrupt urb */
2070     ret_val = usb_submit_urb(serial->port[0]->interrupt_in_urb, GFP_KERNEL);
2071     @@ -2035,7 +2046,7 @@ static void mos7720_release(struct usb_serial *serial)
2072     /* wait for synchronous usb calls to return */
2073     if (mos_parport->msg_pending)
2074     wait_for_completion_timeout(&mos_parport->syncmsg_compl,
2075     - MOS_WDR_TIMEOUT);
2076     + msecs_to_jiffies(MOS_WDR_TIMEOUT));
2077    
2078     parport_remove_port(mos_parport->pp);
2079     usb_set_serial_data(serial, NULL);
2080     diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
2081     index b8051fa..2c14a31 100644
2082     --- a/drivers/usb/serial/mos7840.c
2083     +++ b/drivers/usb/serial/mos7840.c
2084     @@ -2255,13 +2255,21 @@ static int mos7840_ioctl(struct tty_struct *tty,
2085     static int mos7810_check(struct usb_serial *serial)
2086     {
2087     int i, pass_count = 0;
2088     + u8 *buf;
2089     __u16 data = 0, mcr_data = 0;
2090     __u16 test_pattern = 0x55AA;
2091     + int res;
2092     +
2093     + buf = kmalloc(VENDOR_READ_LENGTH, GFP_KERNEL);
2094     + if (!buf)
2095     + return 0; /* failed to identify 7810 */
2096    
2097     /* Store MCR setting */
2098     - usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
2099     + res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
2100     MCS_RDREQ, MCS_RD_RTYPE, 0x0300, MODEM_CONTROL_REGISTER,
2101     - &mcr_data, VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2102     + buf, VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2103     + if (res == VENDOR_READ_LENGTH)
2104     + mcr_data = *buf;
2105    
2106     for (i = 0; i < 16; i++) {
2107     /* Send the 1-bit test pattern out to MCS7810 test pin */
2108     @@ -2271,9 +2279,12 @@ static int mos7810_check(struct usb_serial *serial)
2109     MODEM_CONTROL_REGISTER, NULL, 0, MOS_WDR_TIMEOUT);
2110    
2111     /* Read the test pattern back */
2112     - usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
2113     - MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &data,
2114     - VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2115     + res = usb_control_msg(serial->dev,
2116     + usb_rcvctrlpipe(serial->dev, 0), MCS_RDREQ,
2117     + MCS_RD_RTYPE, 0, GPIO_REGISTER, buf,
2118     + VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2119     + if (res == VENDOR_READ_LENGTH)
2120     + data = *buf;
2121    
2122     /* If this is a MCS7810 device, both test patterns must match */
2123     if (((test_pattern >> i) ^ (~data >> 1)) & 0x0001)
2124     @@ -2287,6 +2298,8 @@ static int mos7810_check(struct usb_serial *serial)
2125     MCS_WR_RTYPE, 0x0300 | mcr_data, MODEM_CONTROL_REGISTER, NULL,
2126     0, MOS_WDR_TIMEOUT);
2127    
2128     + kfree(buf);
2129     +
2130     if (pass_count == 16)
2131     return 1;
2132    
2133     @@ -2296,11 +2309,17 @@ static int mos7810_check(struct usb_serial *serial)
2134     static int mos7840_calc_num_ports(struct usb_serial *serial)
2135     {
2136     __u16 data = 0x00;
2137     + u8 *buf;
2138     int mos7840_num_ports;
2139    
2140     - usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
2141     - MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &data,
2142     - VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2143     + buf = kzalloc(VENDOR_READ_LENGTH, GFP_KERNEL);
2144     + if (buf) {
2145     + usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
2146     + MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, buf,
2147     + VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2148     + data = *buf;
2149     + kfree(buf);
2150     + }
2151    
2152     if (serial->dev->descriptor.idProduct == MOSCHIP_DEVICE_ID_7810 ||
2153     serial->dev->descriptor.idProduct == MOSCHIP_DEVICE_ID_7820) {
2154     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
2155     index 87181be..9162db2 100644
2156     --- a/drivers/usb/serial/option.c
2157     +++ b/drivers/usb/serial/option.c
2158     @@ -250,13 +250,7 @@ static void option_instat_callback(struct urb *urb);
2159     #define ZTE_PRODUCT_MF622 0x0001
2160     #define ZTE_PRODUCT_MF628 0x0015
2161     #define ZTE_PRODUCT_MF626 0x0031
2162     -#define ZTE_PRODUCT_CDMA_TECH 0xfffe
2163     -#define ZTE_PRODUCT_AC8710 0xfff1
2164     -#define ZTE_PRODUCT_AC2726 0xfff5
2165     -#define ZTE_PRODUCT_AC8710T 0xffff
2166     #define ZTE_PRODUCT_MC2718 0xffe8
2167     -#define ZTE_PRODUCT_AD3812 0xffeb
2168     -#define ZTE_PRODUCT_MC2716 0xffed
2169    
2170     #define BENQ_VENDOR_ID 0x04a5
2171     #define BENQ_PRODUCT_H10 0x4068
2172     @@ -495,18 +489,10 @@ static const struct option_blacklist_info zte_k3765_z_blacklist = {
2173     .reserved = BIT(4),
2174     };
2175    
2176     -static const struct option_blacklist_info zte_ad3812_z_blacklist = {
2177     - .sendsetup = BIT(0) | BIT(1) | BIT(2),
2178     -};
2179     -
2180     static const struct option_blacklist_info zte_mc2718_z_blacklist = {
2181     .sendsetup = BIT(1) | BIT(2) | BIT(3) | BIT(4),
2182     };
2183    
2184     -static const struct option_blacklist_info zte_mc2716_z_blacklist = {
2185     - .sendsetup = BIT(1) | BIT(2) | BIT(3),
2186     -};
2187     -
2188     static const struct option_blacklist_info huawei_cdc12_blacklist = {
2189     .reserved = BIT(1) | BIT(2),
2190     };
2191     @@ -593,6 +579,8 @@ static const struct usb_device_id option_ids[] = {
2192     .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
2193     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff),
2194     .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
2195     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x14ac, 0xff, 0xff, 0xff), /* Huawei E1820 */
2196     + .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
2197     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff),
2198     .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
2199     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0xff, 0xff) },
2200     @@ -797,7 +785,6 @@ static const struct usb_device_id option_ids[] = {
2201     { USB_DEVICE_INTERFACE_CLASS(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012, 0xff) },
2202     { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
2203     { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
2204     - { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */
2205     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
2206     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
2207     { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */
2208     @@ -1199,16 +1186,9 @@ static const struct usb_device_id option_ids[] = {
2209     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff),
2210     .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
2211    
2212     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) },
2213     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) },
2214     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
2215     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) },
2216     + /* NOTE: most ZTE CDMA devices should be driven by zte_ev, not option */
2217     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff),
2218     .driver_info = (kernel_ulong_t)&zte_mc2718_z_blacklist },
2219     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AD3812, 0xff, 0xff, 0xff),
2220     - .driver_info = (kernel_ulong_t)&zte_ad3812_z_blacklist },
2221     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2716, 0xff, 0xff, 0xff),
2222     - .driver_info = (kernel_ulong_t)&zte_mc2716_z_blacklist },
2223     { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x01) },
2224     { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x05) },
2225     { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x86, 0x10) },
2226     diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
2227     index 59b32b7..bd794b4 100644
2228     --- a/drivers/usb/serial/qcserial.c
2229     +++ b/drivers/usb/serial/qcserial.c
2230     @@ -118,6 +118,7 @@ static const struct usb_device_id id_table[] = {
2231     {USB_DEVICE(0x1199, 0x901b)}, /* Sierra Wireless MC7770 */
2232     {USB_DEVICE(0x12D1, 0x14F0)}, /* Sony Gobi 3000 QDL */
2233     {USB_DEVICE(0x12D1, 0x14F1)}, /* Sony Gobi 3000 Composite */
2234     + {USB_DEVICE(0x0AF0, 0x8120)}, /* Option GTM681W */
2235    
2236     /* non Gobi Qualcomm serial devices */
2237     {USB_DEVICE_INTERFACE_NUMBER(0x0f3d, 0x68a2, 0)}, /* Sierra Wireless MC7700 Device Management */
2238     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
2239     index 5d9b178..42de53c 100644
2240     --- a/drivers/usb/serial/usb-serial.c
2241     +++ b/drivers/usb/serial/usb-serial.c
2242     @@ -379,6 +379,22 @@ static int serial_chars_in_buffer(struct tty_struct *tty)
2243     return count;
2244     }
2245    
2246     +static void serial_wait_until_sent(struct tty_struct *tty, int timeout)
2247     +{
2248     + struct usb_serial_port *port = tty->driver_data;
2249     + struct usb_serial *serial = port->serial;
2250     +
2251     + dev_dbg(tty->dev, "%s\n", __func__);
2252     +
2253     + if (!port->serial->type->wait_until_sent)
2254     + return;
2255     +
2256     + mutex_lock(&serial->disc_mutex);
2257     + if (!serial->disconnected)
2258     + port->serial->type->wait_until_sent(tty, timeout);
2259     + mutex_unlock(&serial->disc_mutex);
2260     +}
2261     +
2262     static void serial_throttle(struct tty_struct *tty)
2263     {
2264     struct usb_serial_port *port = tty->driver_data;
2265     @@ -1204,6 +1220,7 @@ static const struct tty_operations serial_ops = {
2266     .unthrottle = serial_unthrottle,
2267     .break_ctl = serial_break,
2268     .chars_in_buffer = serial_chars_in_buffer,
2269     + .wait_until_sent = serial_wait_until_sent,
2270     .tiocmget = serial_tiocmget,
2271     .tiocmset = serial_tiocmset,
2272     .get_icount = serial_get_icount,
2273     @@ -1329,6 +1346,8 @@ static void fixup_generic(struct usb_serial_driver *device)
2274     set_to_generic_if_null(device, close);
2275     set_to_generic_if_null(device, write_room);
2276     set_to_generic_if_null(device, chars_in_buffer);
2277     + if (device->tx_empty)
2278     + set_to_generic_if_null(device, wait_until_sent);
2279     set_to_generic_if_null(device, read_bulk_callback);
2280     set_to_generic_if_null(device, write_bulk_callback);
2281     set_to_generic_if_null(device, disconnect);
2282     diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
2283     index 1129aa7..c24ee17 100644
2284     --- a/drivers/usb/serial/visor.c
2285     +++ b/drivers/usb/serial/visor.c
2286     @@ -566,10 +566,19 @@ static int treo_attach(struct usb_serial *serial)
2287     */
2288     #define COPY_PORT(dest, src) \
2289     do { \
2290     + int i; \
2291     + \
2292     + for (i = 0; i < ARRAY_SIZE(src->read_urbs); ++i) { \
2293     + dest->read_urbs[i] = src->read_urbs[i]; \
2294     + dest->read_urbs[i]->context = dest; \
2295     + dest->bulk_in_buffers[i] = src->bulk_in_buffers[i]; \
2296     + } \
2297     dest->read_urb = src->read_urb; \
2298     dest->bulk_in_endpointAddress = src->bulk_in_endpointAddress;\
2299     dest->bulk_in_buffer = src->bulk_in_buffer; \
2300     + dest->bulk_in_size = src->bulk_in_size; \
2301     dest->interrupt_in_urb = src->interrupt_in_urb; \
2302     + dest->interrupt_in_urb->context = dest; \
2303     dest->interrupt_in_endpointAddress = \
2304     src->interrupt_in_endpointAddress;\
2305     dest->interrupt_in_buffer = src->interrupt_in_buffer; \
2306     diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
2307     index b9fca35..347caad 100644
2308     --- a/drivers/usb/serial/whiteheat.c
2309     +++ b/drivers/usb/serial/whiteheat.c
2310     @@ -649,7 +649,7 @@ static void firm_setup_port(struct tty_struct *tty)
2311     struct whiteheat_port_settings port_settings;
2312     unsigned int cflag = tty->termios.c_cflag;
2313    
2314     - port_settings.port = port->number + 1;
2315     + port_settings.port = port->number - port->serial->minor + 1;
2316    
2317     /* get the byte size */
2318     switch (cflag & CSIZE) {
2319     diff --git a/drivers/usb/serial/zte_ev.c b/drivers/usb/serial/zte_ev.c
2320     index 39ee737..fca4c75 100644
2321     --- a/drivers/usb/serial/zte_ev.c
2322     +++ b/drivers/usb/serial/zte_ev.c
2323     @@ -41,9 +41,6 @@ static int zte_ev_usb_serial_open(struct tty_struct *tty,
2324     int len;
2325     unsigned char *buf;
2326    
2327     - if (port->number != 0)
2328     - return -ENODEV;
2329     -
2330     buf = kmalloc(MAX_SETUP_DATA_SIZE, GFP_KERNEL);
2331     if (!buf)
2332     return -ENOMEM;
2333     @@ -53,7 +50,7 @@ static int zte_ev_usb_serial_open(struct tty_struct *tty,
2334     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2335     0x22, 0x21,
2336     0x0001, 0x0000, NULL, len,
2337     - HZ * USB_CTRL_GET_TIMEOUT);
2338     + USB_CTRL_GET_TIMEOUT);
2339     dev_dbg(dev, "result = %d\n", result);
2340    
2341     /* send 2st cmd and recieve data */
2342     @@ -65,7 +62,7 @@ static int zte_ev_usb_serial_open(struct tty_struct *tty,
2343     result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
2344     0x21, 0xa1,
2345     0x0000, 0x0000, buf, len,
2346     - HZ * USB_CTRL_GET_TIMEOUT);
2347     + USB_CTRL_GET_TIMEOUT);
2348     debug_data(dev, __func__, len, buf, result);
2349    
2350     /* send 3 cmd */
2351     @@ -84,7 +81,7 @@ static int zte_ev_usb_serial_open(struct tty_struct *tty,
2352     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2353     0x20, 0x21,
2354     0x0000, 0x0000, buf, len,
2355     - HZ * USB_CTRL_GET_TIMEOUT);
2356     + USB_CTRL_GET_TIMEOUT);
2357     debug_data(dev, __func__, len, buf, result);
2358    
2359     /* send 4 cmd */
2360     @@ -95,7 +92,7 @@ static int zte_ev_usb_serial_open(struct tty_struct *tty,
2361     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2362     0x22, 0x21,
2363     0x0003, 0x0000, NULL, len,
2364     - HZ * USB_CTRL_GET_TIMEOUT);
2365     + USB_CTRL_GET_TIMEOUT);
2366     dev_dbg(dev, "result = %d\n", result);
2367    
2368     /* send 5 cmd */
2369     @@ -107,7 +104,7 @@ static int zte_ev_usb_serial_open(struct tty_struct *tty,
2370     result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
2371     0x21, 0xa1,
2372     0x0000, 0x0000, buf, len,
2373     - HZ * USB_CTRL_GET_TIMEOUT);
2374     + USB_CTRL_GET_TIMEOUT);
2375     debug_data(dev, __func__, len, buf, result);
2376    
2377     /* send 6 cmd */
2378     @@ -126,7 +123,7 @@ static int zte_ev_usb_serial_open(struct tty_struct *tty,
2379     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2380     0x20, 0x21,
2381     0x0000, 0x0000, buf, len,
2382     - HZ * USB_CTRL_GET_TIMEOUT);
2383     + USB_CTRL_GET_TIMEOUT);
2384     debug_data(dev, __func__, len, buf, result);
2385     kfree(buf);
2386    
2387     @@ -166,9 +163,6 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2388     int len;
2389     unsigned char *buf;
2390    
2391     - if (port->number != 0)
2392     - return;
2393     -
2394     buf = kmalloc(MAX_SETUP_DATA_SIZE, GFP_KERNEL);
2395     if (!buf)
2396     return;
2397     @@ -178,7 +172,7 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2398     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2399     0x22, 0x21,
2400     0x0002, 0x0000, NULL, len,
2401     - HZ * USB_CTRL_GET_TIMEOUT);
2402     + USB_CTRL_GET_TIMEOUT);
2403     dev_dbg(dev, "result = %d\n", result);
2404    
2405     /* send 2st ctl cmd(CTL 21 22 03 00 00 00 00 00 ) */
2406     @@ -186,7 +180,7 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2407     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2408     0x22, 0x21,
2409     0x0003, 0x0000, NULL, len,
2410     - HZ * USB_CTRL_GET_TIMEOUT);
2411     + USB_CTRL_GET_TIMEOUT);
2412     dev_dbg(dev, "result = %d\n", result);
2413    
2414     /* send 3st cmd and recieve data */
2415     @@ -198,7 +192,7 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2416     result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
2417     0x21, 0xa1,
2418     0x0000, 0x0000, buf, len,
2419     - HZ * USB_CTRL_GET_TIMEOUT);
2420     + USB_CTRL_GET_TIMEOUT);
2421     debug_data(dev, __func__, len, buf, result);
2422    
2423     /* send 4 cmd */
2424     @@ -217,7 +211,7 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2425     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2426     0x20, 0x21,
2427     0x0000, 0x0000, buf, len,
2428     - HZ * USB_CTRL_GET_TIMEOUT);
2429     + USB_CTRL_GET_TIMEOUT);
2430     debug_data(dev, __func__, len, buf, result);
2431    
2432     /* send 5 cmd */
2433     @@ -228,7 +222,7 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2434     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2435     0x22, 0x21,
2436     0x0003, 0x0000, NULL, len,
2437     - HZ * USB_CTRL_GET_TIMEOUT);
2438     + USB_CTRL_GET_TIMEOUT);
2439     dev_dbg(dev, "result = %d\n", result);
2440    
2441     /* send 6 cmd */
2442     @@ -240,7 +234,7 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2443     result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
2444     0x21, 0xa1,
2445     0x0000, 0x0000, buf, len,
2446     - HZ * USB_CTRL_GET_TIMEOUT);
2447     + USB_CTRL_GET_TIMEOUT);
2448     debug_data(dev, __func__, len, buf, result);
2449    
2450     /* send 7 cmd */
2451     @@ -259,7 +253,7 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2452     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2453     0x20, 0x21,
2454     0x0000, 0x0000, buf, len,
2455     - HZ * USB_CTRL_GET_TIMEOUT);
2456     + USB_CTRL_GET_TIMEOUT);
2457     debug_data(dev, __func__, len, buf, result);
2458    
2459     /* send 8 cmd */
2460     @@ -270,7 +264,7 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2461     result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2462     0x22, 0x21,
2463     0x0003, 0x0000, NULL, len,
2464     - HZ * USB_CTRL_GET_TIMEOUT);
2465     + USB_CTRL_GET_TIMEOUT);
2466     dev_dbg(dev, "result = %d\n", result);
2467    
2468     kfree(buf);
2469     @@ -279,11 +273,29 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2470     }
2471    
2472     static const struct usb_device_id id_table[] = {
2473     - { USB_DEVICE(0x19d2, 0xffff) }, /* AC8700 */
2474     - { USB_DEVICE(0x19d2, 0xfffe) },
2475     - { USB_DEVICE(0x19d2, 0xfffd) }, /* MG880 */
2476     + /* AC8710, AC8710T */
2477     + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffff, 0xff, 0xff, 0xff) },
2478     + /* AC8700 */
2479     + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffe, 0xff, 0xff, 0xff) },
2480     + /* MG880 */
2481     + { USB_DEVICE(0x19d2, 0xfffd) },
2482     + { USB_DEVICE(0x19d2, 0xfffc) },
2483     + { USB_DEVICE(0x19d2, 0xfffb) },
2484     + /* AC2726, AC8710_V3 */
2485     + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff1, 0xff, 0xff, 0xff) },
2486     + { USB_DEVICE(0x19d2, 0xfff6) },
2487     + { USB_DEVICE(0x19d2, 0xfff7) },
2488     + { USB_DEVICE(0x19d2, 0xfff8) },
2489     + { USB_DEVICE(0x19d2, 0xfff9) },
2490     + { USB_DEVICE(0x19d2, 0xffee) },
2491     + /* AC2716, MC2716 */
2492     + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffed, 0xff, 0xff, 0xff) },
2493     + /* AD3812 */
2494     + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffeb, 0xff, 0xff, 0xff) },
2495     + { USB_DEVICE(0x19d2, 0xffec) },
2496     { USB_DEVICE(0x05C6, 0x3197) },
2497     { USB_DEVICE(0x05C6, 0x6000) },
2498     + { USB_DEVICE(0x05C6, 0x9008) },
2499     { },
2500     };
2501     MODULE_DEVICE_TABLE(usb, id_table);
2502     diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
2503     index 21b3a29..6c4b480 100644
2504     --- a/fs/cifs/connect.c
2505     +++ b/fs/cifs/connect.c
2506     @@ -3332,8 +3332,8 @@ build_unc_path_to_root(const struct smb_vol *vol,
2507     pos = full_path + unc_len;
2508    
2509     if (pplen) {
2510     - *pos++ = CIFS_DIR_SEP(cifs_sb);
2511     - strncpy(pos, vol->prepath, pplen);
2512     + *pos = CIFS_DIR_SEP(cifs_sb);
2513     + strncpy(pos + 1, vol->prepath, pplen);
2514     pos += pplen;
2515     }
2516    
2517     diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
2518     index 63b1f54..3d7fb59 100644
2519     --- a/fs/ecryptfs/file.c
2520     +++ b/fs/ecryptfs/file.c
2521     @@ -294,6 +294,12 @@ static int ecryptfs_release(struct inode *inode, struct file *file)
2522     static int
2523     ecryptfs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2524     {
2525     + int rc;
2526     +
2527     + rc = filemap_write_and_wait(file->f_mapping);
2528     + if (rc)
2529     + return rc;
2530     +
2531     return vfs_fsync(ecryptfs_file_to_lower(file), datasync);
2532     }
2533    
2534     diff --git a/fs/hpfs/file.c b/fs/hpfs/file.c
2535     index 9f9dbec..5d325c5 100644
2536     --- a/fs/hpfs/file.c
2537     +++ b/fs/hpfs/file.c
2538     @@ -109,10 +109,14 @@ static void hpfs_write_failed(struct address_space *mapping, loff_t to)
2539     {
2540     struct inode *inode = mapping->host;
2541    
2542     + hpfs_lock(inode->i_sb);
2543     +
2544     if (to > inode->i_size) {
2545     truncate_pagecache(inode, to, inode->i_size);
2546     hpfs_truncate(inode);
2547     }
2548     +
2549     + hpfs_unlock(inode->i_sb);
2550     }
2551    
2552     static int hpfs_write_begin(struct file *file, struct address_space *mapping,
2553     diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
2554     index 1819b59..73afb19 100644
2555     --- a/include/linux/usb/serial.h
2556     +++ b/include/linux/usb/serial.h
2557     @@ -267,6 +267,8 @@ struct usb_serial_driver {
2558     struct usb_serial_port *port, struct ktermios *old);
2559     void (*break_ctl)(struct tty_struct *tty, int break_state);
2560     int (*chars_in_buffer)(struct tty_struct *tty);
2561     + void (*wait_until_sent)(struct tty_struct *tty, long timeout);
2562     + bool (*tx_empty)(struct usb_serial_port *port);
2563     void (*throttle)(struct tty_struct *tty);
2564     void (*unthrottle)(struct tty_struct *tty);
2565     int (*tiocmget)(struct tty_struct *tty);
2566     @@ -325,6 +327,8 @@ extern void usb_serial_generic_close(struct usb_serial_port *port);
2567     extern int usb_serial_generic_resume(struct usb_serial *serial);
2568     extern int usb_serial_generic_write_room(struct tty_struct *tty);
2569     extern int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
2570     +extern void usb_serial_generic_wait_until_sent(struct tty_struct *tty,
2571     + long timeout);
2572     extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
2573     extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
2574     extern void usb_serial_generic_throttle(struct tty_struct *tty);
2575     diff --git a/kernel/softirq.c b/kernel/softirq.c
2576     index 14d7758..d93dcb1 100644
2577     --- a/kernel/softirq.c
2578     +++ b/kernel/softirq.c
2579     @@ -195,8 +195,12 @@ void local_bh_enable_ip(unsigned long ip)
2580     EXPORT_SYMBOL(local_bh_enable_ip);
2581    
2582     /*
2583     - * We restart softirq processing for at most 2 ms,
2584     - * and if need_resched() is not set.
2585     + * We restart softirq processing for at most MAX_SOFTIRQ_RESTART times,
2586     + * but break the loop if need_resched() is set or after 2 ms.
2587     + * The MAX_SOFTIRQ_TIME provides a nice upper bound in most cases, but in
2588     + * certain cases, such as stop_machine(), jiffies may cease to
2589     + * increment and so we need the MAX_SOFTIRQ_RESTART limit as
2590     + * well to make sure we eventually return from this method.
2591     *
2592     * These limits have been established via experimentation.
2593     * The two things to balance is latency against fairness -
2594     @@ -204,6 +208,7 @@ EXPORT_SYMBOL(local_bh_enable_ip);
2595     * should not be able to lock up the box.
2596     */
2597     #define MAX_SOFTIRQ_TIME msecs_to_jiffies(2)
2598     +#define MAX_SOFTIRQ_RESTART 10
2599    
2600     asmlinkage void __do_softirq(void)
2601     {
2602     @@ -212,6 +217,7 @@ asmlinkage void __do_softirq(void)
2603     unsigned long end = jiffies + MAX_SOFTIRQ_TIME;
2604     int cpu;
2605     unsigned long old_flags = current->flags;
2606     + int max_restart = MAX_SOFTIRQ_RESTART;
2607    
2608     /*
2609     * Mask out PF_MEMALLOC s current task context is borrowed for the
2610     @@ -265,7 +271,8 @@ restart:
2611    
2612     pending = local_softirq_pending();
2613     if (pending) {
2614     - if (time_before(jiffies, end) && !need_resched())
2615     + if (time_before(jiffies, end) && !need_resched() &&
2616     + --max_restart)
2617     goto restart;
2618    
2619     wakeup_softirqd();
2620     diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
2621     index 9a0bc98..183df62 100644
2622     --- a/kernel/time/timekeeping.c
2623     +++ b/kernel/time/timekeeping.c
2624     @@ -826,6 +826,14 @@ static int timekeeping_suspend(void)
2625    
2626     read_persistent_clock(&timekeeping_suspend_time);
2627    
2628     + /*
2629     + * On some systems the persistent_clock can not be detected at
2630     + * timekeeping_init by its return value, so if we see a valid
2631     + * value returned, update the persistent_clock_exists flag.
2632     + */
2633     + if (timekeeping_suspend_time.tv_sec || timekeeping_suspend_time.tv_nsec)
2634     + persistent_clock_exist = true;
2635     +
2636     write_seqlock_irqsave(&tk->lock, flags);
2637     timekeeping_forward_now(tk);
2638     timekeeping_suspended = 1;
2639     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
2640     index d74500b..222b6de 100644
2641     --- a/sound/pci/hda/hda_generic.c
2642     +++ b/sound/pci/hda/hda_generic.c
2643     @@ -772,6 +772,8 @@ static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
2644     return;
2645     if (codec->inv_eapd)
2646     enable = !enable;
2647     + if (spec->keep_eapd_on && !enable)
2648     + return;
2649     snd_hda_codec_update_cache(codec, pin, 0,
2650     AC_VERB_SET_EAPD_BTLENABLE,
2651     enable ? 0x02 : 0x00);
2652     @@ -3671,6 +3673,36 @@ static void update_automute_all(struct hda_codec *codec)
2653     snd_hda_gen_mic_autoswitch(codec, NULL);
2654     }
2655    
2656     +/* call appropriate hooks */
2657     +static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
2658     +{
2659     + struct hda_gen_spec *spec = codec->spec;
2660     + if (spec->hp_automute_hook)
2661     + spec->hp_automute_hook(codec, jack);
2662     + else
2663     + snd_hda_gen_hp_automute(codec, jack);
2664     +}
2665     +
2666     +static void call_line_automute(struct hda_codec *codec,
2667     + struct hda_jack_tbl *jack)
2668     +{
2669     + struct hda_gen_spec *spec = codec->spec;
2670     + if (spec->line_automute_hook)
2671     + spec->line_automute_hook(codec, jack);
2672     + else
2673     + snd_hda_gen_line_automute(codec, jack);
2674     +}
2675     +
2676     +static void call_mic_autoswitch(struct hda_codec *codec,
2677     + struct hda_jack_tbl *jack)
2678     +{
2679     + struct hda_gen_spec *spec = codec->spec;
2680     + if (spec->mic_autoswitch_hook)
2681     + spec->mic_autoswitch_hook(codec, jack);
2682     + else
2683     + snd_hda_gen_mic_autoswitch(codec, jack);
2684     +}
2685     +
2686     /*
2687     * Auto-Mute mode mixer enum support
2688     */
2689     @@ -3805,9 +3837,7 @@ static int check_auto_mute_availability(struct hda_codec *codec)
2690     snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n",
2691     nid);
2692     snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT,
2693     - spec->hp_automute_hook ?
2694     - spec->hp_automute_hook :
2695     - snd_hda_gen_hp_automute);
2696     + call_hp_automute);
2697     spec->detect_hp = 1;
2698     }
2699    
2700     @@ -3820,9 +3850,7 @@ static int check_auto_mute_availability(struct hda_codec *codec)
2701     snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid);
2702     snd_hda_jack_detect_enable_callback(codec, nid,
2703     HDA_GEN_FRONT_EVENT,
2704     - spec->line_automute_hook ?
2705     - spec->line_automute_hook :
2706     - snd_hda_gen_line_automute);
2707     + call_line_automute);
2708     spec->detect_lo = 1;
2709     }
2710     spec->automute_lo_possible = spec->detect_hp;
2711     @@ -3864,9 +3892,7 @@ static bool auto_mic_check_imux(struct hda_codec *codec)
2712     snd_hda_jack_detect_enable_callback(codec,
2713     spec->am_entry[i].pin,
2714     HDA_GEN_MIC_EVENT,
2715     - spec->mic_autoswitch_hook ?
2716     - spec->mic_autoswitch_hook :
2717     - snd_hda_gen_mic_autoswitch);
2718     + call_mic_autoswitch);
2719     return true;
2720     }
2721    
2722     diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
2723     index 009b57b..aee3238 100644
2724     --- a/sound/pci/hda/hda_generic.h
2725     +++ b/sound/pci/hda/hda_generic.h
2726     @@ -205,6 +205,7 @@ struct hda_gen_spec {
2727     unsigned int multi_cap_vol:1; /* allow multiple capture xxx volumes */
2728     unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */
2729     unsigned int own_eapd_ctl:1; /* set EAPD by own function */
2730     + unsigned int keep_eapd_on:1; /* don't turn off EAPD automatically */
2731     unsigned int vmaster_mute_enum:1; /* add vmaster mute mode enum */
2732     unsigned int indep_hp:1; /* independent HP supported */
2733     unsigned int prefer_hp_amp:1; /* enable HP amp for speaker if any */
2734     diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
2735     index c35338a..9a9a032 100644
2736     --- a/sound/pci/hda/patch_via.c
2737     +++ b/sound/pci/hda/patch_via.c
2738     @@ -136,6 +136,7 @@ static struct via_spec *via_new_spec(struct hda_codec *codec)
2739     spec->codec_type = VT1708S;
2740     spec->no_pin_power_ctl = 1;
2741     spec->gen.indep_hp = 1;
2742     + spec->gen.keep_eapd_on = 1;
2743     spec->gen.pcm_playback_hook = via_playback_pcm_hook;
2744     return spec;
2745     }
2746     @@ -231,9 +232,14 @@ static void vt1708_update_hp_work(struct hda_codec *codec)
2747    
2748     static void set_widgets_power_state(struct hda_codec *codec)
2749     {
2750     +#if 0 /* FIXME: the assumed connections don't match always with the
2751     + * actual routes by the generic parser, so better to disable
2752     + * the control for safety.
2753     + */
2754     struct via_spec *spec = codec->spec;
2755     if (spec->set_widgets_power_state)
2756     spec->set_widgets_power_state(codec);
2757     +#endif
2758     }
2759    
2760     static void update_power_state(struct hda_codec *codec, hda_nid_t nid,
2761     @@ -478,7 +484,9 @@ static int via_suspend(struct hda_codec *codec)
2762     /* Fix pop noise on headphones */
2763     int i;
2764     for (i = 0; i < spec->gen.autocfg.hp_outs; i++)
2765     - snd_hda_set_pin_ctl(codec, spec->gen.autocfg.hp_pins[i], 0);
2766     + snd_hda_codec_write(codec, spec->gen.autocfg.hp_pins[i],
2767     + 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
2768     + 0x00);
2769     }
2770    
2771     return 0;
2772     diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
2773     index ca4739c..e5c7f9f 100644
2774     --- a/sound/usb/mixer.c
2775     +++ b/sound/usb/mixer.c
2776     @@ -886,6 +886,7 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval,
2777     case USB_ID(0x046d, 0x0808):
2778     case USB_ID(0x046d, 0x0809):
2779     case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */
2780     + case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */
2781     case USB_ID(0x046d, 0x0991):
2782     /* Most audio usb devices lie about volume resolution.
2783     * Most Logitech webcams have res = 384.
2784     diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
2785     index c39f898..1c719d8 100644
2786     --- a/sound/usb/quirks-table.h
2787     +++ b/sound/usb/quirks-table.h
2788     @@ -215,7 +215,13 @@
2789     .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
2790     },
2791     {
2792     - USB_DEVICE(0x046d, 0x0990),
2793     + .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2794     + USB_DEVICE_ID_MATCH_INT_CLASS |
2795     + USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2796     + .idVendor = 0x046d,
2797     + .idProduct = 0x0990,
2798     + .bInterfaceClass = USB_CLASS_AUDIO,
2799     + .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2800     .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2801     .vendor_name = "Logitech, Inc.",
2802     .product_name = "QuickCam Pro 9000",
2803     @@ -1714,7 +1720,11 @@ YAMAHA_DEVICE(0x7010, "UB99"),
2804     USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
2805     .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2806     .ifnum = 0,
2807     - .type = QUIRK_MIDI_STANDARD_INTERFACE
2808     + .type = QUIRK_MIDI_FIXED_ENDPOINT,
2809     + .data = & (const struct snd_usb_midi_endpoint_info) {
2810     + .out_cables = 0x0007,
2811     + .in_cables = 0x0007
2812     + }
2813     }
2814     },
2815     {