public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
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



  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