From: Avi Kivity <avi@redhat.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: viro@ZenIV.linux.org.uk, linux-kernel@vger.kernel.org
Subject: [PATCH 0/3][RFC] ioctl dispatcher
Date: Sat, 27 Sep 2008 18:43:59 +0300 [thread overview]
Message-ID: <1222530242-1272-1-git-send-email-avi@redhat.com> (raw)
While ioctls are officially ugly, they are the best choice for some use
cases, not to mention compatibility issues. Currently ioctl writers face
the following hurdles:
- if the ioctl uses a data buffer, the ioctl handler must allocate
kernel memory for this buffer
- the memory may be allocated on the heap or on the stack, depending on the
buffer size
- handle any errors from the operation
- copy the data from userspace, if necessary
- handle any errors from the operation
- actually perform the operation
- copy the data back to userspace, if necessary
- handle any errors from the operation
- free the buffer, if allocated from the heap
The first patch automates these operations, only requiring the caller to
supply the ioctl number and a callback in a table.
The second patch addresses another problem with ioctls: they are brittle.
Once written, an ioctl cannot be extended, since the buffer sizes used for
transferring data are encoded in the ioctl number. This is addressed by
allowing the user-supplied size and the kernel-visible size of the data
buffer to be different; the kernel will zero fill or truncate appropriately.
With the new mechanism, it is easy to write forward- and backward- compatible
ioctl handlers.
The third patch demonstrates the effectiveness of the first patch; it
converts some of kvm's ioctl handlers to the new mechanism, removing
around 90 lines in the process.
Comments welcome.
Avi Kivity (3):
ioctl: generic ioctl dispatcher
ioctl: extensible ioctl dispatch
KVM: Convert x86 vcpu ioctls to use dispatch_ioctl_extensible()
arch/x86/kvm/x86.c | 241 ++++++++++++++++---------------------------------
fs/ioctl.c | 139 ++++++++++++++++++++++++++++
include/linux/ioctl.h | 37 ++++++++
3 files changed, 253 insertions(+), 164 deletions(-)
next reply other threads:[~2008-09-27 15:44 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-27 15:43 Avi Kivity [this message]
2008-09-27 15:44 ` [PATCH 1/3] ioctl: generic ioctl dispatcher Avi Kivity
2008-09-29 17:16 ` Andi Kleen
2008-09-30 9:08 ` Avi Kivity
2008-09-27 15:44 ` [PATCH 2/3] ioctl: extensible ioctl dispatch Avi Kivity
2008-09-27 15:44 ` [PATCH 3/3] KVM: Convert x86 vcpu ioctls to use dispatch_ioctl_extensible() Avi Kivity
2008-09-27 16:13 ` [PATCH 0/3][RFC] ioctl dispatcher Arjan van de Ven
2008-09-27 17:40 ` Avi Kivity
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=1222530242-1272-1-git-send-email-avi@redhat.com \
--to=avi@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@ZenIV.linux.org.uk \
/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.