From: Michael Bender <Michael.Bender@oracle.com>
To: Libusb Mailing List <libusb-devel@lists.sourceforge.net>
Cc: Theodore Kilgore <kilgota@banach.math.auburn.edu>,
linux-usb@vger.kernel.org, linux-media@vger.kernel.org
Subject: Re: [Libusb-devel] Improving kernel -> userspace (usbfs) usb device hand off
Date: Sun, 12 Jun 2011 19:27:19 -0700 [thread overview]
Message-ID: <55B02A41-1978-4D98-8E01-C55503C01A46@oracle.com> (raw)
In-Reply-To: <BANLkTimDGMyvq_8r77a_aRGTKdQ6U6nPeg@mail.gmail.com>
On Jun 12, 2011, at 7:03 PM, Xiaofan Chen wrote:
> On Mon, Jun 13, 2011 at 5:20 AM, Theodore Kilgore
> <kilgota@banach.math.auburn.edu> wrote:
>> On Sun, 12 Jun 2011, Hans de Goede wrote:
>>> Actually libusb and libgphoto have been using the rebind orginal
>>> driver
>>> functionality of the code for quite a while now,
>>
>> Oh? I can see that libusb is doing that, and I can also see that
>> there is
>> a "public" function for _unbinding_ a kernel driver, namely
>>
>> int usb_detach_kernel_driver_np()
>>
>> found in usb.h
>>
>> and it is used in libgphoto, as well.
>>
>> I am not sure that there is any corresponding rebind function which
>> is
>> public. Is it perhaps
>>
>> int usb_get_driver_np()
>>
>> ???
>>
>> By context (looking at libgphoto2-port/usb/libusb.c) I would think
>> that
>> this function is not the rebind function, but is only checking
>> whether or
>> not there is any potential conflict with a kernel driver. If I am
>> right,
>> then where is the publicly exported rebind function, and where does
>> it
>> currently get used in libgphoto2?
>
> http://gphoto.svn.sourceforge.net/viewvc/gphoto/trunk/libgphoto2/libgphoto2_port/usb/libusb.c?revision=13652&view=markup
>
> The rebind happened under the function "static int gp_port_usb_close
> (GPPort *port)".
> Since libgphoto2 is still using libusb-0.1, the unbind is using
> usbfs IOCTL
> directly (USBDEVFS_CONNECT).
>
>> So frankly after my eagerness yesterday I do not see how it can
>> easily be
>> made to work, after all.
>>
>>> unfortunately this
>>> does not solve the problem, unless we somehow move to 1 central
>>> coordinator for the device the user experience will stay subpar.
>
> Now I understand what Hans is saying. It will be a lot of work trying
> to sort out this issue in userspace. What can be the single central
> coordinator? A device manager applet listing the program or service
> which hold the device?
Something like that. Have a user-space device allocation mechanism so
that apps are not constrained by a particular interface semantic (i.e.
not
required to open /dev/video and have a kernel driver deliver pixels to
the
apps).
Or hid that behind a library API and let instances of the library
coordinate
with each other; as long as an app uses the documented public library
API
to access a webcam, then everyone will play fair with each other.
Look at the mess that this userspace/kernel driver issue has for code in
an application like gphoto - that's insane that a photo manipulation app
needs to know anything about userspace/kernel switching!
>>> Example, user downloads pictures from the camera using shotwell,
>>> gthumb, fspot or whatever, keeps the app in question open and the
>>> app
>>> in question keeps the gphoto2 device handle open.
>>>
>>> User wants to do some skyping with video chat, skype complains it
>>> cannot find the device, since the kernel driver currently is
>>> unbound.
>>>
>>> -> Poor user experience.
>>
>> Poor user experience, or merely poor user? The user ought to know
>> better.
>> Of course, I do agree that there are lots of such people, and it is
>> a good
>> idea to try to put up warning signs.
>
> It is difficult to call the users "poor users" in this case. Since
> they may
> not know that the other open program is holding the device. Some
> warning message may help, not "I can not find the device" though. It
> would be better to pinpoint which program is holding the device
> and then ask the user to close that program. I understand this is
> easily said than done...
>
> Similar experiences for Windows about the serial port, sometimes
> it is difficult for the user to know that some program or service
> are holding the serial port so that the other program or will fail or
> Windows complain that it is still open when you want to undock
> the computer.
>
>>>
>>> With having both functions in the kernel, the kernel could actually
>>> allow skype to use the dual mode cameras as video source, and if
>>> the user then were to switch to f-spot and try to import more
>>> photo's
>>> then he will get an -ebusy in f-spot. If he finishes skyping and
>>> then returns to f-spot everything will just continue working.
>>>
>>> This is the kind of "seamless" user experience I'm aiming for here.
>>>
>> Yes, I can see where you are coming from. But if the camera really
>> will
>> not let you run skype and fspot at the same time, which I do not
>> believe
>> it would allow on _any_ operating system, then each app should give
>> an
>> error message which says it cannot be run unless and until the
>> other app
>> has been closed. If that has to happen at the kernel level, then OK.
>>
>
> Yes. From what I read, to solve it in kernel or to solve it in user
> space
> are both a lot of work.
Yes and a kernel-based solution locks you into a kernel-based webcam
driver paradigm, or an even uglier loopback driver.
> Personally I tend to think to solve it in user space is more feasible.
I agree.
mike
next prev parent reply other threads:[~2011-06-13 2:27 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-10 0:21 USB mini-summit at LinuxCon Vancouver Sarah Sharp
2011-06-10 3:18 ` Greg KH
2011-06-10 6:59 ` Gerd Hoffmann
2011-06-10 19:48 ` Sarah Sharp
2011-06-10 20:50 ` Greg KH
2011-06-13 10:44 ` Alexander Graf
2011-06-13 16:29 ` Greg KH
2011-06-13 17:11 ` Alexander Graf
2011-06-10 7:19 ` Hans de Goede
2011-06-10 7:55 ` Improving kernel -> userspace (usbfs) usb device hand off Hans de Goede
2011-06-10 8:22 ` Felipe Balbi
2011-06-10 8:36 ` Hans de Goede
2011-06-10 8:42 ` Felipe Balbi
2011-06-10 12:19 ` Hans de Goede
2011-06-10 12:28 ` Felipe Balbi
2011-06-10 14:48 ` Alan Stern
2011-06-10 15:07 ` Mauro Carvalho Chehab
2011-06-10 15:21 ` Alan Stern
2011-06-11 9:15 ` Hans de Goede
2011-06-11 16:19 ` Theodore Kilgore
2011-06-12 11:43 ` Hans de Goede
2011-06-12 21:20 ` Theodore Kilgore
2011-06-13 2:03 ` Xiaofan Chen
2011-06-13 2:27 ` Michael Bender [this message]
2011-06-11 16:57 ` Alan Stern
2011-06-10 18:16 ` Theodore Kilgore
2011-06-10 18:34 ` Felipe Balbi
2011-06-10 21:18 ` Alan Stern
2011-06-10 21:46 ` Felipe Balbi
2011-06-10 22:46 ` Theodore Kilgore
2011-06-10 22:43 ` Theodore Kilgore
2011-06-11 1:30 ` Xiaofan Chen
2011-06-11 4:17 ` Theodore Kilgore
2011-06-13 9:05 ` Felipe Balbi
2011-06-13 13:06 ` Mauro Carvalho Chehab
2011-06-13 13:12 ` Felipe Balbi
2011-08-04 22:21 ` USB mini-summit at LinuxCon Vancouver Mauro Carvalho Chehab
2011-08-04 22:56 ` Greg KH
[not found] ` <CAA6KcBBZv7bvVxvEWOYL83igpNZHyzh=bcGxh6Dr5aKsvJK5Cg@mail.gmail.com>
2011-08-05 0:33 ` Mauro Carvalho Chehab
2011-08-05 2:56 ` Theodore Kilgore
2011-08-05 6:57 ` Oliver Neukum
2011-08-05 17:38 ` Theodore Kilgore
2011-08-05 7:45 ` Hans de Goede
2011-08-05 7:59 ` USB mini-summit at LinuxCon Vancouveroliver Oliver Neukum
2011-08-05 8:18 ` Hans de Goede
2011-08-05 13:07 ` USB mini-summit at LinuxCon Vancouver Mauro Carvalho Chehab
2011-08-08 17:58 ` Sarah Sharp
2011-08-08 18:23 ` Theodore Kilgore
2011-08-08 18:32 ` Sarah Sharp
2011-08-08 19:37 ` Mauro Carvalho Chehab
2011-08-09 7:52 ` Hans de Goede
2011-08-09 14:19 ` Alan Stern
2011-08-09 15:03 ` Marko Ristola
2011-08-09 19:57 ` Hans de Goede
2011-08-09 20:31 ` Adam Baker
2011-08-09 20:57 ` Hans de Goede
2011-08-10 2:05 ` Xiaofan Chen
2011-08-10 23:04 ` Adam Baker
2011-08-11 8:14 ` Hans de Goede
2011-08-09 23:05 ` Theodore Kilgore
2011-08-10 14:19 ` Alan Stern
2011-08-10 15:03 ` Theodore Kilgore
2011-08-10 16:09 ` Alan Stern
2011-08-10 18:33 ` Theodore Kilgore
2011-08-10 19:39 ` Hans Verkuil
2011-08-10 19:43 ` Greg KH
2011-08-10 20:34 ` Theodore Kilgore
2011-08-10 20:14 ` Mauro Carvalho Chehab
2011-08-10 20:39 ` Theodore Kilgore
2011-08-11 8:14 ` Hans de Goede
2011-08-11 14:56 ` Alan Stern
2011-08-11 15:13 ` Mauro Carvalho Chehab
2011-08-11 15:25 ` Alan Cox
2011-08-11 15:49 ` Alan Stern
2011-08-11 20:01 ` Theodore Kilgore
2011-08-11 20:32 ` Mauro Carvalho Chehab
2011-08-11 23:13 ` Theodore Kilgore
2011-08-12 7:16 ` Hans de Goede
2011-08-12 10:11 ` Alan Cox
2011-08-12 1:07 ` Alan Stern
2011-08-12 2:38 ` Theodore Kilgore
2011-08-11 15:44 ` Alan Stern
2011-08-12 7:26 ` Hans de Goede
2011-08-12 15:36 ` Alan Stern
2011-08-09 17:10 ` Sarah Sharp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55B02A41-1978-4D98-8E01-C55503C01A46@oracle.com \
--to=michael.bender@oracle.com \
--cc=kilgota@banach.math.auburn.edu \
--cc=libusb-devel@lists.sourceforge.net \
--cc=linux-media@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox