All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Claudio Suarez <cssk@net-c.es>,
	dri-devel@lists.freedesktop.org,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org
Subject: Re: [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b,c}*.c
Date: Thu, 30 Dec 2021 22:31:45 +0800	[thread overview]
Message-ID: <202112302236.ikd2ET5w-lkp@intel.com> (raw)
In-Reply-To: <Yc2Pd/DhQ7EpD+hD@gineta.localdomain>

Hi Claudio,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm/drm-next]
[also build test WARNING on drm-intel/for-linux-next drm-tip/drm-tip v5.16-rc7 next-20211224]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Claudio-Suarez/drm-get-rid-of-DRM_DEBUG_-log-calls-in-drm-core-files-drm_-b-c-c/20211230-185446
base:   git://anongit.freedesktop.org/drm/drm drm-next
config: hexagon-randconfig-r041-20211230 (https://download.01.org/0day-ci/archive/20211230/202112302236.ikd2ET5w-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project cd284b7ac0615afc6e0f1a30da2777e361de27a3)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/9cfa12f89e858cd6d2eb5eb17c6db7ab689343e3
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Claudio-Suarez/drm-get-rid-of-DRM_DEBUG_-log-calls-in-drm-core-files-drm_-b-c-c/20211230-185446
        git checkout 9cfa12f89e858cd6d2eb5eb17c6db7ab689343e3
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/gpu/drm/

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

All warnings (new ones prefixed by >>):

   drivers/gpu/drm/drm_bufs.c:174:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "offset = 0x%08llx, size = 0x%08lx, type = %d\n",
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
>> drivers/gpu/drm/drm_bufs.c:174:19: warning: incompatible pointer to integer conversion passing 'char[46]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "offset = 0x%08llx, size = 0x%08lx, type = %d\n",
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
>> drivers/gpu/drm/drm_bufs.c:175:7: warning: incompatible integer to pointer conversion passing 'unsigned long long' to parameter of type 'const char *' [-Wint-conversion]
                       (unsigned long long)map->offset, map->size, map->type);
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:208:17: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                                   drm_dev_dbg(dev,
                                               ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:209:10: warning: incompatible pointer to integer conversion passing 'char[62]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                                               "Matching maps of type %d with mismatched sizes, (%ld vs %ld)\n",
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
>> drivers/gpu/drm/drm_bufs.c:210:10: warning: incompatible integer to pointer conversion passing 'enum drm_map_type' to parameter of type 'const char *' [-Wint-conversion]
                                               map->type, map->size, list->map->size);
                                               ^~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:241:17: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                                   drm_dev_dbg(dev,
                                               ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:242:10: warning: incompatible pointer to integer conversion passing 'char[62]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                                               "Matching maps of type %d with mismatched sizes, (%ld vs %ld)\n",
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:243:10: warning: incompatible integer to pointer conversion passing 'enum drm_map_type' to parameter of type 'const char *' [-Wint-conversion]
                                               map->type, map->size, list->map->size);
                                               ^~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:252:15: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                   drm_dev_dbg(dev, "%lu %d %p\n",
                               ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:252:20: warning: incompatible pointer to integer conversion passing 'char[11]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                   drm_dev_dbg(dev, "%lu %d %p\n",
                                    ^~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
>> drivers/gpu/drm/drm_bufs.c:253:6: warning: incompatible integer to pointer conversion passing 'unsigned long' to parameter of type 'const char *' [-Wint-conversion]
                             map->size, order_base_2(map->size), map->handle);
                             ^~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:310:15: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                   drm_dev_dbg(dev, "AGP offset = 0x%08llx, size = 0x%08lx\n",
                               ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:310:20: warning: incompatible pointer to integer conversion passing 'char[39]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                   drm_dev_dbg(dev, "AGP offset = 0x%08llx, size = 0x%08lx\n",
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:311:6: warning: incompatible integer to pointer conversion passing 'unsigned long long' to parameter of type 'const char *' [-Wint-conversion]
                             (unsigned long long)map->offset, map->size);
                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:914:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "count=%d, size=%d (%d), order=%d\n",
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:914:19: warning: incompatible pointer to integer conversion passing 'char[34]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "count=%d, size=%d (%d), order=%d\n",
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
>> drivers/gpu/drm/drm_bufs.c:915:7: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
                       request->count, request->size, size, order);
                       ^~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:977:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "pagelist: %d entries\n",
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:977:19: warning: incompatible pointer to integer conversion passing 'char[22]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "pagelist: %d entries\n",
                            ^~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:978:7: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
                       dma->page_count + (count << page_order));
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1017:16: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                           drm_dev_dbg(dev, "page %d @ 0x%08lx\n",
                                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:1017:21: warning: incompatible pointer to integer conversion passing 'char[19]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                           drm_dev_dbg(dev, "page %d @ 0x%08lx\n",
                                            ^~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:1018:9: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
                                       dma->page_count + page_count,
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1053:16: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                           drm_dev_dbg(dev, "buffer %d @ %p\n",
                                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:1053:21: warning: incompatible pointer to integer conversion passing 'char[16]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                           drm_dev_dbg(dev, "buffer %d @ %p\n",
                                            ^~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:1054:9: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
                                       entry->buf_count, buf->address);
                                       ^~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1142:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "count:      %d\n", count);
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:1142:19: warning: incompatible pointer to integer conversion passing 'char[16]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "count:      %d\n", count);
                            ^~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:1142:39: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
           drm_dev_dbg(dev, "count:      %d\n", count);
                                                ^~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1143:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "order:      %d\n", order);
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:1143:19: warning: incompatible pointer to integer conversion passing 'char[16]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "order:      %d\n", order);
                            ^~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:1143:39: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
           drm_dev_dbg(dev, "order:      %d\n", order);
                                                ^~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1144:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "size:       %d\n", size);
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,


