I guess this should be fixed before stable. Later the DEFINE_DRM_GEM_CMA_FOPS macro can be used.
Noralf.
Noralf Trønnes (1): drm/tinydrm: Fix drm_driver.fops.owner
drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 15 --------------- drivers/gpu/drm/tinydrm/mi0283qt.c | 13 +++++++++++++ include/drm/tinydrm/tinydrm.h | 4 +--- 3 files changed, 14 insertions(+), 18 deletions(-)
-- 2.10.2
drm_driver.fops can't be shared since the owner then becomes tinydrm.ko. Move the fops declaration to the driver.
Reported-by: Daniel Vetter daniel.vetter@intel.com Signed-off-by: Noralf Trønnes noralf@tronnes.org --- drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 15 --------------- drivers/gpu/drm/tinydrm/mi0283qt.c | 13 +++++++++++++ include/drm/tinydrm/tinydrm.h | 4 +--- 3 files changed, 14 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c index 6a257dd..fd25c7e5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c @@ -122,21 +122,6 @@ void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj) } EXPORT_SYMBOL_GPL(tinydrm_gem_cma_free_object);
-const struct file_operations tinydrm_fops = { - .owner = THIS_MODULE, - .open = drm_open, - .release = drm_release, - .unlocked_ioctl = drm_ioctl, -#ifdef CONFIG_COMPAT - .compat_ioctl = drm_compat_ioctl, -#endif - .poll = drm_poll, - .read = drm_read, - .llseek = no_llseek, - .mmap = drm_gem_cma_mmap, -}; -EXPORT_SYMBOL(tinydrm_fops); - static struct drm_framebuffer * tinydrm_fb_create(struct drm_device *drm, struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd) diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index b29fe86..fdca37a 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -132,9 +132,22 @@ static const struct drm_display_mode mi0283qt_mode = { TINYDRM_MODE(320, 240, 58, 43), };
+static const struct file_operations mi0283qt_fops = { + .owner = THIS_MODULE, + .open = drm_open, + .release = drm_release, + .unlocked_ioctl = drm_ioctl, + .compat_ioctl = drm_compat_ioctl, + .poll = drm_poll, + .read = drm_read, + .llseek = no_llseek, + .mmap = drm_gem_cma_mmap, +}; + static struct drm_driver mi0283qt_driver = { .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC, + .fops = &mi0283qt_fops, TINYDRM_GEM_DRIVER_OPS, .lastclose = tinydrm_lastclose, .debugfs_init = mipi_dbi_debugfs_init, diff --git a/include/drm/tinydrm/tinydrm.h b/include/drm/tinydrm/tinydrm.h index cf9ca20..00b800d 100644 --- a/include/drm/tinydrm/tinydrm.h +++ b/include/drm/tinydrm/tinydrm.h @@ -58,8 +58,7 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe) .gem_prime_mmap = drm_gem_cma_prime_mmap, \ .dumb_create = drm_gem_cma_dumb_create, \ .dumb_map_offset = drm_gem_cma_dumb_map_offset, \ - .dumb_destroy = drm_gem_dumb_destroy, \ - .fops = &tinydrm_fops + .dumb_destroy = drm_gem_dumb_destroy
/** * TINYDRM_MODE - tinydrm display mode @@ -84,7 +83,6 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe) .type = DRM_MODE_TYPE_DRIVER, \ .clock = 1 /* pass validation */
-extern const struct file_operations tinydrm_fops; void tinydrm_lastclose(struct drm_device *drm); void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj); struct drm_gem_object *
On Sat, Mar 25, 2017 at 02:56:20PM +0100, Noralf Trønnes wrote:
drm_driver.fops can't be shared since the owner then becomes tinydrm.ko. Move the fops declaration to the driver.
Reported-by: Daniel Vetter daniel.vetter@intel.com Signed-off-by: Noralf Trønnes noralf@tronnes.org
Since it only "breaks" unloading (and only if you force-unload without knowing what you're doing, which is explicitly a developer feature with a big warning) I think perfectly ok to push this in only for 4.12.
drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 15 --------------- drivers/gpu/drm/tinydrm/mi0283qt.c | 13 +++++++++++++ include/drm/tinydrm/tinydrm.h | 4 +--- 3 files changed, 14 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c index 6a257dd..fd25c7e5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c @@ -122,21 +122,6 @@ void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj) } EXPORT_SYMBOL_GPL(tinydrm_gem_cma_free_object);
-const struct file_operations tinydrm_fops = {
- .owner = THIS_MODULE,
- .open = drm_open,
- .release = drm_release,
- .unlocked_ioctl = drm_ioctl,
-#ifdef CONFIG_COMPAT
- .compat_ioctl = drm_compat_ioctl,
-#endif
- .poll = drm_poll,
- .read = drm_read,
- .llseek = no_llseek,
- .mmap = drm_gem_cma_mmap,
-}; -EXPORT_SYMBOL(tinydrm_fops);
static struct drm_framebuffer * tinydrm_fb_create(struct drm_device *drm, struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd) diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index b29fe86..fdca37a 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -132,9 +132,22 @@ static const struct drm_display_mode mi0283qt_mode = { TINYDRM_MODE(320, 240, 58, 43), };
+static const struct file_operations mi0283qt_fops = {
- .owner = THIS_MODULE,
- .open = drm_open,
- .release = drm_release,
- .unlocked_ioctl = drm_ioctl,
- .compat_ioctl = drm_compat_ioctl,
- .poll = drm_poll,
- .read = drm_read,
- .llseek = no_llseek,
- .mmap = drm_gem_cma_mmap,
+};
And then you could use the shiny new DECLARE_DRM_GEM_CMA_FOPS here!
Can you pls respin on top of drm-misc-next?
Thanks, Daniel
static struct drm_driver mi0283qt_driver = { .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
- .fops = &mi0283qt_fops, TINYDRM_GEM_DRIVER_OPS, .lastclose = tinydrm_lastclose, .debugfs_init = mipi_dbi_debugfs_init,
diff --git a/include/drm/tinydrm/tinydrm.h b/include/drm/tinydrm/tinydrm.h index cf9ca20..00b800d 100644 --- a/include/drm/tinydrm/tinydrm.h +++ b/include/drm/tinydrm/tinydrm.h @@ -58,8 +58,7 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe) .gem_prime_mmap = drm_gem_cma_prime_mmap, \ .dumb_create = drm_gem_cma_dumb_create, \ .dumb_map_offset = drm_gem_cma_dumb_map_offset, \
- .dumb_destroy = drm_gem_dumb_destroy, \
- .fops = &tinydrm_fops
- .dumb_destroy = drm_gem_dumb_destroy
/**
- TINYDRM_MODE - tinydrm display mode
@@ -84,7 +83,6 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe) .type = DRM_MODE_TYPE_DRIVER, \ .clock = 1 /* pass validation */
-extern const struct file_operations tinydrm_fops; void tinydrm_lastclose(struct drm_device *drm); void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj); struct drm_gem_object * -- 2.10.2
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Den 25.03.2017 22.32, skrev Daniel Vetter:
On Sat, Mar 25, 2017 at 02:56:20PM +0100, Noralf Trønnes wrote:
drm_driver.fops can't be shared since the owner then becomes tinydrm.ko. Move the fops declaration to the driver.
Reported-by: Daniel Vetter daniel.vetter@intel.com Signed-off-by: Noralf Trønnes noralf@tronnes.org
Since it only "breaks" unloading (and only if you force-unload without knowing what you're doing, which is explicitly a developer feature with a big warning) I think perfectly ok to push this in only for 4.12.
drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 15 --------------- drivers/gpu/drm/tinydrm/mi0283qt.c | 13 +++++++++++++ include/drm/tinydrm/tinydrm.h | 4 +--- 3 files changed, 14 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c index 6a257dd..fd25c7e5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c @@ -122,21 +122,6 @@ void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj) } EXPORT_SYMBOL_GPL(tinydrm_gem_cma_free_object);
-const struct file_operations tinydrm_fops = {
- .owner = THIS_MODULE,
- .open = drm_open,
- .release = drm_release,
- .unlocked_ioctl = drm_ioctl,
-#ifdef CONFIG_COMPAT
- .compat_ioctl = drm_compat_ioctl,
-#endif
- .poll = drm_poll,
- .read = drm_read,
- .llseek = no_llseek,
- .mmap = drm_gem_cma_mmap,
-}; -EXPORT_SYMBOL(tinydrm_fops);
- static struct drm_framebuffer * tinydrm_fb_create(struct drm_device *drm, struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index b29fe86..fdca37a 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -132,9 +132,22 @@ static const struct drm_display_mode mi0283qt_mode = { TINYDRM_MODE(320, 240, 58, 43), };
+static const struct file_operations mi0283qt_fops = {
- .owner = THIS_MODULE,
- .open = drm_open,
- .release = drm_release,
- .unlocked_ioctl = drm_ioctl,
- .compat_ioctl = drm_compat_ioctl,
- .poll = drm_poll,
- .read = drm_read,
- .llseek = no_llseek,
- .mmap = drm_gem_cma_mmap,
+};
And then you could use the shiny new DECLARE_DRM_GEM_CMA_FOPS here!
Can you pls respin on top of drm-misc-next?
Sure, I thought I neeeded to fix this in 4.11 first.
Noralf.
Thanks, Daniel
- static struct drm_driver mi0283qt_driver = { .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
- .fops = &mi0283qt_fops, TINYDRM_GEM_DRIVER_OPS, .lastclose = tinydrm_lastclose, .debugfs_init = mipi_dbi_debugfs_init,
diff --git a/include/drm/tinydrm/tinydrm.h b/include/drm/tinydrm/tinydrm.h index cf9ca20..00b800d 100644 --- a/include/drm/tinydrm/tinydrm.h +++ b/include/drm/tinydrm/tinydrm.h @@ -58,8 +58,7 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe) .gem_prime_mmap = drm_gem_cma_prime_mmap, \ .dumb_create = drm_gem_cma_dumb_create, \ .dumb_map_offset = drm_gem_cma_dumb_map_offset, \
- .dumb_destroy = drm_gem_dumb_destroy, \
- .fops = &tinydrm_fops
.dumb_destroy = drm_gem_dumb_destroy
/**
- TINYDRM_MODE - tinydrm display mode
@@ -84,7 +83,6 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe) .type = DRM_MODE_TYPE_DRIVER, \ .clock = 1 /* pass validation */
-extern const struct file_operations tinydrm_fops; void tinydrm_lastclose(struct drm_device *drm); void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj); struct drm_gem_object * -- 2.10.2
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
On Sun, Mar 26, 2017 at 01:56:55AM +0100, Noralf Trønnes wrote:
Den 25.03.2017 22.32, skrev Daniel Vetter:
On Sat, Mar 25, 2017 at 02:56:20PM +0100, Noralf Trønnes wrote:
drm_driver.fops can't be shared since the owner then becomes tinydrm.ko. Move the fops declaration to the driver.
Reported-by: Daniel Vetter daniel.vetter@intel.com Signed-off-by: Noralf Trønnes noralf@tronnes.org
Since it only "breaks" unloading (and only if you force-unload without knowing what you're doing, which is explicitly a developer feature with a big warning) I think perfectly ok to push this in only for 4.12.
drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 15 --------------- drivers/gpu/drm/tinydrm/mi0283qt.c | 13 +++++++++++++ include/drm/tinydrm/tinydrm.h | 4 +--- 3 files changed, 14 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c index 6a257dd..fd25c7e5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c @@ -122,21 +122,6 @@ void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj) } EXPORT_SYMBOL_GPL(tinydrm_gem_cma_free_object); -const struct file_operations tinydrm_fops = {
- .owner = THIS_MODULE,
- .open = drm_open,
- .release = drm_release,
- .unlocked_ioctl = drm_ioctl,
-#ifdef CONFIG_COMPAT
- .compat_ioctl = drm_compat_ioctl,
-#endif
- .poll = drm_poll,
- .read = drm_read,
- .llseek = no_llseek,
- .mmap = drm_gem_cma_mmap,
-}; -EXPORT_SYMBOL(tinydrm_fops);
- static struct drm_framebuffer * tinydrm_fb_create(struct drm_device *drm, struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index b29fe86..fdca37a 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -132,9 +132,22 @@ static const struct drm_display_mode mi0283qt_mode = { TINYDRM_MODE(320, 240, 58, 43), }; +static const struct file_operations mi0283qt_fops = {
- .owner = THIS_MODULE,
- .open = drm_open,
- .release = drm_release,
- .unlocked_ioctl = drm_ioctl,
- .compat_ioctl = drm_compat_ioctl,
- .poll = drm_poll,
- .read = drm_read,
- .llseek = no_llseek,
- .mmap = drm_gem_cma_mmap,
+};
And then you could use the shiny new DECLARE_DRM_GEM_CMA_FOPS here!
Can you pls respin on top of drm-misc-next?
Sure, I thought I neeeded to fix this in 4.11 first.
As a rule of thumb, -fixes has the same rules as stable backports. And one of the guidelines there is that it must be a fix for a real problem, i.e. something a users could conceivably hit. Entirely theoretic race condiditions, bugs in module unload code and similar things you'll never get a bug report for don't qualify. -Daniel
Noralf.
Thanks, Daniel
- static struct drm_driver mi0283qt_driver = { .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
- .fops = &mi0283qt_fops, TINYDRM_GEM_DRIVER_OPS, .lastclose = tinydrm_lastclose, .debugfs_init = mipi_dbi_debugfs_init,
diff --git a/include/drm/tinydrm/tinydrm.h b/include/drm/tinydrm/tinydrm.h index cf9ca20..00b800d 100644 --- a/include/drm/tinydrm/tinydrm.h +++ b/include/drm/tinydrm/tinydrm.h @@ -58,8 +58,7 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe) .gem_prime_mmap = drm_gem_cma_prime_mmap, \ .dumb_create = drm_gem_cma_dumb_create, \ .dumb_map_offset = drm_gem_cma_dumb_map_offset, \
- .dumb_destroy = drm_gem_dumb_destroy, \
- .fops = &tinydrm_fops
- .dumb_destroy = drm_gem_dumb_destroy /**
- TINYDRM_MODE - tinydrm display mode
@@ -84,7 +83,6 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe) .type = DRM_MODE_TYPE_DRIVER, \ .clock = 1 /* pass validation */ -extern const struct file_operations tinydrm_fops; void tinydrm_lastclose(struct drm_device *drm); void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj); struct drm_gem_object * -- 2.10.2
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
dri-devel@lists.freedesktop.org