[PATCH V2] usbatm: Fix dynamic_debug / ratelimited atm_dbg and atm_rldbg macros

2013-10-26 Thread Joe Perches
Fix atm_dbg to use normal pr_debug not dynamic_pr_debug
because dynamic_pr_debug may not be compiled in at all.

Signed-off-by: Joe Perches 
---
V2: Fix macro use of arg... vs ... typo
Fix usbatm vs atmusb typo (thanks Krzysiek)

 drivers/usb/atm/usbatm.h | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/atm/usbatm.h b/drivers/usb/atm/usbatm.h
index 5651231..f3eecd9 100644
--- a/drivers/usb/atm/usbatm.h
+++ b/drivers/usb/atm/usbatm.h
@@ -34,6 +34,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /*
 #define VERBOSE_DEBUG
@@ -59,13 +60,12 @@
atm_printk(KERN_INFO, instance , format , ## arg)
 #define atm_warn(instance, format, arg...) \
atm_printk(KERN_WARNING, instance , format , ## arg)
-#define atm_dbg(instance, format, arg...)  \
-   dynamic_pr_debug("ATM dev %d: " format ,\
-   (instance)->atm_dev->number , ## arg)
-#define atm_rldbg(instance, format, arg...)\
-   if (printk_ratelimit()) \
-   atm_dbg(instance , format , ## arg)
-
+#define atm_dbg(instance, format, ...) \
+   pr_debug("ATM dev %d: " format, \
+(instance)->atm_dev->number, ##__VA_ARGS__)
+#define atm_rldbg(instance, format, ...)   \
+   pr_debug_ratelimited("ATM dev %d: " format, \
+(instance)->atm_dev->number, ##__VA_ARGS__)
 
 /* flags, set by mini-driver in bind() */
 



--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH V2] printk: pr_debug_ratelimited: check state first to reduce "callbacks suppressed" messages

2013-10-26 Thread Joe Perches
pr_debug_ratelimited should be coded similarly to dev_dbg_ratelimited
to reduce the "callbacks suppressed" messages.

Add #include  to printk.h. Unfortunately, this
new #include must be after the prototype/declaration of function printk.

It may be better to split out these _ratelimited declarations into
a separate file one day.

Any use of these pr__ratelimited functions must also have another
specific #include .  Most users have this done indirectly
via #include 

printk.h may not #include  as it causes circular
dependencies and compilation failures.

Signed-off-by: Joe Perches 
---
V2: Fix #include dependencies and typos.

Compile tested with and without CONFIG_DYNAMIC_DEBUG

It looks to me as if device.h should also have #include 
It currently gets the #include indirectly via kobject.h -> kernel.h.

 include/linux/printk.h | 16 +++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/include/linux/printk.h b/include/linux/printk.h
index e6131a78..6949258 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -233,6 +233,8 @@ extern asmlinkage void dump_stack(void) __cold;
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 #endif
 
+#include 
+
 /* If you are writing a driver, please use dev_dbg instead */
 #if defined(CONFIG_DYNAMIC_DEBUG)
 /* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
@@ -343,7 +345,19 @@ extern asmlinkage void dump_stack(void) __cold;
 #endif
 
 /* If you are writing a driver, please use dev_dbg instead */
-#if defined(DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG)
+/* descriptor check is first to prevent flooding with "callbacks suppressed" */
+#define pr_debug_ratelimited(fmt, ...) \
+do {   \
+   static DEFINE_RATELIMIT_STATE(_rs,  \
+ DEFAULT_RATELIMIT_INTERVAL,   \
+ DEFAULT_RATELIMIT_BURST); \
+   DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
+   if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) &&\
+   __ratelimit(&_rs))  \
+   __dynamic_pr_debug(&descriptor, fmt, ##__VA_ARGS__);\
+} while (0)
+#elif defined(DEBUG)
 #define pr_debug_ratelimited(fmt, ...) \
printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 #else


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb-storage: scsiglue: Changing the command result

2013-10-26 Thread Greg KH
On Sat, 26 Oct 2013, Vishal Annapurve wrote:
> Hi Alan,
> 
> Here is the new patch:
> 
> From: Vishal Annapurve 
> Date: Sat, 26 Oct 2013 21:10:11 +0530
> Subject: [PATCH] usb: storage: Proper cmd result assignment
> 
> This change replaces DID_ABORT with DID_TIMEOUT as a command result
> whenever US_FLIDX_TIMED_OUT bit is set.
> 
> This change is made to bring USB storage inline with a recent change:
> 
> commit18a4d0a22ed6c54b67af7718c305cd010f09ddf8
> 
> [SCSI] Handle disk devices which can not process medium access commands
> We have experienced several devices which fail in a fashion we do not
> currently handle gracefully in SCSI. After a failure these devices will
> respond to the SCSI primary command set (INQUIRY, TEST UNIT READY, etc.)
> but any command accessing the storage medium will time out.
> 
> As the USB storage was setting command result as aborted rather than
> timed out, SCSI layer was not recognizing the above mentioned failure
> pattern.
> 
> Change-Id: Ic58e2247fed11649f4dbea56382354ba2fe0be1b

What's this line for?  (yeah, I know where it comes from, the point is
it doesn't belong here...)

Also, no signed-off-by, so I can't apply it...

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: xhci spew with iphone since iOS7

