Re: [linux-usb-devel] reuse of urb
On Wed, 11 Nov 2003, Henry Culver wrote: >It seems that after a successful call, urb->dev is getting set to 0. This happens with 2.4.x and newer; it didn't happen with 2.2.x. I don't know why the change was made. >In my write_callback routine I simply re-set urb->dev to its correct >value (which is stored in the private device structure) and the >subsequent calls using that urb are fine. I do the same thing, so i guess it's ok. --- This SF.Net email sponsored by: ApacheCon 2003, 16-19 November in Las Vegas. Learn firsthand the latest developments in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! http://www.apachecon.com/ ___ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
Re: [linux-usb-devel] reuse of urb
On Tue, Nov 11, 2003 at 06:45:43PM -0700, Henry Culver wrote: > > It seems that after a successful call, urb->dev is getting set to 0. > > In my write_callback routine I simply re-set urb->dev to its correct > value (which is stored in the private device structure) and the > subsequent calls using that urb are fine. > > I haven't found anything in my code that could be stepping on it, but > I guess I'm not quite ready to rule that possibility out yet either. No, that's intentional. Just set it back to your device to use it over again. greg k-h --- This SF.Net email sponsored by: ApacheCon 2003, 16-19 November in Las Vegas. Learn firsthand the latest developments in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! http://www.apachecon.com/ ___ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
Re: [linux-usb-devel] reuse of urb
Replying to my own post ... I've found a way to make my code work without having to deallocate / reallocate the urb. It seems that after a successful call, urb->dev is getting set to 0. In my write_callback routine I simply re-set urb->dev to its correct value (which is stored in the private device structure) and the subsequent calls using that urb are fine. I haven't found anything in my code that could be stepping on it, but I guess I'm not quite ready to rule that possibility out yet either. On Tue, 2003-11-11 at 15:59, Henry Culver wrote: > On Tue, 2003-11-11 at 15:23, Alan Stern wrote: > > On Tue, 11 Nov 2003, Henry Culver wrote: > > > > > I am in the process of writing a device driver for a device which is a > > > combination vacuum flourescent display and ir receiver. The driver is > > > functional, but has some problems. > > > > > > The device has a single configuration, and single interface with 2 endpoints. > > > The endpoints are transfer type "interrupt". > > > > > > My open routine allocates 2 urb's (one for each endpoint, in and out) and > > > fills them with usb_fill_int_urb. I have an "in" callback routine and an > > > "out" callback routine. > > > > > > I can read ir byte codes from the device and write characters to the display > > > including control codes which position subsequent character writes, clear > > > the display and set brightness. > > > > > > My problem is that I cannot seem to reuse the out urb. When my write_callback > > > routine is called, the urb->status is 0, but another write to the device > > > blocks and the urb->status is thereafter -EINPROGRESS. If in my callback > > > routine I usb_unlink_urb, usb_free_urb and then usb_alloc_urb(0) and > > > re-initialize the structure, everything behaves correctly. > > > > I don't understand. What do you mean "another write to the device > > blocks"? If the write blocked, how would you know what urb->status was > > afterwards? -- your machine would be locked up. After submission, > > usb->status is _supposed_ to be -EINPROGRESS; it stays that value more or > > less until it has completed. > > Sorry for the missing details. It's linux-2.4.21. When I say it blocks > I mean that I call interruptible_sleep_on in the write routine and > wake_up in the write_callback routine. If I remove the > interruptible_sleep_on, the write never seems to finish (the status > never changes from EINPROGRESS and the data never appears on the > display). That is to say, the write_callback doesn't get called > for the 2nd write. As near as I can tell the 2nd urb is never > finishing. > > My next step I guess is to printk the various fields in the urb and see > exactly how a new urb is different from a used one. > > > > > > After each successful write, I have to release and then re-allocate the > > > out urb. Shouldn't I be able to reuse it? If so, does anyone have any > > > helpful hints as to what might be going on here? > > > > You certainly should be able to reuse it. What version of Linux and which > > host controller driver are you using? If you aren't using 2.6, try it out > > and see if it works any better. > > > > Alan Stern > > > > Thanks, > -Henry Culver > -Culver Consulting > > > > > --- > This SF.Net email sponsored by: ApacheCon 2003, > 16-19 November in Las Vegas. Learn firsthand the latest > developments in Apache, PHP, Perl, XML, Java, MySQL, > WebDAV, and more! http://www.apachecon.com/ > ___ > [EMAIL PROTECTED] > To unsubscribe, use the last form field at: > https://lists.sourceforge.net/lists/listinfo/linux-usb-devel --- This SF.Net email sponsored by: ApacheCon 2003, 16-19 November in Las Vegas. Learn firsthand the latest developments in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! http://www.apachecon.com/ ___ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
Re: [linux-usb-devel] reuse of urb
On Tue, 2003-11-11 at 15:23, Alan Stern wrote: > On Tue, 11 Nov 2003, Henry Culver wrote: > > > I am in the process of writing a device driver for a device which is a > > combination vacuum flourescent display and ir receiver. The driver is > > functional, but has some problems. > > > > The device has a single configuration, and single interface with 2 endpoints. > > The endpoints are transfer type "interrupt". > > > > My open routine allocates 2 urb's (one for each endpoint, in and out) and > > fills them with usb_fill_int_urb. I have an "in" callback routine and an > > "out" callback routine. > > > > I can read ir byte codes from the device and write characters to the display > > including control codes which position subsequent character writes, clear > > the display and set brightness. > > > > My problem is that I cannot seem to reuse the out urb. When my write_callback > > routine is called, the urb->status is 0, but another write to the device > > blocks and the urb->status is thereafter -EINPROGRESS. If in my callback > > routine I usb_unlink_urb, usb_free_urb and then usb_alloc_urb(0) and > > re-initialize the structure, everything behaves correctly. > > I don't understand. What do you mean "another write to the device > blocks"? If the write blocked, how would you know what urb->status was > afterwards? -- your machine would be locked up. After submission, > usb->status is _supposed_ to be -EINPROGRESS; it stays that value more or > less until it has completed. Sorry for the missing details. It's linux-2.4.21. When I say it blocks I mean that I call interruptible_sleep_on in the write routine and wake_up in the write_callback routine. If I remove the interruptible_sleep_on, the write never seems to finish (the status never changes from EINPROGRESS and the data never appears on the display). That is to say, the write_callback doesn't get called for the 2nd write. As near as I can tell the 2nd urb is never finishing. My next step I guess is to printk the various fields in the urb and see exactly how a new urb is different from a used one. > > > After each successful write, I have to release and then re-allocate the > > out urb. Shouldn't I be able to reuse it? If so, does anyone have any > > helpful hints as to what might be going on here? > > You certainly should be able to reuse it. What version of Linux and which > host controller driver are you using? If you aren't using 2.6, try it out > and see if it works any better. > > Alan Stern > Thanks, -Henry Culver -Culver Consulting --- This SF.Net email sponsored by: ApacheCon 2003, 16-19 November in Las Vegas. Learn firsthand the latest developments in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! http://www.apachecon.com/ ___ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
Re: [linux-usb-devel] reuse of urb
On Tue, 11 Nov 2003, Henry Culver wrote: > I am in the process of writing a device driver for a device which is a > combination vacuum flourescent display and ir receiver. The driver is > functional, but has some problems. > > The device has a single configuration, and single interface with 2 endpoints. > The endpoints are transfer type "interrupt". > > My open routine allocates 2 urb's (one for each endpoint, in and out) and > fills them with usb_fill_int_urb. I have an "in" callback routine and an > "out" callback routine. > > I can read ir byte codes from the device and write characters to the display > including control codes which position subsequent character writes, clear > the display and set brightness. > > My problem is that I cannot seem to reuse the out urb. When my write_callback > routine is called, the urb->status is 0, but another write to the device > blocks and the urb->status is thereafter -EINPROGRESS. If in my callback > routine I usb_unlink_urb, usb_free_urb and then usb_alloc_urb(0) and > re-initialize the structure, everything behaves correctly. I don't understand. What do you mean "another write to the device blocks"? If the write blocked, how would you know what urb->status was afterwards? -- your machine would be locked up. After submission, usb->status is _supposed_ to be -EINPROGRESS; it stays that value more or less until it has completed. > After each successful write, I have to release and then re-allocate the > out urb. Shouldn't I be able to reuse it? If so, does anyone have any > helpful hints as to what might be going on here? You certainly should be able to reuse it. What version of Linux and which host controller driver are you using? If you aren't using 2.6, try it out and see if it works any better. Alan Stern --- This SF.Net email sponsored by: ApacheCon 2003, 16-19 November in Las Vegas. Learn firsthand the latest developments in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! http://www.apachecon.com/ ___ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
[linux-usb-devel] reuse of urb
I am in the process of writing a device driver for a device which is a combination vacuum flourescent display and ir receiver. The driver is functional, but has some problems. The device has a single configuration, and single interface with 2 endpoints. The endpoints are transfer type "interrupt". My open routine allocates 2 urb's (one for each endpoint, in and out) and fills them with usb_fill_int_urb. I have an "in" callback routine and an "out" callback routine. I can read ir byte codes from the device and write characters to the display including control codes which position subsequent character writes, clear the display and set brightness. My problem is that I cannot seem to reuse the out urb. When my write_callback routine is called, the urb->status is 0, but another write to the device blocks and the urb->status is thereafter -EINPROGRESS. If in my callback routine I usb_unlink_urb, usb_free_urb and then usb_alloc_urb(0) and re-initialize the structure, everything behaves correctly. After each successful write, I have to release and then re-allocate the out urb. Shouldn't I be able to reuse it? If so, does anyone have any helpful hints as to what might be going on here? -Henry Culver -Culver Consulting [EMAIL PROTECTED] --- This SF.Net email sponsored by: ApacheCon 2003, 16-19 November in Las Vegas. Learn firsthand the latest developments in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! http://www.apachecon.com/ ___ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel