tree: git://anongit.freedesktop.org/drm/drm-tip drm-tip head: 36d2ac0e15af4dfb942279e8097ab831661859e6 commit: cf07f850c0483b3314eb69fd8c810e461cef4035 [3/8] Merge remote-tracking branch 'drm/drm-next' into drm-tip config: ia64-allmodconfig (https://download.01.org/0day-ci/archive/20220709/202207091259.WYfc1Mp6-lkp@xxxxxxxxx/config) compiler: ia64-linux-gcc (GCC) 11.3.0 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 git remote add drm-tip git://anongit.freedesktop.org/drm/drm-tip git fetch --no-tags drm-tip drm-tip git checkout cf07f850c0483b3314eb69fd8c810e461cef4035 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash drivers/gpu/drm/amd/amdgpu/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@xxxxxxxxx> All errors (new ones prefixed by >>): | ^~~~~~~~~~~~~~~~~~ include/linux/container_of.h:22:28: note: in expansion of macro 'offsetof' 22 | ((type *)(__mptr - offsetof(type, member))); }) | ^~~~~~~~ include/linux/list.h:520:9: note: in expansion of macro 'container_of' 520 | container_of(ptr, type, member) | ^~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:70:25: note: in expansion of macro 'list_entry' 70 | block = list_entry(block->link.next, struct drm_buddy_block, link); | ^~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c: In function 'amdgpu_vram_mgr_new': drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:488:13: error: 'cur_size' undeclared (first use in this function) 488 | if (cur_size != size) { | ^~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:488:13: note: each undeclared identifier is reported only once for each function it appears in drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:488:25: error: 'size' undeclared (first use in this function); did you mean 'ksize'? 488 | if (cur_size != size) { | ^~~~ | ksize drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:494:30: error: 'vres' undeclared (first use in this function); did you mean 'res'? 494 | trim_list = &vres->blocks; | ^~~~ | res In file included from include/linux/bits.h:22, from include/linux/ratelimit_types.h:5, from include/linux/ratelimit.h:5, from include/linux/dev_printk.h:16, from include/linux/device.h:15, from include/linux/dma-mapping.h:7, from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:25: include/linux/container_of.h:19:54: error: invalid use of undefined type 'struct drm_buddy_block' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~ include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert' 78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg) | ^~~~ include/linux/container_of.h:19:9: note: in expansion of macro 'static_assert' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~~~~~~~~~~~~ include/linux/container_of.h:19:23: note: in expansion of macro '__same_type' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~~~~~~~~~~ include/linux/list.h:520:9: note: in expansion of macro 'container_of' 520 | container_of(ptr, type, member) | ^~~~~~~~~~~~ include/linux/list.h:542:9: note: in expansion of macro 'list_entry' 542 | list_entry((ptr)->prev, type, member) | ^~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:502:33: note: in expansion of macro 'list_last_entry' 502 | block = list_last_entry(&vres->blocks, typeof(*block), link); | ^~~~~~~~~~~~~~~ include/linux/compiler_types.h:293:27: error: expression in static assertion is not an integer 293 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert' 78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg) | ^~~~ include/linux/container_of.h:19:9: note: in expansion of macro 'static_assert' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~~~~~~~~~~~~ include/linux/container_of.h:19:23: note: in expansion of macro '__same_type' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~~~~~~~~~~ include/linux/list.h:520:9: note: in expansion of macro 'container_of' 520 | container_of(ptr, type, member) | ^~~~~~~~~~~~ include/linux/list.h:542:9: note: in expansion of macro 'list_entry' 542 | list_entry((ptr)->prev, type, member) | ^~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:502:33: note: in expansion of macro 'list_last_entry' 502 | block = list_last_entry(&vres->blocks, typeof(*block), link); | ^~~~~~~~~~~~~~~ In file included from include/uapi/linux/posix_types.h:5, from include/uapi/linux/types.h:14, from include/linux/types.h:6, from include/linux/kasan-checks.h:5, from include/asm-generic/rwonce.h:26, from ./arch/ia64/include/generated/asm/rwonce.h:1, from include/linux/compiler.h:248, from include/linux/string.h:5, from include/linux/dma-mapping.h:6, from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:25: include/linux/stddef.h:16:33: error: invalid use of undefined type 'struct drm_buddy_block' 16 | #define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER) | ^~~~~~~~~~~~~~~~~~ include/linux/container_of.h:22:28: note: in expansion of macro 'offsetof' 22 | ((type *)(__mptr - offsetof(type, member))); }) | ^~~~~~~~ include/linux/list.h:520:9: note: in expansion of macro 'container_of' 520 | container_of(ptr, type, member) | ^~~~~~~~~~~~ include/linux/list.h:542:9: note: in expansion of macro 'list_entry' 542 | list_entry((ptr)->prev, type, member) | ^~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:502:33: note: in expansion of macro 'list_last_entry' 502 | block = list_last_entry(&vres->blocks, typeof(*block), link); | ^~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:503:46: error: invalid use of undefined type 'struct drm_buddy_block' 503 | list_move_tail(&block->link, &temp); | ^~ >> drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:512:28: error: passing argument 1 of 'mutex_lock' from incompatible pointer type [-Werror=incompatible-pointer-types] 512 | mutex_lock(&mgr->lock); | ^~~~~~~~~~ | | | spinlock_t * {aka struct spinlock *} In file included from include/linux/rhashtable-types.h:14, from include/linux/ipc.h:7, from include/uapi/linux/sem.h:5, from include/linux/sem.h:5, from include/linux/sched.h:15, from include/linux/ratelimit.h:6, from include/linux/dev_printk.h:16, from include/linux/device.h:15, from include/linux/dma-mapping.h:7, from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:25: include/linux/mutex.h:199:38: note: expected 'struct mutex *' but argument is of type 'spinlock_t *' {aka 'struct spinlock *'} 199 | extern void mutex_lock(struct mutex *lock); | ~~~~~~~~~~~~~~^~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:513:17: error: implicit declaration of function 'drm_buddy_block_trim' [-Werror=implicit-function-declaration] 513 | drm_buddy_block_trim(mm, | ^~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:516:30: error: passing argument 1 of 'mutex_unlock' from incompatible pointer type [-Werror=incompatible-pointer-types] 516 | mutex_unlock(&mgr->lock); | ^~~~~~~~~~ | | | spinlock_t * {aka struct spinlock *} In file included from include/linux/rhashtable-types.h:14, from include/linux/ipc.h:7, from include/uapi/linux/sem.h:5, from include/linux/sem.h:5, from include/linux/sched.h:15, from include/linux/ratelimit.h:6, from include/linux/dev_printk.h:16, from include/linux/device.h:15, from include/linux/dma-mapping.h:7, from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:25: include/linux/mutex.h:218:40: note: expected 'struct mutex *' but argument is of type 'spinlock_t *' {aka 'struct spinlock *'} 218 | extern void mutex_unlock(struct mutex *lock); | ~~~~~~~~~~~~~~^~~~ In file included from include/linux/rculist.h:10, from include/linux/pid.h:5, from include/linux/sched.h:14, from include/linux/ratelimit.h:6, from include/linux/dev_printk.h:16, from include/linux/device.h:15, from include/linux/dma-mapping.h:7, from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:25: drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:523:29: error: 'block' undeclared (first use in this function); did you mean 'flock'? 523 | list_for_each_entry(block, &vres->blocks, link) { | ^~~~~ include/linux/list.h:674:14: note: in definition of macro 'list_for_each_entry' 674 | for (pos = list_first_entry(head, typeof(*pos), member); \ | ^~~ In file included from include/linux/bits.h:22, from include/linux/ratelimit_types.h:5, from include/linux/ratelimit.h:5, from include/linux/dev_printk.h:16, from include/linux/device.h:15, from include/linux/dma-mapping.h:7, from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:25: include/linux/compiler_types.h:293:27: error: expression in static assertion is not an integer 293 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert' 78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg) | ^~~~ include/linux/container_of.h:19:9: note: in expansion of macro 'static_assert' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~~~~~~~~~~~~ include/linux/container_of.h:19:23: note: in expansion of macro '__same_type' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~~~~~~~~~~ include/linux/list.h:520:9: note: in expansion of macro 'container_of' 520 | container_of(ptr, type, member) | ^~~~~~~~~~~~ include/linux/list.h:531:9: note: in expansion of macro 'list_entry' 531 | list_entry((ptr)->next, type, member) | ^~~~~~~~~~ include/linux/list.h:674:20: note: in expansion of macro 'list_first_entry' 674 | for (pos = list_first_entry(head, typeof(*pos), member); \ | ^~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:523:9: note: in expansion of macro 'list_for_each_entry' 523 | list_for_each_entry(block, &vres->blocks, link) { | ^~~~~~~~~~~~~~~~~~~ include/linux/compiler_types.h:293:27: error: expression in static assertion is not an integer 293 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert' 78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg) | ^~~~ include/linux/container_of.h:19:9: note: in expansion of macro 'static_assert' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~~~~~~~~~~~~ include/linux/container_of.h:19:23: note: in expansion of macro '__same_type' 19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \ | ^~~~~~~~~~~ include/linux/list.h:520:9: note: in expansion of macro 'container_of' 520 | container_of(ptr, type, member) | ^~~~~~~~~~~~ include/linux/list.h:564:9: note: in expansion of macro 'list_entry' 564 | list_entry((pos)->member.next, typeof(*(pos)), member) vim +/mutex_lock +512 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 384 6a7f76e70fac0b Christian König 2016-08-24 385 /** 6a7f76e70fac0b Christian König 2016-08-24 386 * amdgpu_vram_mgr_new - allocate new ranges 6a7f76e70fac0b Christian König 2016-08-24 387 * 6a7f76e70fac0b Christian König 2016-08-24 388 * @man: TTM memory type manager 6a7f76e70fac0b Christian König 2016-08-24 389 * @tbo: TTM BO we need this range for 6a7f76e70fac0b Christian König 2016-08-24 390 * @place: placement flags and restrictions 6333a495f53347 Yifan Zhang 2021-08-26 391 * @res: the resulting mem object 6a7f76e70fac0b Christian König 2016-08-24 392 * 6a7f76e70fac0b Christian König 2016-08-24 393 * Allocate VRAM for the given BO. 6a7f76e70fac0b Christian König 2016-08-24 394 */ 9de59bc201496f Dave Airlie 2020-08-04 395 static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, 6a7f76e70fac0b Christian König 2016-08-24 396 struct ttm_buffer_object *tbo, 6a7f76e70fac0b Christian König 2016-08-24 397 const struct ttm_place *place, cb1c81467af355 Christian König 2021-04-30 398 struct ttm_resource **res) 6a7f76e70fac0b Christian König 2016-08-24 399 { 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 400 unsigned long lpfn, num_nodes, pages_per_node, pages_left, pages; 0af135b892bf06 Dave Airlie 2020-08-04 401 struct amdgpu_vram_mgr *mgr = to_vram_mgr(man); 373627930f0208 Dave Airlie 2020-08-07 402 struct amdgpu_device *adev = to_amdgpu_device(mgr); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 403 uint64_t vis_usage = 0, mem_bytes, max_bytes; 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 404 struct ttm_range_mgr_node *node; 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 405 struct drm_mm *mm = &mgr->mm; 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 406 enum drm_mm_insert_mode mode; 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 407 unsigned i; 6a7f76e70fac0b Christian König 2016-08-24 408 int r; 6a7f76e70fac0b Christian König 2016-08-24 409 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 410 lpfn = place->lpfn; 6a7f76e70fac0b Christian König 2016-08-24 411 if (!lpfn) 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 412 lpfn = man->size >> PAGE_SHIFT; 6a7f76e70fac0b Christian König 2016-08-24 413 9d1b3c78052e87 Christian König 2019-08-30 414 max_bytes = adev->gmc.mc_vram_size; 9d1b3c78052e87 Christian König 2019-08-30 415 if (tbo->type != ttm_bo_type_kernel) 9d1b3c78052e87 Christian König 2019-08-30 416 max_bytes -= AMDGPU_VM_RESERVED_VRAM; 9d1b3c78052e87 Christian König 2019-08-30 417 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 418 mem_bytes = tbo->base.size; b4559a16467a13 Tom St Denis 2019-06-04 419 if (place->flags & TTM_PL_FLAG_CONTIGUOUS) { 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 420 pages_per_node = ~0ul; 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 421 num_nodes = 1; 6a7f76e70fac0b Christian König 2016-08-24 422 } else { b4559a16467a13 Tom St Denis 2019-06-04 423 #ifdef CONFIG_TRANSPARENT_HUGEPAGE 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 424 pages_per_node = HPAGE_PMD_NR; b4559a16467a13 Tom St Denis 2019-06-04 425 #else b4559a16467a13 Tom St Denis 2019-06-04 426 /* default to 2MB */ 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 427 pages_per_node = 2UL << (20UL - PAGE_SHIFT); b4559a16467a13 Tom St Denis 2019-06-04 428 #endif 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 429 pages_per_node = max_t(uint32_t, pages_per_node, c777dc9e793342 Christian König 2021-02-05 430 tbo->page_alignment); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 431 num_nodes = DIV_ROUND_UP_ULL(PFN_UP(mem_bytes), pages_per_node); 6a7f76e70fac0b Christian König 2016-08-24 432 } 6a7f76e70fac0b Christian König 2016-08-24 433 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 434 node = kvmalloc(struct_size(node, mm_nodes, num_nodes), 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 435 GFP_KERNEL | __GFP_ZERO); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 436 if (!node) 7db47b838896ec Christian König 2021-07-12 437 return -ENOMEM; 6a7f76e70fac0b Christian König 2016-08-24 438 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 439 ttm_resource_init(tbo, place, &node->base); 267501ec2b9cfa Christian König 2021-04-26 440 7db47b838896ec Christian König 2021-07-12 441 /* bail out quickly if there's likely not enough VRAM for this BO */ 7db47b838896ec Christian König 2021-07-12 442 if (ttm_resource_manager_usage(man) > max_bytes) { 7db47b838896ec Christian König 2021-07-12 443 r = -ENOSPC; 7db47b838896ec Christian König 2021-07-12 444 goto error_fini; 7db47b838896ec Christian König 2021-07-12 445 } 7db47b838896ec Christian König 2021-07-12 446 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 447 mode = DRM_MM_INSERT_BEST; 4e64e5539d152e Chris Wilson 2017-02-02 448 if (place->flags & TTM_PL_FLAG_TOPDOWN) 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 449 mode = DRM_MM_INSERT_HIGH; 6a7f76e70fac0b Christian König 2016-08-24 450 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 451 pages_left = node->base.num_pages; 6a7f76e70fac0b Christian König 2016-08-24 452 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 453 /* Limit maximum size to 2GB due to SG table limitations */ 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 454 pages = min(pages_left, 2UL << (30 - PAGE_SHIFT)); 433ca054949a6c Christian König 2018-09-07 455 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 456 i = 0; 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 457 spin_lock(&mgr->lock); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 458 while (pages_left) { 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 459 uint32_t alignment = tbo->page_alignment; 6a7f76e70fac0b Christian König 2016-08-24 460 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 461 if (pages >= pages_per_node) 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 462 alignment = pages_per_node; 6a7f76e70fac0b Christian König 2016-08-24 463 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 464 r = drm_mm_insert_node_in_range(mm, &node->mm_nodes[i], pages, 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 465 alignment, 0, place->fpfn, 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 466 lpfn, mode); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 467 if (unlikely(r)) { 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 468 if (pages > pages_per_node) { 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 469 if (is_power_of_2(pages)) 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 470 pages = pages / 2; dd03daec0ff170 Christian König 2021-04-26 471 else 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 472 pages = rounddown_pow_of_two(pages); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 473 continue; dd03daec0ff170 Christian König 2021-04-26 474 } 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 475 goto error_free; 6a7f76e70fac0b Christian König 2016-08-24 476 } 6a7f76e70fac0b Christian König 2016-08-24 477 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 478 vis_usage += amdgpu_vram_mgr_vis_size(adev, &node->mm_nodes[i]); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 479 amdgpu_vram_mgr_virt_start(&node->base, &node->mm_nodes[i]); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 480 pages_left -= pages; 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 481 ++i; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 482 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 483 if (pages > pages_left) 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 484 pages = pages_left; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 485 } 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 486 spin_unlock(&mgr->lock); c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 487 c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 488 if (cur_size != size) { c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 489 struct drm_buddy_block *block; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 490 struct list_head *trim_list; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 491 u64 original_size; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 492 LIST_HEAD(temp); c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 493 c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 494 trim_list = &vres->blocks; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 495 original_size = vres->base.num_pages << PAGE_SHIFT; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 496 c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 497 /* c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 498 * If size value is rounded up to min_block_size, trim the last c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 499 * block to the required size c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 500 */ c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 501 if (!list_is_singular(&vres->blocks)) { c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 @502 block = list_last_entry(&vres->blocks, typeof(*block), link); c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 503 list_move_tail(&block->link, &temp); c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 504 trim_list = &temp; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 505 /* c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 506 * Compute the original_size value by subtracting the c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 507 * last block size with (aligned size - original size) c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 508 */ c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 509 original_size = amdgpu_vram_mgr_block_size(block) - (size - cur_size); dd03daec0ff170 Christian König 2021-04-26 510 } 6a7f76e70fac0b Christian König 2016-08-24 511 c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 @512 mutex_lock(&mgr->lock); c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 513 drm_buddy_block_trim(mm, c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 514 original_size, c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 515 trim_list); c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 516 mutex_unlock(&mgr->lock); dd03daec0ff170 Christian König 2021-04-26 517 c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 518 if (!list_empty(&temp)) c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 519 list_splice_tail(trim_list, &vres->blocks); 6a7f76e70fac0b Christian König 2016-08-24 520 } 6a7f76e70fac0b Christian König 2016-08-24 521 5e3f1e7729ec7a Christian König 2022-05-10 522 vres->base.start = 0; 5e3f1e7729ec7a Christian König 2022-05-10 523 list_for_each_entry(block, &vres->blocks, link) { 5e3f1e7729ec7a Christian König 2022-05-10 524 unsigned long start; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 525 5e3f1e7729ec7a Christian König 2022-05-10 526 start = amdgpu_vram_mgr_block_start(block) + 5e3f1e7729ec7a Christian König 2022-05-10 527 amdgpu_vram_mgr_block_size(block); 5e3f1e7729ec7a Christian König 2022-05-10 528 start >>= PAGE_SHIFT; c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 529 5e3f1e7729ec7a Christian König 2022-05-10 530 if (start > vres->base.num_pages) 5e3f1e7729ec7a Christian König 2022-05-10 531 start -= vres->base.num_pages; 5e3f1e7729ec7a Christian König 2022-05-10 532 else 5e3f1e7729ec7a Christian König 2022-05-10 533 start = 0; 5e3f1e7729ec7a Christian König 2022-05-10 534 vres->base.start = max(vres->base.start, start); 5e3f1e7729ec7a Christian König 2022-05-10 535 5e3f1e7729ec7a Christian König 2022-05-10 536 vis_usage += amdgpu_vram_mgr_vis_size(adev, block); 5e3f1e7729ec7a Christian König 2022-05-10 537 } c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 538 c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 539 if (amdgpu_is_vram_mgr_blocks_contiguous(&vres->blocks)) c9cad937c0c586 Arunpravin Paneer Selvam 2022-04-08 540 vres->base.placement |= TTM_PL_FLAG_CONTIGUOUS; 3c848bb38aca1f Christian König 2017-08-07 541 8dbe43e99f0f62 Oak Zeng 2021-06-28 542 if (adev->gmc.xgmi.connected_to_cpu) 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 543 node->base.bus.caching = ttm_cached; 8dbe43e99f0f62 Oak Zeng 2021-06-28 544 else 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 545 node->base.bus.caching = ttm_write_combined; 8dbe43e99f0f62 Oak Zeng 2021-06-28 546 abf91e0d33166b Christian König 2021-04-27 547 atomic64_add(vis_usage, &mgr->vis_usage); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 548 *res = &node->base; 6a7f76e70fac0b Christian König 2016-08-24 549 return 0; 6a7f76e70fac0b Christian König 2016-08-24 550 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 551 error_free: 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 552 while (i--) 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 553 drm_mm_remove_node(&node->mm_nodes[i]); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 554 spin_unlock(&mgr->lock); 7db47b838896ec Christian König 2021-07-12 555 error_fini: 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 556 ttm_resource_fini(man, &node->base); 925b6e59138cef Arunpravin Paneer Selvam 2022-07-08 557 kvfree(node); 6a7f76e70fac0b Christian König 2016-08-24 558 58e4d686d456c3 Christian König 2020-06-16 559 return r; 6a7f76e70fac0b Christian König 2016-08-24 560 } 6a7f76e70fac0b Christian König 2016-08-24 561 :::::: The code at line 512 was first introduced by commit :::::: c9cad937c0c58618fe5b0310fd539a854dc1ae95 drm/amdgpu: add drm buddy support to amdgpu :::::: TO: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam@xxxxxxx> :::::: CC: Christian König <christian.koenig@xxxxxxx> -- 0-DAY CI Kernel Test Service https://01.org/lkp