2013-10-26 Thread Sarah Sharp
On Fri, Oct 25, 2013 at 10:34:30AM -0400, Dave Jones wrote:
> On Fri, Oct 25, 2013 at 10:27:56AM -0400, Alan Stern wrote:
>  > On Fri, 25 Oct 2013, Dave Jones wrote:
>  > 
>  > > Xhci got a lot noisier since I recently updated my phone to the newer 
> version of iOS.
>  > > Possibly it's related to the new feature where it pops up a dialog on 
> the phone
>  > > asking if I trust the machine I've plugged into?
>  > > 
>  > > This is from an 3.12-rc6 kernel:
>  > > 
>  > > xhci_hcd :00:14.0: Port Status Change Event for port 2
>  > > xhci_hcd :00:14.0: resume root hub
>  > > xhci_hcd :00:14.0: handle_port_status: starting port polling.
>  > > usb usb3: usb wakeup-resume
>  > > usb usb3: usb auto-resume
>  > > hub 3-0:1.0: hub_resume
>  > > xhci_hcd :00:14.0: get port status, actual port 0 status  = 0x2a0
>  > > xhci_hcd :00:14.0: Get port status returned 0x100
>  > > xhci_hcd :00:14.0: get port status, actual port 1 status  = 0x20ae1
>  > > xhci_hcd :00:14.0: Get port status returned 0x10301
>  > ...
>  > 
>  > All, or almost all, of these are merely debug-level messages.
>  
> Hmm, somehow I never noticed as much in the past.
> Maybe I didn't have USB_DEBUG enabled back then.
> 
>  > Besides, how does this differ from what you get when you plug in a 
>  > phone running the older iOS?
> 
> Unfortunatly cron has purged the older logs, so I've not got any examples,
> but I'm pretty sure it was less alarming.
> 
> I'll just turn USB_DEBUG back off, I'm not even sure how it got turned on.

As I mentioned at Kernel Summit, CONFIG_USB_DEBUG has probably always
been on.  The 3.12 kernel removed CONFIG_USB_XHCI_HCD_DEBUGGING in favor
of dynamic debugging.  Normally dynamic debug would be off by default,
but CONFIG_USB_DEBUG adds the DEBUG symbol for USB drivers, which turns
it on.

So, you fix this by turning off CONFIG_USB_DEBUG, or modifying the boot
command line to include xhci_hcd.dyndbg="=_"

I suspect I'm going to get a lot of complaints about log spew.
Hopefully other people can find this message and figure out what
happened.

Sarah Sharp
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] atmusb: Fix dynamic_debug macros

2013-10-26 Thread Krzysztof Mazur
On Sat, Oct 26, 2013 at 12:28:56PM -0700, Joe Perches wrote:
> On Sat, 2013-10-26 at 11:55 -0700, Joe Perches wrote:
> > Fix use of atm_dbg to all normal pr_debug not dynamic_pr_debug
> > because dynamic_pr_debug may not be compiled in at all.
> 
> Greg, please don't apply this one.
> I'll resubmit one that actually works.
> 
> (the arg...) should be ...
> 
> > +#define atm_dbg(instance, format, arg...)  \
>  ^ oops.
> 
> > +#define atm_rldbg(instance, format, arg...)
> > \
> > +   pr_debug_ratelimited("ATM dev %d: " format, \
> > +(instance)->atm_dev->number, ##__VA_ARGS__)
> 
> here too.
> 

Yeah, I initially fixed that with changing "##__VAR_ARGS" to "## arg",
but without with "arg..." -> "..." it also compiles and runs correctly.

I tested that only in my configuration - without DEBUG and DYNAMIC_DEBUG
- and compile tested that it with DYNAMIC_DEBUG. If you like you can add:

Tested-by: Krzysztof Mazur 

BTW: the driver is named usbatm, not atmusb.

Thanks,
Krzysiek
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] printk: pr_debug_ratelimited: check state first to reduce "callbacks suppressed" messages

2013-10-26 Thread Joe Perches
On Sat, 2013-10-26 at 20:01 +0100, Greg Kroah-Hartman wrote:
> On Sat, Oct 26, 2013 at 11:52:02AM -0700, Joe Perches wrote:
> > pr_debug_ratelimited should be coded similar to dev_dbg_ratelimited
> > to reduce the "callbacks suppressed" messages.
> > Signed-off-by: Joe Perches 
> Looks good, I'll queue both of these up soon.

Sorry Greg, hand out the brown paper bag please.

Just ignore these both, I'll resubmit properly tested ones.

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] usb-storage: scsiglue: Changing the command result

2013-10-26 Thread Alan Stern
On Sat, 26 Oct 2013, Vishal Annapurve wrote:

> Hi Alan,
> 
> Here is the new patch:
> 
> From: Vishal Annapurve 
> Date: Sat, 26 Oct 2013 21:10:11 +0530
> Subject: [PATCH] usb: storage: Proper cmd result assignment
> 
> This change replaces DID_ABORT with DID_TIMEOUT as a command result
> whenever US_FLIDX_TIMED_OUT bit is set.
> 
> This change is made to bring USB storage inline with a recent change:
> 
> commit18a4d0a22ed6c54b67af7718c305cd010f09ddf8
> 
> [SCSI] Handle disk devices which can not process medium access commands
> We have experienced several devices which fail in a fashion we do not
> currently handle gracefully in SCSI. After a failure these devices will
> respond to the SCSI primary command set (INQUIRY, TEST UNIT READY, etc.)
> but any command accessing the storage medium will time out.
> 
> As the USB storage was setting command result as aborted rather than
> timed out, SCSI layer was not recognizing the above mentioned failure
> pattern.
> 
> Change-Id: Ic58e2247fed11649f4dbea56382354ba2fe0be1b
> ---
>  drivers/staging/keucr/transport.c   | 6 +++---
>  drivers/staging/keucr/usb.c | 5 +++--