vim +174 drivers/gpu/drm/drm_bufs.c

   138	
   139	/*
   140	 * Core function to create a range of memory available for mapping by a
   141	 * non-root process.
   142	 *
   143	 * Adjusts the memory offset to its absolute value according to the mapping
   144	 * type.  Adds the map to the map list drm_device::maplist. Adds MTRR's where
   145	 * applicable and if supported by the kernel.
   146	 */
   147	static int drm_addmap_core(struct drm_device *dev, resource_size_t offset,
   148				   unsigned int size, enum drm_map_type type,
   149				   enum drm_map_flags flags,
   150				   struct drm_map_list **maplist)
   151	{
   152		struct drm_local_map *map;
   153		struct drm_map_list *list;
   154		unsigned long user_token;
   155		int ret;
   156	
   157		map = kmalloc(sizeof(*map), GFP_KERNEL);
   158		if (!map)
   159			return -ENOMEM;
   160	
   161		map->offset = offset;
   162		map->size = size;
   163		map->flags = flags;
   164		map->type = type;
   165	
   166		/* Only allow shared memory to be removable since we only keep enough
   167		 * book keeping information about shared memory to allow for removal
   168		 * when processes fork.
   169		 */
   170		if ((map->flags & _DRM_REMOVABLE) && map->type != _DRM_SHM) {
   171			kfree(map);
   172			return -EINVAL;
   173		}
 > 174		drm_dev_dbg(dev, "offset = 0x%08llx, size = 0x%08lx, type = %d\n",
 > 175			    (unsigned long long)map->offset, map->size, map->type);
   176	
   177		/* page-align _DRM_SHM maps. They are allocated here so there is no security
   178		 * hole created by that and it works around various broken drivers that use
   179		 * a non-aligned quantity to map the SAREA. --BenH
   180		 */
   181		if (map->type == _DRM_SHM)
   182			map->size = PAGE_ALIGN(map->size);
   183	
   184		if ((map->offset & (~(resource_size_t)PAGE_MASK)) || (map->size & (~PAGE_MASK))) {
   185			kfree(map);
   186			return -EINVAL;
   187		}
   188		map->mtrr = -1;
   189		map->handle = NULL;
   190	
   191		switch (map->type) {
   192		case _DRM_REGISTERS:
   193		case _DRM_FRAME_BUFFER:
   194	#if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) && !defined(__powerpc64__) && !defined(__x86_64__) && !defined(__arm__)
   195			if (map->offset + (map->size-1) < map->offset ||
   196			    map->offset < virt_to_phys(high_memory)) {
   197				kfree(map);
   198				return -EINVAL;
   199			}
   200	#endif
   201			/* Some drivers preinitialize some maps, without the X Server
   202			 * needing to be aware of it.  Therefore, we just return success
   203			 * when the server tries to create a duplicate map.
   204			 */
   205			list = drm_find_matching_map(dev, map);
   206			if (list != NULL) {
   207				if (list->map->size != map->size) {
   208					drm_dev_dbg(dev,
   209						    "Matching maps of type %d with mismatched sizes, (%ld vs %ld)\n",
 > 210						    map->type, map->size, list->map->size);
   211					list->map->size = map->size;
   212				}
   213	
   214				kfree(map);
   215				*maplist = list;
   216				return 0;
   217			}
   218	
   219			if (map->type == _DRM_FRAME_BUFFER ||
   220			    (map->flags & _DRM_WRITE_COMBINING)) {
   221				map->mtrr =
   222					arch_phys_wc_add(map->offset, map->size);
   223			}
   224			if (map->type == _DRM_REGISTERS) {
   225				if (map->flags & _DRM_WRITE_COMBINING)
   226					map->handle = ioremap_wc(map->offset,
   227								 map->size);
   228				else
   229					map->handle = ioremap(map->offset, map->size);
   230				if (!map->handle) {
   231					kfree(map);
   232					return -ENOMEM;
   233				}
   234			}
   235	
   236			break;
   237		case _DRM_SHM:
   238			list = drm_find_matching_map(dev, map);
   239			if (list != NULL) {
   240				if (list->map->size != map->size) {
   241					drm_dev_dbg(dev,
   242						    "Matching maps of type %d with mismatched sizes, (%ld vs %ld)\n",
   243						    map->type, map->size, list->map->size);
   244					list->map->size = map->size;
   245				}
   246	
   247				kfree(map);
   248				*maplist = list;
   249				return 0;
   250			}
   251			map->handle = vmalloc_user(map->size);
   252			drm_dev_dbg(dev, "%lu %d %p\n",
 > 253				  map->size, order_base_2(map->size), map->handle);
   254			if (!map->handle) {
   255				kfree(map);
   256				return -ENOMEM;
   257			}
   258			map->offset = (unsigned long)map->handle;
   259			if (map->flags & _DRM_CONTAINS_LOCK) {
   260				/* Prevent a 2nd X Server from creating a 2nd lock */
   261				if (dev->master->lock.hw_lock != NULL) {
   262					vfree(map->handle);
   263					kfree(map);
   264					return -EBUSY;
   265				}
   266				dev->sigdata.lock = dev->master->lock.hw_lock = map->handle;	/* Pointer to lock */
   267			}
   268			break;
   269		case _DRM_AGP: {
   270			struct drm_agp_mem *entry;
   271			int valid = 0;
   272	
   273			if (!dev->agp) {
   274				kfree(map);
   275				return -EINVAL;
   276			}
   277	#ifdef __alpha__
   278			map->offset += dev->hose->mem_space->start;
   279	#endif
   280			/* In some cases (i810 driver), user space may have already
   281			 * added the AGP base itself, because dev->agp->base previously
   282			 * only got set during AGP enable.  So, only add the base
   283			 * address if the map's offset isn't already within the
   284			 * aperture.
   285			 */
   286			if (map->offset < dev->agp->base ||
   287			    map->offset > dev->agp->base +
   288			    dev->agp->agp_info.aper_size * 1024 * 1024 - 1) {
   289				map->offset += dev->agp->base;
   290			}
   291			map->mtrr = dev->agp->agp_mtrr;	/* for getmap */
   292	
   293			/* This assumes the DRM is in total control of AGP space.
   294			 * It's not always the case as AGP can be in the control
   295			 * of user space (i.e. i810 driver). So this loop will get
   296			 * skipped and we double check that dev->agp->memory is
   297			 * actually set as well as being invalid before EPERM'ing
   298			 */
   299			list_for_each_entry(entry, &dev->agp->memory, head) {
   300				if ((map->offset >= entry->bound) &&
   301				    (map->offset + map->size <= entry->bound + entry->pages * PAGE_SIZE)) {
   302					valid = 1;
   303					break;
   304				}
   305			}
   306			if (!list_empty(&dev->agp->memory) && !valid) {
   307				kfree(map);
   308				return -EPERM;
   309			}
   310			drm_dev_dbg(dev, "AGP offset = 0x%08llx, size = 0x%08lx\n",
   311				  (unsigned long long)map->offset, map->size);
   312	
   313			break;
   314		}
   315		case _DRM_SCATTER_GATHER:
   316			if (!dev->sg) {
   317				kfree(map);
   318				return -EINVAL;
   319			}
   320			map->offset += (unsigned long)dev->sg->virtual;
   321			break;
   322		case _DRM_CONSISTENT:
   323			/* dma_addr_t is 64bit on i386 with CONFIG_HIGHMEM64G,
   324			 * As we're limiting the address to 2^32-1 (or less),
   325			 * casting it down to 32 bits is no problem, but we
   326			 * need to point to a 64bit variable first.
   327			 */
   328			map->handle = dma_alloc_coherent(dev->dev,
   329							 map->size,
   330							 &map->offset,
   331							 GFP_KERNEL);
   332			if (!map->handle) {
   333				kfree(map);
   334				return -ENOMEM;
   335			}
   336			break;
   337		default:
   338			kfree(map);
   339			return -EINVAL;
   340		}
   341	
   342		list = kzalloc(sizeof(*list), GFP_KERNEL);
   343		if (!list) {
   344			if (map->type == _DRM_REGISTERS)
   345				iounmap(map->handle);
   346			kfree(map);
   347			return -EINVAL;
   348		}
   349		list->map = map;
   350	
   351		mutex_lock(&dev->struct_mutex);
   352		list_add(&list->head, &dev->maplist);
   353	
   354		/* Assign a 32-bit handle */
   355		/* We do it here so that dev->struct_mutex protects the increment */
   356		user_token = (map->type == _DRM_SHM) ? (unsigned long)map->handle :
   357			map->offset;
   358		ret = drm_map_handle(dev, &list->hash, user_token, 0,
   359				     (map->type == _DRM_SHM));
   360		if (ret) {
   361			if (map->type == _DRM_REGISTERS)
   362				iounmap(map->handle);
   363			kfree(map);
   364			kfree(list);
   365			mutex_unlock(&dev->struct_mutex);
   366			return ret;
   367		}
   368	
   369		list->user_token = list->hash.key << PAGE_SHIFT;
   370		mutex_unlock(&dev->struct_mutex);
   371	
   372		if (!(map->flags & _DRM_DRIVER))
   373			list->master = dev->master;
   374		*maplist = list;
   375		return 0;
   376	}
   377	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b, c}*.c
