Hi On Tue, Sep 8, 2015 at 1:56 PM, Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: > And use it in radeon to replace all the ioctls no longer valid in kms > mode. I plan to also use this later on when nuking the ums support for > i915. > > Note that setting the function pointer in the ioctl table to NULL > would amount to the same, but that results in some debug output from > the drm_ioctl() function. I've figured it's cleaner to have a > special-purpose function. > > Cc: Alex Deucher <alexdeucher@xxxxxxxxx> > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/drm_ioctl.c | 7 +++ > drivers/gpu/drm/radeon/radeon_kms.c | 94 +++++++++++-------------------------- > include/drm/drmP.h | 2 + > 3 files changed, 36 insertions(+), 67 deletions(-) > > diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c > index 4d7f2677b2ea..f0b4f581f6ce 100644 > --- a/drivers/gpu/drm/drm_ioctl.c > +++ b/drivers/gpu/drm/drm_ioctl.c > @@ -415,6 +415,13 @@ int drm_noop(struct drm_device *dev, void *data, > } > EXPORT_SYMBOL(drm_noop); > > +int drm_invalid_op(struct drm_device *dev, void *data, > + struct drm_file *file_priv) > +{ > + return -EINVAL; > +} > +EXPORT_SYMBOL(drm_invalid_op); > + We could just store ERR_PTR(-EINVAL) in the ioctl-table and make the ioctl-handler handle this. Anyway: Reviewed-by: David Herrmann <dh.herrmann@xxxxxxxxx> Thanks David > /** > * Copy and IOCTL return string to user space > */ > diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c > index 4a119c255ba9..03d285b30c83 100644 > --- a/drivers/gpu/drm/radeon/radeon_kms.c > +++ b/drivers/gpu/drm/radeon/radeon_kms.c > @@ -844,74 +844,34 @@ int radeon_get_vblank_timestamp_kms(struct drm_device *dev, int crtc, > drmcrtc, &drmcrtc->hwmode); > } > > -#define KMS_INVALID_IOCTL(name) \ > -static int name(struct drm_device *dev, void *data, struct drm_file \ > - *file_priv) \ > -{ \ > - DRM_ERROR("invalid ioctl with kms %s\n", __func__); \ > - return -EINVAL; \ > -} > - > -/* > - * All these ioctls are invalid in kms world. > - */ > -KMS_INVALID_IOCTL(radeon_cp_init_kms) > -KMS_INVALID_IOCTL(radeon_cp_start_kms) > -KMS_INVALID_IOCTL(radeon_cp_stop_kms) > -KMS_INVALID_IOCTL(radeon_cp_reset_kms) > -KMS_INVALID_IOCTL(radeon_cp_idle_kms) > -KMS_INVALID_IOCTL(radeon_cp_resume_kms) > -KMS_INVALID_IOCTL(radeon_engine_reset_kms) > -KMS_INVALID_IOCTL(radeon_fullscreen_kms) > -KMS_INVALID_IOCTL(radeon_cp_swap_kms) > -KMS_INVALID_IOCTL(radeon_cp_clear_kms) > -KMS_INVALID_IOCTL(radeon_cp_vertex_kms) > -KMS_INVALID_IOCTL(radeon_cp_indices_kms) > -KMS_INVALID_IOCTL(radeon_cp_texture_kms) > -KMS_INVALID_IOCTL(radeon_cp_stipple_kms) > -KMS_INVALID_IOCTL(radeon_cp_indirect_kms) > -KMS_INVALID_IOCTL(radeon_cp_vertex2_kms) > -KMS_INVALID_IOCTL(radeon_cp_cmdbuf_kms) > -KMS_INVALID_IOCTL(radeon_cp_getparam_kms) > -KMS_INVALID_IOCTL(radeon_cp_flip_kms) > -KMS_INVALID_IOCTL(radeon_mem_alloc_kms) > -KMS_INVALID_IOCTL(radeon_mem_free_kms) > -KMS_INVALID_IOCTL(radeon_mem_init_heap_kms) > -KMS_INVALID_IOCTL(radeon_irq_emit_kms) > -KMS_INVALID_IOCTL(radeon_irq_wait_kms) > -KMS_INVALID_IOCTL(radeon_cp_setparam_kms) > -KMS_INVALID_IOCTL(radeon_surface_alloc_kms) > -KMS_INVALID_IOCTL(radeon_surface_free_kms) > - > - > const struct drm_ioctl_desc radeon_ioctls_kms[] = { > - DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, radeon_cp_init_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > - DRM_IOCTL_DEF_DRV(RADEON_CP_START, radeon_cp_start_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > - DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, radeon_cp_stop_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > - DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, radeon_cp_reset_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > - DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, radeon_cp_idle_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, radeon_cp_resume_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_RESET, radeon_engine_reset_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, radeon_fullscreen_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_SWAP, radeon_cp_swap_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_CLEAR, radeon_cp_clear_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_VERTEX, radeon_cp_vertex_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_INDICES, radeon_cp_indices_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, radeon_cp_texture_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, radeon_cp_stipple_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, radeon_cp_indirect_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > - DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, radeon_cp_vertex2_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, radeon_cp_cmdbuf_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, radeon_cp_getparam_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_FLIP, radeon_cp_flip_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_ALLOC, radeon_mem_alloc_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_FREE, radeon_mem_free_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, radeon_mem_init_heap_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > - DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, radeon_irq_emit_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, radeon_irq_wait_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, radeon_cp_setparam_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, radeon_surface_alloc_kms, DRM_AUTH), > - DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, radeon_surface_free_kms, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > + DRM_IOCTL_DEF_DRV(RADEON_CP_START, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > + DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > + DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > + DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_RESET, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_SWAP, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_CLEAR, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_VERTEX, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_INDICES, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > + DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_FLIP, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_ALLOC, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_FREE, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), > + DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, drm_invalid_op, DRM_AUTH), > + DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, drm_invalid_op, DRM_AUTH), > /* KMS */ > DRM_IOCTL_DEF_DRV(RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), > DRM_IOCTL_DEF_DRV(RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > index 5e3acb480d9a..feba39e3cf6d 100644 > --- a/include/drm/drmP.h > +++ b/include/drm/drmP.h > @@ -906,6 +906,8 @@ extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); > /* Misc. IOCTL support (drm_ioctl.c) */ > int drm_noop(struct drm_device *dev, void *data, > struct drm_file *file_priv); > +int drm_invalid_op(struct drm_device *dev, void *data, > + struct drm_file *file_priv); > > /* Cache management (drm_cache.c) */ > void drm_clflush_pages(struct page *pages[], unsigned long num_pages); > -- > 2.5.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel