Thanks for accepting the differences.

Regards,
Aaron

On 06/09/09 03:47, Edward Pilatowicz wrote:
> On Sat, Jun 06, 2009 at 09:32:41AM +0800, Aaron Zang wrote:
>> Hi Ed,
>>
>> I think I'd better make my justifications of not binding hid devices
>> to VTs clear so that they won't not buried under the details.
>>
>> These devices are shared devices, not for exclusive usage of Xorg
>> or VT, Although Xorg and console might be the biggest consumers.
>> The actually users/applications should get to decide which stream
>> should get the input. We kernel should never make the decision
>> and assumptions on behave of them.
>> If they are exclusively used by console and Xorg, I will be more
>> than happy to bind them to VTs.
>>
>> I just thought another small scenario which may explain my concerns
>> a little bit.
>>
>> There are 2 keyboards -- K1 (/dev/usb/hid0) and K2 (/dev/usb/hid1)
>> on the system.
>> On /dev/vt/6 which is a text console session, the root user
>> wrote an application to listen to /dev/usb/hid0 with the purpose
>> of debugging or whatever.
>>
> 
> so imho, your optimizing / designing these interfaces for a very
> uncommon use case.  you're a kernel developer, so accessing hid0 devices
> for debugging is a common use case for you, but do you really think that
> accessing hid devices directly is a common use case for most (any?)
> solaris users?
> 
>> Xorg starts on /dev/vt/7, and it is configured to use keyboard1
>> and keyboard2. So it registers K1 and K2 to the kernel
>> so that both of them are bind to VT7.
> 
> so this scenario is already fundamentally broken.  we have two entities
> listening to the same hid0 device, which you told me earlier will result
> in non-deterministic behavior.  so now your trying to support a scenario
> where X (or the app) can't work correctly.
> 
>> The user switches Xorg to VT6, during the switching, since
>> K1 and K2 are bond to VT7, and VT6 is console session, the
>> streams of K1 and K2 are switched to the internal one.
>>
> 
> this is the same thing that would happen if the X server issued your
> propsed ioctls.
> 
>> The user process which is listening to /dev/usb/hid0 will starve
>> on /dev/vt/6 though K1 has inputs.
>> With HIDIOCKM[GS]DIRECT ioctls the user application at least
>> have an option to switch the stream back by either set up a
>> timer as I described before or using NONBLOCK read.
>>
> 
> sure.  if the (fundamentally broken) application is aware that streams
> output can randomly stop, it could use these ioctls to switch data back.
> now the (fundamentally broken) app can become even more complex, with
> timeouts and async IO all to manage the fact that input might randomly
> stop.
> 
> for your scenario above, it seems that what you really want it a way for
> an application to get dedicated access to a hid devices.  if your app
> (debugging or whatever) could request dedicated access, then it could be
> written correctly, since it would never share the device with the X
> server, and additionally the hid data could never be randomly
> re-directed somewhere else while the device is in use.
> 
>> If I was wrong, please correct me.
>>
> 
> i don't think either of us is wrong, we just have a fundamental
> difference of opinion.  :)
> 
> i think these interfaces push unnecessary complexity into the X server.
> that said, i think we've beaten this dead horse enough.  you've already
> got your +1 and you've got sign off from the X folks for adding these
> interfaces.  hence, we should just agree to disagree on this issue.
> 
> ed

-- 
You know some birds are not meant to be caged, their feathers are just too 
bright.
????????????????????????

Reply via email to