Date: Thu, 30 Dec 2021 22:31:45 +0800	[thread overview]
Message-ID: <202112302236.ikd2ET5w-lkp@intel.com> (raw)
In-Reply-To: <Yc2Pd/DhQ7EpD+hD@gineta.localdomain>

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

Hi Claudio,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm/drm-next]
[also build test WARNING on drm-intel/for-linux-next drm-tip/drm-tip v5.16-rc7 next-20211224]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Claudio-Suarez/drm-get-rid-of-DRM_DEBUG_-log-calls-in-drm-core-files-drm_-b-c-c/20211230-185446
base:   git://anongit.freedesktop.org/drm/drm drm-next
config: hexagon-randconfig-r041-20211230 (https://download.01.org/0day-ci/archive/20211230/202112302236.ikd2ET5w-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project cd284b7ac0615afc6e0f1a30da2777e361de27a3)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/9cfa12f89e858cd6d2eb5eb17c6db7ab689343e3
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Claudio-Suarez/drm-get-rid-of-DRM_DEBUG_-log-calls-in-drm-core-files-drm_-b-c-c/20211230-185446
        git checkout 9cfa12f89e858cd6d2eb5eb17c6db7ab689343e3
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/gpu/drm/

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

All warnings (new ones prefixed by >>):

   drivers/gpu/drm/drm_bufs.c:174:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "offset = 0x%08llx, size = 0x%08lx, type = %d\n",
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
>> drivers/gpu/drm/drm_bufs.c:174:19: warning: incompatible pointer to integer conversion passing 'char[46]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "offset = 0x%08llx, size = 0x%08lx, type = %d\n",
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
>> drivers/gpu/drm/drm_bufs.c:175:7: warning: incompatible integer to pointer conversion passing 'unsigned long long' to parameter of type 'const char *' [-Wint-conversion]
                       (unsigned long long)map->offset, map->size, map->type);
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:208:17: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                                   drm_dev_dbg(dev,
                                               ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:209:10: warning: incompatible pointer to integer conversion passing 'char[62]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                                               "Matching maps of type %d with mismatched sizes, (%ld vs %ld)\n",
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
>> drivers/gpu/drm/drm_bufs.c:210:10: warning: incompatible integer to pointer conversion passing 'enum drm_map_type' to parameter of type 'const char *' [-Wint-conversion]
                                               map->type, map->size, list->map->size);
                                               ^~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:241:17: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                                   drm_dev_dbg(dev,
                                               ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:242:10: warning: incompatible pointer to integer conversion passing 'char[62]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                                               "Matching maps of type %d with mismatched sizes, (%ld vs %ld)\n",
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:243:10: warning: incompatible integer to pointer conversion passing 'enum drm_map_type' to parameter of type 'const char *' [-Wint-conversion]
                                               map->type, map->size, list->map->size);
                                               ^~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:252:15: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                   drm_dev_dbg(dev, "%lu %d %p\n",
                               ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:252:20: warning: incompatible pointer to integer conversion passing 'char[11]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                   drm_dev_dbg(dev, "%lu %d %p\n",
                                    ^~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
>> drivers/gpu/drm/drm_bufs.c:253:6: warning: incompatible integer to pointer conversion passing 'unsigned long' to parameter of type 'const char *' [-Wint-conversion]
                             map->size, order_base_2(map->size), map->handle);
                             ^~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:310:15: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                   drm_dev_dbg(dev, "AGP offset = 0x%08llx, size = 0x%08lx\n",
                               ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:310:20: warning: incompatible pointer to integer conversion passing 'char[39]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                   drm_dev_dbg(dev, "AGP offset = 0x%08llx, size = 0x%08lx\n",
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:311:6: warning: incompatible integer to pointer conversion passing 'unsigned long long' to parameter of type 'const char *' [-Wint-conversion]
                             (unsigned long long)map->offset, map->size);
                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:914:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "count=%d, size=%d (%d), order=%d\n",
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:914:19: warning: incompatible pointer to integer conversion passing 'char[34]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "count=%d, size=%d (%d), order=%d\n",
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
>> drivers/gpu/drm/drm_bufs.c:915:7: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
                       request->count, request->size, size, order);
                       ^~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:977:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "pagelist: %d entries\n",
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:977:19: warning: incompatible pointer to integer conversion passing 'char[22]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "pagelist: %d entries\n",
                            ^~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:978:7: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
                       dma->page_count + (count << page_order));
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1017:16: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                           drm_dev_dbg(dev, "page %d @ 0x%08lx\n",
                                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:1017:21: warning: incompatible pointer to integer conversion passing 'char[19]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                           drm_dev_dbg(dev, "page %d @ 0x%08lx\n",
                                            ^~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:1018:9: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
                                       dma->page_count + page_count,
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1053:16: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
                           drm_dev_dbg(dev, "buffer %d @ %p\n",
                                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:1053:21: warning: incompatible pointer to integer conversion passing 'char[16]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
                           drm_dev_dbg(dev, "buffer %d @ %p\n",
                                            ^~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:1054:9: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
                                       entry->buf_count, buf->address);
                                       ^~~~~~~~~~~~~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1142:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "count:      %d\n", count);
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:1142:19: warning: incompatible pointer to integer conversion passing 'char[16]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "count:      %d\n", count);
                            ^~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:1142:39: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
           drm_dev_dbg(dev, "count:      %d\n", count);
                                                ^~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1143:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "order:      %d\n", order);
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                         ^
   drivers/gpu/drm/drm_bufs.c:1143:19: warning: incompatible pointer to integer conversion passing 'char[16]' to parameter of type 'enum drm_debug_category' [-Wint-conversion]
           drm_dev_dbg(dev, "order:      %d\n", order);
                            ^~~~~~~~~~~~~~~~~~
   include/drm/drm_print.h:337:68: note: passing argument to parameter 'category' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
                                                                      ^
   drivers/gpu/drm/drm_bufs.c:1143:39: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
           drm_dev_dbg(dev, "order:      %d\n", order);
                                                ^~~~~
   include/drm/drm_print.h:338:16: note: passing argument to parameter 'format' here
                    const char *format, ...);
                                ^
   drivers/gpu/drm/drm_bufs.c:1144:14: error: incompatible pointer types passing 'struct drm_device *' to parameter of type 'const struct device *' [-Werror,-Wincompatible-pointer-types]
           drm_dev_dbg(dev, "size:       %d\n", size);
                       ^~~
   include/drm/drm_print.h:337:39: note: passing argument to parameter 'dev' here
   void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,


