* [PATCH 1/3] misc: always assign miscdevice to file->private_data in open()
2014-10-29 19:22 [PATCH 0/3] char: misc: assign file->private_data to miscdevice on open Martin Kepplinger
@ 2014-10-29 19:22 ` Martin Kepplinger
2014-10-29 19:22 ` [PATCH 2/3] fbdev: pxa3xx-gcu: remove redundant implementation of open() Martin Kepplinger
2014-10-29 19:22 ` [PATCH 3/3] char: misc: document behaviour " Martin Kepplinger
2 siblings, 0 replies; 4+ messages in thread
From: Martin Kepplinger @ 2014-10-29 19:22 UTC (permalink / raw)
To: gregkh; +Cc: arnd, akpm, rusty, linux-kernel, Martin Kepplinger
As of now, a miscdevice driver has to provide an implementation of
the open() file operation if it wants to have misc_open() assign a
pointer to struct miscdevice to file->private_data for other file
operations to use (given the user calls open()).
This leads to situations where a miscdevice driver that doesn't need
internal operations during open() has to implement open() that only
returns immediately, in order to use the data in private_data in other
fops.
This provides consistent behaviour for miscdevice developers and will
always provide the pointer in private_data. A driver's open() fop would,
of course, just overwrite it, when using private_data itself.
Signed-off-by: Martin Kepplinger <martink@posteo.de>
---
drivers/char/misc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/char/misc.c b/drivers/char/misc.c
index ffa97d2..205ad4c 100644
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -142,8 +142,8 @@ static int misc_open(struct inode * inode, struct file * file)
err = 0;
replace_fops(file, new_fops);
+ file->private_data = c;
if (file->f_op->open) {
- file->private_data = c;
err = file->f_op->open(inode,file);
}
fail:
--
1.7.10.4
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 2/3] fbdev: pxa3xx-gcu: remove redundant implementation of open()
2014-10-29 19:22 [PATCH 0/3] char: misc: assign file->private_data to miscdevice on open Martin Kepplinger
2014-10-29 19:22 ` [PATCH 1/3] misc: always assign miscdevice to file->private_data in open() Martin Kepplinger
@ 2014-10-29 19:22 ` Martin Kepplinger
2014-10-29 19:22 ` [PATCH 3/3] char: misc: document behaviour " Martin Kepplinger
2 siblings, 0 replies; 4+ messages in thread
From: Martin Kepplinger @ 2014-10-29 19:22 UTC (permalink / raw)
To: gregkh; +Cc: arnd, akpm, rusty, linux-kernel, Martin Kepplinger
the miscdevice core now does the work in any case.
Signed-off-by: Martin Kepplinger <martink@posteo.de>
---
drivers/video/fbdev/pxa3xx-gcu.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/drivers/video/fbdev/pxa3xx-gcu.c b/drivers/video/fbdev/pxa3xx-gcu.c
index 4df3657..7678a94 100644
--- a/drivers/video/fbdev/pxa3xx-gcu.c
+++ b/drivers/video/fbdev/pxa3xx-gcu.c
@@ -373,15 +373,6 @@ static inline struct pxa3xx_gcu_priv *to_pxa3xx_gcu_priv(struct file *file)
return container_of(dev, struct pxa3xx_gcu_priv, misc_dev);
}
-/*
- * provide an empty .open callback, so the core sets file->private_data
- * for us.
- */
-static int pxa3xx_gcu_open(struct inode *inode, struct file *file)
-{
- return 0;
-}
-
static ssize_t
pxa3xx_gcu_write(struct file *file, const char *buff,
size_t count, loff_t *offp)
@@ -580,7 +571,6 @@ pxa3xx_gcu_free_buffers(struct device *dev,
static const struct file_operations pxa3xx_gcu_miscdev_fops = {
.owner = THIS_MODULE,
- .open = pxa3xx_gcu_open,
.write = pxa3xx_gcu_write,
.unlocked_ioctl = pxa3xx_gcu_ioctl,
.mmap = pxa3xx_gcu_mmap,
--
1.7.10.4
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 3/3] char: misc: document behaviour of open()
2014-10-29 19:22 [PATCH 0/3] char: misc: assign file->private_data to miscdevice on open Martin Kepplinger
2014-10-29 19:22 ` [PATCH 1/3] misc: always assign miscdevice to file->private_data in open() Martin Kepplinger
2014-10-29 19:22 ` [PATCH 2/3] fbdev: pxa3xx-gcu: remove redundant implementation of open() Martin Kepplinger
@ 2014-10-29 19:22 ` Martin Kepplinger
2 siblings, 0 replies; 4+ messages in thread
From: Martin Kepplinger @ 2014-10-29 19:22 UTC (permalink / raw)
To: gregkh; +Cc: arnd, akpm, rusty, linux-kernel, Martin Kepplinger
an open syscall now assignes file->private_data to a pointer to the
miscdevice structure. This reminds driver developers not to duplicate
code if they need this.
Signed-off-by: Martin Kepplinger <martink@posteo.de>
---
drivers/char/misc.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/char/misc.c b/drivers/char/misc.c
index 205ad4c..69a08a6 100644
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -169,7 +169,9 @@ static const struct file_operations misc_fops = {
* the minor number requested is used.
*
* The structure passed is linked into the kernel and may not be
- * destroyed until it has been unregistered.
+ * destroyed until it has been unregistered. By default, an open()
+ * syscall to the device sets file->private_data to point to the
+ * structure.
*
* A zero is returned on success and a negative errno code for
* failure.
--
1.7.10.4
^ permalink raw reply [flat|nested] 4+ messages in thread