Those two files aren't part of usb-storage; they belong to a different 
driver.  It would be better to have a separate patch for them, and you 
should copy that patch to the driver's maintainer.

>  drivers/usb/storage/cypress_atacb.c | 1 +
>  drivers/usb/storage/isd200.c| 2 +-
>  drivers/usb/storage/transport.c | 8 
>  drivers/usb/storage/usb.c   | 9 +
>  6 files changed, 17 insertions(+), 14 deletions(-)

Otherwise this is okay.  You might also want to submit a third patch 
for the uas driver.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] atmusb: Fix dynamic_debug macros

2013-10-26 Thread Joe Perches
On Sat, 2013-10-26 at 11:55 -0700, Joe Perches wrote:
> Fix use of atm_dbg to all normal pr_debug not dynamic_pr_debug
> because dynamic_pr_debug may not be compiled in at all.

Greg, please don't apply this one.
I'll resubmit one that actually works.

(the arg...) should be ...

> +#define atm_dbg(instance, format, arg...)\
 ^ oops.

> +#define atm_rldbg(instance, format, arg...)  \
> + pr_debug_ratelimited("ATM dev %d: " format, \
> +  (instance)->atm_dev->number, ##__VA_ARGS__)

here too.


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] printk: pr_debug_ratelimited: check state first to reduce "callbacks suppressed" messages

2013-10-26 Thread Greg Kroah-Hartman
On Sat, Oct 26, 2013 at 11:52:02AM -0700, Joe Perches wrote:
> pr_debug_ratelimited should be coded similar to dev_dbg_ratelimited
> to reduce the "callbacks suppressed" messages.
> 
> Signed-off-by: Joe Perches 

Looks good, I'll queue both of these up soon.

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] atmusb: Fix dynamic_debug macros

2013-10-26 Thread Joe Perches
Fix use of atm_dbg to all normal pr_debug not dynamic_pr_debug
because dynamic_pr_debug may not be compiled in at all.