vim +174 drivers/gpu/drm/drm_bufs.c

   138	
   139	/*
   140	 * Core function to create a range of memory available for mapping by a
   141	 * non-root process.
   142	 *
   143	 * Adjusts the memory offset to its absolute value according to the mapping
   144	 * type.  Adds the map to the map list drm_device::maplist. Adds MTRR's where
   145	 * applicable and if supported by the kernel.
   146	 */
   147	static int drm_addmap_core(struct drm_device *dev, resource_size_t offset,
   148				   unsigned int size, enum drm_map_type type,
   149				   enum drm_map_flags flags,
   150				   struct drm_map_list **maplist)
   151	{
   152		struct drm_local_map *map;
   153		struct drm_map_list *list;
   154		unsigned long user_token;
   155		int ret;
   156	
   157		map = kmalloc(sizeof(*map), GFP_KERNEL);
   158		if (!map)
   159			return -ENOMEM;
   160	
   161		map->offset = offset;
   162		map->size = size;
   163		map->flags = flags;
   164		map->type = type;
   165	
   166		/* Only allow shared memory to be removable since we only keep enough
   167		 * book keeping information about shared memory to allow for removal
   168		 * when processes fork.
   169		 */
   170		if ((map->flags & _DRM_REMOVABLE) && map->type != _DRM_SHM) {
   171			kfree(map);
   172			return -EINVAL;
   173		}
 > 174		drm_dev_dbg(dev, "offset = 0x%08llx, size = 0x%08lx, type = %d\n",
 > 175			    (unsigned long long)map->offset, map->size, map->type);
   176	
   177		/* page-align _DRM_SHM maps. They are allocated here so there is no security
   178		 * hole created by that and it works around various broken drivers that use
   179		 * a non-aligned quantity to map the SAREA. --BenH
   180		 */
   181		if (map->type == _DRM_SHM)
   182			map->size = PAGE_ALIGN(map->size);
   183	
   184		if ((map->offset & (~(resource_size_t)PAGE_MASK)) || (map->size & (~PAGE_MASK))) {
   185			kfree(map);
   186			return -EINVAL;
   187		}
   188		map->mtrr = -1;
   189		map->handle = NULL;
   190	
   191		switch (map->type) {
   192		case _DRM_REGISTERS:
   193		case _DRM_FRAME_BUFFER:
   194	#if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) && !defined(__powerpc64__) && !defined(__x86_64__) && !defined(__arm__)
   195			if (map->offset + (map->size-1) < map->offset ||
   196			    map->offset < virt_to_phys(high_memory)) {
   197				kfree(map);
   198				return -EINVAL;
   199			}
   200	#endif
   201			/* Some drivers preinitialize some maps, without the X Server
   202			 * needing to be aware of it.  Therefore, we just return success
   203			 * when the server tries to create a duplicate map.
   204			 */
   205			list = drm_find_matching_map(dev, map);
   206			if (list != NULL) {
   207				if (list->map->size != map->size) {
   208					drm_dev_dbg(dev,
   209						    "Matching maps of type %d with mismatched sizes, (%ld vs %ld)\n",
 > 210						    map->type, map->size, list->map->size);
   211					list->map->size = map->size;
   212				}
   213	
   214				kfree(map);
   215				*maplist = list;
   216				return 0;
   217			}
   218	
   219			if (map->type == _DRM_FRAME_BUFFER ||
   220			    (map->flags & _DRM_WRITE_COMBINING)) {
   221				map->mtrr =
   222					arch_phys_wc_add(map->offset, map->size);
   223			}
   224			if (map->type == _DRM_REGISTERS) {
   225				if (map->flags & _DRM_WRITE_COMBINING)
   226					map->handle = ioremap_wc(map->offset,
   227								 map->size);
   228				else
   229					map->handle = ioremap(map->offset, map->size);
   230				if (!map->handle) {
   231					kfree(map);
   232					return -ENOMEM;
   233				}
   234			}
   235	
   236			break;
   237		case _DRM_SHM:
   238			list = drm_find_matching_map(dev, map);
   239			if (list != NULL) {
   240				if (list->map->size != map->size) {
   241					drm_dev_dbg(dev,
   242						    "Matching maps of type %d with mismatched sizes, (%ld vs %ld)\n",
   243						    map->type, map->size, list->map->size);
   244					list->map->size = map->size;
   245				}
   246	
   247				kfree(map);
   248				*maplist = list;
   249				return 0;
   250			}
   251			map->handle = vmalloc_user(map->size);
   252			drm_dev_dbg(dev, "%lu %d %p\n",
 > 253				  map->size, order_base_2(map->size), map->handle);
   254			if (!map->handle) {
   255				kfree(map);
   256				return -ENOMEM;
   257			}
   258			map->offset = (unsigned long)map->handle;
   259			if (map->flags & _DRM_CONTAINS_LOCK) {
   260				/* Prevent a 2nd X Server from creating a 2nd lock */
   261				if (dev->master->lock.hw_lock != NULL) {
   262					vfree(map->handle);
   263					kfree(map);
   264					return -EBUSY;
   265				}
   266				dev->sigdata.lock = dev->master->lock.hw_lock = map->handle;	/* Pointer to lock */
   267			}
   268			break;
   269		case _DRM_AGP: {
   270			struct drm_agp_mem *entry;
   271			int valid = 0;
   272	
   273			if (!dev->agp) {
   274				kfree(map);
   275				return -EINVAL;
   276			}
   277	#ifdef __alpha__
   278			map->offset += dev->hose->mem_space->start;
   279	#endif
   280			/* In some cases (i810 driver), user space may have already
   281			 * added the AGP base itself, because dev->agp->base previously
   282			 * only got set during AGP enable.  So, only add the base
   283			 * address if the map's offset isn't already within the
   284			 * aperture.
   285			 */
   286			if (map->offset < dev->agp->base ||
   287			    map->offset > dev->agp->base +
   288			    dev->agp->agp_info.aper_size * 1024 * 1024 - 1) {
   289				map->offset += dev->agp->base;
   290			}
   291			map->mtrr = dev->agp->agp_mtrr;	/* for getmap */
   292	
   293			/* This assumes the DRM is in total control of AGP space.
   294			 * It's not always the case as AGP can be in the control
   295			 * of user space (i.e. i810 driver). So this loop will get
   296			 * skipped and we double check that dev->agp->memory is
   297			 * actually set as well as being invalid before EPERM'ing
   298			 */
   299			list_for_each_entry(entry, &dev->agp->memory, head) {
   300				if ((map->offset >= entry->bound) &&
   301				    (map->offset + map->size <= entry->bound + entry->pages * PAGE_SIZE)) {
   302					valid = 1;
   303					break;
   304				}
   305			}
   306			if (!list_empty(&dev->agp->memory) && !valid) {
   307				kfree(map);
   308				return -EPERM;
   309			}
   310			drm_dev_dbg(dev, "AGP offset = 0x%08llx, size = 0x%08lx\n",
   311				  (unsigned long long)map->offset, map->size);
   312	
   313			break;
   314		}
   315		case _DRM_SCATTER_GATHER:
   316			if (!dev->sg) {
   317				kfree(map);
   318				return -EINVAL;
   319			}
   320			map->offset += (unsigned long)dev->sg->virtual;
   321			break;
   322		case _DRM_CONSISTENT:
   323			/* dma_addr_t is 64bit on i386 with CONFIG_HIGHMEM64G,
   324			 * As we're limiting the address to 2^32-1 (or less),
   325			 * casting it down to 32 bits is no problem, but we
   326			 * need to point to a 64bit variable first.
   327			 */
   328			map->handle = dma_alloc_coherent(dev->dev,
   329							 map->size,
   330							 &map->offset,
   331							 GFP_KERNEL);
   332			if (!map->handle) {
   333				kfree(map);
   334				return -ENOMEM;
   335			}
   336			break;
   337		default:
   338			kfree(map);
   339			return -EINVAL;
   340		}
   341	
   342		list = kzalloc(sizeof(*list), GFP_KERNEL);
   343		if (!list) {
   344			if (map->type == _DRM_REGISTERS)
   345				iounmap(map->handle);
   346			kfree(map);
   347			return -EINVAL;
   348		}
   349		list->map = map;
   350	
   351		mutex_lock(&dev->struct_mutex);
   352		list_add(&list->head, &dev->maplist);
   353	
   354		/* Assign a 32-bit handle */
   355		/* We do it here so that dev->struct_mutex protects the increment */
   356		user_token = (map->type == _DRM_SHM) ? (unsigned long)map->handle :
   357			map->offset;
   358		ret = drm_map_handle(dev, &list->hash, user_token, 0,
   359				     (map->type == _DRM_SHM));
   360		if (ret) {
   361			if (map->type == _DRM_REGISTERS)
   362				iounmap(map->handle);
   363			kfree(map);
   364			kfree(list);
   365			mutex_unlock(&dev->struct_mutex);
   366			return ret;
   367		}
   368	
   369		list->user_token = list->hash.key << PAGE_SHIFT;
   370		mutex_unlock(&dev->struct_mutex);
   371	
   372		if (!(map->flags & _DRM_DRIVER))
   373			list->master = dev->master;
   374		*maplist = list;
   375		return 0;
   376	}
   377	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

  reply	other threads:[~2021-12-30 14:40 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-30 10:52 [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b,c}*.c Claudio Suarez
2021-12-30 14:31 ` kernel test robot [this message]
2021-12-30 14:31   ` [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b, c}*.c kernel test robot
2021-12-30 20:05   ` [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b,c}*.c Claudio Suarez
2021-12-30 20:05     ` [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b, c}*.c Claudio Suarez
2021-12-30 20:05     ` [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b,c}*.c Claudio Suarez
2021-12-31  9:10     ` Jani Nikula
2021-12-31  9:10       ` [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b, c}*.c Jani Nikula
2021-12-31  9:10       ` [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b,c}*.c Jani Nikula
2021-12-31  9:07 ` Jani Nikula

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=202112302236.ikd2ET5w-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=airlied@linux.ie \
    --cc=cssk@net-c.es \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=kbuild-all@lists.01.org \
    --cc=llvm@lists.linux.dev \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=tzimmermann@suse.de \
    /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.