diff options
author | Vincent Bossier <vincent.bossier@gmail.com> | 2011-06-09 09:20:31 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-06-28 14:08:34 -0700 |
commit | 05614fbfc1f3dedc337ac67e83b6ad130ba9fc9f (patch) | |
tree | e314623f6634f9c86a7151966d9d8d68a3f0dabd | |
parent | 56fc508186dbec9aca46cd034ef12358fc044ac1 (diff) | |
download | op-kernel-dev-05614fbfc1f3dedc337ac67e83b6ad130ba9fc9f.zip op-kernel-dev-05614fbfc1f3dedc337ac67e83b6ad130ba9fc9f.tar.gz |
Staging: VME: Make vme/ctl device available for IOCTL operations only.
Resurrect the vme/ctl device by allowing to open it even if it has no resources
and make related read/write/llseek operations dummy.
Signed-off-by: Vincent Bossier <vincent.bossier@gmail.com>
Acked-by: Martyn Welch <martyn.welch@ge.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/vme/devices/vme_user.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/staging/vme/devices/vme_user.c b/drivers/staging/vme/devices/vme_user.c index 633a642..db12879 100644 --- a/drivers/staging/vme/devices/vme_user.c +++ b/drivers/staging/vme/devices/vme_user.c @@ -168,8 +168,8 @@ static int vme_user_open(struct inode *inode, struct file *file) unsigned int minor = MINOR(inode->i_rdev); down(&image[minor].sem); - /* Only allow device to be opened if a resource is allocated */ - if (image[minor].resource == NULL) { + /* Allow device to be opened if a resource is needed and allocated. */ + if (minor < CONTROL_MINOR && image[minor].resource == NULL) { printk(KERN_ERR "No resources allocated for device\n"); err = -EINVAL; goto err_res; @@ -321,6 +321,9 @@ static ssize_t vme_user_read(struct file *file, char __user *buf, size_t count, size_t image_size; size_t okcount; + if (minor == CONTROL_MINOR) + return 0; + down(&image[minor].sem); /* XXX Do we *really* want this helper - we can use vme_*_get ? */ @@ -365,6 +368,9 @@ static ssize_t vme_user_write(struct file *file, const char __user *buf, size_t image_size; size_t okcount; + if (minor == CONTROL_MINOR) + return 0; + down(&image[minor].sem); image_size = vme_get_size(image[minor].resource); @@ -406,6 +412,9 @@ static loff_t vme_user_llseek(struct file *file, loff_t off, int whence) unsigned int minor = MINOR(file->f_dentry->d_inode->i_rdev); size_t image_size; + if (minor == CONTROL_MINOR) + return -EINVAL; + down(&image[minor].sem); image_size = vme_get_size(image[minor].resource); |