From: Greg Kroah-Hartman Date: Mon, 7 Mar 2016 20:54:21 +0000 (-0800) Subject: 4.4-stable patches X-Git-Tag: v3.10.100~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9b54373cf84813a81704ab7eed99369eb3ab84d8;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: cxl-fix-psl-timebase-synchronization-detection.patch i2c-brcmstb-allocate-correct-amount-of-memory-for-regmap.patch mips-scache-fix-scache-init-with-invalid-line-size.patch mips-traps-fix-sigfpe-information-leak-from-do_ov-and-do_trap_or_bp.patch thermal-cpu_cooling-fix-out-of-bounds-access-in-time_in_idle.patch ubi-fix-out-of-bounds-write-in-volume-update-code.patch usb-chipidea-otg-change-workqueue-ci_otg-as-freezable.patch usb-cp210x-add-id-for-parrot-nmea-gps-flight-recorder.patch usb-qcserial-add-dell-wireless-5809e-gobi-4g-hspa-rev3.patch usb-qcserial-add-sierra-wireless-em74xx-device-id.patch usb-serial-option-add-support-for-quectel-uc20.patch usb-serial-option-add-support-for-telit-le922-pid-0x1045.patch --- diff --git a/queue-4.4/cxl-fix-psl-timebase-synchronization-detection.patch b/queue-4.4/cxl-fix-psl-timebase-synchronization-detection.patch new file mode 100644 index 00000000000..1c6997311f8 --- /dev/null +++ b/queue-4.4/cxl-fix-psl-timebase-synchronization-detection.patch @@ -0,0 +1,42 @@ +From 923adb1646d5ba739d2a1e63ee20d60574d9da8e Mon Sep 17 00:00:00 2001 +From: Frederic Barrat +Date: Wed, 24 Feb 2016 18:27:51 +0100 +Subject: cxl: Fix PSL timebase synchronization detection + +From: Frederic Barrat + +commit 923adb1646d5ba739d2a1e63ee20d60574d9da8e upstream. + +The PSL timebase synchronization is seemingly failing for +configuration not including VIRT_CPU_ACCOUNTING_NATIVE. The driver +shows the following trace in dmesg: +PSL: Timebase sync: giving up! + +The PSL timebase register is actually syncing correctly, but the cxl +driver is not detecting it. Fix is to use the proper timebase-to-time +conversion. + +Signed-off-by: Frederic Barrat +Acked-by: Michael Neuling +Reviewed-by: Matthew R. Ochs +Acked-by: Ian Munsie +Reviewed-by: Andrew Donnellan +Reviewed-by: Vaibhav Jain +Signed-off-by: Michael Ellerman +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/misc/cxl/pci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/misc/cxl/pci.c ++++ b/drivers/misc/cxl/pci.c +@@ -414,7 +414,7 @@ static int cxl_setup_psl_timebase(struct + delta = mftb() - psl_tb; + if (delta < 0) + delta = -delta; +- } while (cputime_to_usecs(delta) > 16); ++ } while (tb_to_ns(delta) > 16000); + + return 0; + } diff --git a/queue-4.4/i2c-brcmstb-allocate-correct-amount-of-memory-for-regmap.patch b/queue-4.4/i2c-brcmstb-allocate-correct-amount-of-memory-for-regmap.patch new file mode 100644 index 00000000000..5b32bacb11e --- /dev/null +++ b/queue-4.4/i2c-brcmstb-allocate-correct-amount-of-memory-for-regmap.patch @@ -0,0 +1,35 @@ +From 7314d22a2f5bd40468d57768be368c3d9b4bd726 Mon Sep 17 00:00:00 2001 +From: Wolfram Sang +Date: Sun, 21 Feb 2016 15:16:48 +0100 +Subject: i2c: brcmstb: allocate correct amount of memory for regmap + +From: Wolfram Sang + +commit 7314d22a2f5bd40468d57768be368c3d9b4bd726 upstream. + +We want the size of the struct, not of a pointer to it. To be future +proof, just dereference the pointer to get the desired type. + +Fixes: dd1aa2524bc5 ("i2c: brcmstb: Add Broadcom settop SoC i2c controller driver") +Acked-by: Gregory Fong +Acked-by: Florian Fainelli +Reviewed-by: Kamal Dasu +Signed-off-by: Wolfram Sang +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/i2c/busses/i2c-brcmstb.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/i2c/busses/i2c-brcmstb.c ++++ b/drivers/i2c/busses/i2c-brcmstb.c +@@ -562,8 +562,7 @@ static int brcmstb_i2c_probe(struct plat + if (!dev) + return -ENOMEM; + +- dev->bsc_regmap = devm_kzalloc(&pdev->dev, sizeof(struct bsc_regs *), +- GFP_KERNEL); ++ dev->bsc_regmap = devm_kzalloc(&pdev->dev, sizeof(*dev->bsc_regmap), GFP_KERNEL); + if (!dev->bsc_regmap) + return -ENOMEM; + diff --git a/queue-4.4/mips-scache-fix-scache-init-with-invalid-line-size.patch b/queue-4.4/mips-scache-fix-scache-init-with-invalid-line-size.patch new file mode 100644 index 00000000000..bf16079f104 --- /dev/null +++ b/queue-4.4/mips-scache-fix-scache-init-with-invalid-line-size.patch @@ -0,0 +1,69 @@ +From 56fa81fc9a5445938f3aa2e63d15ab63dc938ad6 Mon Sep 17 00:00:00 2001 +From: Govindraj Raja +Date: Mon, 29 Feb 2016 11:41:20 +0000 +Subject: MIPS: scache: Fix scache init with invalid line size. + +From: Govindraj Raja + +commit 56fa81fc9a5445938f3aa2e63d15ab63dc938ad6 upstream. + +In current scache init cache line_size is determined from +cpu config register, however if there there no scache +then mips_sc_probe_cm3 function populates a invalid line_size of 2. + +The invalid line_size can cause a NULL pointer deference +during r4k_dma_cache_inv as r4k_blast_scache is populated +based on line_size. Scache line_size of 2 is invalid option in +r4k_blast_scache_setup. + +This issue was faced during a MIPS I6400 based virtual platform bring up +where scache was not available in virtual platform model. + +Signed-off-by: Govindraj Raja +Fixes: 7d53e9c4cd21("MIPS: CM3: Add support for CM3 L2 cache.") +Cc: Paul Burton +Cc: James Hogan +Cc: Ralf Baechle +Cc: James Hartley +Cc: linux-mips@linux-mips.org +Patchwork: https://patchwork.linux-mips.org/patch/12710/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/mm/sc-mips.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +--- a/arch/mips/mm/sc-mips.c ++++ b/arch/mips/mm/sc-mips.c +@@ -164,11 +164,13 @@ static int __init mips_sc_probe_cm3(void + + sets = cfg & CM_GCR_L2_CONFIG_SET_SIZE_MSK; + sets >>= CM_GCR_L2_CONFIG_SET_SIZE_SHF; +- c->scache.sets = 64 << sets; ++ if (sets) ++ c->scache.sets = 64 << sets; + + line_sz = cfg & CM_GCR_L2_CONFIG_LINE_SIZE_MSK; + line_sz >>= CM_GCR_L2_CONFIG_LINE_SIZE_SHF; +- c->scache.linesz = 2 << line_sz; ++ if (line_sz) ++ c->scache.linesz = 2 << line_sz; + + assoc = cfg & CM_GCR_L2_CONFIG_ASSOC_MSK; + assoc >>= CM_GCR_L2_CONFIG_ASSOC_SHF; +@@ -176,9 +178,12 @@ static int __init mips_sc_probe_cm3(void + c->scache.waysize = c->scache.sets * c->scache.linesz; + c->scache.waybit = __ffs(c->scache.waysize); + +- c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT; ++ if (c->scache.linesz) { ++ c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT; ++ return 1; ++ } + +- return 1; ++ return 0; + } + + void __weak platform_early_l2_init(void) diff --git a/queue-4.4/mips-traps-fix-sigfpe-information-leak-from-do_ov-and-do_trap_or_bp.patch b/queue-4.4/mips-traps-fix-sigfpe-information-leak-from-do_ov-and-do_trap_or_bp.patch new file mode 100644 index 00000000000..869f7d890ea --- /dev/null +++ b/queue-4.4/mips-traps-fix-sigfpe-information-leak-from-do_ov-and-do_trap_or_bp.patch @@ -0,0 +1,61 @@ +From e723e3f7f9591b79e8c56b3d7c5a204a9c571b55 Mon Sep 17 00:00:00 2001 +From: "Maciej W. Rozycki" +Date: Fri, 4 Mar 2016 01:42:49 +0000 +Subject: MIPS: traps: Fix SIGFPE information leak from `do_ov' and `do_trap_or_bp' + +From: Maciej W. Rozycki + +commit e723e3f7f9591b79e8c56b3d7c5a204a9c571b55 upstream. + +Avoid sending a partially initialised `siginfo_t' structure along SIGFPE +signals issued from `do_ov' and `do_trap_or_bp', leading to information +leaking from the kernel stack. + +Signed-off-by: Maciej W. Rozycki +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/kernel/traps.c | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +--- a/arch/mips/kernel/traps.c ++++ b/arch/mips/kernel/traps.c +@@ -690,15 +690,15 @@ static int simulate_sync(struct pt_regs + asmlinkage void do_ov(struct pt_regs *regs) + { + enum ctx_state prev_state; +- siginfo_t info; ++ siginfo_t info = { ++ .si_signo = SIGFPE, ++ .si_code = FPE_INTOVF, ++ .si_addr = (void __user *)regs->cp0_epc, ++ }; + + prev_state = exception_enter(); + die_if_kernel("Integer overflow", regs); + +- info.si_code = FPE_INTOVF; +- info.si_signo = SIGFPE; +- info.si_errno = 0; +- info.si_addr = (void __user *) regs->cp0_epc; + force_sig_info(SIGFPE, &info, current); + exception_exit(prev_state); + } +@@ -874,7 +874,7 @@ out: + void do_trap_or_bp(struct pt_regs *regs, unsigned int code, + const char *str) + { +- siginfo_t info; ++ siginfo_t info = { 0 }; + char b[40]; + + #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP +@@ -903,7 +903,6 @@ void do_trap_or_bp(struct pt_regs *regs, + else + info.si_code = FPE_INTOVF; + info.si_signo = SIGFPE; +- info.si_errno = 0; + info.si_addr = (void __user *) regs->cp0_epc; + force_sig_info(SIGFPE, &info, current); + break; diff --git a/queue-4.4/series b/queue-4.4/series index 1187548fa0d..a5dad2946bc 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -53,3 +53,15 @@ alsa-hdspm-fix-wrong-boolean-ctl-value-accesses.patch alsa-hdsp-fix-wrong-boolean-ctl-value-accesses.patch alsa-hdspm-fix-zero-division.patch alsa-timer-fix-broken-compat-timer-user-status-ioctl.patch +usb-chipidea-otg-change-workqueue-ci_otg-as-freezable.patch +usb-cp210x-add-id-for-parrot-nmea-gps-flight-recorder.patch +usb-qcserial-add-dell-wireless-5809e-gobi-4g-hspa-rev3.patch +usb-qcserial-add-sierra-wireless-em74xx-device-id.patch +usb-serial-option-add-support-for-telit-le922-pid-0x1045.patch +usb-serial-option-add-support-for-quectel-uc20.patch +mips-scache-fix-scache-init-with-invalid-line-size.patch +mips-traps-fix-sigfpe-information-leak-from-do_ov-and-do_trap_or_bp.patch +cxl-fix-psl-timebase-synchronization-detection.patch +ubi-fix-out-of-bounds-write-in-volume-update-code.patch +i2c-brcmstb-allocate-correct-amount-of-memory-for-regmap.patch +thermal-cpu_cooling-fix-out-of-bounds-access-in-time_in_idle.patch diff --git a/queue-4.4/thermal-cpu_cooling-fix-out-of-bounds-access-in-time_in_idle.patch b/queue-4.4/thermal-cpu_cooling-fix-out-of-bounds-access-in-time_in_idle.patch new file mode 100644 index 00000000000..7d9cfae1671 --- /dev/null +++ b/queue-4.4/thermal-cpu_cooling-fix-out-of-bounds-access-in-time_in_idle.patch @@ -0,0 +1,77 @@ +From a53b8394ec3c67255928df6ee9cc99dd1cd452e3 Mon Sep 17 00:00:00 2001 +From: Javi Merino +Date: Thu, 11 Feb 2016 12:00:51 +0000 +Subject: thermal: cpu_cooling: fix out of bounds access in time_in_idle + +From: Javi Merino + +commit a53b8394ec3c67255928df6ee9cc99dd1cd452e3 upstream. + +In __cpufreq_cooling_register() we allocate the arrays for time_in_idle +and time_in_idle_timestamp to be as big as the number of cpus in this +cpufreq device. However, in get_load() we access this array using the +cpu number as index, which can result in an out of bound access. + +Index time_in_idle{,_timestamp} using the index in the cpufreq_device's +allowed_cpus mask, as we do for the load_cpu array in +cpufreq_get_requested_power() + +Reported-by: Nicolas Boichat +Cc: Amit Daniel Kachhap +Cc: Zhang Rui +Cc: Eduardo Valentin +Tested-by: Nicolas Boichat +Acked-by: Viresh Kumar +Signed-off-by: Javi Merino +Signed-off-by: Eduardo Valentin +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/thermal/cpu_cooling.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +--- a/drivers/thermal/cpu_cooling.c ++++ b/drivers/thermal/cpu_cooling.c +@@ -377,26 +377,28 @@ static u32 cpu_power_to_freq(struct cpuf + * get_load() - get load for a cpu since last updated + * @cpufreq_device: &struct cpufreq_cooling_device for this cpu + * @cpu: cpu number ++ * @cpu_idx: index of the cpu in cpufreq_device->allowed_cpus + * + * Return: The average load of cpu @cpu in percentage since this + * function was last called. + */ +-static u32 get_load(struct cpufreq_cooling_device *cpufreq_device, int cpu) ++static u32 get_load(struct cpufreq_cooling_device *cpufreq_device, int cpu, ++ int cpu_idx) + { + u32 load; + u64 now, now_idle, delta_time, delta_idle; + + now_idle = get_cpu_idle_time(cpu, &now, 0); +- delta_idle = now_idle - cpufreq_device->time_in_idle[cpu]; +- delta_time = now - cpufreq_device->time_in_idle_timestamp[cpu]; ++ delta_idle = now_idle - cpufreq_device->time_in_idle[cpu_idx]; ++ delta_time = now - cpufreq_device->time_in_idle_timestamp[cpu_idx]; + + if (delta_time <= delta_idle) + load = 0; + else + load = div64_u64(100 * (delta_time - delta_idle), delta_time); + +- cpufreq_device->time_in_idle[cpu] = now_idle; +- cpufreq_device->time_in_idle_timestamp[cpu] = now; ++ cpufreq_device->time_in_idle[cpu_idx] = now_idle; ++ cpufreq_device->time_in_idle_timestamp[cpu_idx] = now; + + return load; + } +@@ -598,7 +600,7 @@ static int cpufreq_get_requested_power(s + u32 load; + + if (cpu_online(cpu)) +- load = get_load(cpufreq_device, cpu); ++ load = get_load(cpufreq_device, cpu, i); + else + load = 0; + diff --git a/queue-4.4/ubi-fix-out-of-bounds-write-in-volume-update-code.patch b/queue-4.4/ubi-fix-out-of-bounds-write-in-volume-update-code.patch new file mode 100644 index 00000000000..5e550bdd43c --- /dev/null +++ b/queue-4.4/ubi-fix-out-of-bounds-write-in-volume-update-code.patch @@ -0,0 +1,32 @@ +From e4f6daac20332448529b11f09388f1d55ef2084c Mon Sep 17 00:00:00 2001 +From: Richard Weinberger +Date: Sun, 21 Feb 2016 10:53:03 +0100 +Subject: ubi: Fix out of bounds write in volume update code + +From: Richard Weinberger + +commit e4f6daac20332448529b11f09388f1d55ef2084c upstream. + +ubi_start_leb_change() allocates too few bytes. +ubi_more_leb_change_data() will write up to req->upd_bytes + +ubi->min_io_size bytes. + +Signed-off-by: Richard Weinberger +Reviewed-by: Boris Brezillon +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mtd/ubi/upd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/mtd/ubi/upd.c ++++ b/drivers/mtd/ubi/upd.c +@@ -193,7 +193,7 @@ int ubi_start_leb_change(struct ubi_devi + vol->changing_leb = 1; + vol->ch_lnum = req->lnum; + +- vol->upd_buf = vmalloc(req->bytes); ++ vol->upd_buf = vmalloc(ALIGN((int)req->bytes, ubi->min_io_size)); + if (!vol->upd_buf) + return -ENOMEM; + diff --git a/queue-4.4/usb-chipidea-otg-change-workqueue-ci_otg-as-freezable.patch b/queue-4.4/usb-chipidea-otg-change-workqueue-ci_otg-as-freezable.patch new file mode 100644 index 00000000000..564770d9703 --- /dev/null +++ b/queue-4.4/usb-chipidea-otg-change-workqueue-ci_otg-as-freezable.patch @@ -0,0 +1,144 @@ +From d144dfea8af7108f613139623e63952ed7e69c0c Mon Sep 17 00:00:00 2001 +From: Peter Chen +Date: Wed, 24 Feb 2016 11:05:25 +0800 +Subject: usb: chipidea: otg: change workqueue ci_otg as freezable + +From: Peter Chen + +commit d144dfea8af7108f613139623e63952ed7e69c0c upstream. + +If we use USB ID pin as wakeup source, and there is a USB block +device on this USB OTG (ID) cable, the system will be deadlock +after system resume. + +The root cause for this problem is: the workqueue ci_otg may try +to remove hcd before the driver resume has finished, and hcd will +disconnect the device on it, then, it will call device_release_driver, +and holds the device lock "dev->mutex", but it is never unlocked since +it waits workqueue writeback to run to flush the block information, but +the workqueue writeback is freezable, it is not thawed before driver +resume has finished. + +When the driver (device: sd 0:0:0:0:) resume goes to dpm_complete, it +tries to get its device lock "dev->mutex", but it can't get it forever, +then the deadlock occurs. Below call stacks show the situation. + +So, in order to fix this problem, we need to change workqueue ci_otg +as freezable, then the work item in this workqueue will be run after +driver's resume, this workqueue will not be blocked forever like above +case since the workqueue writeback has been thawed too. + +Tested at: i.mx6qdl-sabresd and i.mx6sx-sdb. + +[ 555.178869] kworker/u2:13 D c07de74c 0 826 2 0x00000000 +[ 555.185310] Workqueue: ci_otg ci_otg_work +[ 555.189353] Backtrace: +[ 555.191849] [] (__schedule) from [] (schedule+0x48/0xa0) +[ 555.198912] r10:ee471ba0 r9:00000000 r8:00000000 r7:00000002 r6:ee470000 r5:ee471ba4 +[ 555.206867] r4:ee470000 +[ 555.209453] [] (schedule) from [] (schedule_timeout+0x15c/0x1e0) +[ 555.217212] r4:7fffffff r3:edc2b000 +[ 555.220862] [] (schedule_timeout) from [] (wait_for_common+0x94/0x144) +[ 555.229140] r8:00000000 r7:00000002 r6:ee470000 r5:ee471ba4 r4:7fffffff +[ 555.235980] [] (wait_for_common) from [] (wait_for_completion+0x18/0x1c) +[ 555.244430] r10:00000001 r9:c0b5563c r8:c0042e48 r7:ef086000 r6:eea4372c r5:ef131b00 +[ 555.252383] r4:00000000 +[ 555.254970] [] (wait_for_completion) from [] (flush_work+0x19c/0x234) +[ 555.263177] [] (flush_work) from [] (flush_delayed_work+0x48/0x4c) +[ 555.271106] r8:ed5b5000 r7:c0b38a3c r6:eea439cc r5:eea4372c r4:eea4372c +[ 555.277958] [] (flush_delayed_work) from [] (bdi_unregister+0x84/0xec) +[ 555.286236] r4:eea43520 r3:20000153 +[ 555.289885] [] (bdi_unregister) from [] (blk_cleanup_queue+0x180/0x29c) +[ 555.298250] r5:eea43808 r4:eea43400 +[ 555.301909] [] (blk_cleanup_queue) from [] (__scsi_remove_device+0x48/0xb8) +[ 555.310623] r7:00000000 r6:20000153 r5:ededa950 r4:ededa800 +[ 555.316403] [] (__scsi_remove_device) from [] (scsi_forget_host+0x64/0x68) +[ 555.325028] r5:ededa800 r4:ed5b5000 +[ 555.328689] [] (scsi_forget_host) from [] (scsi_remove_host+0x78/0x104) +[ 555.337054] r5:ed5b5068 r4:ed5b5000 +[ 555.340709] [] (scsi_remove_host) from [] (usb_stor_disconnect+0x50/0xb4) +[ 555.349247] r6:ed5b56e4 r5:ed5b5818 r4:ed5b5690 r3:00000008 +[ 555.355025] [] (usb_stor_disconnect) from [] (usb_unbind_interface+0x78/0x25c) +[ 555.363997] r8:c13919b4 r7:edd3c000 r6:edd3c020 r5:ee551c68 r4:ee551c00 r3:c04cdf7c +[ 555.371892] [] (usb_unbind_interface) from [] (__device_release_driver+0x8c/0x118) +[ 555.381213] r10:00000001 r9:edd90c00 r8:c13919b4 r7:ee551c68 r6:c0b546e0 r5:c0b5563c +[ 555.389167] r4:edd3c020 +[ 555.391752] [] (__device_release_driver) from [] (device_release_driver+0x28/0x34) +[ 555.401071] r5:edd3c020 r4:edd3c054 +[ 555.404721] [] (device_release_driver) from [] (bus_remove_device+0xe0/0x110) +[ 555.413607] r5:edd3c020 r4:ef17f04c +[ 555.417253] [] (bus_remove_device) from [] (device_del+0x114/0x21c) +[ 555.425270] r6:edd3c028 r5:edd3c020 r4:ee551c00 r3:00000000 +[ 555.431045] [] (device_del) from [] (usb_disable_device+0xa4/0x1e8) +[ 555.439061] r8:edd3c000 r7:eded8000 r6:00000000 r5:00000001 r4:ee551c00 +[ 555.445906] [] (usb_disable_device) from [] (usb_disconnect+0x74/0x224) +[ 555.454271] r9:edd90c00 r8:ee551000 r7:ee551c68 r6:ee551c9c r5:ee551c00 r4:00000001 +[ 555.462156] [] (usb_disconnect) from [] (usb_disconnect+0x1d8/0x224) +[ 555.470259] r10:00000001 r9:edd90000 r8:ee471e2c r7:ee551468 r6:ee55149c r5:ee551400 +[ 555.478213] r4:00000001 +[ 555.480797] [] (usb_disconnect) from [] (usb_remove_hcd+0xa0/0x1ac) +[ 555.488813] r10:00000001 r9:ee471eb0 r8:00000000 r7:ef3d9500 r6:eded810c r5:eded80b0 +[ 555.496765] r4:eded8000 +[ 555.499351] [] (usb_remove_hcd) from [] (host_stop+0x28/0x64) +[ 555.506847] r6:eeb50010 r5:eded8000 r4:eeb51010 +[ 555.511563] [] (host_stop) from [] (ci_otg_work+0xc4/0x124) +[ 555.518885] r6:00000001 r5:eeb50010 r4:eeb502a0 r3:c04d4130 +[ 555.524665] [] (ci_otg_work) from [] (process_one_work+0x194/0x420) +[ 555.532682] r6:ef086000 r5:eeb502a0 r4:edc44480 +[ 555.537393] [] (process_one_work) from [] (worker_thread+0x34/0x514) +[ 555.545496] r10:edc44480 r9:ef086000 r8:c0b1a100 r7:ef086034 r6:00000088 r5:edc44498 +[ 555.553450] r4:ef086000 +[ 555.556032] [] (worker_thread) from [] (kthread+0xdc/0xf8) +[ 555.563268] r10:00000000 r9:00000000 r8:00000000 r7:c004577c r6:edc44480 r5:eddc15c0 +[ 555.571221] r4:00000000 +[ 555.573804] [] (kthread) from [] (ret_from_fork+0x14/0x24) +[ 555.581040] r7:00000000 r6:00000000 r5:c004b9d8 r4:eddc15c0 + +[ 553.429383] sh D c07de74c 0 694 691 0x00000000 +[ 553.435801] Backtrace: +[ 553.438295] [] (__schedule) from [] (schedule+0x48/0xa0) +[ 553.445358] r10:edd3c054 r9:edd3c078 r8:edddbd50 r7:edcbbc00 r6:c1377c34 r5:60000153 +[ 553.453313] r4:eddda000 +[ 553.455896] [] (schedule) from [] (schedule_preempt_disabled+0x10/0x14) +[ 553.464261] r4:edd3c058 r3:0000000a +[ 553.467910] [] (schedule_preempt_disabled) from [] (mutex_lock_nested+0x1a0/0x3e8) +[ 553.477254] [] (mutex_lock_nested) from [] (dpm_complete+0xc0/0x1b0) +[ 553.485358] r10:00561408 r9:edd3c054 r8:c0b4863c r7:edddbd90 r6:c0b485d8 r5:edd3c020 +[ 553.493313] r4:edd3c0d0 +[ 553.495896] [] (dpm_complete) from [] (dpm_resume_end+0x1c/0x20) +[ 553.503652] r9:00000000 r8:c0b1a9d0 r7:c1334ec0 r6:c1334edc r5:00000003 r4:00000010 +[ 553.511544] [] (dpm_resume_end) from [] (suspend_devices_and_enter+0x158/0x504) +[ 553.520604] r4:00000000 r3:c1334efc +[ 553.524250] [] (suspend_devices_and_enter) from [] (pm_suspend+0x234/0x2cc) +[ 553.532961] r10:00561408 r9:ed6b7300 r8:00000004 r7:c1334eec r6:00000000 r5:c1334ee8 +[ 553.540914] r4:00000003 +[ 553.543493] [] (pm_suspend) from [] (state_store+0x6c/0xc0) + +[ 555.703684] 7 locks held by kworker/u2:13/826: +[ 555.708140] #0: ("%s""ci_otg"){++++.+}, at: [] process_one_work+0x128/0x420 +[ 555.716277] #1: ((&ci->work)){+.+.+.}, at: [] process_one_work+0x128/0x420 +[ 555.724317] #2: (usb_bus_list_lock){+.+.+.}, at: [] usb_remove_hcd+0x98/0x1ac +[ 555.732626] #3: (&dev->mutex){......}, at: [] usb_disconnect+0x48/0x224 +[ 555.740403] #4: (&dev->mutex){......}, at: [] usb_disconnect+0x48/0x224 +[ 555.748179] #5: (&dev->mutex){......}, at: [] device_release_driver+0x20/0x34 +[ 555.756487] #6: (&shost->scan_mutex){+.+.+.}, at: [] scsi_remove_host+0x20/0x104 + +Cc: Jun Li +Signed-off-by: Peter Chen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/chipidea/otg.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/chipidea/otg.c ++++ b/drivers/usb/chipidea/otg.c +@@ -158,7 +158,7 @@ static void ci_otg_work(struct work_stru + int ci_hdrc_otg_init(struct ci_hdrc *ci) + { + INIT_WORK(&ci->work, ci_otg_work); +- ci->wq = create_singlethread_workqueue("ci_otg"); ++ ci->wq = create_freezable_workqueue("ci_otg"); + if (!ci->wq) { + dev_err(ci->dev, "can't create workqueue\n"); + return -ENODEV; diff --git a/queue-4.4/usb-cp210x-add-id-for-parrot-nmea-gps-flight-recorder.patch b/queue-4.4/usb-cp210x-add-id-for-parrot-nmea-gps-flight-recorder.patch new file mode 100644 index 00000000000..f807e273b8a --- /dev/null +++ b/queue-4.4/usb-cp210x-add-id-for-parrot-nmea-gps-flight-recorder.patch @@ -0,0 +1,34 @@ +From 3c4c615d70c8cbdc8ba8c79ed702640930652a79 Mon Sep 17 00:00:00 2001 +From: Vittorio Alfieri +Date: Sun, 28 Feb 2016 14:40:24 +0100 +Subject: USB: cp210x: Add ID for Parrot NMEA GPS Flight Recorder + +From: Vittorio Alfieri + +commit 3c4c615d70c8cbdc8ba8c79ed702640930652a79 upstream. + +The Parrot NMEA GPS Flight Recorder is a USB composite device +consisting of hub, flash storage, and cp210x usb to serial chip. +It is an accessory to the mass-produced Parrot AR Drone 2. +The device emits standard NMEA messages which make the it compatible +with NMEA compatible software. It was tested using gpsd version 3.11-3 +as an NMEA interpreter and using the official Parrot Flight Recorder. + +Signed-off-by: Vittorio Alfieri +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/cp210x.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -164,6 +164,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x18EF, 0xE025) }, /* ELV Marble Sound Board 1 */ + { USB_DEVICE(0x1901, 0x0190) }, /* GE B850 CP2105 Recorder interface */ + { USB_DEVICE(0x1901, 0x0193) }, /* GE B650 CP2104 PMC interface */ ++ { USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */ + { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */ + { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */ + { USB_DEVICE(0x1BA4, 0x0002) }, /* Silicon Labs 358x factory default */ diff --git a/queue-4.4/usb-qcserial-add-dell-wireless-5809e-gobi-4g-hspa-rev3.patch b/queue-4.4/usb-qcserial-add-dell-wireless-5809e-gobi-4g-hspa-rev3.patch new file mode 100644 index 00000000000..785a9b683c0 --- /dev/null +++ b/queue-4.4/usb-qcserial-add-dell-wireless-5809e-gobi-4g-hspa-rev3.patch @@ -0,0 +1,50 @@ +From 013dd239d6220a4e0dfdf0d45a82c34f1fd73deb Mon Sep 17 00:00:00 2001 +From: Patrik Halfar +Date: Sat, 20 Feb 2016 18:49:56 +0100 +Subject: USB: qcserial: add Dell Wireless 5809e Gobi 4G HSPA+ (rev3) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Patrik Halfar + +commit 013dd239d6220a4e0dfdf0d45a82c34f1fd73deb upstream. + +New revision of Dell Wireless 5809e Gobi 4G HSPA+ Mobile Broadband Card +has new idProduct. + +Bus 002 Device 006: ID 413c:81b3 Dell Computer Corp. +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 2.00 + bDeviceClass 0 + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x413c Dell Computer Corp. + idProduct 0x81b3 + bcdDevice 0.06 + iManufacturer 1 Sierra Wireless, Incorporated + iProduct 2 Dell Wireless 5809e Gobi™ 4G HSPA+ Mobile Broadband Card + iSerial 3 + bNumConfigurations 2 + +Signed-off-by: Patrik Halfar +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/qcserial.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/qcserial.c ++++ b/drivers/usb/serial/qcserial.c +@@ -165,6 +165,7 @@ static const struct usb_device_id id_tab + {DEVICE_SWI(0x413c, 0x81a8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */ + {DEVICE_SWI(0x413c, 0x81a9)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */ + {DEVICE_SWI(0x413c, 0x81b1)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card */ ++ {DEVICE_SWI(0x413c, 0x81b3)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ + + /* Huawei devices */ + {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */ diff --git a/queue-4.4/usb-qcserial-add-sierra-wireless-em74xx-device-id.patch b/queue-4.4/usb-qcserial-add-sierra-wireless-em74xx-device-id.patch new file mode 100644 index 00000000000..9bee2c71c85 --- /dev/null +++ b/queue-4.4/usb-qcserial-add-sierra-wireless-em74xx-device-id.patch @@ -0,0 +1,38 @@ +From 04fdbc825ffc02fb098964b92de802fff44e73fd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= +Date: Tue, 1 Mar 2016 14:36:32 +0100 +Subject: USB: qcserial: add Sierra Wireless EM74xx device ID +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bjørn Mork + +commit 04fdbc825ffc02fb098964b92de802fff44e73fd upstream. + +The MC74xx and EM74xx modules use different IDs by default, according +to the Lenovo EM7455 driver for Windows. + +Signed-off-by: Bjørn Mork +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/qcserial.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/usb/serial/qcserial.c ++++ b/drivers/usb/serial/qcserial.c +@@ -157,8 +157,10 @@ static const struct usb_device_id id_tab + {DEVICE_SWI(0x1199, 0x9056)}, /* Sierra Wireless Modem */ + {DEVICE_SWI(0x1199, 0x9060)}, /* Sierra Wireless Modem */ + {DEVICE_SWI(0x1199, 0x9061)}, /* Sierra Wireless Modem */ +- {DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx/EM74xx */ +- {DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx/EM74xx */ ++ {DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx */ ++ {DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx */ ++ {DEVICE_SWI(0x1199, 0x9078)}, /* Sierra Wireless EM74xx */ ++ {DEVICE_SWI(0x1199, 0x9079)}, /* Sierra Wireless EM74xx */ + {DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */ + {DEVICE_SWI(0x413c, 0x81a3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */ + {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ diff --git a/queue-4.4/usb-serial-option-add-support-for-quectel-uc20.patch b/queue-4.4/usb-serial-option-add-support-for-quectel-uc20.patch new file mode 100644 index 00000000000..56b47606798 --- /dev/null +++ b/queue-4.4/usb-serial-option-add-support-for-quectel-uc20.patch @@ -0,0 +1,31 @@ +From c0992d0f54847d0d1d85c60fcaa054f175ab1ccd Mon Sep 17 00:00:00 2001 +From: Yegor Yefremov +Date: Mon, 29 Feb 2016 16:39:57 +0100 +Subject: USB: serial: option: add support for Quectel UC20 + +From: Yegor Yefremov + +commit c0992d0f54847d0d1d85c60fcaa054f175ab1ccd upstream. + +Add support for Quectel UC20 and blacklist the QMI interface. + +Signed-off-by: Yegor Yefremov +[johan: amend commit message ] +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -1133,6 +1133,8 @@ static const struct usb_device_id option + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */ + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ ++ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9003), /* Quectel UC20 */ ++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), diff --git a/queue-4.4/usb-serial-option-add-support-for-telit-le922-pid-0x1045.patch b/queue-4.4/usb-serial-option-add-support-for-telit-le922-pid-0x1045.patch new file mode 100644 index 00000000000..80aaad78833 --- /dev/null +++ b/queue-4.4/usb-serial-option-add-support-for-telit-le922-pid-0x1045.patch @@ -0,0 +1,38 @@ +From 5deef5551c77e488922cc4bf4bc76df63be650d0 Mon Sep 17 00:00:00 2001 +From: Daniele Palmas +Date: Mon, 29 Feb 2016 15:36:11 +0100 +Subject: USB: serial: option: add support for Telit LE922 PID 0x1045 + +From: Daniele Palmas + +commit 5deef5551c77e488922cc4bf4bc76df63be650d0 upstream. + +This patch adds support for 0x1045 PID of Telit LE922. + +Signed-off-by: Daniele Palmas +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -270,6 +270,7 @@ static void option_instat_callback(struc + #define TELIT_PRODUCT_UE910_V2 0x1012 + #define TELIT_PRODUCT_LE922_USBCFG0 0x1042 + #define TELIT_PRODUCT_LE922_USBCFG3 0x1043 ++#define TELIT_PRODUCT_LE922_USBCFG5 0x1045 + #define TELIT_PRODUCT_LE920 0x1200 + #define TELIT_PRODUCT_LE910 0x1201 + +@@ -1183,6 +1184,8 @@ static const struct usb_device_id option + .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg0 }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG3), + .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg3 }, ++ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG5, 0xff), ++ .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg0 }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910), + .driver_info = (kernel_ulong_t)&telit_le910_blacklist }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),