Re: [PATCH] dwc_otg: Reduce interrupt load

2015-11-02 Thread Hans Petter Selasky

On 11/02/15 13:22, Sebastian Huber wrote:



On 30/10/15 15:53, Hans Petter Selasky wrote:

On 10/30/15 14:38, Sebastian Huber wrote:

Tested on an Altera Cyclone V development kit.  Here the controller has
16 host channels.  This change significantly reduced the time spent in
the dwc_otg_interrupt_poll_locked() function.


Hi,

Thank you for your optimisation patch:

https://svnweb.freebsd.org/changeset/base/290195


Thanks.



Hi,


After an update of the USB stack from 9.3 to current it worked out of
the box. Thanks a lot for your great USB stack!

It seems that this driver doesn't support DMA. I see a quite high CPU
utilization in this area:


That's sounds right.

Adding DMA support is some extra work, because there are many USB 
endpoint combinations that needs to work. Also HOST and DEVICE mode 
needs to be tested. One problem with the DWC OTG is that you cannot 
switch individual so-called channels into DMA mode. It is either all-DMA 
or no DMA. That makes it more difficult to add. If you want to add DMA 
support I will be happy to add patches to the tree for that, but the 
patches must be such that it is possible to select DMA or PIO mode.


For some kinds of USB traffic, like USB keyboards, USB audio and USB 
mice, PIO mode is optimal, because the amount of data transferred per 
interrupt is minimal. For mass storage and ethernet you would like to 
have DMA support. Or have a dedicated CPU for USB.


Possibly the next USB controller driver to be added to FreeBSD is the 
DWC OTG v3. It is an all-DMA based controller, which also supports 
superspeed.


--HPS
___
freebsd-usb@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"


Re: Non working USB stick in FreeBSD.

2015-11-02 Thread Hans Petter Selasky

On 10/29/15 10:29, Ranjan1018 . wrote:

2015-10-27 17:14 GMT+01:00 Hans Petter Selasky :


On 10/27/15 17:05, Ranjan1018 . wrote:


I have a 64GB USB stick that works correctly in Windows and Linux but not
in FreeBSD. The problem is during the write.

In FreeBSD I have tested the stick with the command:

# dd if=/dev/zero of=/dev/daX bs=1m

and, after some time, I received these errors in i386 and amd64:



Hi,



Hi Hans,
thank you for your answer.



Are you sure the disk is of the size advertised?



In Linux I obtain:

$ uname -a

Linux phenom2 3.2.0-4-amd64 #1 SMP Debian 3.2.57-3+deb7u2 x86_64 GNU/Linux

$ sudo dd if=/dev/zero of=/dev/sdf obs=1M seek=8100

dd: writing to `/dev/sdf': No space left on device

114485248+0 records in

55900+0 records out

58615398400 bytes (59 GB) copied, 20869.4 s, 2.8 MB/s




How many 512-byte blocks are successfully written?

In FreeBSD :


# uname -a

FreeBSD microserver 10.2-STABLE FreeBSD 10.2-STABLE #4 r289314M: Wed Oct 14
15:38:08 CEST 2015 root@microserver:/usr/obj/usr/src/sys/GENERIC  amd64

# dd if=/dev/zero of=/dev/da0 bs=1m

dd: /dev/da0: Input/output error

8140+0 records in

8139+0 records out

8534360064 bytes transferred in 3013.528065 secs (2832016 bytes/sec)

# uname -a

FreeBSD qbic 10.1-STABLE FreeBSD 10.1-STABLE #0: Sat May  9 07:53:21 CEST
2015 root@ativ:/usr/obj/i386.i386/root/TEMP/i386_SRC/src/sys/KSTACK_PAGES_4
  i386

[root@qbic ~]# dd if=/dev/zero of=/dev/da2 bs=1m

dd: /dev/da2: Input/output error

8140+0 records in

8139+0 records out

8534360064 bytes transferred in 3011.855356 secs (2833589 bytes/sec)

# uname -a

FreeBSD ativ 11.0-CURRENT FreeBSD 11.0-CURRENT #10 r289378M: Thu Oct 15
21:57:57 CEST 2015 root@ativ:/usr/obj/usr/src/sys/GENERIC  amd64

[root@ativ ~]# dd if=/dev/zero of=/dev/da1 bs=1m

dd: /dev/da1: Input/output error

8140+0 records in

8139+0 records out

8534360064 bytes transferred in 3041.663436 secs (2805820 bytes/sec)

[root@ativ ~/bin]# dd if=/dev/zero of=/dev/da1 bs=1m seek=12140

dd: /dev/da1: Input/output error

69+0 records in

68+0 records out

71303168 bytes transferred in 35.119861 secs (2030280 bytes/sec)

[root@ativ ~/bin]# dd if=/dev/zero of=/dev/da1 bs=1m seek=12200

dd: /dev/da1: Input/output error

9+0 records in

8+0 records out

8388608 bytes transferred in 13.562622 secs (618509 bytes/sec)



Hi,

What does "dmesg" say after these errors? Maybe you have a bad sector?

Did you try to add "conv=noerror" to dd ?

Did you try "bs=65536" or "bs=512" ?

--HPS
___
freebsd-usb@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"