* Re: [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b,c}*.c
[not found] <Yc2Pd/DhQ7EpD+hD@gineta.localdomain>
@ 2021-12-30 14:31 ` kernel test robot
2021-12-30 20:05 ` Claudio Suarez
0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2021-12-30 14:31 UTC (permalink / raw)
To: Claudio Suarez, dri-devel, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Daniel Vetter
Cc: llvm, kbuild-all
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b,c}*.c
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 ` Claudio Suarez
2021-12-31 9:10 ` Jani Nikula
0 siblings, 1 reply; 3+ messages in thread
From: Claudio Suarez @ 2021-12-30 20:05 UTC (permalink / raw)
To: kernel test robot
Cc: dri-devel, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Daniel Vetter, llvm, kbuild-all
Hi,
Please, don't apply this patch. I have to review it,.
BR
On Thu, Dec 30, 2021 at 10:31:45PM +0800, kernel test robot wrote:
> 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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] drm: get rid of DRM_DEBUG_* log calls in drm core, files drm_{b,c}*.c
2021-12-30 20:05 ` Claudio Suarez
@ 2021-12-31 9:10 ` Jani Nikula
0 siblings, 0 replies; 3+ messages in thread
From: Jani Nikula @ 2021-12-31 9:10 UTC (permalink / raw)
To: Claudio Suarez, kernel test robot
Cc: kbuild-all, David Airlie, llvm, dri-devel, Thomas Zimmermann
On Thu, 30 Dec 2021, Claudio Suarez <cssk@net-c.es> wrote:
> Please, don't apply this patch. I have to review it,.
Please make sure you build with DRM_LEGACY=y to include drm_bufs.c in
the build.
If you Cc: intel-gfx@lists.freedesktop.org on the patch, you'll get
Intel CI results on the patch too.
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-12-31 9:10 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <Yc2Pd/DhQ7EpD+hD@gineta.localdomain>
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 ` Claudio Suarez
2021-12-31 9:10 ` Jani Nikula
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).