From: Greg Kroah-Hartman Date: Fri, 26 Jul 2013 20:38:11 +0000 (-0700) Subject: 3.0-stable patches X-Git-Tag: v3.0.88~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d6ebb8b940389e3c8e526ca2449b604d85fd434b;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0-stable patches added patches: alsa-usb-audio-6fire-return-correct-xrun-indication.patch hrtimers-move-smp-function-call-to-thread-context.patch lockd-protect-nlm_blocked-access-in-nlmsvc_retry_blocked.patch tracing-fix-irqs-off-tag-display-in-syscall-tracing.patch usb-cp210x-add-mmb-and-pi-zigbee-usb-device-support.patch usb-cp210x-support-sel-c662-vendor-device.patch usb-option-add-d-link-dwm-152-c1-and-dwm-156-c1.patch usb-option-add-tp-link-ma260.patch usb-option-append-petatel-np10t-device-to-gsm-modems-list.patch usb-serial-cp210x-add-usb-id-for-netgear-switches-embedded-serial-adapter.patch usb-serial-option-add-olivetti-olicard-200.patch usb-serial-option-add-onyx-3g-device-support.patch usb-serial-option-blacklist-onda-mt689dc-qmi-interface.patch usb-serial-option.c-remove-onda-mt825up-product-id-fromdriver.patch zfcp-status-read-buffers-on-first-adapter-open-with-link-down.patch --- diff --git a/queue-3.0/alsa-usb-audio-6fire-return-correct-xrun-indication.patch b/queue-3.0/alsa-usb-audio-6fire-return-correct-xrun-indication.patch new file mode 100644 index 00000000000..818d6966adf --- /dev/null +++ b/queue-3.0/alsa-usb-audio-6fire-return-correct-xrun-indication.patch @@ -0,0 +1,34 @@ +From be2f93a4c4981b3646b6f98f477154411b8516cb Mon Sep 17 00:00:00 2001 +From: Eldad Zack +Date: Fri, 19 Jul 2013 18:26:53 +0200 +Subject: ALSA: usb-audio: 6fire: return correct XRUN indication + +From: Eldad Zack + +commit be2f93a4c4981b3646b6f98f477154411b8516cb upstream. + +Return SNDRV_PCM_POS_XRUN (snd_pcm_uframes_t) instead of +SNDRV_PCM_STATE_XRUN (snd_pcm_state_t) from the pointer +function of 6fire, as expected by snd_pcm_update_hw_ptr0(). + +Caught by sparse. + +Signed-off-by: Eldad Zack +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/6fire/pcm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/usb/6fire/pcm.c ++++ b/sound/usb/6fire/pcm.c +@@ -541,7 +541,7 @@ static snd_pcm_uframes_t usb6fire_pcm_po + snd_pcm_uframes_t ret; + + if (rt->panic || !sub) +- return SNDRV_PCM_STATE_XRUN; ++ return SNDRV_PCM_POS_XRUN; + + spin_lock_irqsave(&sub->lock, flags); + ret = sub->dma_off; diff --git a/queue-3.0/hrtimers-move-smp-function-call-to-thread-context.patch b/queue-3.0/hrtimers-move-smp-function-call-to-thread-context.patch new file mode 100644 index 00000000000..4a34a32c340 --- /dev/null +++ b/queue-3.0/hrtimers-move-smp-function-call-to-thread-context.patch @@ -0,0 +1,95 @@ +From 5ec2481b7b47a4005bb446d176e5d0257400c77d Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner +Date: Fri, 5 Jul 2013 12:09:18 +0200 +Subject: hrtimers: Move SMP function call to thread context + +From: Thomas Gleixner + +commit 5ec2481b7b47a4005bb446d176e5d0257400c77d upstream. + +smp_call_function_* must not be called from softirq context. + +But clock_was_set() which calls on_each_cpu() is called from softirq +context to implement a delayed clock_was_set() for the timer interrupt +handler. Though that almost never gets invoked. A recent change in the +resume code uses the softirq based delayed clock_was_set to support +Xens resume mechanism. + +linux-next contains a new warning which warns if smp_call_function_* +is called from softirq context which gets triggered by that Xen +change. + +Fix this by moving the delayed clock_was_set() call to a work context. + +Reported-and-tested-by: Artem Savkov +Reported-by: Sasha Levin +Cc: David Vrabel +Cc: Ingo Molnar +Cc: H. Peter Anvin , +Cc: Konrad Wilk +Cc: John Stultz +Cc: xen-devel@lists.xen.org +Cc: stable@vger.kernel.org +Signed-off-by: Thomas Gleixner +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/hrtimer.c | 28 +++++++++++++--------------- + 1 file changed, 13 insertions(+), 15 deletions(-) + +--- a/kernel/hrtimer.c ++++ b/kernel/hrtimer.c +@@ -707,17 +707,20 @@ static int hrtimer_switch_to_hres(void) + return 1; + } + ++static void clock_was_set_work(struct work_struct *work) ++{ ++ clock_was_set(); ++} ++ ++static DECLARE_WORK(hrtimer_work, clock_was_set_work); ++ + /* +- * Called from timekeeping code to reprogramm the hrtimer interrupt +- * device. If called from the timer interrupt context we defer it to +- * softirq context. ++ * Called from timekeeping and resume code to reprogramm the hrtimer ++ * interrupt device on all cpus. + */ + void clock_was_set_delayed(void) + { +- struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); +- +- cpu_base->clock_was_set = 1; +- __raise_softirq_irqoff(HRTIMER_SOFTIRQ); ++ schedule_work(&hrtimer_work); + } + + #else +@@ -766,8 +769,10 @@ void hrtimers_resume(void) + WARN_ONCE(!irqs_disabled(), + KERN_INFO "hrtimers_resume() called with IRQs enabled!"); + ++ /* Retrigger on the local CPU */ + retrigger_next_event(NULL); +- timerfd_clock_was_set(); ++ /* And schedule a retrigger for all others */ ++ clock_was_set_delayed(); + } + + static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer) +@@ -1416,13 +1421,6 @@ void hrtimer_peek_ahead_timers(void) + + static void run_hrtimer_softirq(struct softirq_action *h) + { +- struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); +- +- if (cpu_base->clock_was_set) { +- cpu_base->clock_was_set = 0; +- clock_was_set(); +- } +- + hrtimer_peek_ahead_timers(); + } + diff --git a/queue-3.0/lockd-protect-nlm_blocked-access-in-nlmsvc_retry_blocked.patch b/queue-3.0/lockd-protect-nlm_blocked-access-in-nlmsvc_retry_blocked.patch new file mode 100644 index 00000000000..b12c1f23755 --- /dev/null +++ b/queue-3.0/lockd-protect-nlm_blocked-access-in-nlmsvc_retry_blocked.patch @@ -0,0 +1,61 @@ +From 1c327d962fc420aea046c16215a552710bde8231 Mon Sep 17 00:00:00 2001 +From: David Jeffery +Date: Wed, 10 Jul 2013 13:19:50 -0400 +Subject: lockd: protect nlm_blocked access in nlmsvc_retry_blocked + +From: David Jeffery + +commit 1c327d962fc420aea046c16215a552710bde8231 upstream. + +In nlmsvc_retry_blocked, the check that the list is non-empty and acquiring +the pointer of the first entry is unprotected by any lock. This allows a rare +race condition when there is only one entry on the list. A function such as +nlmsvc_grant_callback() can be called, which will temporarily remove the entry +from the list. Between the list_empty() and list_entry(),the list may become +empty, causing an invalid pointer to be used as an nlm_block, leading to a +possible crash. + +This patch adds the nlm_block_lock around these calls to prevent concurrent +use of the nlm_blocked list. + +This was a regression introduced by +f904be9cc77f361d37d71468b13ff3d1a1823dea "lockd: Mostly remove BKL from +the server". + +Signed-off-by: David Jeffery +Cc: Bryan Schumaker +Signed-off-by: J. Bruce Fields +Signed-off-by: Greg Kroah-Hartman + +--- + fs/lockd/svclock.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/fs/lockd/svclock.c ++++ b/fs/lockd/svclock.c +@@ -913,6 +913,7 @@ nlmsvc_retry_blocked(void) + unsigned long timeout = MAX_SCHEDULE_TIMEOUT; + struct nlm_block *block; + ++ spin_lock(&nlm_blocked_lock); + while (!list_empty(&nlm_blocked) && !kthread_should_stop()) { + block = list_entry(nlm_blocked.next, struct nlm_block, b_list); + +@@ -922,6 +923,7 @@ nlmsvc_retry_blocked(void) + timeout = block->b_when - jiffies; + break; + } ++ spin_unlock(&nlm_blocked_lock); + + dprintk("nlmsvc_retry_blocked(%p, when=%ld)\n", + block, block->b_when); +@@ -931,7 +933,9 @@ nlmsvc_retry_blocked(void) + retry_deferred_block(block); + } else + nlmsvc_grant_blocked(block); ++ spin_lock(&nlm_blocked_lock); + } ++ spin_unlock(&nlm_blocked_lock); + + return timeout; + } diff --git a/queue-3.0/series b/queue-3.0/series index 3c27c6d8b35..920146f6e7e 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -28,3 +28,18 @@ vlan-fix-a-race-in-egress-prio-management.patch writeback-fix-periodic-writeback-after-fs-mount.patch scsi-megaraid_sas-fix-memory-leak-if-sgl-has-zero-length-entries.patch scsi-fix-incorrect-memset-in-bnx2fc_parse_fcp_rsp.patch +usb-serial-option-blacklist-onda-mt689dc-qmi-interface.patch +usb-option-add-tp-link-ma260.patch +usb-serial-option-add-olivetti-olicard-200.patch +usb-serial-option.c-remove-onda-mt825up-product-id-fromdriver.patch +usb-option-append-petatel-np10t-device-to-gsm-modems-list.patch +usb-option-add-d-link-dwm-152-c1-and-dwm-156-c1.patch +usb-serial-option-add-onyx-3g-device-support.patch +usb-serial-cp210x-add-usb-id-for-netgear-switches-embedded-serial-adapter.patch +usb-cp210x-add-mmb-and-pi-zigbee-usb-device-support.patch +usb-cp210x-support-sel-c662-vendor-device.patch +lockd-protect-nlm_blocked-access-in-nlmsvc_retry_blocked.patch +tracing-fix-irqs-off-tag-display-in-syscall-tracing.patch +hrtimers-move-smp-function-call-to-thread-context.patch +zfcp-status-read-buffers-on-first-adapter-open-with-link-down.patch +alsa-usb-audio-6fire-return-correct-xrun-indication.patch diff --git a/queue-3.0/tracing-fix-irqs-off-tag-display-in-syscall-tracing.patch b/queue-3.0/tracing-fix-irqs-off-tag-display-in-syscall-tracing.patch new file mode 100644 index 00000000000..b0223fd0728 --- /dev/null +++ b/queue-3.0/tracing-fix-irqs-off-tag-display-in-syscall-tracing.patch @@ -0,0 +1,123 @@ +From 11034ae9c20f4057a6127fc965906417978e69b2 Mon Sep 17 00:00:00 2001 +From: "zhangwei(Jovi)" +Date: Wed, 10 Apr 2013 11:26:23 +0800 +Subject: tracing: Fix irqs-off tag display in syscall tracing + +From: "zhangwei(Jovi)" + +commit 11034ae9c20f4057a6127fc965906417978e69b2 upstream. + +All syscall tracing irqs-off tags are wrong, the syscall enter entry doesn't +disable irqs. + + [root@jovi tracing]#echo "syscalls:sys_enter_open" > set_event + [root@jovi tracing]# cat trace + # tracer: nop + # + # entries-in-buffer/entries-written: 13/13 #P:2 + # + # _-----=> irqs-off + # / _----=> need-resched + # | / _---=> hardirq/softirq + # || / _--=> preempt-depth + # ||| / delay + # TASK-PID CPU# |||| TIMESTAMP FUNCTION + # | | | |||| | | + irqbalance-513 [000] d... 56115.496766: sys_open(filename: 804e1a6, flags: 0, mode: 1b6) + irqbalance-513 [000] d... 56115.497008: sys_open(filename: 804e1bb, flags: 0, mode: 1b6) + sendmail-771 [000] d... 56115.827982: sys_open(filename: b770e6d1, flags: 0, mode: 1b6) + +The reason is syscall tracing doesn't record irq_flags into buffer. +The proper display is: + + [root@jovi tracing]#echo "syscalls:sys_enter_open" > set_event + [root@jovi tracing]# cat trace + # tracer: nop + # + # entries-in-buffer/entries-written: 14/14 #P:2 + # + # _-----=> irqs-off + # / _----=> need-resched + # | / _---=> hardirq/softirq + # || / _--=> preempt-depth + # ||| / delay + # TASK-PID CPU# |||| TIMESTAMP FUNCTION + # | | | |||| | | + irqbalance-514 [001] .... 46.213921: sys_open(filename: 804e1a6, flags: 0, mode: 1b6) + irqbalance-514 [001] .... 46.214160: sys_open(filename: 804e1bb, flags: 0, mode: 1b6) + <...>-920 [001] .... 47.307260: sys_open(filename: 4e82a0c5, flags: 80000, mode: 0) + +Link: http://lkml.kernel.org/r/1365564393-10972-3-git-send-email-jovi.zhangwei@huawei.com + +Cc: stable@vger.kernel.org # 2.6.35 +Signed-off-by: zhangwei(Jovi) +Signed-off-by: Steven Rostedt +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/trace/trace_syscalls.c | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +--- a/kernel/trace/trace_syscalls.c ++++ b/kernel/trace/trace_syscalls.c +@@ -304,6 +304,8 @@ void ftrace_syscall_enter(void *ignore, + struct ring_buffer *buffer; + int size; + int syscall_nr; ++ unsigned long irq_flags; ++ int pc; + + syscall_nr = syscall_get_nr(current, regs); + if (syscall_nr < 0) +@@ -317,8 +319,11 @@ void ftrace_syscall_enter(void *ignore, + + size = sizeof(*entry) + sizeof(unsigned long) * sys_data->nb_args; + ++ local_save_flags(irq_flags); ++ pc = preempt_count(); ++ + event = trace_current_buffer_lock_reserve(&buffer, +- sys_data->enter_event->event.type, size, 0, 0); ++ sys_data->enter_event->event.type, size, irq_flags, pc); + if (!event) + return; + +@@ -328,7 +333,8 @@ void ftrace_syscall_enter(void *ignore, + + if (!filter_current_check_discard(buffer, sys_data->enter_event, + entry, event)) +- trace_current_buffer_unlock_commit(buffer, event, 0, 0); ++ trace_current_buffer_unlock_commit(buffer, event, ++ irq_flags, pc); + } + + void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret) +@@ -338,6 +344,8 @@ void ftrace_syscall_exit(void *ignore, s + struct ring_buffer_event *event; + struct ring_buffer *buffer; + int syscall_nr; ++ unsigned long irq_flags; ++ int pc; + + syscall_nr = syscall_get_nr(current, regs); + if (syscall_nr < 0) +@@ -350,7 +358,8 @@ void ftrace_syscall_exit(void *ignore, s + return; + + event = trace_current_buffer_lock_reserve(&buffer, +- sys_data->exit_event->event.type, sizeof(*entry), 0, 0); ++ sys_data->exit_event->event.type, sizeof(*entry), ++ irq_flags, pc); + if (!event) + return; + +@@ -360,7 +369,8 @@ void ftrace_syscall_exit(void *ignore, s + + if (!filter_current_check_discard(buffer, sys_data->exit_event, + entry, event)) +- trace_current_buffer_unlock_commit(buffer, event, 0, 0); ++ trace_current_buffer_unlock_commit(buffer, event, ++ irq_flags, pc); + } + + int reg_event_syscall_enter(struct ftrace_event_call *call) diff --git a/queue-3.0/usb-cp210x-add-mmb-and-pi-zigbee-usb-device-support.patch b/queue-3.0/usb-cp210x-add-mmb-and-pi-zigbee-usb-device-support.patch new file mode 100644 index 00000000000..ce77336cd63 --- /dev/null +++ b/queue-3.0/usb-cp210x-add-mmb-and-pi-zigbee-usb-device-support.patch @@ -0,0 +1,32 @@ +From 7681156982026ebf7eafd7301eb0374d7648d068 Mon Sep 17 00:00:00 2001 +From: Sami Rahman +Date: Mon, 8 Jul 2013 14:28:55 -0400 +Subject: USB: cp210x: add MMB and PI ZigBee USB Device Support + +From: Sami Rahman + +commit 7681156982026ebf7eafd7301eb0374d7648d068 upstream. + +Added support for MMB Networks and Planet Innovation Ingeni ZigBee USB +devices using customized Silicon Labs' CP210x.c USB to UART bridge +drivers with PIDs: 88A4, 88A5. + +Signed-off-by: Sami Rahman +Tested-by: Sami Rahman +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/cp210x.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -125,6 +125,8 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ + { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ + { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ ++ { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ ++ { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ + { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ + { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ + { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ diff --git a/queue-3.0/usb-cp210x-support-sel-c662-vendor-device.patch b/queue-3.0/usb-cp210x-support-sel-c662-vendor-device.patch new file mode 100644 index 00000000000..18f169109bc --- /dev/null +++ b/queue-3.0/usb-cp210x-support-sel-c662-vendor-device.patch @@ -0,0 +1,29 @@ +From b579fa52f6be0b4157ca9cc5e94d44a2c89a7e95 Mon Sep 17 00:00:00 2001 +From: Barry Grussling +Date: Fri, 19 Jul 2013 14:46:12 -0700 +Subject: usb: cp210x support SEL C662 Vendor/Device + +From: Barry Grussling + +commit b579fa52f6be0b4157ca9cc5e94d44a2c89a7e95 upstream. + +This patch adds support for the Schweitzer Engineering Laboratories +C662 USB cable based off the CP210x driver. + +Signed-off-by: Barry Grussling +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 +@@ -157,6 +157,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */ + { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ + { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ ++ { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */ + { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ + { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ + { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */ diff --git a/queue-3.0/usb-option-add-d-link-dwm-152-c1-and-dwm-156-c1.patch b/queue-3.0/usb-option-add-d-link-dwm-152-c1-and-dwm-156-c1.patch new file mode 100644 index 00000000000..7ba14c90311 --- /dev/null +++ b/queue-3.0/usb-option-add-d-link-dwm-152-c1-and-dwm-156-c1.patch @@ -0,0 +1,77 @@ +From ca24763588844b14f019ffc45c7df6d9e8f932c5 Mon Sep 17 00:00:00 2001 +From: "Alexandr \\\"Sky\\\" Ivanov" +Date: Tue, 23 Jul 2013 17:46:40 +0400 +Subject: USB: option: add D-Link DWM-152/C1 and DWM-156/C1 + +From: "Alexandr \\\"Sky\\\" Ivanov" + +commit ca24763588844b14f019ffc45c7df6d9e8f932c5 upstream. + +Adding support for D-Link DWM-152/C1 and DWM-156/C1 devices. + +DWM-152/C1: +T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 6 Spd=480 MxCh= 0 +D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 +P: Vendor=07d1 ProdID=3e01 Rev= 0.00 +S: Product=USB Configuration +S: SerialNumber=1234567890ABCDEF +C:* #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA +I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=2ms +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 4 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage +E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms + +DWM-156/C1: +T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 8 Spd=480 MxCh= 0 +D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 +P: Vendor=07d1 ProdID=3e02 Rev= 0.00 +S: Product=DataCard Device +S: SerialNumber=1234567890ABCDEF +C:* #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA +I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=2ms +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 4 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage +E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms + +Signed-off-by: Alexandr Ivanov +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 +@@ -1361,6 +1361,8 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ ++ { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ + { } /* Terminating entry */ + }; + MODULE_DEVICE_TABLE(usb, option_ids); diff --git a/queue-3.0/usb-option-add-tp-link-ma260.patch b/queue-3.0/usb-option-add-tp-link-ma260.patch new file mode 100644 index 00000000000..1f0b1103f73 --- /dev/null +++ b/queue-3.0/usb-option-add-tp-link-ma260.patch @@ -0,0 +1,27 @@ +From 94190301ffa059c2d127b3a67ec5d161d5c62681 Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +Date: Fri, 28 Jun 2013 17:15:25 +0200 +Subject: usb: option: add TP-LINK MA260 + +From: Bjørn Mork + +commit 94190301ffa059c2d127b3a67ec5d161d5c62681 upstream. + +Signed-off-by: Bjørn Mork +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 +@@ -1355,6 +1355,8 @@ static const struct usb_device_id option + { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) }, + { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(TPLINK_VENDOR_ID, 0x9000), /* TP-Link MA260 */ ++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x00, 0x00) }, /* D-Link DWM-156 (variant) */ diff --git a/queue-3.0/usb-option-append-petatel-np10t-device-to-gsm-modems-list.patch b/queue-3.0/usb-option-append-petatel-np10t-device-to-gsm-modems-list.patch new file mode 100644 index 00000000000..0060913ebe8 --- /dev/null +++ b/queue-3.0/usb-option-append-petatel-np10t-device-to-gsm-modems-list.patch @@ -0,0 +1,46 @@ +From c38e83b6cc2adf80e3f091fd92cfbeacc9748347 Mon Sep 17 00:00:00 2001 +From: Daniil Bolsun +Date: Fri, 19 Jul 2013 10:21:23 +0300 +Subject: USB: option: append Petatel NP10T device to GSM modems list + +From: Daniil Bolsun + +commit c38e83b6cc2adf80e3f091fd92cfbeacc9748347 upstream. + +This patch was tested on 3.10.1 kernel. + +Same models of Petatel NP10T modems have different device IDs. +Unfortunately they have no additional revision information on a board +which may treat them as different devices. Currently I've seen only +two NP10T devices with various IDs. Possibly Petatel NP10T list will +be appended upon devices with new IDs will appear. + +Signed-off-by: Daniil Bolsun +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -445,7 +445,8 @@ static void option_instat_callback(struc + + /* Hyundai Petatel Inc. products */ + #define PETATEL_VENDOR_ID 0x1ff4 +-#define PETATEL_PRODUCT_NP10T 0x600e ++#define PETATEL_PRODUCT_NP10T_600A 0x600a ++#define PETATEL_PRODUCT_NP10T_600E 0x600e + + /* TP-LINK Incorporated products */ + #define TPLINK_VENDOR_ID 0x2357 +@@ -1347,7 +1348,8 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, + { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, +- { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) }, ++ { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) }, ++ { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) }, + { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE(TPLINK_VENDOR_ID, 0x9000), /* TP-Link MA260 */ diff --git a/queue-3.0/usb-serial-cp210x-add-usb-id-for-netgear-switches-embedded-serial-adapter.patch b/queue-3.0/usb-serial-cp210x-add-usb-id-for-netgear-switches-embedded-serial-adapter.patch new file mode 100644 index 00000000000..d59e264966d --- /dev/null +++ b/queue-3.0/usb-serial-cp210x-add-usb-id-for-netgear-switches-embedded-serial-adapter.patch @@ -0,0 +1,31 @@ +From 90625070c4253377025878c4e82feed8b35c7116 Mon Sep 17 00:00:00 2001 +From: Luiz Angelo Daros de Luca +Date: Mon, 1 Jul 2013 23:56:25 -0300 +Subject: usb: serial: cp210x: Add USB ID for Netgear Switches embedded serial adapter + +From: Luiz Angelo Daros de Luca + +commit 90625070c4253377025878c4e82feed8b35c7116 upstream. + +This adds NetGear Managed Switch M4100 series, M5300 series, M7100 series +USB ID (0846:0110) to the cp210x driver. Without this, the serial +adapter is not recognized in Linux. Description was obtained from +an Netgear Eng. + +Signed-off-by: Luiz Angelo Daros de Luca +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 +@@ -60,6 +60,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ + { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ + { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */ ++ { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */ + { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ + { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ + { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */ diff --git a/queue-3.0/usb-serial-option-add-olivetti-olicard-200.patch b/queue-3.0/usb-serial-option-add-olivetti-olicard-200.patch new file mode 100644 index 00000000000..21611359d56 --- /dev/null +++ b/queue-3.0/usb-serial-option-add-olivetti-olicard-200.patch @@ -0,0 +1,37 @@ +From 4cf76df06ecc852633ed927d91e01c83c33bc331 Mon Sep 17 00:00:00 2001 +From: Dan Williams +Date: Wed, 10 Jul 2013 12:25:02 -0500 +Subject: usb: serial: option: add Olivetti Olicard 200 + +From: Dan Williams + +commit 4cf76df06ecc852633ed927d91e01c83c33bc331 upstream. + +Speaks AT on interfaces 5 (command & PPP) and 3 (secondary), other +interface protocols are unknown. + +Signed-off-by: Dan Williams +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 +@@ -347,6 +347,7 @@ static void option_instat_callback(struc + #define OLIVETTI_VENDOR_ID 0x0b3c + #define OLIVETTI_PRODUCT_OLICARD100 0xc000 + #define OLIVETTI_PRODUCT_OLICARD145 0xc003 ++#define OLIVETTI_PRODUCT_OLICARD200 0xc005 + + /* Celot products */ + #define CELOT_VENDOR_ID 0x211f +@@ -1279,6 +1280,7 @@ static const struct usb_device_id option + + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) }, + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) }, ++ { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) }, + { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ + { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */ + { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ diff --git a/queue-3.0/usb-serial-option-add-onyx-3g-device-support.patch b/queue-3.0/usb-serial-option-add-onyx-3g-device-support.patch new file mode 100644 index 00000000000..7715309f78b --- /dev/null +++ b/queue-3.0/usb-serial-option-add-onyx-3g-device-support.patch @@ -0,0 +1,29 @@ +From 63b5df963f52ccbab6fabedf05b7ac6b465789a4 Mon Sep 17 00:00:00 2001 +From: Enrico Mioso +Date: Thu, 25 Jul 2013 02:01:39 +0200 +Subject: usb: serial: option: Add ONYX 3G device support + +From: Enrico Mioso + +commit 63b5df963f52ccbab6fabedf05b7ac6b465789a4 upstream. + +This patch adds support for the ONYX 3G device (version 1) from ALFA +NETWORK. + +Signed-off-by: Enrico Mioso +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -793,6 +793,7 @@ static const struct usb_device_id option + { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ + { 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(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, diff --git a/queue-3.0/usb-serial-option-blacklist-onda-mt689dc-qmi-interface.patch b/queue-3.0/usb-serial-option-blacklist-onda-mt689dc-qmi-interface.patch new file mode 100644 index 00000000000..ec9646368e9 --- /dev/null +++ b/queue-3.0/usb-serial-option-blacklist-onda-mt689dc-qmi-interface.patch @@ -0,0 +1,31 @@ +From 3d1a69e726406ab662ab88fa30a3a05ed404334d Mon Sep 17 00:00:00 2001 +From: Enrico Mioso +Date: Sat, 29 Jun 2013 15:33:35 +0200 +Subject: usb: serial: option: blacklist ONDA MT689DC QMI interface + +From: Enrico Mioso + +commit 3d1a69e726406ab662ab88fa30a3a05ed404334d upstream. + +Prevent the option driver from binding itself to the QMI/WWAN interface, making +it unusable by the proper driver. + +Signed-off-by: enrico Mioso +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -832,7 +832,8 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) }, +- { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, diff --git a/queue-3.0/usb-serial-option.c-remove-onda-mt825up-product-id-fromdriver.patch b/queue-3.0/usb-serial-option.c-remove-onda-mt825up-product-id-fromdriver.patch new file mode 100644 index 00000000000..9f9825d047d --- /dev/null +++ b/queue-3.0/usb-serial-option.c-remove-onda-mt825up-product-id-fromdriver.patch @@ -0,0 +1,44 @@ +From 878c69aae986ae97084458c0183a8c0a059865b1 Mon Sep 17 00:00:00 2001 +From: Enrico Mioso +Date: Sat, 13 Jul 2013 18:54:14 +0200 +Subject: usb: serial: option.c: remove ONDA MT825UP product ID fromdriver + +From: Enrico Mioso + +commit 878c69aae986ae97084458c0183a8c0a059865b1 upstream. + +Some (very few) early devices like mine, where not exposting a proper CDC +descriptor. This was fixed with an immediate firmware update from the vendor, +and pre-installed on newer devices. +So actual devices can be driven by cdc_acm.c + cdc_ether.c. + +Signed-off-by: Enrico Mioso +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 7 ------- + 1 file changed, 7 deletions(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -353,12 +353,6 @@ static void option_instat_callback(struc + #define CELOT_VENDOR_ID 0x211f + #define CELOT_PRODUCT_CT680M 0x6801 + +-/* ONDA Communication vendor id */ +-#define ONDA_VENDOR_ID 0x1ee8 +- +-/* ONDA MT825UP HSDPA 14.2 modem */ +-#define ONDA_MT825UP 0x000b +- + /* Samsung products */ + #define SAMSUNG_VENDOR_ID 0x04e8 + #define SAMSUNG_PRODUCT_GT_B3730 0x6889 +@@ -1282,7 +1276,6 @@ static const struct usb_device_id option + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) }, + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) }, + { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ +- { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */ + { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ + { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) }, + { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) }, diff --git a/queue-3.0/zfcp-status-read-buffers-on-first-adapter-open-with-link-down.patch b/queue-3.0/zfcp-status-read-buffers-on-first-adapter-open-with-link-down.patch new file mode 100644 index 00000000000..ed5add38e26 --- /dev/null +++ b/queue-3.0/zfcp-status-read-buffers-on-first-adapter-open-with-link-down.patch @@ -0,0 +1,136 @@ +From 9edf7d75ee5f21663a0183d21f702682d0ef132f Mon Sep 17 00:00:00 2001 +From: Steffen Maier +Date: Fri, 26 Apr 2013 17:34:54 +0200 +Subject: [SCSI] zfcp: status read buffers on first adapter open with link down + +From: Steffen Maier + +commit 9edf7d75ee5f21663a0183d21f702682d0ef132f upstream. + +Commit 64deb6efdc5504ce97b5c1c6f281fffbc150bd93 +"[SCSI] zfcp: Use status_read_buf_num provided by FCP channel" +started using a value returned by the channel but only evaluated the value +if the fabric link is up. +Commit 8d88cf3f3b9af4713642caeb221b6d6a42019001 +"[SCSI] zfcp: Update status read mempool" +introduced mempool resizings based on the above value. +On setting an FCP device online for the very first time since boot, a new +zeroed adapter object is allocated. If the link is down, the number of +status read requests remains zero. Since just the config data exchange is +incomplete, we proceed with adapter open recovery. However, we +unconditionally call mempool_resize with adapter->stat_read_buf_num == 0 in +this case. + +This causes a kernel message "kernel BUG at mm/mempool.c:131!" in process +"zfcperp" with last function mempool_resize in Krnl PSW +and zfcp_erp_thread in the Call Trace. + +Don't evaluate channel values which are invalid on link down. The number of +status read requests is always valid, evaluated, and set to a positive +minimum greater than zero. The adapter open recovery can proceed and the +channel has status read buffers to inform us on a future link up event. +While we are not aware of any other code path that could result in mempool +resize attempts of size zero, we still also initialize the number of status +read buffers to be posted to a static minimum number on adapter object +allocation. + +Signed-off-by: Steffen Maier +[sm: Backported to 3.0: + - Copyright notice changed slightly + - Don't use zfcp_fsf_convert_portspeed()] +Signed-off-by: James Bottomley +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/s390/scsi/zfcp_aux.c | 5 ++++- + drivers/s390/scsi/zfcp_fsf.c | 21 +++++++++++++++------ + 2 files changed, 19 insertions(+), 7 deletions(-) + +--- a/drivers/s390/scsi/zfcp_aux.c ++++ b/drivers/s390/scsi/zfcp_aux.c +@@ -3,7 +3,7 @@ + * + * Module interface and handling of zfcp data structures. + * +- * Copyright IBM Corporation 2002, 2010 ++ * Copyright IBM Corp. 2002, 2013 + */ + + /* +@@ -23,6 +23,7 @@ + * Christof Schmitt + * Martin Petermann + * Sven Schuetz ++ * Steffen Maier + */ + + #define KMSG_COMPONENT "zfcp" +@@ -414,6 +415,8 @@ struct zfcp_adapter *zfcp_adapter_enqueu + adapter->dma_parms.max_segment_size = ZFCP_QDIO_SBALE_LEN; + adapter->ccw_device->dev.dma_parms = &adapter->dma_parms; + ++ adapter->stat_read_buf_num = FSF_STATUS_READS_RECOM; ++ + if (!zfcp_scsi_adapter_register(adapter)) + return adapter; + +--- a/drivers/s390/scsi/zfcp_fsf.c ++++ b/drivers/s390/scsi/zfcp_fsf.c +@@ -3,7 +3,7 @@ + * + * Implementation of FSF commands. + * +- * Copyright IBM Corporation 2002, 2010 ++ * Copyright IBM Corp. 2002, 2013 + */ + + #define KMSG_COMPONENT "zfcp" +@@ -455,11 +455,8 @@ static int zfcp_fsf_exchange_config_eval + + fc_host_port_name(shost) = nsp->fl_wwpn; + fc_host_node_name(shost) = nsp->fl_wwnn; +- fc_host_port_id(shost) = ntoh24(bottom->s_id); +- fc_host_speed(shost) = bottom->fc_link_speed; + fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3; + +- adapter->hydra_version = bottom->adapter_type; + adapter->timer_ticks = bottom->timer_interval & ZFCP_FSF_TIMER_INT_MASK; + adapter->stat_read_buf_num = max(bottom->status_read_buf_num, + (u16)FSF_STATUS_READS_RECOM); +@@ -467,6 +464,18 @@ static int zfcp_fsf_exchange_config_eval + if (fc_host_permanent_port_name(shost) == -1) + fc_host_permanent_port_name(shost) = fc_host_port_name(shost); + ++ zfcp_scsi_set_prot(adapter); ++ ++ /* no error return above here, otherwise must fix call chains */ ++ /* do not evaluate invalid fields */ ++ if (req->qtcb->header.fsf_status == FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE) ++ return 0; ++ ++ fc_host_port_id(shost) = ntoh24(bottom->s_id); ++ fc_host_speed(shost) = bottom->fc_link_speed; ++ ++ adapter->hydra_version = bottom->adapter_type; ++ + switch (bottom->fc_topology) { + case FSF_TOPO_P2P: + adapter->peer_d_id = ntoh24(bottom->peer_d_id); +@@ -488,8 +497,6 @@ static int zfcp_fsf_exchange_config_eval + return -EIO; + } + +- zfcp_scsi_set_prot(adapter); +- + return 0; + } + +@@ -540,6 +547,8 @@ static void zfcp_fsf_exchange_config_dat + &adapter->status); + zfcp_fsf_link_down_info_eval(req, + &qtcb->header.fsf_status_qual.link_down_info); ++ if (zfcp_fsf_exchange_config_evaluate(req)) ++ return; + break; + default: + zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh3");