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@xxxxxxxxx> > > > Signed-off-by: Noralf Trønnes <noralf@xxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxxxxxxxx > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel