usb/107642: [patch]Ralink Technology RT2501USB/RT2601USB chipset driver

Valery V.Chikalov valera at chikalov.dp.ua
Mon Apr 30 19:19:41 UTC 2007


Hans Petter Selasky wrote:
> On Monday 30 April 2007 18:41, Valery V.Chikalov wrote:
>> Hans Petter Selasky wrote:
>>> On Monday 30 April 2007 14:34, Valery V.Chikalov wrote:
>>>> -----BEGIN PGP SIGNED MESSAGE-----
>>>> Hash: SHA1
>>>>
>>>> Kevin Lo пишет:
>>>>> Valery V.Chikalov wrote:
>>>>>> Hans Petter Selasky wrote:
>>>>>>> On Sunday 29 April 2007 15:02, Valery V.Chikalov wrote:
>>>>>>>> Kevin Lo wrote:
>>>>>>>>> Valery V.Chikalov wrote:
>>>>>>>>>> The following reply was made to PR usb/107642; it has been noted
>>>>>>>>>> by GNATS.
>>>>>>>>>>
>>>>>>>>>> From: "Valery V.Chikalov" <valera at chikalov.dp.ua>
>>>>>>>>>> To: bug-followup at FreeBSD.org,  valera at chikalov.dp.ua
>>>>>>>>>> Cc:
>>>>>>>>>> Subject: Re: usb/107642: [patch]Ralink Technology
>>>>>>>>>> RT2501USB/RT2601USB chipset driver
>>>>>>>>>> Date: Sun, 22 Apr 2007 11:32:18 +0300
>>>>>>>>>>
>>>>>>>>>>  This is a multi-part message in MIME format.
>>>>>>>>>>  --------------030900090303000507070905
>>>>>>>>>>  Content-Type: text/plain; charset=UTF-8
>>>>>>>>>>  Content-Transfer-Encoding: 7bit
>>>>> if_rum(4) for 7.0-CURRENT
>>>>>
>>>>> replaced amrr_* functions by "standard" ones already existed in
>>>>> net80211/ieee80211_amrr.c
>>>>>
>>>>>>>>> Hi Valery,
>>>>>>>>>
>>>>>>>>> I guess you wasn't aware that I've already ported rum(4) to
>>>>>>>>> FreeBSD. The patch is available at:
>>>>>>>>> http://people.freebsd.org/~kevlo/patch-rum Maybe you can test my
>>>>>>>>> patch? Thanks.
>>>>>>>>>
>>>>>>>>> 	Kevin
>>>>>>>> Hi, Kevin,
>>>>>>>>
>>>>>>>> Your driver not working for me. Fortunately, the errors that I see
>>>>>>>> exactly the same which i fight when I made my driver.
>>>>>>>>
>>>>>>>> $ uname -a
>>>>>>>> FreeBSD tiger.novakom.dp.ua 7.0-CURRENT FreeBSD 7.0-CURRENT #6: Sun
>>>>>>>> Apr 29 13:58:48 EEST 2007
>>>>>>>> root at tiger.novakom.dp.ua:/usr/obj/usr/src/sys/TIGER64  amd64
>>>>>>>>
>>>>>>>> $ sysctl kern.osreldate
>>>>>>>> kern.osreldate: 700037
>>>>>>>>
>>>>>>>> cvsup'ed 29.04.2007
>>>>>>>>
>>>>>>>> kernel with:
>>>>>>>>
>>>>>>>> makeoptions     DEBUG=-g
>>>>>>>>
>>>>>>>> options         KDB
>>>>>>>>
>>>>>>>> options         DDB
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> options         INVARIANTS
>>>>>>>>
>>>>>>>> options         INVARIANT_SUPPORT
>>>>>>>>
>>>>>>>> options         WITNESS
>>>>>>>>
>>>>>>>> At first, when I make kldload if_rum, I get kernel panic.
>>>>>>>> But I cant get saved core, as ddb just hangs during "call doadump"
>>>>>>> I have a solution for all of this locking stuff!
>>>>>>>
>>>>>>>> So I add
>>>>>>>>
>>>>>>>> #define RUM_LOCK(sc)    do { ((sc) = (sc)); mtx_lock(&Giant); }
>>>>>>>> while (0)
>>>>>>>> #define RUM_UNLOCK(sc)  mtx_unlock(&Giant)
>>>>>>>>
>>>>>>>> in  if_rumvar.h
>>>>>>>>
>>>>>>>> I spend a lot of time in attempts get rid of Giant ant always got
>>>>>>>> only panics.
>>>>>>> You _cannot_ do that with the old USB stack, because you must lock
>>>>>>> Giant before calling into the usbxxx functions. Then in the USB
>>>>>>> callback, Giant is locked, and then you cannot lock RUM_LOCK()! That
>>>>>>> means you will most likely end up with a deadlock pretty soon, if you
>>>>>>> see that.
>>>>>> Thanks, for explanations. I suspected that thing are like that, and I
>>>>>> have tried make porting by analogue with other drivers which I can
>>>>>> find in dev/usb, but I was not can find the description of doing
>>>>>> "right way" locking before.
>>>>> Firstly, thanks for taking the time to test my patch.
>>>>> I think your issue is related to watchdog timers. The revised patch is
>>>>> at http://people.freebsd.org/~kevlo/patch-rum
>>>>>
>>>>> Besides, I don't get a panic during high load when getting a file about
>>>>> 400MB via ftp.
>>>> Sorry, but the error that I see the same, just after inserting dongle,
>>>> or if it was inserted before - after kldload if_rum:
>>>>
>>>> panic: sleeping without a lock
>>>>
>>>> the top of stack:
>>>> at usbd_transfer +0x1fe
>>>> ....
>>>> rum_ioctl
>>>>
>>>> And I cant get saved kernel coredump at the end.
>>>>
>>>> I have not serial console configured so it was just subscribed by hand.
>>>> Of course I can reproduce it again and subscribe what you will ask.
>>>>
>>>> I have SMP kernel and use AMD64 architecture, maybe this are the reasons
>>>> why we are getting different results.
>>>>
>>>> Can you please, explain me in two words(or give a reference) why you are
>>>> dropping mtx_lock(&Giant). Yes I have seen the same in if_ural.c and as
>>>> i have wrote before unsuccessfully have tried repeat it in if_rum. I
>>>> know that current USB stack is not Giant free, and Hans noted that this
>>>> is impossible (if I understand him right). Maybe exists some tunable or
>>>> kernel option or another trick that allows drivers working without the
>>>> Giant under current USB stack, which I must use.
>>>>
>>>> Thank you for your time and patience.
>>>> Sorry for my english.
>>>>
>>>> Valery.
>>>>
>>>>>>>> After that I get hangs,
>>>>>>>> which i resolved by modifying rum_ioctl:
>>>>>>> I'm almost finished converting "if_rum.c()" to the new USB stack.
>>>>>>>
>>>>>>> In some hours I will update it with support for "if_rum".
>>>>>>>
>>>>>>> If you can test that and forget about the old USB stack, I will be
>>>>>>> very happy :-)
>>>>>> I will do it with pleasure. I was almost ready to do it (converting to
>>>>>> new USB stack) by myself, but I was stopped by the fact that I cant
>>>>>> make it compiled under CURRENT. I have seen your mail that your are
>>>>>> working on this.  Is new the USB stack ready for CURRENT now?
>>>>>>
>>>>>> Valery.
>>>>>>
>>>>>>> --HPS
>>>>>>>
>>>>>>> http://www.turbocat.net/~hselasky/usb4bsd
>>>>> 	Kevin
>>> Hi,
>>>
>>> I have just imported "if_rum.c" to SVN and my P4 tree.
>>>
>>> Just do a SVN update. Build a new USB package install that.
>>>
>>> cp -r i4b/trunk/i4b/src/sys/modules/rum /usr/src/sys/modules/rum
>>>
>>> make -C /usr/src/sys/modules/rum all install
>>>
>>> Hope it works.
>> If you can read this message, then it definitely works :-)
>> Thank you, great work!
>>
>> Only one issue:
>> during kernel load, and later after kldload if_rum I got a bunch of
>> messages
>>
>> usbd_fill_iface_data: invalid wMaxPacketSize=0x0000, addr=125!
>> usbd_fill_iface_data: invalid wMaxPacketSize=0x0000, addr=125!
>> usbd_fill_iface_data: invalid wMaxPacketSize=0x0000, addr=125!
>> usbd_fill_iface_data: invalid wMaxPacketSize=0x0000, addr=125!
> 
> Ok. Do you have USB Bluetooth devices ?
> 
> --HPS

Yes.

tiger# usbdevs
addr 127: UHCI root hub, Intel
addr 127: UHCI root hub, Intel
addr 127: UHCI root hub, Intel
addr 127: UHCI root hub, Intel
addr 124: 802.11 bg WLAN, Ralink
addr 125: TrueMobile 350 Bluetooth USB Adapter, Dell
addr 126: product 0xa005, Dell
  addr 125: TrueMobile 350 Bluetooth USB Adapter, Dell
addr 127: EHCI root hub, Intel
  addr 126: product 0xa005, Dell
   addr 125: TrueMobile 350 Bluetooth USB Adapter, Dell
  addr 124: 802.11 bg WLAN, Ralink

of course I have only /one/ USB Adapter, not three.

Valery.




More information about the freebsd-usb mailing list