]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jan 2018 12:46:15 +0000 (13:46 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jan 2018 12:46:15 +0000 (13:46 +0100)
added patches:
nohz-prevent-a-timer-interrupt-storm-in-tick_nohz_stop_sched_tick.patch
timers-invoke-timer_start_debug-where-it-makes-sense.patch
timers-reinitialize-per-cpu-bases-on-hotplug.patch
timers-use-deferrable-base-independent-of-base-nohz_active.patch
usb-add-device-quirk-for-logitech-hd-pro-webcam-c925e.patch
usb-add-reset_resume-for-elsa-microlink-56k.patch
usb-fix-off-by-one-in-type-specific-length-check-of-bos-ssp-capability.patch
usb-serial-ftdi_sio-add-id-for-airbus-ds-p8gr.patch
usb-serial-option-add-support-for-telit-me910-pid-0x1101.patch
usb-serial-option-adding-support-for-yuga-clm920-nc5.patch
usb-serial-qcserial-add-sierra-wireless-em7565.patch
usb-xhci-add-xhci_trust_tx_length-for-renesas-upd720201.patch
x86-smpboot-remove-stale-tlb-flush-invocations.patch

14 files changed:
queue-4.9/nohz-prevent-a-timer-interrupt-storm-in-tick_nohz_stop_sched_tick.patch [new file with mode: 0644]
queue-4.9/series
queue-4.9/timers-invoke-timer_start_debug-where-it-makes-sense.patch [new file with mode: 0644]
queue-4.9/timers-reinitialize-per-cpu-bases-on-hotplug.patch [new file with mode: 0644]
queue-4.9/timers-use-deferrable-base-independent-of-base-nohz_active.patch [new file with mode: 0644]
queue-4.9/usb-add-device-quirk-for-logitech-hd-pro-webcam-c925e.patch [new file with mode: 0644]
queue-4.9/usb-add-reset_resume-for-elsa-microlink-56k.patch [new file with mode: 0644]
queue-4.9/usb-fix-off-by-one-in-type-specific-length-check-of-bos-ssp-capability.patch [new file with mode: 0644]
queue-4.9/usb-serial-ftdi_sio-add-id-for-airbus-ds-p8gr.patch [new file with mode: 0644]
queue-4.9/usb-serial-option-add-support-for-telit-me910-pid-0x1101.patch [new file with mode: 0644]
queue-4.9/usb-serial-option-adding-support-for-yuga-clm920-nc5.patch [new file with mode: 0644]
queue-4.9/usb-serial-qcserial-add-sierra-wireless-em7565.patch [new file with mode: 0644]
queue-4.9/usb-xhci-add-xhci_trust_tx_length-for-renesas-upd720201.patch [new file with mode: 0644]
queue-4.9/x86-smpboot-remove-stale-tlb-flush-invocations.patch [new file with mode: 0644]

diff --git a/queue-4.9/nohz-prevent-a-timer-interrupt-storm-in-tick_nohz_stop_sched_tick.patch b/queue-4.9/nohz-prevent-a-timer-interrupt-storm-in-tick_nohz_stop_sched_tick.patch
new file mode 100644 (file)
index 0000000..31c24c6
--- /dev/null
@@ -0,0 +1,79 @@
+From 5d62c183f9e9df1deeea0906d099a94e8a43047a Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 22 Dec 2017 15:51:13 +0100
+Subject: nohz: Prevent a timer interrupt storm in tick_nohz_stop_sched_tick()
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+commit 5d62c183f9e9df1deeea0906d099a94e8a43047a upstream.
+
+The conditions in irq_exit() to invoke tick_nohz_irq_exit() which
+subsequently invokes tick_nohz_stop_sched_tick() are:
+
+  if ((idle_cpu(cpu) && !need_resched()) || tick_nohz_full_cpu(cpu))
+
+If need_resched() is not set, but a timer softirq is pending then this is
+an indication that the softirq code punted and delegated the execution to
+softirqd. need_resched() is not true because the current interrupted task
+takes precedence over softirqd.
+
+Invoking tick_nohz_irq_exit() in this case can cause an endless loop of
+timer interrupts because the timer wheel contains an expired timer, but
+softirqs are not yet executed. So it returns an immediate expiry request,
+which causes the timer to fire immediately again. Lather, rinse and
+repeat....
+
+Prevent that by adding a check for a pending timer soft interrupt to the
+conditions in tick_nohz_stop_sched_tick() which avoid calling
+get_next_timer_interrupt(). That keeps the tick sched timer on the tick and
+prevents a repetitive programming of an already expired timer.
+
+Reported-by: Sebastian Siewior <bigeasy@linutronix.d>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
+Cc: Anna-Maria Gleixner <anna-maria@linutronix.de>
+Cc: Sebastian Siewior <bigeasy@linutronix.de>
+Link: https://lkml.kernel.org/r/alpine.DEB.2.20.1712272156050.2431@nanos
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/time/tick-sched.c |   19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -663,6 +663,11 @@ static void tick_nohz_restart(struct tic
+               tick_program_event(hrtimer_get_expires(&ts->sched_timer), 1);
+ }
++static inline bool local_timer_softirq_pending(void)
++{
++      return local_softirq_pending() & TIMER_SOFTIRQ;
++}
++
+ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
+                                        ktime_t now, int cpu)
+ {
+@@ -679,8 +684,18 @@ static ktime_t tick_nohz_stop_sched_tick
+       } while (read_seqretry(&jiffies_lock, seq));
+       ts->last_jiffies = basejiff;
+-      if (rcu_needs_cpu(basemono, &next_rcu) ||
+-          arch_needs_cpu() || irq_work_needs_cpu()) {
++      /*
++       * Keep the periodic tick, when RCU, architecture or irq_work
++       * requests it.
++       * Aside of that check whether the local timer softirq is
++       * pending. If so its a bad idea to call get_next_timer_interrupt()
++       * because there is an already expired timer, so it will request
++       * immeditate expiry, which rearms the hardware timer with a
++       * minimal delta which brings us back to this place
++       * immediately. Lather, rinse and repeat...
++       */
++      if (rcu_needs_cpu(basemono, &next_rcu) || arch_needs_cpu() ||
++          irq_work_needs_cpu() || local_timer_softirq_pending()) {
+               next_tick = basemono + TICK_NSEC;
+       } else {
+               /*
index 5f205a76bda2e900249a252fab0386daf6aa7d31..027221bb3ee11bcba8d4b262c1197295cc937309 100644 (file)
@@ -58,3 +58,16 @@ usbip-fix-usbip-bind-writing-random-string-after-command-in-match_busid.patch
 usbip-prevent-leaking-socket-pointer-address-in-messages.patch
 usbip-stub-stop-printing-kernel-pointer-addresses-in-messages.patch
 usbip-vhci-stop-printing-kernel-pointer-addresses-in-messages.patch
+usb-serial-ftdi_sio-add-id-for-airbus-ds-p8gr.patch
+usb-serial-qcserial-add-sierra-wireless-em7565.patch
+usb-serial-option-add-support-for-telit-me910-pid-0x1101.patch
+usb-serial-option-adding-support-for-yuga-clm920-nc5.patch
+usb-add-device-quirk-for-logitech-hd-pro-webcam-c925e.patch
+usb-add-reset_resume-for-elsa-microlink-56k.patch
+usb-fix-off-by-one-in-type-specific-length-check-of-bos-ssp-capability.patch
+usb-xhci-add-xhci_trust_tx_length-for-renesas-upd720201.patch
+timers-use-deferrable-base-independent-of-base-nohz_active.patch
+timers-invoke-timer_start_debug-where-it-makes-sense.patch
+timers-reinitialize-per-cpu-bases-on-hotplug.patch
+nohz-prevent-a-timer-interrupt-storm-in-tick_nohz_stop_sched_tick.patch
+x86-smpboot-remove-stale-tlb-flush-invocations.patch
diff --git a/queue-4.9/timers-invoke-timer_start_debug-where-it-makes-sense.patch b/queue-4.9/timers-invoke-timer_start_debug-where-it-makes-sense.patch
new file mode 100644 (file)
index 0000000..0b2d804
--- /dev/null
@@ -0,0 +1,50 @@
+From fd45bb77ad682be728d1002431d77b8c73342836 Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 22 Dec 2017 15:51:14 +0100
+Subject: timers: Invoke timer_start_debug() where it makes sense
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+commit fd45bb77ad682be728d1002431d77b8c73342836 upstream.
+
+The timer start debug function is called before the proper timer base is
+set. As a consequence the trace data contains the stale CPU and flags
+values.
+
+Call the debug function after setting the new base and flags.
+
+Fixes: 500462a9de65 ("timers: Switch to a non-cascading wheel")
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Sebastian Siewior <bigeasy@linutronix.de>
+Cc: rt@linutronix.de
+Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
+Cc: Anna-Maria Gleixner <anna-maria@linutronix.de>
+Link: https://lkml.kernel.org/r/20171222145337.792907137@linutronix.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/time/timer.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -1019,8 +1019,6 @@ __mod_timer(struct timer_list *timer, un
+       if (!ret && pending_only)
+               goto out_unlock;
+-      debug_activate(timer, expires);
+-
+       new_base = get_target_base(base, timer->flags);
+       if (base != new_base) {
+@@ -1044,6 +1042,8 @@ __mod_timer(struct timer_list *timer, un
+               }
+       }
++      debug_activate(timer, expires);
++
+       timer->expires = expires;
+       /*
+        * If 'idx' was calculated above and the base time did not advance
diff --git a/queue-4.9/timers-reinitialize-per-cpu-bases-on-hotplug.patch b/queue-4.9/timers-reinitialize-per-cpu-bases-on-hotplug.patch
new file mode 100644 (file)
index 0000000..47573d7
--- /dev/null
@@ -0,0 +1,100 @@
+From 26456f87aca7157c057de65c9414b37f1ab881d1 Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 27 Dec 2017 21:37:25 +0100
+Subject: timers: Reinitialize per cpu bases on hotplug
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+commit 26456f87aca7157c057de65c9414b37f1ab881d1 upstream.
+
+The timer wheel bases are not (re)initialized on CPU hotplug. That leaves
+them with a potentially stale clk and next_expiry valuem, which can cause
+trouble then the CPU is plugged.
+
+Add a prepare callback which forwards the clock, sets next_expiry to far in
+the future and reset the control flags to a known state.
+
+Set base->must_forward_clk so the first timer which is queued will try to
+forward the clock to current jiffies.
+
+Fixes: 500462a9de65 ("timers: Switch to a non-cascading wheel")
+Reported-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Sebastian Siewior <bigeasy@linutronix.de>
+Cc: Anna-Maria Gleixner <anna-maria@linutronix.de>
+Link: https://lkml.kernel.org/r/alpine.DEB.2.20.1712272152200.2431@nanos
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/cpuhotplug.h |    2 +-
+ include/linux/timer.h      |    4 +++-
+ kernel/cpu.c               |    4 ++--
+ kernel/time/timer.c        |   15 +++++++++++++++
+ 4 files changed, 21 insertions(+), 4 deletions(-)
+
+--- a/include/linux/cpuhotplug.h
++++ b/include/linux/cpuhotplug.h
+@@ -48,7 +48,7 @@ enum cpuhp_state {
+       CPUHP_ARM_SHMOBILE_SCU_PREPARE,
+       CPUHP_SH_SH3X_PREPARE,
+       CPUHP_BLK_MQ_PREPARE,
+-      CPUHP_TIMERS_DEAD,
++      CPUHP_TIMERS_PREPARE,
+       CPUHP_NOTF_ERR_INJ_PREPARE,
+       CPUHP_MIPS_SOC_PREPARE,
+       CPUHP_BRINGUP_CPU,
+--- a/include/linux/timer.h
++++ b/include/linux/timer.h
+@@ -274,9 +274,11 @@ unsigned long round_jiffies_up(unsigned
+ unsigned long round_jiffies_up_relative(unsigned long j);
+ #ifdef CONFIG_HOTPLUG_CPU
++int timers_prepare_cpu(unsigned int cpu);
+ int timers_dead_cpu(unsigned int cpu);
+ #else
+-#define timers_dead_cpu NULL
++#define timers_prepare_cpu    NULL
++#define timers_dead_cpu               NULL
+ #endif
+ #endif
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -1309,9 +1309,9 @@ static struct cpuhp_step cpuhp_bp_states
+        * before blk_mq_queue_reinit_notify() from notify_dead(),
+        * otherwise a RCU stall occurs.
+        */
+-      [CPUHP_TIMERS_DEAD] = {
++      [CPUHP_TIMERS_PREPARE] = {
+               .name                   = "timers:dead",
+-              .startup.single         = NULL,
++              .startup.single         = timers_prepare_cpu,
+               .teardown.single        = timers_dead_cpu,
+       },
+       /* Kicks the plugged cpu into life */
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -1851,6 +1851,21 @@ static void migrate_timer_list(struct ti
+       }
+ }
++int timers_prepare_cpu(unsigned int cpu)
++{
++      struct timer_base *base;
++      int b;
++
++      for (b = 0; b < NR_BASES; b++) {
++              base = per_cpu_ptr(&timer_bases[b], cpu);
++              base->clk = jiffies;
++              base->next_expiry = base->clk + NEXT_TIMER_MAX_DELTA;
++              base->is_idle = false;
++              base->must_forward_clk = true;
++      }
++      return 0;
++}
++
+ int timers_dead_cpu(unsigned int cpu)
+ {
+       struct timer_base *old_base;
diff --git a/queue-4.9/timers-use-deferrable-base-independent-of-base-nohz_active.patch b/queue-4.9/timers-use-deferrable-base-independent-of-base-nohz_active.patch
new file mode 100644 (file)
index 0000000..dbb5177
--- /dev/null
@@ -0,0 +1,79 @@
+From ced6d5c11d3e7b342f1a80f908e6756ebd4b8ddd Mon Sep 17 00:00:00 2001
+From: Anna-Maria Gleixner <anna-maria@linutronix.de>
+Date: Fri, 22 Dec 2017 15:51:12 +0100
+Subject: timers: Use deferrable base independent of base::nohz_active
+
+From: Anna-Maria Gleixner <anna-maria@linutronix.de>
+
+commit ced6d5c11d3e7b342f1a80f908e6756ebd4b8ddd upstream.
+
+During boot and before base::nohz_active is set in the timer bases, deferrable
+timers are enqueued into the standard timer base. This works correctly as
+long as base::nohz_active is false.
+
+Once it base::nohz_active is set and a timer which was enqueued before that
+is accessed the lock selector code choses the lock of the deferred
+base. This causes unlocked access to the standard base and in case the
+timer is removed it does not clear the pending flag in the standard base
+bitmap which causes get_next_timer_interrupt() to return bogus values.
+
+To prevent that, the deferrable timers must be enqueued in the deferrable
+base, even when base::nohz_active is not set. Those deferrable timers also
+need to be expired unconditional.
+
+Fixes: 500462a9de65 ("timers: Switch to a non-cascading wheel")
+Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Reviewed-by: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Sebastian Siewior <bigeasy@linutronix.de>
+Cc: rt@linutronix.de
+Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
+Link: https://lkml.kernel.org/r/20171222145337.633328378@linutronix.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/time/timer.c |   16 +++++++---------
+ 1 file changed, 7 insertions(+), 9 deletions(-)
+
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -849,11 +849,10 @@ static inline struct timer_base *get_tim
+       struct timer_base *base = per_cpu_ptr(&timer_bases[BASE_STD], cpu);
+       /*
+-       * If the timer is deferrable and nohz is active then we need to use
+-       * the deferrable base.
++       * If the timer is deferrable and NO_HZ_COMMON is set then we need
++       * to use the deferrable base.
+        */
+-      if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && base->nohz_active &&
+-          (tflags & TIMER_DEFERRABLE))
++      if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && (tflags & TIMER_DEFERRABLE))
+               base = per_cpu_ptr(&timer_bases[BASE_DEF], cpu);
+       return base;
+ }
+@@ -863,11 +862,10 @@ static inline struct timer_base *get_tim
+       struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);
+       /*
+-       * If the timer is deferrable and nohz is active then we need to use
+-       * the deferrable base.
++       * If the timer is deferrable and NO_HZ_COMMON is set then we need
++       * to use the deferrable base.
+        */
+-      if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && base->nohz_active &&
+-          (tflags & TIMER_DEFERRABLE))
++      if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && (tflags & TIMER_DEFERRABLE))
+               base = this_cpu_ptr(&timer_bases[BASE_DEF]);
+       return base;
+ }
+@@ -1684,7 +1682,7 @@ static __latent_entropy void run_timer_s
+       base->must_forward_clk = false;
+       __run_timers(base);
+-      if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && base->nohz_active)
++      if (IS_ENABLED(CONFIG_NO_HZ_COMMON))
+               __run_timers(this_cpu_ptr(&timer_bases[BASE_DEF]));
+ }
diff --git a/queue-4.9/usb-add-device-quirk-for-logitech-hd-pro-webcam-c925e.patch b/queue-4.9/usb-add-device-quirk-for-logitech-hd-pro-webcam-c925e.patch
new file mode 100644 (file)
index 0000000..8113f41
--- /dev/null
@@ -0,0 +1,40 @@
+From 7f038d256c723dd390d2fca942919573995f4cfd Mon Sep 17 00:00:00 2001
+From: Dmitry Fleytman Dmitry Fleytman <dmitry.fleytman@gmail.com>
+Date: Tue, 19 Dec 2017 06:02:04 +0200
+Subject: usb: Add device quirk for Logitech HD Pro Webcam C925e
+
+From: Dmitry Fleytman Dmitry Fleytman <dmitry.fleytman@gmail.com>
+
+commit 7f038d256c723dd390d2fca942919573995f4cfd upstream.
+
+Commit e0429362ab15
+("usb: Add device quirk for Logitech HD Pro Webcams C920 and C930e")
+introduced quirk to workaround an issue with some Logitech webcams.
+
+There is one more model that has the same issue - C925e, so applying
+the same quirk as well.
+
+See aforementioned commit message for detailed explanation of the problem.
+
+Signed-off-by: Dmitry Fleytman <dmitry.fleytman@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/core/quirks.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -57,10 +57,11 @@ static const struct usb_device_id usb_qu
+       /* Microsoft LifeCam-VX700 v2.0 */
+       { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME },
+-      /* Logitech HD Pro Webcams C920, C920-C and C930e */
++      /* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
+       { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
+       { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
+       { USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT },
++      { USB_DEVICE(0x046d, 0x085b), .driver_info = USB_QUIRK_DELAY_INIT },
+       /* Logitech ConferenceCam CC3000e */
+       { USB_DEVICE(0x046d, 0x0847), .driver_info = USB_QUIRK_DELAY_INIT },
diff --git a/queue-4.9/usb-add-reset_resume-for-elsa-microlink-56k.patch b/queue-4.9/usb-add-reset_resume-for-elsa-microlink-56k.patch
new file mode 100644 (file)
index 0000000..9483351
--- /dev/null
@@ -0,0 +1,31 @@
+From b9096d9f15c142574ebebe8fbb137012bb9d99c2 Mon Sep 17 00:00:00 2001
+From: Oliver Neukum <oneukum@suse.com>
+Date: Tue, 12 Dec 2017 16:11:30 +0100
+Subject: usb: add RESET_RESUME for ELSA MicroLink 56K
+
+From: Oliver Neukum <oneukum@suse.com>
+
+commit b9096d9f15c142574ebebe8fbb137012bb9d99c2 upstream.
+
+This modem needs this quirk to operate. It produces timeouts when
+resumed without reset.
+
+Signed-off-by: Oliver Neukum <oneukum@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/core/quirks.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -155,6 +155,9 @@ static const struct usb_device_id usb_qu
+       /* Genesys Logic hub, internally used by KY-688 USB 3.1 Type-C Hub */
+       { USB_DEVICE(0x05e3, 0x0612), .driver_info = USB_QUIRK_NO_LPM },
++      /* ELSA MicroLink 56K */
++      { USB_DEVICE(0x05cc, 0x2267), .driver_info = USB_QUIRK_RESET_RESUME },
++
+       /* Genesys Logic hub, internally used by Moshi USB to Ethernet Adapter */
+       { USB_DEVICE(0x05e3, 0x0616), .driver_info = USB_QUIRK_NO_LPM },
diff --git a/queue-4.9/usb-fix-off-by-one-in-type-specific-length-check-of-bos-ssp-capability.patch b/queue-4.9/usb-fix-off-by-one-in-type-specific-length-check-of-bos-ssp-capability.patch
new file mode 100644 (file)
index 0000000..f2e6d60
--- /dev/null
@@ -0,0 +1,42 @@
+From 07b9f12864d16c3a861aef4817eb1efccbc5d0e6 Mon Sep 17 00:00:00 2001
+From: Mathias Nyman <mathias.nyman@linux.intel.com>
+Date: Tue, 19 Dec 2017 11:14:42 +0200
+Subject: USB: Fix off by one in type-specific length check of BOS SSP capability
+
+From: Mathias Nyman <mathias.nyman@linux.intel.com>
+
+commit 07b9f12864d16c3a861aef4817eb1efccbc5d0e6 upstream.
+
+USB 3.1 devices are not detected as 3.1 capable since 4.15-rc3 due to a
+off by one in commit 81cf4a45360f ("USB: core: Add type-specific length
+check of BOS descriptors")
+
+It uses USB_DT_USB_SSP_CAP_SIZE() to get SSP capability size which takes
+the zero based SSAC as argument, not the actual count of sublink speed
+attributes.
+
+USB3 spec 9.6.2.5 says "The number of Sublink Speed Attributes = SSAC + 1."
+
+The type-specific length check patch was added to stable and needs to be
+fixed there as well
+
+Fixes: 81cf4a45360f ("USB: core: Add type-specific length check of BOS descriptors")
+CC: Masakazu Mokuno <masakazu.mokuno@gmail.com>
+Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/core/config.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/core/config.c
++++ b/drivers/usb/core/config.c
+@@ -1002,7 +1002,7 @@ int usb_get_bos_descriptor(struct usb_de
+               case USB_SSP_CAP_TYPE:
+                       ssp_cap = (struct usb_ssp_cap_descriptor *)buffer;
+                       ssac = (le32_to_cpu(ssp_cap->bmAttributes) &
+-                              USB_SSP_SUBLINK_SPEED_ATTRIBS) + 1;
++                              USB_SSP_SUBLINK_SPEED_ATTRIBS);
+                       if (length >= USB_DT_USB_SSP_CAP_SIZE(ssac))
+                               dev->bos->ssp_cap = ssp_cap;
+                       break;
diff --git a/queue-4.9/usb-serial-ftdi_sio-add-id-for-airbus-ds-p8gr.patch b/queue-4.9/usb-serial-ftdi_sio-add-id-for-airbus-ds-p8gr.patch
new file mode 100644 (file)
index 0000000..a6641ad
--- /dev/null
@@ -0,0 +1,45 @@
+From c6a36ad383559a60a249aa6016cebf3cb8b6c485 Mon Sep 17 00:00:00 2001
+From: Max Schulze <max.schulze@posteo.de>
+Date: Wed, 20 Dec 2017 20:47:44 +0100
+Subject: USB: serial: ftdi_sio: add id for Airbus DS P8GR
+
+From: Max Schulze <max.schulze@posteo.de>
+
+commit c6a36ad383559a60a249aa6016cebf3cb8b6c485 upstream.
+
+Add AIRBUS_DS_P8GR device IDs to ftdi_sio driver.
+
+Signed-off-by: Max Schulze <max.schulze@posteo.de>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/ftdi_sio.c     |    1 +
+ drivers/usb/serial/ftdi_sio_ids.h |    6 ++++++
+ 2 files changed, 7 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -1017,6 +1017,7 @@ static const struct usb_device_id id_tab
+               .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
+       { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_BT_USB_PID) },
+       { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_WL_USB_PID) },
++      { USB_DEVICE(AIRBUS_DS_VID, AIRBUS_DS_P8GR) },
+       { }                                     /* Terminating entry */
+ };
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -914,6 +914,12 @@
+ #define ICPDAS_I7563U_PID             0x0105
+ /*
++ * Airbus Defence and Space
++ */
++#define AIRBUS_DS_VID                 0x1e8e  /* Vendor ID */
++#define AIRBUS_DS_P8GR                        0x6001  /* Tetra P8GR */
++
++/*
+  * RT Systems programming cables for various ham radios
+  */
+ #define RTSYSTEMS_VID         0x2100  /* Vendor ID */
diff --git a/queue-4.9/usb-serial-option-add-support-for-telit-me910-pid-0x1101.patch b/queue-4.9/usb-serial-option-add-support-for-telit-me910-pid-0x1101.patch
new file mode 100644 (file)
index 0000000..fa0dc1e
--- /dev/null
@@ -0,0 +1,50 @@
+From 08933099e6404f588f81c2050bfec7313e06eeaf Mon Sep 17 00:00:00 2001
+From: Daniele Palmas <dnlplm@gmail.com>
+Date: Thu, 14 Dec 2017 16:54:45 +0100
+Subject: USB: serial: option: add support for Telit ME910 PID 0x1101
+
+From: Daniele Palmas <dnlplm@gmail.com>
+
+commit 08933099e6404f588f81c2050bfec7313e06eeaf upstream.
+
+This patch adds support for PID 0x1101 of Telit ME910.
+
+Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -283,6 +283,7 @@ static void option_instat_callback(struc
+ #define TELIT_PRODUCT_LE922_USBCFG3           0x1043
+ #define TELIT_PRODUCT_LE922_USBCFG5           0x1045
+ #define TELIT_PRODUCT_ME910                   0x1100
++#define TELIT_PRODUCT_ME910_DUAL_MODEM                0x1101
+ #define TELIT_PRODUCT_LE920                   0x1200
+ #define TELIT_PRODUCT_LE910                   0x1201
+ #define TELIT_PRODUCT_LE910_USBCFG4           0x1206
+@@ -648,6 +649,11 @@ static const struct option_blacklist_inf
+       .reserved = BIT(1) | BIT(3),
+ };
++static const struct option_blacklist_info telit_me910_dual_modem_blacklist = {
++      .sendsetup = BIT(0),
++      .reserved = BIT(3),
++};
++
+ static const struct option_blacklist_info telit_le910_blacklist = {
+       .sendsetup = BIT(0),
+       .reserved = BIT(1) | BIT(2),
+@@ -1247,6 +1253,8 @@ static const struct usb_device_id option
+               .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg0 },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
+               .driver_info = (kernel_ulong_t)&telit_me910_blacklist },
++      { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
++              .driver_info = (kernel_ulong_t)&telit_me910_dual_modem_blacklist },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
+               .driver_info = (kernel_ulong_t)&telit_le910_blacklist },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
diff --git a/queue-4.9/usb-serial-option-adding-support-for-yuga-clm920-nc5.patch b/queue-4.9/usb-serial-option-adding-support-for-yuga-clm920-nc5.patch
new file mode 100644 (file)
index 0000000..d362423
--- /dev/null
@@ -0,0 +1,64 @@
+From 3920bb713038810f25770e7545b79f204685c8f2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?SZ=20Lin=20=28=E6=9E=97=E4=B8=8A=E6=99=BA=29?=
+ <sz.lin@moxa.com>
+Date: Tue, 19 Dec 2017 17:40:32 +0800
+Subject: USB: serial: option: adding support for YUGA CLM920-NC5
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: SZ Lin (林上智) <sz.lin@moxa.com>
+
+commit 3920bb713038810f25770e7545b79f204685c8f2 upstream.
+
+This patch adds support for YUGA CLM920-NC5 PID 0x9625 USB modem to option
+driver.
+
+Interface layout:
+0: QCDM/DIAG
+1: ADB
+2: MODEM
+3: AT
+4: RMNET
+
+Signed-off-by: Taiyi Wu <taiyity.wu@moxa.com>
+Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -236,6 +236,8 @@ static void option_instat_callback(struc
+ /* These Quectel products use Qualcomm's vendor ID */
+ #define QUECTEL_PRODUCT_UC20                  0x9003
+ #define QUECTEL_PRODUCT_UC15                  0x9090
++/* These Yuga products use Qualcomm's vendor ID */
++#define YUGA_PRODUCT_CLM920_NC5                       0x9625
+ #define QUECTEL_VENDOR_ID                     0x2c7c
+ /* These Quectel products use Quectel's vendor ID */
+@@ -683,6 +685,10 @@ static const struct option_blacklist_inf
+       .reserved = BIT(4) | BIT(5),
+ };
++static const struct option_blacklist_info yuga_clm920_nc5_blacklist = {
++      .reserved = BIT(1) | BIT(4),
++};
++
+ static const struct usb_device_id option_ids[] = {
+       { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
+       { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
+@@ -1187,6 +1193,9 @@ static const struct usb_device_id option
+       { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)},
+       { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20),
+         .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
++      /* Yuga products use Qualcomm vendor ID */
++      { USB_DEVICE(QUALCOMM_VENDOR_ID, YUGA_PRODUCT_CLM920_NC5),
++        .driver_info = (kernel_ulong_t)&yuga_clm920_nc5_blacklist },
+       /* Quectel products using Quectel vendor ID */
+       { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21),
+         .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
diff --git a/queue-4.9/usb-serial-qcserial-add-sierra-wireless-em7565.patch b/queue-4.9/usb-serial-qcserial-add-sierra-wireless-em7565.patch
new file mode 100644 (file)
index 0000000..966ea6c
--- /dev/null
@@ -0,0 +1,78 @@
+From 92a18a657fb2e2ffbfa0659af32cc18fd2346516 Mon Sep 17 00:00:00 2001
+From: Reinhard Speyerer <rspmn@arcor.de>
+Date: Fri, 15 Dec 2017 00:39:27 +0100
+Subject: USB: serial: qcserial: add Sierra Wireless EM7565
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Reinhard Speyerer <rspmn@arcor.de>
+
+commit 92a18a657fb2e2ffbfa0659af32cc18fd2346516 upstream.
+
+Sierra Wireless EM7565 devices use the QCSERIAL_SWI layout for their
+serial ports
+
+T:  Bus=01 Lev=03 Prnt=29 Port=01 Cnt=02 Dev#= 31 Spd=480  MxCh= 0
+D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
+P:  Vendor=1199 ProdID=9091 Rev= 0.06
+S:  Manufacturer=Sierra Wireless, Incorporated
+S:  Product=Sierra Wireless EM7565 Qualcomm Snapdragon X16 LTE-A
+S:  SerialNumber=xxxxxxxx
+C:* #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA
+I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=qcserial
+E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=qcserial
+E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
+E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=qcserial
+E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
+E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:* If#= 8 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
+E:  Ad=86(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
+E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+
+but need sendsetup = true for the NMEA port to make it work properly.
+
+Simplify the patch compared to v1 as suggested by Bjørn Mork by taking
+advantage of the fact that existing devices work with sendsetup = true
+too.
+
+Use sendsetup = true for the NMEA interface of QCSERIAL_SWI and add
+DEVICE_SWI entries for the EM7565 PID 0x9091 and the EM7565 QDL PID
+0x9090.
+
+Tests with several MC73xx/MC74xx/MC77xx devices have been performed in
+order to verify backward compatibility.
+
+Signed-off-by: Reinhard Speyerer <rspmn@arcor.de>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/qcserial.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/serial/qcserial.c
++++ b/drivers/usb/serial/qcserial.c
+@@ -166,6 +166,8 @@ static const struct usb_device_id id_tab
+       {DEVICE_SWI(0x1199, 0x9079)},   /* Sierra Wireless EM74xx */
+       {DEVICE_SWI(0x1199, 0x907a)},   /* Sierra Wireless EM74xx QDL */
+       {DEVICE_SWI(0x1199, 0x907b)},   /* Sierra Wireless EM74xx */
++      {DEVICE_SWI(0x1199, 0x9090)},   /* Sierra Wireless EM7565 QDL */
++      {DEVICE_SWI(0x1199, 0x9091)},   /* Sierra Wireless EM7565 */
+       {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 */
+@@ -346,6 +348,7 @@ static int qcprobe(struct usb_serial *se
+                       break;
+               case 2:
+                       dev_dbg(dev, "NMEA GPS interface found\n");
++                      sendsetup = true;
+                       break;
+               case 3:
+                       dev_dbg(dev, "Modem port found\n");
diff --git a/queue-4.9/usb-xhci-add-xhci_trust_tx_length-for-renesas-upd720201.patch b/queue-4.9/usb-xhci-add-xhci_trust_tx_length-for-renesas-upd720201.patch
new file mode 100644 (file)
index 0000000..c3953d6
--- /dev/null
@@ -0,0 +1,38 @@
+From da99706689481717998d1d48edd389f339eea979 Mon Sep 17 00:00:00 2001
+From: Daniel Thompson <daniel.thompson@linaro.org>
+Date: Thu, 21 Dec 2017 15:06:15 +0200
+Subject: usb: xhci: Add XHCI_TRUST_TX_LENGTH for Renesas uPD720201
+
+From: Daniel Thompson <daniel.thompson@linaro.org>
+
+commit da99706689481717998d1d48edd389f339eea979 upstream.
+
+When plugging in a USB webcam I see the following message:
+xhci_hcd 0000:04:00.0: WARN Successful completion on short TX: needs
+XHCI_TRUST_TX_LENGTH quirk?
+handle_tx_event: 913 callbacks suppressed
+
+All is quiet again with this patch (and I've done a fair but of soak
+testing with the camera since).
+
+Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
+Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/xhci-pci.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/host/xhci-pci.c
++++ b/drivers/usb/host/xhci-pci.c
+@@ -190,6 +190,9 @@ static void xhci_pci_quirks(struct devic
+               xhci->quirks |= XHCI_BROKEN_STREAMS;
+       }
+       if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
++                      pdev->device == 0x0014)
++              xhci->quirks |= XHCI_TRUST_TX_LENGTH;
++      if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
+                       pdev->device == 0x0015)
+               xhci->quirks |= XHCI_RESET_ON_RESUME;
+       if (pdev->vendor == PCI_VENDOR_ID_VIA)
diff --git a/queue-4.9/x86-smpboot-remove-stale-tlb-flush-invocations.patch b/queue-4.9/x86-smpboot-remove-stale-tlb-flush-invocations.patch
new file mode 100644 (file)
index 0000000..cdf81a5
--- /dev/null
@@ -0,0 +1,65 @@
+From 322f8b8b340c824aef891342b0f5795d15e11562 Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 30 Dec 2017 22:13:53 +0100
+Subject: x86/smpboot: Remove stale TLB flush invocations
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+commit 322f8b8b340c824aef891342b0f5795d15e11562 upstream.
+
+smpboot_setup_warm_reset_vector() and smpboot_restore_warm_reset_vector()
+invoke local_flush_tlb() for no obvious reason.
+
+Digging in history revealed that the original code in the 2.1 era added
+those because the code manipulated a swapper_pg_dir pagetable entry. The
+pagetable manipulation was removed long ago in the 2.3 timeframe, but the
+TLB flush invocations stayed around forever.
+
+Remove them along with the pointless pr_debug()s which come from the same 2.1
+change.
+
+Reported-by: Dominik Brodowski <linux@dominikbrodowski.net>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Andy Lutomirski <luto@kernel.org>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Dave Hansen <dave.hansen@linux.intel.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Linus Torvalds <torvalds@linuxfoundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Link: http://lkml.kernel.org/r/20171230211829.586548655@linutronix.de
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kernel/smpboot.c |    9 ---------
+ 1 file changed, 9 deletions(-)
+
+--- a/arch/x86/kernel/smpboot.c
++++ b/arch/x86/kernel/smpboot.c
+@@ -115,14 +115,10 @@ static inline void smpboot_setup_warm_re
+       spin_lock_irqsave(&rtc_lock, flags);
+       CMOS_WRITE(0xa, 0xf);
+       spin_unlock_irqrestore(&rtc_lock, flags);
+-      local_flush_tlb();
+-      pr_debug("1.\n");
+       *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_HIGH)) =
+                                                       start_eip >> 4;
+-      pr_debug("2.\n");
+       *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) =
+                                                       start_eip & 0xf;
+-      pr_debug("3.\n");
+ }
+ static inline void smpboot_restore_warm_reset_vector(void)
+@@ -130,11 +126,6 @@ static inline void smpboot_restore_warm_
+       unsigned long flags;
+       /*
+-       * Install writable page 0 entry to set BIOS data area.
+-       */
+-      local_flush_tlb();
+-
+-      /*
+        * Paranoid:  Set warm reset code and vector here back
+        * to default values.
+        */