All of lore.kernel.org
 help / color / mirror / Atom feed
From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH v6] drm/ioctl: Add a ioctl to set and get a label on GEM objects
Date: Sun, 31 May 2020 09:56:50 +0800	[thread overview]
Message-ID: <202005310935.akozdAWT%lkp@intel.com> (raw)
In-Reply-To: <20200528170604.22476-1-rohan.garg@collabora.com>

[-- Attachment #1: Type: text/plain, Size: 20802 bytes --]

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@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(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 28853 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kbuild test robot <lkp@intel.com>
To: Rohan Garg <rohan.garg@collabora.com>, dri-devel@lists.freedesktop.org
Cc: emil.l.velikov@gmail.com, kernel@collabora.com, kbuild-all@lists.01.org
Subject: Re: [PATCH v6] drm/ioctl: Add a ioctl to set and get a label on GEM objects
Date: Sun, 31 May 2020 09:56:50 +0800	[thread overview]
Message-ID: <202005310935.akozdAWT%lkp@intel.com> (raw)
In-Reply-To: <20200528170604.22476-1-rohan.garg@collabora.com>

[-- Attachment #1: Type: text/plain, Size: 20265 bytes --]

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@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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28853 bytes --]

[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2020-05-31  1:56 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-28 17:06 [PATCH v6] drm/ioctl: Add a ioctl to set and get a label on GEM objects Rohan Garg
2020-05-28 18:45 ` Eric Anholt
2020-05-29 13:44   ` Rohan Garg
2020-05-29 17:10     ` Eric Anholt
2020-06-09 14:15       ` Rohan Garg
2020-05-30 18:16 ` kbuild test robot
2020-05-30 18:16   ` kbuild test robot
2020-05-31  1:56 ` kbuild test robot [this message]
2020-05-31  1:56   ` kbuild test robot
2020-05-31  3:03 ` kbuild test robot
2020-05-31  3:03   ` kbuild test robot
2020-06-02 10:23 ` Dan Carpenter
2020-06-02 10:23   ` Dan Carpenter
2020-06-02 10:23   ` Dan Carpenter
  -- strict thread matches above, loose matches on Subject: below --
2020-05-31  7:39 kbuild test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202005310935.akozdAWT%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.