Signed-off-by: Joe Perches 
---
 drivers/usb/atm/usbatm.h | 13 ++---
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/atm/usbatm.h b/drivers/usb/atm/usbatm.h
index 5651231..2104b4b 100644
--- a/drivers/usb/atm/usbatm.h
+++ b/drivers/usb/atm/usbatm.h
@@ -59,13 +59,12 @@
atm_printk(KERN_INFO, instance , format , ## arg)
 #define atm_warn(instance, format, arg...) \
atm_printk(KERN_WARNING, instance , format , ## arg)
-#define atm_dbg(instance, format, arg...)  \
-   dynamic_pr_debug("ATM dev %d: " format ,\
-   (instance)->atm_dev->number , ## arg)
-#define atm_rldbg(instance, format, arg...)\
-   if (printk_ratelimit()) \
-   atm_dbg(instance , format , ## arg)
-
+#define atm_dbg(instance, format, arg...)  \
+   pr_debug("ATM dev %d: " format, \
+(instance)->atm_dev->number, ##__VA_ARGS__)
+#define atm_rldbg(instance, format, arg...)\
+   pr_debug_ratelimited("ATM dev %d: " format, \
+(instance)->atm_dev->number, ##__VA_ARGS__)
 
 /* flags, set by mini-driver in bind() */
 


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] printk: pr_debug_ratelimited: check state first to reduce "callbacks suppressed" messages

2013-10-26 Thread Joe Perches
pr_debug_ratelimited should be coded similar to dev_dbg_ratelimited
to reduce the "callbacks suppressed" messages.

Signed-off-by: Joe Perches 
---
On Sat, 2013-10-26 at 18:37 +0100, Greg Kroah-Hartman wrote:
> On Sat, Oct 26, 2013 at 03:29:56PM +0200, Krzysztof Mazur wrote:
> > Hi,
> > 
> > commit 2d6401cf4ca3861692a4779745e0049cac769d10
> > ("USB: usbatm: move the atm_dbg() call to use dynamic debug")
> > changed the atm_rldbg() to:
> > 
> > #define atm_rldbg(instance, format, arg...) \
> > if (printk_ratelimit()) \
> > atm_dbg(instance , format , ## arg)
> > 
> > and now printk_ratelimit() is always called even when debugging is
> > disabled and a lot of "callbacks suppressed" messages are printed
> > by the printk_ratelimit():
> > 
> > [...]
> > usbatm_rx_process: 4977 callbacks suppressed
> > usbatm_extract_one_cell: 2920 callbacks suppressed
> > [...]
> > 
> > 
> > I'm not sure how to fix that, maybe we need dynamic_pr_debug_ratelimit()?
> 
> How about just deleting the use of that macro entirely?  Odds are it's
> not really needed anymore, right?

 include/linux/printk.h | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/include/linux/printk.h b/include/linux/printk.h
index e6131a78..449d924 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -343,7 +343,19 @@ extern asmlinkage void dump_stack(void) __cold;
 #endif
 
 /* If you are writing a driver, please use dev_dbg instead */
-#if defined(DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG)
+/* descriptor check is first to prevent flooding with "callbacks suppressed" */
+#define pr_debug_ratelimited(dev, fmt, ...)\
+do {   \
+   static DEFINE_RATELIMIT_STATE(_rs,  \
+ DEFAULT_RATELIMIT_INTERVAL,   \
+ DEFAULT_RATELIMIT_BURST); \
+   DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
+   if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) &&\
+   __ratelimit(&_rs))  \
+   __dynamic_pr_debug(fmt, ##__VA_ARGS__); \
+} while (0)
+#elif defined(DEBUG)
 #define pr_debug_ratelimited(fmt, ...) \
printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 #else


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Read transaction not work for EHCI host controller

2013-10-26 Thread Greg KH
On Fri, Oct 25, 2013 at 08:21:58AM +, loki wrote:
> Hi,
> 
> I used the USB-serial driver option.c to communicate with the GSM modem 
> device through usb, the used host controller is EHCI. The problem is that 
> nothing appear on the screen when type characters after using "microcom -s 
> 115200 /dev/ttyUSB3" command to access the ttyUSB3 device node.

It sounds like microcom is not setting up the proper tty line settings
for the device, as you say if you run it in "blocking" mode, it works
properly, right?

What about using the "normal" programs to connect to this device (i.e.
network/modem manager and the like?)  Don't they work properly with the
hardware here?

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: 2.6.35 problem with i.mx28 and cdc-acm

2013-10-26 Thread Greg KH
On Fri, Oct 25, 2013 at 05:14:58PM +0200, Robert Hodaszi wrote:
> Hi,
> 
> I'm using a Telit modem with an i.mx28 processor. I'm currently running 
> a 2.6.35 kernel on that (I know, it's pretty old, and on an other 
> thread, I'm working on the v3 also). The modem is using the cdc-acm driver.

That's really old, and we can't do anything to help you out here with
that release at all, sorry.  Please try 3.11 and see if that resolves
your issue or not.

good luck,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: usbatm: printk_ratelimit() always called in the atm_rldbg()

2013-10-26 Thread Greg Kroah-Hartman
On Sat, Oct 26, 2013 at 03:29:56PM +0200, Krzysztof Mazur wrote:
> Hi,
> 
> commit 2d6401cf4ca3861692a4779745e0049cac769d10
> ("USB: usbatm: move the atm_dbg() call to use dynamic debug")
> changed the atm_rldbg() to:
> 
> #define atm_rldbg(instance, format, arg...)   \
>   if (printk_ratelimit()) \
>   atm_dbg(instance , format , ## arg)
> 
> and now printk_ratelimit() is always called even when debugging is
> disabled and a lot of "callbacks suppressed" messages are printed
> by the printk_ratelimit():
> 
> [...]
> usbatm_rx_process: 4977 callbacks suppressed
> usbatm_extract_one_cell: 2920 callbacks suppressed
> [...]
> 
> 
> I'm not sure how to fix that, maybe we need dynamic_pr_debug_ratelimit()?

How about just deleting the use of that macro entirely?  Odds are it's
not really needed anymore, right?

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: LTE vodafone K5150 12d1 1f16 ; 12d1 1575 mbim IPV6/ipv4

2013-10-26 Thread Bjørn Mork
Thomas Schäfer  writes:

> Am Samstag, 26. Oktober 2013, 16:01:26 schrieben Sie:
>> Thomas Schäfer  writes:
>> > Am Donnerstag, 24. Oktober 2013, 11:45:39 schrieben Sie:
>> >> Did you try any of the ND tuning controls on Linux?  Turning on ARP
>> >> 
>> >> before bringing up the interface might work on IPv6 (but fail for IPv4):
>> >>   ifconfig wwan0 arp
>> > 
>> > This solved the problem. (IPv6 positive , IPv4 at the moment untested)
>> 
>> Great!
>> 
>> Then I believe we have positive confirmation that this firmware really
>> needs neigbour discovery.  Now we only have to figure out how to support
>> that without breaking IPv4.
>
> That's your part :-)
>
> Now I tested IPv4 with arp, and you are right. It doesn't work. 
> Ping is answered with "Destination Host Unreachable".
>
> If I switch off arp  again with ifconfig wwan0 -arp, ping works.

Yes, that's expected.

I am sorry, but I cannot come up with a single non-ugly solution to
this problem.  The only options I see are:
 a) split IFF_NOARP into multiple flags, allowing the driver to specify
the wanted behaviour (no ARP, but still respond to IPv6 NS)
 b) let the driver intercept IPv6 NS from the modem, sending direct replies
 c) let the driver intercept ARP from the host, sending direct replies

Alternative a) may seem cleanest, but changes a lot of core code for a
single driver/device. The arp and ndisc code looks very magic to me
already, and I am therefore reluctant to attempt to modify it.

Alternative b) will have to deal with the different "is IPv6 available?"
possibilities.  This has been solved for vxlan recently, but it's a bit
more complex than alternative c).   So I made a shot at that one.

You could try the attached patch, which works for me on IPv4.  Not
tested on IPv6, but should work as it removes the IFF_NOARP flag.

But I still find this so ugly that I am not sure I am going to propose
it on netdev...



Bjørn
>From 8d3ddbb24f2e55dc73a7e32172ed4d5930b484c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= 
Date: Sat, 26 Oct 2013 18:55:08 +0200
Subject: [PATCH] cdc_mbim: add IPv6 ND support
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Some buggy devices require IPv6 Neighbor Discovery support. This
is incompatible with the IFF_NOARP flag.  But ARP is impossible
on MBIM, because the protocol only supports IPv4 or IPv6 packets.

Work around this by faking ARP replies.

Signed-off-by: Bjørn Mork 
---
 drivers/net/usb/cdc_mbim.c |   39 ---
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
index 25ba7ec..a1aa8c9 100644
--- a/drivers/net/usb/cdc_mbim.c
+++ b/drivers/net/usb/cdc_mbim.c
@@ -13,6 +13,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -21,6 +22,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* driver specific data - must match cdc_ncm usage */
 struct cdc_mbim_state {
@@ -97,9 +99,6 @@ static int cdc_mbim_bind(struct usbnet *dev, struct usb_interface *intf)
 	dev->status = NULL;
 	info->subdriver = subdriver;
 
-	/* MBIM cannot do ARP */
-	dev->net->flags |= IFF_NOARP;
-
 	/* no need to put the VLAN tci in the packet headers */
 	dev->net->features |= NETIF_F_HW_VLAN_CTAG_TX;
 err:
@@ -120,6 +119,37 @@ static void cdc_mbim_unbind(struct usbnet *dev, struct usb_interface *intf)
 	cdc_ncm_unbind(dev, intf);
 }
 
+/* Create fake ARP replies.  Some devices require ND support for IPv6,
+ * so we cannot set the IFF_NOARP flag like we would want to.  Faking
+ * ARP replies works as well
+ */
+static void mbim_handle_arp(struct usbnet *dev, struct sk_buff *skb, u16 tci)
+{
+	struct sk_buff *skb_reply;
+	unsigned char *arp_ptr;
+	struct arphdr *arp;
+	__be32 sip, tip;
+
+	if (skb->len < sizeof(struct arphdr) + 2 * 4 + 2 * ETH_ALEN)
+		return;
+
+	arp = arp_hdr(skb);
+	if (arp->ar_hln != ETH_ALEN || arp->ar_pln != 4 ||
+	arp->ar_pro != htons(ETH_P_IP) || arp->ar_hrd != htons(ARPHRD_ETHER))
+		return;
+
+	arp_ptr = (unsigned char *)(arp + 1);
+	memcpy(&sip, arp_ptr + ETH_ALEN, 4);
+	memcpy(&tip, arp_ptr + 4 + 2 * ETH_ALEN, 4);
+	skb_reply = arp_create(ARPOP_REPLY, ETH_P_ARP, sip, dev->net, tip,
+			   dev->net->dev_addr, dev->net->dev_addr,
+			   dev->net->dev_addr);
+	if (!skb_reply)
+		return;
+	if (tci && !vlan_put_tag(skb_reply, htons(ETH_P_8021Q), tci))
+		return;
+	usbnet_skb_return(dev, skb_reply);
+}
 
 static struct sk_buff *cdc_mbim_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags)
 {
@@ -153,6 +183,9 @@ static struct sk_buff *cdc_mbim_tx_fixup(struct usbnet *dev, struct sk_buff *skb
 			case htons(ETH_P_IP):
 			case htons(ETH_P_IPV6):
 break;
+			case htons(ETH_P_ARP):
+mbim_handle_arp(dev, skb, tci);
+/* fallthrough */
 			default:
 goto error;
 			}
-- 
1.7.10.4



Re: LTE vodafone K5150 12d1 1f16 ; 12d1 1575 mbim IPV6/ipv4

2013-10-26 Thread Thomas Schäfer
Am Samstag, 26. Oktober 2013, 16:01:26 schrieben Sie:
> Thomas Schäfer  writes:
> > Am Donnerstag, 24. Oktober 2013, 11:45:39 schrieben Sie:
> >> Did you try any of the ND tuning controls on Linux?  Turning on ARP
> >> 
> >> before bringing up the interface might work on IPv6 (but fail for IPv4):
> >>   ifconfig wwan0 arp
> > 
> > This solved the problem. (IPv6 positive , IPv4 at the moment untested)
> 
> Great!
> 
> Then I believe we have positive confirmation that this firmware really
> needs neigbour discovery.  Now we only have to figure out how to support
> that without breaking IPv4.

That's your part :-)

Now I tested IPv4 with arp, and you are right. It doesn't work. 
Ping is answered with "Destination Host Unreachable".

If I switch off arp  again with ifconfig wwan0 -arp, ping works.

Regards,
Thomas

PS: I can only test IPv4-only OR IPv6-only.
I don't know the behavior  of dualstack-mobile-connections.

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] usb-storage: scsiglue: Changing the command result

