From: Ben Nizette <ben.nizette@iinet.net.au>
To: "linux-os (Dick Johnson)" <linux-os@analogic.com>
Cc: Greg KH <greg@kroah.com>,
linux-kernel@vger.kernel.org, tglx@linutronix.de
Subject: Re: Userspace I/O driver core
Date: Fri, 15 Dec 2006 08:55:26 +1100 [thread overview]
Message-ID: <4581C84E.3080209@iinet.net.au> (raw)
In-Reply-To: <Pine.LNX.4.61.0612141110310.31046@chaos.analogic.com>
linux-os (Dick Johnson) wrote:
> On Wed, 13 Dec 2006, Greg KH wrote:
>>
>> If anyone has any questions on how to use this interface, or anything
>> else about it, please let me and Thomas know.
>>
>> thanks,
>>
>> greg k-h
[snip]
> There are well thought-out methods of creating hardware interfaces that
> have a successfully history of implementation both in Linux and Unix.
> There are well established APIs that are used to expose devices to
> user-space with controlled privilege, access mechanisms, and built-in
> locking to provide atomic access to the functionality of the devices
> without user-space code needing to understand the device intricacies
> (and probably getting it wrong).
>
> I recently returned from a conference where somebody had designed a
> driver that exposes PCI registers and FPGA device registers to
> user-space. Their problem was how to provide "call-backs" when an
> interrupt occurred. They were convinced that all they had to do was
> to have some user-space procedure that could be called when an
> interrupt occurred. Then their so-called driver would work. They had
> no clue about the fact that an interrupt can occur at any time not
> just when somebody is ready and waiting for it, that one usually has
> sections of code that must not be interrupted, etc.
This is almost exactly the situation I find myself in and a situation
for which UIO is perfect. UIO is not a hole through the kernel in to
memory, it is a well defined API of the type you describe above (albeit
not 'established' yet). UIO interrupts are _handled_ in kernel space
but subsequently _signalled_ in userspace. There are no issues of
kernel code directly calling any userspace functionallity.
>
> Driver code needs to be protected from undue user-space interference
> otherwise the device can't be synchronized, shared, or accessed
> through the operating system's APIs.
And this is what UIO does, it allows userspace interaction without
userspace interference. It provides a safe an sanitized view of the
hardware to processes which make more sense in userland.
>
> Every time I showed how the driver couldn't work properly, the
> designer so convinced of his superior methods, would devise a
> work-around. For instance, to protect a section of code from being
> modified in an interrupt, the user-space driver was to be executed
> with iopl(3) and interrupts disabled. To protect the kernel from the
> ISR being modified or replaced, the code would be checksummed every
> time an interrupt occurred, etc. I could go on. Drivers have no place
> user space.
>
No, dumb drivers with dodgy kernel interfaces don't have a place
_anywhere_. If this under-educated person was using UIO there would be
no need for any of his hacks, a userspace driver would be feasible,
clean, neat and perfectly allowable.
Regards,
Ben
prev parent reply other threads:[~2006-12-14 22:05 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-14 1:06 Userspace I/O driver core Greg KH
2006-12-14 5:48 ` Ben Nizette
2006-12-14 9:44 ` Avi Kivity
2006-12-14 10:19 ` Arjan van de Ven
2006-12-14 10:46 ` Avi Kivity
2006-12-14 10:54 ` Arjan van de Ven
2006-12-14 10:56 ` Avi Kivity
2006-12-14 17:54 ` Greg KH
2006-12-16 14:48 ` Dr. David Alan Gilbert
2006-12-14 10:25 ` Hans-Jürgen Koch
2006-12-14 10:48 ` Avi Kivity
2006-12-14 12:39 ` Jan Engelhardt
2006-12-14 13:38 ` Avi Kivity
2006-12-14 17:48 ` Jan Engelhardt
2006-12-14 18:00 ` Greg KH
2006-12-14 10:52 ` Alan
2006-12-14 11:22 ` Thomas Gleixner
2006-12-14 11:39 ` Alan
2006-12-14 11:37 ` Hans-Jürgen Koch
2006-12-14 12:45 ` Alan
2006-12-14 12:37 ` Jan Engelhardt
2006-12-14 16:10 ` linux-os (Dick Johnson)
2006-12-14 21:55 ` Ben Nizette [this message]
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=4581C84E.3080209@iinet.net.au \
--to=ben.nizette@iinet.net.au \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-os@analogic.com \
--cc=tglx@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.