[PATCH v6] drm/ioctl: Add a ioctl to set and get a label on GEM objects

kbuild test robot lkp at intel.com
Sun May 31 01:56:50 UTC 2020


Hi Rohan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm-exynos/exynos-drm-next]
[also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next drm-tip/drm-tip linus/master v5.7-rc7 next-20200529]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Rohan-Garg/drm-ioctl-Add-a-ioctl-to-set-and-get-a-label-on-GEM-objects/20200531-000134
base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
config: x86_64-randconfig-a013-20200531 (attached as .config)
compiler: gcc-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp at intel.com>

All warnings (new ones prefixed by >>, old ones prefixed by <<):

In file included from drivers/gpu/drm/drm_auth.c:34:0:
>> include/drm/drm_drv.h:566:12: warning: 'struct drm_handle_label' declared inside parameter list
struct drm_handle_label *args);
^
>> include/drm/drm_drv.h:566:12: warning: its scope is only this definition or declaration, which is probably not what you want
include/drm/drm_drv.h:581:14: warning: 'struct drm_handle_label' declared inside parameter list
struct drm_handle_label *args);
^

vim +566 include/drm/drm_drv.h

   152	
   153	/**
   154	 * struct drm_driver - DRM driver structure
   155	 *
   156	 * This structure represent the common code for a family of cards. There will be
   157	 * one &struct drm_device for each card present in this family. It contains lots
   158	 * of vfunc entries, and a pile of those probably should be moved to more
   159	 * appropriate places like &drm_mode_config_funcs or into a new operations
   160	 * structure for GEM drivers.
   161	 */
   162	struct drm_driver {
   163		/**
   164		 * @load:
   165		 *
   166		 * Backward-compatible driver callback to complete
   167		 * initialization steps after the driver is registered.  For
   168		 * this reason, may suffer from race conditions and its use is
   169		 * deprecated for new drivers.  It is therefore only supported
   170		 * for existing drivers not yet converted to the new scheme.
   171		 * See drm_dev_init() and drm_dev_register() for proper and
   172		 * race-free way to set up a &struct drm_device.
   173		 *
   174		 * This is deprecated, do not use!
   175		 *
   176		 * Returns:
   177		 *
   178		 * Zero on success, non-zero value on failure.
   179		 */
   180		int (*load) (struct drm_device *, unsigned long flags);
   181	
   182		/**
   183		 * @open:
   184		 *
   185		 * Driver callback when a new &struct drm_file is opened. Useful for
   186		 * setting up driver-private data structures like buffer allocators,
   187		 * execution contexts or similar things. Such driver-private resources
   188		 * must be released again in @postclose.
   189		 *
   190		 * Since the display/modeset side of DRM can only be owned by exactly
   191		 * one &struct drm_file (see &drm_file.is_master and &drm_device.master)
   192		 * there should never be a need to set up any modeset related resources
   193		 * in this callback. Doing so would be a driver design bug.
   194		 *
   195		 * Returns:
   196		 *
   197		 * 0 on success, a negative error code on failure, which will be
   198		 * promoted to userspace as the result of the open() system call.
   199		 */
   200		int (*open) (struct drm_device *, struct drm_file *);
   201	
   202		/**
   203		 * @postclose:
   204		 *
   205		 * One of the driver callbacks when a new &struct drm_file is closed.
   206		 * Useful for tearing down driver-private data structures allocated in
   207		 * @open like buffer allocators, execution contexts or similar things.
   208		 *
   209		 * Since the display/modeset side of DRM can only be owned by exactly
   210		 * one &struct drm_file (see &drm_file.is_master and &drm_device.master)
   211		 * there should never be a need to tear down any modeset related
   212		 * resources in this callback. Doing so would be a driver design bug.
   213		 */
   214		void (*postclose) (struct drm_device *, struct drm_file *);
   215	
   216		/**
   217		 * @lastclose:
   218		 *
   219		 * Called when the last &struct drm_file has been closed and there's
   220		 * currently no userspace client for the &struct drm_device.
   221		 *
   222		 * Modern drivers should only use this to force-restore the fbdev
   223		 * framebuffer using drm_fb_helper_restore_fbdev_mode_unlocked().
   224		 * Anything else would indicate there's something seriously wrong.
   225		 * Modern drivers can also use this to execute delayed power switching
   226		 * state changes, e.g. in conjunction with the :ref:`vga_switcheroo`
   227		 * infrastructure.
   228		 *
   229		 * This is called after @postclose hook has been called.
   230		 *
   231		 * NOTE:
   232		 *
   233		 * All legacy drivers use this callback to de-initialize the hardware.
   234		 * This is purely because of the shadow-attach model, where the DRM
   235		 * kernel driver does not really own the hardware. Instead ownershipe is
   236		 * handled with the help of userspace through an inheritedly racy dance
   237		 * to set/unset the VT into raw mode.
   238		 *
   239		 * Legacy drivers initialize the hardware in the @firstopen callback,
   240		 * which isn't even called for modern drivers.
   241		 */
   242		void (*lastclose) (struct drm_device *);
   243	
   244		/**
   245		 * @unload:
   246		 *
   247		 * Reverse the effects of the driver load callback.  Ideally,
   248		 * the clean up performed by the driver should happen in the
   249		 * reverse order of the initialization.  Similarly to the load
   250		 * hook, this handler is deprecated and its usage should be
   251		 * dropped in favor of an open-coded teardown function at the
   252		 * driver layer.  See drm_dev_unregister() and drm_dev_put()
   253		 * for the proper way to remove a &struct drm_device.
   254		 *
   255		 * The unload() hook is called right after unregistering
   256		 * the device.
   257		 *
   258		 */
   259		void (*unload) (struct drm_device *);
   260	
   261		/**
   262		 * @release:
   263		 *
   264		 * Optional callback for destroying device data after the final
   265		 * reference is released, i.e. the device is being destroyed.
   266		 *
   267		 * This is deprecated, clean up all memory allocations associated with a
   268		 * &drm_device using drmm_add_action(), drmm_kmalloc() and related
   269		 * managed resources functions.
   270		 */
   271		void (*release) (struct drm_device *);
   272	
   273		/**
   274		 * @irq_handler:
   275		 *
   276		 * Interrupt handler called when using drm_irq_install(). Not used by
   277		 * drivers which implement their own interrupt handling.
   278		 */
   279		irqreturn_t(*irq_handler) (int irq, void *arg);
   280	
   281		/**
   282		 * @irq_preinstall:
   283		 *
   284		 * Optional callback used by drm_irq_install() which is called before
   285		 * the interrupt handler is registered. This should be used to clear out
   286		 * any pending interrupts (from e.g. firmware based drives) and reset
   287		 * the interrupt handling registers.
   288		 */
   289		void (*irq_preinstall) (struct drm_device *dev);
   290	
   291		/**
   292		 * @irq_postinstall:
   293		 *
   294		 * Optional callback used by drm_irq_install() which is called after
   295		 * the interrupt handler is registered. This should be used to enable
   296		 * interrupt generation in the hardware.
   297		 */
   298		int (*irq_postinstall) (struct drm_device *dev);
   299	
   300		/**
   301		 * @irq_uninstall:
   302		 *
   303		 * Optional callback used by drm_irq_uninstall() which is called before
   304		 * the interrupt handler is unregistered. This should be used to disable
   305		 * interrupt generation in the hardware.
   306		 */
   307		void (*irq_uninstall) (struct drm_device *dev);
   308	
   309		/**
   310		 * @master_set:
   311		 *
   312		 * Called whenever the minor master is set. Only used by vmwgfx.
   313		 */
   314		int (*master_set)(struct drm_device *dev, struct drm_file *file_priv,
   315				  bool from_open);
   316		/**
   317		 * @master_drop:
   318		 *
   319		 * Called whenever the minor master is dropped. Only used by vmwgfx.
   320		 */
   321		void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv);
   322	
   323		/**
   324		 * @debugfs_init:
   325		 *
   326		 * Allows drivers to create driver-specific debugfs files.
   327		 */
   328		void (*debugfs_init)(struct drm_minor *minor);
   329	
   330		/**
   331		 * @gem_free_object: deconstructor for drm_gem_objects
   332		 *
   333		 * This is deprecated and should not be used by new drivers. Use
   334		 * &drm_gem_object_funcs.free instead.
   335		 */
   336		void (*gem_free_object) (struct drm_gem_object *obj);
   337	
   338		/**
   339		 * @gem_free_object_unlocked: deconstructor for drm_gem_objects
   340		 *
   341		 * This is deprecated and should not be used by new drivers. Use
   342		 * &drm_gem_object_funcs.free instead.
   343		 * Compared to @gem_free_object this is not encumbered with
   344		 * &drm_device.struct_mutex legacy locking schemes.
   345		 */
   346		void (*gem_free_object_unlocked) (struct drm_gem_object *obj);
   347	
   348		/**
   349		 * @gem_open_object:
   350		 *
   351		 * This callback is deprecated in favour of &drm_gem_object_funcs.open.
   352		 *
   353		 * Driver hook called upon gem handle creation
   354		 */
   355		int (*gem_open_object) (struct drm_gem_object *, struct drm_file *);
   356	
   357		/**
   358		 * @gem_close_object:
   359		 *
   360		 * This callback is deprecated in favour of &drm_gem_object_funcs.close.
   361		 *
   362		 * Driver hook called upon gem handle release
   363		 */
   364		void (*gem_close_object) (struct drm_gem_object *, struct drm_file *);
   365	
   366		/**
   367		 * @gem_print_info:
   368		 *
   369		 * This callback is deprecated in favour of
   370		 * &drm_gem_object_funcs.print_info.
   371		 *
   372		 * If driver subclasses struct &drm_gem_object, it can implement this
   373		 * optional hook for printing additional driver specific info.
   374		 *
   375		 * drm_printf_indent() should be used in the callback passing it the
   376		 * indent argument.
   377		 *
   378		 * This callback is called from drm_gem_print_info().
   379		 */
   380		void (*gem_print_info)(struct drm_printer *p, unsigned int indent,
   381				       const struct drm_gem_object *obj);
   382	
   383		/**
   384		 * @gem_create_object: constructor for gem objects
   385		 *
   386		 * Hook for allocating the GEM object struct, for use by the CMA and
   387		 * SHMEM GEM helpers.
   388		 */
   389		struct drm_gem_object *(*gem_create_object)(struct drm_device *dev,
   390							    size_t size);
   391		/**
   392		 * @prime_handle_to_fd:
   393		 *
   394		 * Main PRIME export function. Should be implemented with
   395		 * drm_gem_prime_handle_to_fd() for GEM based drivers.
   396		 *
   397		 * For an in-depth discussion see :ref:`PRIME buffer sharing
   398		 * documentation <prime_buffer_sharing>`.
   399		 */
   400		int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
   401					uint32_t handle, uint32_t flags, int *prime_fd);
   402		/**
   403		 * @prime_fd_to_handle:
   404		 *
   405		 * Main PRIME import function. Should be implemented with
   406		 * drm_gem_prime_fd_to_handle() for GEM based drivers.
   407		 *
   408		 * For an in-depth discussion see :ref:`PRIME buffer sharing
   409		 * documentation <prime_buffer_sharing>`.
   410		 */
   411		int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
   412					int prime_fd, uint32_t *handle);
   413		/**
   414		 * @gem_prime_export:
   415		 *
   416		 * Export hook for GEM drivers. Deprecated in favour of
   417		 * &drm_gem_object_funcs.export.
   418		 */
   419		struct dma_buf * (*gem_prime_export)(struct drm_gem_object *obj,
   420						     int flags);
   421		/**
   422		 * @gem_prime_import:
   423		 *
   424		 * Import hook for GEM drivers.
   425		 *
   426		 * This defaults to drm_gem_prime_import() if not set.
   427		 */
   428		struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
   429					struct dma_buf *dma_buf);
   430	
   431		/**
   432		 * @gem_prime_pin:
   433		 *
   434		 * Deprecated hook in favour of &drm_gem_object_funcs.pin.
   435		 */
   436		int (*gem_prime_pin)(struct drm_gem_object *obj);
   437	
   438		/**
   439		 * @gem_prime_unpin:
   440		 *
   441		 * Deprecated hook in favour of &drm_gem_object_funcs.unpin.
   442		 */
   443		void (*gem_prime_unpin)(struct drm_gem_object *obj);
   444	
   445	
   446		/**
   447		 * @gem_prime_get_sg_table:
   448		 *
   449		 * Deprecated hook in favour of &drm_gem_object_funcs.get_sg_table.
   450		 */
   451		struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj);
   452	
   453		/**
   454		 * @gem_prime_import_sg_table:
   455		 *
   456		 * Optional hook used by the PRIME helper functions
   457		 * drm_gem_prime_import() respectively drm_gem_prime_import_dev().
   458		 */
   459		struct drm_gem_object *(*gem_prime_import_sg_table)(
   460					struct drm_device *dev,
   461					struct dma_buf_attachment *attach,
   462					struct sg_table *sgt);
   463		/**
   464		 * @gem_prime_vmap:
   465		 *
   466		 * Deprecated vmap hook for GEM drivers. Please use
   467		 * &drm_gem_object_funcs.vmap instead.
   468		 */
   469		void *(*gem_prime_vmap)(struct drm_gem_object *obj);
   470	
   471		/**
   472		 * @gem_prime_vunmap:
   473		 *
   474		 * Deprecated vunmap hook for GEM drivers. Please use
   475		 * &drm_gem_object_funcs.vunmap instead.
   476		 */
   477		void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr);
   478	
   479		/**
   480		 * @gem_prime_mmap:
   481		 *
   482		 * mmap hook for GEM drivers, used to implement dma-buf mmap in the
   483		 * PRIME helpers.
   484		 *
   485		 * FIXME: There's way too much duplication going on here, and also moved
   486		 * to &drm_gem_object_funcs.
   487		 */
   488		int (*gem_prime_mmap)(struct drm_gem_object *obj,
   489					struct vm_area_struct *vma);
   490	
   491		/**
   492		 * @dumb_create:
   493		 *
   494		 * This creates a new dumb buffer in the driver's backing storage manager (GEM,
   495		 * TTM or something else entirely) and returns the resulting buffer handle. This
   496		 * handle can then be wrapped up into a framebuffer modeset object.
   497		 *
   498		 * Note that userspace is not allowed to use such objects for render
   499		 * acceleration - drivers must create their own private ioctls for such a use
   500		 * case.
   501		 *
   502		 * Width, height and depth are specified in the &drm_mode_create_dumb
   503		 * argument. The callback needs to fill the handle, pitch and size for
   504		 * the created buffer.
   505		 *
   506		 * Called by the user via ioctl.
   507		 *
   508		 * Returns:
   509		 *
   510		 * Zero on success, negative errno on failure.
   511		 */
   512		int (*dumb_create)(struct drm_file *file_priv,
   513				   struct drm_device *dev,
   514				   struct drm_mode_create_dumb *args);
   515		/**
   516		 * @dumb_map_offset:
   517		 *
   518		 * Allocate an offset in the drm device node's address space to be able to
   519		 * memory map a dumb buffer.
   520		 *
   521		 * The default implementation is drm_gem_create_mmap_offset(). GEM based
   522		 * drivers must not overwrite this.
   523		 *
   524		 * Called by the user via ioctl.
   525		 *
   526		 * Returns:
   527		 *
   528		 * Zero on success, negative errno on failure.
   529		 */
   530		int (*dumb_map_offset)(struct drm_file *file_priv,
   531				       struct drm_device *dev, uint32_t handle,
   532				       uint64_t *offset);
   533		/**
   534		 * @dumb_destroy:
   535		 *
   536		 * This destroys the userspace handle for the given dumb backing storage buffer.
   537		 * Since buffer objects must be reference counted in the kernel a buffer object
   538		 * won't be immediately freed if a framebuffer modeset object still uses it.
   539		 *
   540		 * Called by the user via ioctl.
   541		 *
   542		 * The default implementation is drm_gem_dumb_destroy(). GEM based drivers
   543		 * must not overwrite this.
   544		 *
   545		 * Returns:
   546		 *
   547		 * Zero on success, negative errno on failure.
   548		 */
   549		int (*dumb_destroy)(struct drm_file *file_priv,
   550				    struct drm_device *dev,
   551				    uint32_t handle);
   552	
   553		/**
   554		 * @set_label:
   555		 *
   556		 * Label a buffer object
   557		 *
   558		 * Called by the user via ioctl.
   559		 *
   560		 * Returns:
   561		 *
   562		 * Length of label on success, negative errno on failure.
   563		 */
   564		int (*set_label)(struct drm_device *dev,
   565				 struct drm_file *file_priv,
 > 566				 struct drm_handle_label *args);
   567	
   568		/**
   569		 * @get_label:
   570		 *
   571		 * Read the label of a buffer object.
   572		 *
   573		 * Called by the user via ioctl.
   574		 *
   575		 * Returns:
   576		 *
   577		 * Length of label on success, negative errno on failiure.
   578		 */
   579		char *(*get_label)(struct drm_device *dev,
   580				   struct drm_file *file_priv,
   581				   struct drm_handle_label *args);
   582	
   583		/**
   584		 * @gem_vm_ops: Driver private ops for this object
   585		 *
   586		 * For GEM drivers this is deprecated in favour of
   587		 * &drm_gem_object_funcs.vm_ops.
   588		 */
   589		const struct vm_operations_struct *gem_vm_ops;
   590	
   591		/** @major: driver major number */
   592		int major;
   593		/** @minor: driver minor number */
   594		int minor;
   595		/** @patchlevel: driver patch level */
   596		int patchlevel;
   597		/** @name: driver name */
   598		char *name;
   599		/** @desc: driver description */
   600		char *desc;
   601		/** @date: driver date */
   602		char *date;
   603	
   604		/**
   605		 * @driver_features:
   606		 * Driver features, see &enum drm_driver_feature. Drivers can disable
   607		 * some features on a per-instance basis using
   608		 * &drm_device.driver_features.
   609		 */
   610		u32 driver_features;
   611	
   612		/**
   613		 * @ioctls:
   614		 *
   615		 * Array of driver-private IOCTL description entries. See the chapter on
   616		 * :ref:`IOCTL support in the userland interfaces
   617		 * chapter<drm_driver_ioctl>` for the full details.
   618		 */
   619	
   620		const struct drm_ioctl_desc *ioctls;
   621		/** @num_ioctls: Number of entries in @ioctls. */
   622		int num_ioctls;
   623	
   624		/**
   625		 * @fops:
   626		 *
   627		 * File operations for the DRM device node. See the discussion in
   628		 * :ref:`file operations<drm_driver_fops>` for in-depth coverage and
   629		 * some examples.
   630		 */
   631		const struct file_operations *fops;
   632	
   633		/* Everything below here is for legacy driver, never use! */
   634		/* private: */
   635	
   636		/* List of devices hanging off this driver with stealth attach. */
   637		struct list_head legacy_dev_list;
   638		int (*firstopen) (struct drm_device *);
   639		void (*preclose) (struct drm_device *, struct drm_file *file_priv);
   640		int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
   641		int (*dma_quiescent) (struct drm_device *);
   642		int (*context_dtor) (struct drm_device *dev, int context);
   643		u32 (*get_vblank_counter)(struct drm_device *dev, unsigned int pipe);
   644		int (*enable_vblank)(struct drm_device *dev, unsigned int pipe);
   645		void (*disable_vblank)(struct drm_device *dev, unsigned int pipe);
   646		int dev_priv_size;
   647	};
   648	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 28853 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20200531/07c9cf12/attachment-0001.gz>


More information about the dri-devel mailing list