2013-10-26 Thread Vishal Annapurve
Hi Alan,

Here is the new patch:

From: Vishal Annapurve 
Date: Sat, 26 Oct 2013 21:10:11 +0530
Subject: [PATCH] usb: storage: Proper cmd result assignment

This change replaces DID_ABORT with DID_TIMEOUT as a command result
whenever US_FLIDX_TIMED_OUT bit is set.

This change is made to bring USB storage inline with a recent change:

commit18a4d0a22ed6c54b67af7718c305cd010f09ddf8

[SCSI] Handle disk devices which can not process medium access commands
We have experienced several devices which fail in a fashion we do not
currently handle gracefully in SCSI. After a failure these devices will
respond to the SCSI primary command set (INQUIRY, TEST UNIT READY, etc.)
but any command accessing the storage medium will time out.

As the USB storage was setting command result as aborted rather than
timed out, SCSI layer was not recognizing the above mentioned failure
pattern.

Change-Id: Ic58e2247fed11649f4dbea56382354ba2fe0be1b
---
 drivers/staging/keucr/transport.c   | 6 +++---
 drivers/staging/keucr/usb.c | 5 +++--
 drivers/usb/storage/cypress_atacb.c | 1 +
 drivers/usb/storage/isd200.c| 2 +-
 drivers/usb/storage/transport.c | 8 
 drivers/usb/storage/usb.c   | 9 +
 6 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/keucr/transport.c 
b/drivers/staging/keucr/transport.c
index 1a8837d..ac0e3c2 100644
--- a/drivers/staging/keucr/transport.c
+++ b/drivers/staging/keucr/transport.c
@@ -312,7 +312,7 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, 
struct us_data *us)
we need to short-circuit all other processing */
if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
/* pr_info("-- command was aborted\n"); */
-   srb->result = DID_ABORT << 16;
+   srb->result = DID_TIME_OUT << 16;
goto Handle_Errors;
}
 
@@ -371,7 +371,7 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, 
struct us_data *us)
 
if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
/* pr_info("-- auto-sense aborted\n"); */
-   srb->result = DID_ABORT << 16;
+   srb->result = DID_TIME_OUT << 16;
goto Handle_Errors;
}
if (temp_result != USB_STOR_TRANSPORT_GOOD) {
@@ -447,7 +447,7 @@ void ENE_stor_invoke_transport(struct scsi_cmnd *srb, 
struct us_data *us)
we need to short-circuit all other processing */
if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
/* pr_info("-- command was aborted\n"); */
-   srb->result = DID_ABORT << 16;
+   srb->result = DID_TIME_OUT << 16;
goto Handle_Errors;
}
 
diff --git a/drivers/staging/keucr/usb.c b/drivers/staging/keucr/usb.c
index 66aad3a..79405be 100644
--- a/drivers/staging/keucr/usb.c
+++ b/drivers/staging/keucr/usb.c
@@ -200,7 +200,7 @@ static int usb_stor_control_thread(void * __us)
/* has the command timed out *already* ? */
if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags))
{
-   us->srb->result = DID_ABORT << 16;
+   us->srb->result = DID_TIME_OUT << 16;
goto SkipForAbort;
}
 
@@ -234,7 +234,8 @@ static int usb_stor_control_thread(void * __us)
scsi_lock(host);
 
/* indicate that the command is done */
-   if (us->srb->result != DID_ABORT << 16)
+   if ((us->srb->result != DID_ABORT << 16) &&
+   (us->srb->result != DID_TIME_OUT << 16))
{
us->srb->scsi_done(us->srb);
}
diff --git a/drivers/usb/storage/cypress_atacb.c 
b/drivers/usb/storage/cypress_atacb.c
index c844718..af24894 100644
--- a/drivers/usb/storage/cypress_atacb.c
+++ b/drivers/usb/storage/cypress_atacb.c
@@ -168,6 +168,7 @@ static void cypress_atacb_passthrough(struct scsi_cmnd 
*srb, struct us_data *us)
 */
if ((srb->result != (DID_ERROR << 16) &&
srb->result != (DID_ABORT << 16)) &&
+   srb->result != (DID_TIME_OUT << 16) &&
save_cmnd[2] & 0x20) {
struct scsi_eh_save ses;
unsigned char regs[8];
diff --git a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c
index ffc4193..28b688b 100644
--- a/drivers/usb/storage/isd200.c
+++ b/drivers/usb/storage/isd200.c
@@ -705,7 +705,7 @@ static void isd200_invoke_transport( struct us_data *us,
/* abort processing: the bulk-only transport requires a reset
 * following an abort */
Handle_Abort:
-   srb->result = DID_ABORT << 16;
+   srb->result = DID_TIME_OUT << 16;
 
/* permit the reset transfer to take place */
clear_bit(US_FLIDX_ABORTING, &us->dflags);
diff --git a/drivers/usb/storage/

Re: [RFC PATCH 00/15] rework port power control

2013-10-26 Thread Alan Stern
On Fri, 25 Oct 2013, Dan Williams wrote:

> On Fri, Oct 25, 2013 at 2:11 PM, Alan Stern  wrote:
> > All right, I'm starting to get the overall picture.
> >
> 
> Thanks for the patience I really appreciate it.

You're welcome.

> > This patch set makes a large number of significant changes to important
> > and subtle aspects of the USB stack.  It would be a lot easier to
> > discuss in pieces; I can't possibly review the whole series in a
> > reasonable time.
> >
> > And I wish the basic approach had been discussed beforehand...  Some of
> > the ideas are quite nice, but there are a lot of details that need
> > close attention.
> 
> I wanted to at least have a working implementation that tackled the
> peer disconnect case, I did not expect 15 patches to fall out of that.
>  However, after talking through this I think it can be abbreviated.

Yes.  It looks like we're talking about several major changes:

Redefining what it means for a port to be in runtime suspend.

Rearranging the device model tree.

Implementing connectors.

Changing the port-power-off policy.

The patch set also changes khubd into a workqueue, but now it looks
like we don't need to do that (although I'm not ruling it out as a
future clean-up).

Does this leave anything out?

> In the existing code at usb_port_runtime_resume() time we know the
> port is off.  By calling usb_autopm_get_interface(intf) before turning
> on the power we are simply causing an unnecessary check of the port
> status registers.  We do have the power_is_on check to block
> hub_activate() from setting the change_bits, but that was not enough
> to prevent khubd from triggering a disconnect.

In fact, the reason for calling usb_autopm_get_interface was to prevent 
the hub from being suspended while we change the port's power state.  
Something like this may still be needed.

Have you considered what would happen if the user changed the port's
pm_qos setting while the port was suspended?  Ideally, such changes 
should immediately affect the port's power state.  For example, if the 
port was suspended with power off when the user sets the no_power_off 
flag, we should immediately turn port power back on.  I don't know if 
the PM QoS design permits this sort of thing, though.

> > You should also explain at the start of the description what you mean
> > by related (or peer) ports.  Then the idea of a connector is clear --
> > although I got the impression that the implementation may be a little
> > over-engineered.
> 
> Hence the RFC, yes, not opposed to backing up and simplifying this.

Since a port never needs to be connected to more than one other port, 
you could implement connectors simply by storing a "peer" pointer in 
the usb_port structure.

> > Is this intended to be a way for the user to force a USB-3 device to
> > connect at high speed rather than SuperSpeed?  If it is, it seems like
> > a rather roundabout way of doing so.
> 
> I agree.  I think a lot of this would become more straightforward if
> we could make the connector a device.  Then all the connector relevant
> policies (power control, forced connect speeds, hotplug policy) could
> be specified centrally, but there is no way to make it a parent of a
> usb_port.  It would end up being a child device of the host controller
> which does not seem right either.

My feeling is that we shouldn't worry about most of those things.  The
only critical item is power policy, in particular, whether to
power-down a hardwired port.  The question about powering down a
hotpluggable port can be left for the future.

How much energy do you save by powering down a port when no device is 
attached?

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: LTE vodafone K5150 (hilink) 12d1 1f16 ; 12d1 1575 mbim?

2013-10-26 Thread Bjørn Mork
Thomas Schäfer  writes:
> Am 24.10.2013 11:45, schrieb Bjørn Mork:
>> Any chance you could snoop the Windows IPv6 session?  I'm interesting in
>> seeing the NS and NA messages. In particular any NA from Windows.  Don't
>> need many packets, only the part where the modem tries to discover the
>> host "L2 address".
>
> To answering one question for the moment.
>
> Wireshark did not work (interface does not appear) . But nm3.4 does.
>
> Because of the size I will store this capture file here for a while.
>
> http://www.cis.uni-muenchen.de/~thomas/k5150-nm-capture.cap
>
>
> ra, dhcpv6(DNS) and the ms-connections-test (ncsi) are there. I hope,
> you see also the things you want to know.

Yes, I do.

Windows both sends unsolicited neigbour advertisements to ff02::1 (all
hosts) when it adds addresses, and it answers solicitations received at
the solicted node address.

I also note the successful DHCPv6 DNS server request. That should just
work on Linux as well, given that you have a DHCPv6 client requesting
the DNS options.


Bjørn
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: LTE vodafone K5150 12d1 1f16 ; 12d1 1575 mbim IPV6

2013-10-26 Thread Bjørn Mork
Thomas Schäfer  writes:
> Am Donnerstag, 24. Oktober 2013, 11:45:39 schrieben Sie:
>
>
>> Did you try any of the ND tuning controls on Linux?  Turning on ARP
>> before bringing up the interface might work on IPv6 (but fail for IPv4):
>>   ifconfig wwan0 arp
>
>
> This solved the problem. (IPv6 positive , IPv4 at the moment untested)

Great!

Then I believe we have positive confirmation that this firmware really
needs neigbour discovery.  Now we only have to figure out how to support
that without breaking IPv4.


Bjørn
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: LTE vodafone K5150 12d1 1f16 ; 12d1 1575 mbim IPV6

2013-10-26 Thread Thomas Schäfer
Am Donnerstag, 24. Oktober 2013, 11:45:39 schrieben Sie:


> Did you try any of the ND tuning controls on Linux?  Turning on ARP
> before bringing up the interface might work on IPv6 (but fail for IPv4):
>   ifconfig wwan0 arp


This solved the problem. (IPv6 positive , IPv4 at the moment untested)


>Trying 
>  sysctl -w net.ipv6.conf.wwan0.ndisc_notify = 1
> would also be interesting (although I have no idea what the effect would
> be in combination with IFF_NOARP).


This was without effect. 


> Another interesting test would be adding the solicited node multicast
> address manually, but I can't figure out how to do that using e.g.
> "ip maddr"  You can certainly do it with setsockopt(), but that's a
> bit more work than it should be.


After the first hint solved the problem, only the report of state while it is 
working: 

ip maddr
..

6:  wwan0
link  33:33:00:00:00:01
link  01:00:5e:00:00:01
link  33:33:ff:16:b0:d2
link  33:33:ff:a7:ad:1c
link  33:33:00:00:00:fb
link  01:00:5e:00:00:fb
inet  224.0.0.251
inet  224.0.0.1
inet6 ff02::fb
inet6 ff02::1:ffa7:ad1c
inet6 ff02::1:ff16:b0d2 users 2
inet6 ff02::1
inet6 ff01::1


Regards,
Thomas


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


usbatm: printk_ratelimit() always called in the atm_rldbg()

2013-10-26 Thread Krzysztof Mazur
Hi,

commit 2d6401cf4ca3861692a4779745e0049cac769d10
("USB: usbatm: move the atm_dbg() call to use dynamic debug")
changed the atm_rldbg() to:

#define atm_rldbg(instance, format, arg...) \
if (printk_ratelimit()) \
atm_dbg(instance , format , ## arg)

and now printk_ratelimit() is always called even when debugging is
disabled and a lot of "callbacks suppressed" messages are printed
by the printk_ratelimit():

[...]
usbatm_rx_process: 4977 callbacks suppressed
usbatm_extract_one_cell: 2920 callbacks suppressed
[...]


I'm not sure how to fix that, maybe we need dynamic_pr_debug_ratelimit()?

Krzysiek
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/5] usb: ehci-s5p: Change to use phy provided by the generic phy framework

2013-10-26 Thread Vivek Gautam
Hi Kamil,


On Fri, Oct 25, 2013 at 7:45 PM, Kamil Debski  wrote:
> Change the phy provider used from the old usb phy specific to a new one
> using the generic phy framework.
>
> Signed-off-by: Kamil Debski 
> Signed-off-by: Kyungmin Park 
> ---
>  drivers/usb/host/ehci-s5p.c |   21 +++--
>  1 file changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c
> index 7cc26e6..76606ff 100644
> --- a/drivers/usb/host/ehci-s5p.c
> +++ b/drivers/usb/host/ehci-s5p.c
> @@ -19,6 +19,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -45,7 +46,7 @@ static struct hc_driver __read_mostly s5p_ehci_hc_driver;
>
>  struct s5p_ehci_hcd {
> struct clk *clk;
> -   struct usb_phy *phy;
> +   struct phy *phy;
> struct usb_otg *otg;
> struct s5p_ehci_platdata *pdata;
>  };
> @@ -77,10 +78,11 @@ static int s5p_ehci_probe(struct platform_device *pdev)
>  {
> struct s5p_ehci_platdata *pdata = pdev->dev.platform_data;
> struct s5p_ehci_hcd *s5p_ehci;
> +   struct phy *phy;

just a nit here:
Lets keep the pointer to 'phy' and 'phy_name' together ?
and move this above phy_name ?

> struct usb_hcd *hcd;
> struct ehci_hcd *ehci;
> struct resource *res;
> -   struct usb_phy *phy;
> +   const char *phy_name;
> int irq;
> int err;
>
> @@ -103,14 +105,14 @@ static int s5p_ehci_probe(struct platform_device *pdev)
> return -ENOMEM;
> }
> s5p_ehci = to_s5p_ehci(hcd);
> -
> +   phy_name = of_get_property(pdev->dev.of_node, "phy-names", NULL);
> +   phy =  devm_phy_get(&pdev->dev, phy_name);

Below check for exynos5440 was supposed to skip any request phy.
So shouldn't we place above two assignments to the original place
where devm_usb_get_phy()
was called ?
May be i am not getting you intention of changing the place.

> if (of_device_is_compatible(pdev->dev.of_node,
> "samsung,exynos5440-ehci")) {
> s5p_ehci->pdata = &empty_platdata;
> goto skip_phy;
> }
>
> -   phy = devm_usb_get_phy(&pdev->dev, USB_PHY_TYPE_USB2);
> if (IS_ERR(phy)) {
> /* Fallback to pdata */
> if (!pdata) {
> @@ -122,7 +124,6 @@ static int s5p_ehci_probe(struct platform_device *pdev)
> }
> } else {
> s5p_ehci->phy = phy;
> -   s5p_ehci->otg = phy->otg;
> }
>
>  skip_phy:
> @@ -166,7 +167,7 @@ skip_phy:
> s5p_ehci->otg->set_host(s5p_ehci->otg, &hcd->self);

Lets remove this line and similar calls to 'set_host()' in the driver,
since we don't have
s5p_ehci->otg anymore after the same is removed above.
Anyways this was helping the old phy-samsung-usb2 driver, and not needed now.

>
> if (s5p_ehci->phy)
> -   usb_phy_init(s5p_ehci->phy);
> +   phy_power_on(s5p_ehci->phy);
> else if (s5p_ehci->pdata->phy_init)
> s5p_ehci->pdata->phy_init(pdev, USB_PHY_TYPE_HOST);
>
> @@ -188,7 +189,7 @@ skip_phy:
>
>  fail_add_hcd:
> if (s5p_ehci->phy)
> -   usb_phy_shutdown(s5p_ehci->phy);
> +   phy_power_off(s5p_ehci->phy);
> else if (s5p_ehci->pdata->phy_exit)
> s5p_ehci->pdata->phy_exit(pdev, USB_PHY_TYPE_HOST);
>  fail_io:
> @@ -209,7 +210,7 @@ static int s5p_ehci_remove(struct platform_device *pdev)
> s5p_ehci->otg->set_host(s5p_ehci->otg, &hcd->self);

ditto

>
> if (s5p_ehci->phy)
> -   usb_phy_shutdown(s5p_ehci->phy);
> +   phy_power_off(s5p_ehci->phy);
> else if (s5p_ehci->pdata->phy_exit)
> s5p_ehci->pdata->phy_exit(pdev, USB_PHY_TYPE_HOST);
>
> @@ -244,7 +245,7 @@ static int s5p_ehci_suspend(struct device *dev)
> s5p_ehci->otg->set_host(s5p_ehci->otg, &hcd->self);
ditto

>
> if (s5p_ehci->phy)
> -   usb_phy_shutdown(s5p_ehci->phy);
> +   phy_power_off(s5p_ehci->phy);
> else if (s5p_ehci->pdata->phy_exit)
> s5p_ehci->pdata->phy_exit(pdev, USB_PHY_TYPE_HOST);
>
> @@ -265,7 +266,7 @@ static int s5p_ehci_resume(struct device *dev)
> s5p_ehci->otg->set_host(s5p_ehci->otg, &hcd->self);
ditto

>
> if (s5p_ehci->phy)
> -   usb_phy_init(s5p_ehci->phy);
> +   phy_power_on(s5p_ehci->phy);
> else if (s5p_ehci->pdata->phy_init)
> s5p_ehci->pdata->phy_init(pdev, USB_PHY_TYPE_HOST);
>
[..] Rest looks good. :-)



-- 
Best Regards
Vivek
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html