* [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu
@ 2022-03-01 20:38 Arunpravin
2022-03-01 23:05 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for " Patchwork
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Arunpravin @ 2022-03-01 20:38 UTC (permalink / raw)
To: amd-gfx, dri-devel, intel-gfx
Cc: Arunpravin, matthew.auld, tzimmermann, alexander.deucher,
christian.koenig
- Remove drm_mm references and replace with drm buddy functionalities
- Add res cursor support for drm buddy
v2(Matthew Auld):
- replace spinlock with mutex as we call kmem_cache_zalloc
(..., GFP_KERNEL) in drm_buddy_alloc() function
- lock drm_buddy_block_trim() function as it calls
mark_free/mark_split are all globally visible
v3(Matthew Auld):
- remove trim method error handling as we address the failure case
at drm_buddy_block_trim() function
v4:
- fix warnings reported by kernel test robot <lkp@intel.com>
v5:
- fix merge conflict issue
v6:
- fix warnings reported by kernel test robot <lkp@intel.com>
v7:
- remove DRM_BUDDY_RANGE_ALLOCATION flag usage
v8:
- keep DRM_BUDDY_RANGE_ALLOCATION flag usage
- resolve conflicts created by drm/amdgpu: remove VRAM accounting v2
v9(Christian):
- rename label name as fallback
- move struct amdgpu_vram_mgr to amdgpu_vram_mgr.h
- remove unnecessary flags from struct amdgpu_vram_reservation
- rewrite block NULL check condition
- change else style as per coding standard
- rewrite the node max size
- add a helper function to fetch the first entry from the list
Signed-off-by: Arunpravin <Arunpravin.PaneerSelvam@amd.com>
---
drivers/gpu/drm/Kconfig | 1 +
.../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h | 97 +++++--
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 10 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 249 ++++++++++--------
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h | 68 +++++
5 files changed, 289 insertions(+), 136 deletions(-)
create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index f1422bee3dcc..5133c3f028ab 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -280,6 +280,7 @@ config DRM_AMDGPU
select HWMON
select BACKLIGHT_CLASS_DEVICE
select INTERVAL_TREE
+ select DRM_BUDDY
help
Choose this option if you have a recent AMD Radeon graphics card.
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
index acfa207cf970..864c609ba00b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
@@ -30,12 +30,15 @@
#include <drm/ttm/ttm_resource.h>
#include <drm/ttm/ttm_range_manager.h>
+#include "amdgpu_vram_mgr.h"
+
/* state back for walking over vram_mgr and gtt_mgr allocations */
struct amdgpu_res_cursor {
uint64_t start;
uint64_t size;
uint64_t remaining;
- struct drm_mm_node *node;
+ void *node;
+ uint32_t mem_type;
};
/**
@@ -52,27 +55,63 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
uint64_t start, uint64_t size,
struct amdgpu_res_cursor *cur)
{
+ struct drm_buddy_block *block;
+ struct list_head *head, *next;
struct drm_mm_node *node;
- if (!res || res->mem_type == TTM_PL_SYSTEM) {
- cur->start = start;
- cur->size = size;
- cur->remaining = size;
- cur->node = NULL;
- WARN_ON(res && start + size > res->num_pages << PAGE_SHIFT);
- return;
- }
+ if (!res)
+ goto fallback;
BUG_ON(start + size > res->num_pages << PAGE_SHIFT);
- node = to_ttm_range_mgr_node(res)->mm_nodes;
- while (start >= node->size << PAGE_SHIFT)
- start -= node++->size << PAGE_SHIFT;
+ cur->mem_type = res->mem_type;
+
+ switch (cur->mem_type) {
+ case TTM_PL_VRAM:
+ head = &to_amdgpu_vram_mgr_node(res)->blocks;
+
+ block = list_first_entry_or_null(head,
+ struct drm_buddy_block,
+ link);
+ if (!block)
+ goto fallback;
+
+ while (start >= amdgpu_node_size(block)) {
+ start -= amdgpu_node_size(block);
+
+ next = block->link.next;
+ if (next != head)
+ block = list_entry(next, struct drm_buddy_block, link);
+ }
+
+ cur->start = amdgpu_node_start(block) + start;
+ cur->size = min(amdgpu_node_size(block) - start, size);
+ cur->remaining = size;
+ cur->node = block;
+ break;
+ case TTM_PL_TT:
+ node = to_ttm_range_mgr_node(res)->mm_nodes;
+ while (start >= node->size << PAGE_SHIFT)
+ start -= node++->size << PAGE_SHIFT;
+
+ cur->start = (node->start << PAGE_SHIFT) + start;
+ cur->size = min((node->size << PAGE_SHIFT) - start, size);
+ cur->remaining = size;
+ cur->node = node;
+ break;
+ default:
+ goto fallback;
+ }
- cur->start = (node->start << PAGE_SHIFT) + start;
- cur->size = min((node->size << PAGE_SHIFT) - start, size);
+ return;
+
+fallback:
+ cur->start = start;
+ cur->size = size;
cur->remaining = size;
- cur->node = node;
+ cur->node = NULL;
+ WARN_ON(res && start + size > res->num_pages << PAGE_SHIFT);
+ return;
}
/**
@@ -85,7 +124,9 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
*/
static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
{
- struct drm_mm_node *node = cur->node;
+ struct drm_buddy_block *block;
+ struct drm_mm_node *node;
+ struct list_head *next;
BUG_ON(size > cur->remaining);
@@ -99,9 +140,27 @@ static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
return;
}
- cur->node = ++node;
- cur->start = node->start << PAGE_SHIFT;
- cur->size = min(node->size << PAGE_SHIFT, cur->remaining);
+ switch (cur->mem_type) {
+ case TTM_PL_VRAM:
+ block = cur->node;
+
+ next = block->link.next;
+ block = list_entry(next, struct drm_buddy_block, link);
+
+ cur->node = block;
+ cur->start = amdgpu_node_start(block);
+ cur->size = min(amdgpu_node_size(block), cur->remaining);
+ break;
+ case TTM_PL_TT:
+ node = cur->node;
+
+ cur->node = ++node;
+ cur->start = node->start << PAGE_SHIFT;
+ cur->size = min(node->size << PAGE_SHIFT, cur->remaining);
+ break;
+ default:
+ return;
+ }
}
#endif
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
index 9120ae80ef52..6a70818039dd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -26,6 +26,7 @@
#include <linux/dma-direction.h>
#include <drm/gpu_scheduler.h>
+#include "amdgpu_vram_mgr.h"
#include "amdgpu.h"
#define AMDGPU_PL_GDS (TTM_PL_PRIV + 0)
@@ -38,15 +39,6 @@
#define AMDGPU_POISON 0xd0bed0be
-struct amdgpu_vram_mgr {
- struct ttm_resource_manager manager;
- struct drm_mm mm;
- spinlock_t lock;
- struct list_head reservations_pending;
- struct list_head reserved_pages;
- atomic64_t vis_usage;
-};
-
struct amdgpu_gtt_mgr {
struct ttm_resource_manager manager;
struct drm_mm mm;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
index 0a7611648573..cdf66802e6bc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -32,8 +32,10 @@
#include "atom.h"
struct amdgpu_vram_reservation {
+ u64 start;
+ u64 size;
+ struct list_head block;
struct list_head node;
- struct drm_mm_node mm_node;
};
static inline struct amdgpu_vram_mgr *
@@ -194,10 +196,10 @@ const struct attribute_group amdgpu_vram_mgr_attr_group = {
* Calculate how many bytes of the MM node are inside visible VRAM
*/
static u64 amdgpu_vram_mgr_vis_size(struct amdgpu_device *adev,
- struct drm_mm_node *node)
+ struct drm_buddy_block *block)
{
- uint64_t start = node->start << PAGE_SHIFT;
- uint64_t end = (node->size + node->start) << PAGE_SHIFT;
+ u64 start = amdgpu_node_start(block);
+ u64 end = start + amdgpu_node_size(block);
if (start >= adev->gmc.visible_vram_size)
return 0;
@@ -218,9 +220,9 @@ u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo)
{
struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
struct ttm_resource *res = bo->tbo.resource;
- unsigned pages = res->num_pages;
- struct drm_mm_node *mm;
- u64 usage;
+ struct amdgpu_vram_mgr_node *node = to_amdgpu_vram_mgr_node(res);
+ struct drm_buddy_block *block;
+ u64 usage = 0;
if (amdgpu_gmc_vram_full_visible(&adev->gmc))
return amdgpu_bo_size(bo);
@@ -228,9 +230,8 @@ u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo)
if (res->start >= adev->gmc.visible_vram_size >> PAGE_SHIFT)
return 0;
- mm = &container_of(res, struct ttm_range_mgr_node, base)->mm_nodes[0];
- for (usage = 0; pages; pages -= mm->size, mm++)
- usage += amdgpu_vram_mgr_vis_size(adev, mm);
+ list_for_each_entry(block, &node->blocks, link)
+ usage += amdgpu_vram_mgr_vis_size(adev, block);
return usage;
}
@@ -240,21 +241,28 @@ static void amdgpu_vram_mgr_do_reserve(struct ttm_resource_manager *man)
{
struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
struct amdgpu_device *adev = to_amdgpu_device(mgr);
- struct drm_mm *mm = &mgr->mm;
+ struct drm_buddy *mm = &mgr->mm;
struct amdgpu_vram_reservation *rsv, *temp;
+ struct drm_buddy_block *block;
uint64_t vis_usage;
list_for_each_entry_safe(rsv, temp, &mgr->reservations_pending, node) {
- if (drm_mm_reserve_node(mm, &rsv->mm_node))
+ if (drm_buddy_alloc_blocks(mm, rsv->start, rsv->start + rsv->size,
+ rsv->size, mm->chunk_size, &rsv->block,
+ DRM_BUDDY_RANGE_ALLOCATION))
+ continue;
+
+ block = amdgpu_get_node(&rsv->block);
+ if (!block)
continue;
dev_dbg(adev->dev, "Reservation 0x%llx - %lld, Succeeded\n",
- rsv->mm_node.start, rsv->mm_node.size);
+ rsv->start, rsv->size);
- vis_usage = amdgpu_vram_mgr_vis_size(adev, &rsv->mm_node);
+ vis_usage = amdgpu_vram_mgr_vis_size(adev, block);
atomic64_add(vis_usage, &mgr->vis_usage);
spin_lock(&man->bdev->lru_lock);
- man->usage += rsv->mm_node.size << PAGE_SHIFT;
+ man->usage += rsv->size;
spin_unlock(&man->bdev->lru_lock);
list_move(&rsv->node, &mgr->reserved_pages);
}
@@ -279,13 +287,15 @@ int amdgpu_vram_mgr_reserve_range(struct amdgpu_vram_mgr *mgr,
return -ENOMEM;
INIT_LIST_HEAD(&rsv->node);
- rsv->mm_node.start = start >> PAGE_SHIFT;
- rsv->mm_node.size = size >> PAGE_SHIFT;
+ INIT_LIST_HEAD(&rsv->block);
+
+ rsv->start = start;
+ rsv->size = size;
- spin_lock(&mgr->lock);
+ mutex_lock(&mgr->lock);
list_add_tail(&rsv->node, &mgr->reservations_pending);
amdgpu_vram_mgr_do_reserve(&mgr->manager);
- spin_unlock(&mgr->lock);
+ mutex_unlock(&mgr->lock);
return 0;
}
@@ -307,19 +317,19 @@ int amdgpu_vram_mgr_query_page_status(struct amdgpu_vram_mgr *mgr,
struct amdgpu_vram_reservation *rsv;
int ret;
- spin_lock(&mgr->lock);
+ mutex_lock(&mgr->lock);
list_for_each_entry(rsv, &mgr->reservations_pending, node) {
- if ((rsv->mm_node.start <= start) &&
- (start < (rsv->mm_node.start + rsv->mm_node.size))) {
+ if (rsv->start <= start &&
+ (start < (rsv->start + rsv->size))) {
ret = -EBUSY;
goto out;
}
}
list_for_each_entry(rsv, &mgr->reserved_pages, node) {
- if ((rsv->mm_node.start <= start) &&
- (start < (rsv->mm_node.start + rsv->mm_node.size))) {
+ if (rsv->start <= start &&
+ (start < (rsv->start + rsv->size))) {
ret = 0;
goto out;
}
@@ -327,32 +337,10 @@ int amdgpu_vram_mgr_query_page_status(struct amdgpu_vram_mgr *mgr,
ret = -ENOENT;
out:
- spin_unlock(&mgr->lock);
+ mutex_unlock(&mgr->lock);
return ret;
}
-/**
- * amdgpu_vram_mgr_virt_start - update virtual start address
- *
- * @mem: ttm_resource to update
- * @node: just allocated node
- *
- * Calculate a virtual BO start address to easily check if everything is CPU
- * accessible.
- */
-static void amdgpu_vram_mgr_virt_start(struct ttm_resource *mem,
- struct drm_mm_node *node)
-{
- unsigned long start;
-
- start = node->start + node->size;
- if (start > mem->num_pages)
- start -= mem->num_pages;
- else
- start = 0;
- mem->start = max(mem->start, start);
-}
-
/**
* amdgpu_vram_mgr_new - allocate new ranges
*
@@ -368,13 +356,13 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
const struct ttm_place *place,
struct ttm_resource **res)
{
- unsigned long lpfn, num_nodes, pages_per_node, pages_left, pages;
+ unsigned long lpfn, pages_per_node, pages_left, pages;
+ u64 vis_usage = 0, mem_bytes, max_bytes, min_page_size;
struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
struct amdgpu_device *adev = to_amdgpu_device(mgr);
- uint64_t vis_usage = 0, mem_bytes, max_bytes;
- struct ttm_range_mgr_node *node;
- struct drm_mm *mm = &mgr->mm;
- enum drm_mm_insert_mode mode;
+ struct amdgpu_vram_mgr_node *node;
+ struct drm_buddy *mm = &mgr->mm;
+ struct drm_buddy_block *block;
unsigned i;
int r;
@@ -389,7 +377,6 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
mem_bytes = tbo->base.size;
if (place->flags & TTM_PL_FLAG_CONTIGUOUS) {
pages_per_node = ~0ul;
- num_nodes = 1;
} else {
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
pages_per_node = HPAGE_PMD_NR;
@@ -399,11 +386,9 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
#endif
pages_per_node = max_t(uint32_t, pages_per_node,
tbo->page_alignment);
- num_nodes = DIV_ROUND_UP_ULL(PFN_UP(mem_bytes), pages_per_node);
}
- node = kvmalloc(struct_size(node, mm_nodes, num_nodes),
- GFP_KERNEL | __GFP_ZERO);
+ node = kzalloc(sizeof(*node), GFP_KERNEL);
if (!node)
return -ENOMEM;
@@ -415,48 +400,83 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
goto error_fini;
}
- mode = DRM_MM_INSERT_BEST;
+ INIT_LIST_HEAD(&node->blocks);
+
if (place->flags & TTM_PL_FLAG_TOPDOWN)
- mode = DRM_MM_INSERT_HIGH;
+ node->flags |= DRM_BUDDY_TOPDOWN_ALLOCATION;
- pages_left = node->base.num_pages;
+ if (place->fpfn || lpfn != man->size >> PAGE_SHIFT)
+ /* Allocate blocks in desired range */
+ node->flags |= DRM_BUDDY_RANGE_ALLOCATION;
- /* Limit maximum size to 2GB due to SG table limitations */
- pages = min(pages_left, 2UL << (30 - PAGE_SHIFT));
+ BUG_ON(!node->base.num_pages);
+ pages_left = node->base.num_pages;
i = 0;
- spin_lock(&mgr->lock);
while (pages_left) {
- uint32_t alignment = tbo->page_alignment;
+ if (tbo->page_alignment)
+ min_page_size = tbo->page_alignment << PAGE_SHIFT;
+ else
+ min_page_size = mgr->default_page_size;
+
+ /* Limit maximum size to 2GB due to SG table limitations */
+ pages = min(pages_left, 2UL << (30 - PAGE_SHIFT));
if (pages >= pages_per_node)
- alignment = pages_per_node;
-
- r = drm_mm_insert_node_in_range(mm, &node->mm_nodes[i], pages,
- alignment, 0, place->fpfn,
- lpfn, mode);
- if (unlikely(r)) {
- if (pages > pages_per_node) {
- if (is_power_of_2(pages))
- pages = pages / 2;
- else
- pages = rounddown_pow_of_two(pages);
- continue;
- }
- goto error_free;
+ min_page_size = pages_per_node << PAGE_SHIFT;
+
+ if (place->flags & TTM_PL_FLAG_CONTIGUOUS) {
+ pages = roundup_pow_of_two(pages);
+ min_page_size = pages << PAGE_SHIFT;
+
+ if (pages > lpfn)
+ lpfn = pages;
}
- vis_usage += amdgpu_vram_mgr_vis_size(adev, &node->mm_nodes[i]);
- amdgpu_vram_mgr_virt_start(&node->base, &node->mm_nodes[i]);
- pages_left -= pages;
+ BUG_ON(min_page_size < mm->chunk_size);
+
+ mutex_lock(&mgr->lock);
+ r = drm_buddy_alloc_blocks(mm, (u64)place->fpfn << PAGE_SHIFT,
+ (u64)lpfn << PAGE_SHIFT,
+ (u64)pages << PAGE_SHIFT,
+ min_page_size,
+ &node->blocks,
+ node->flags);
+ mutex_unlock(&mgr->lock);
+ if (unlikely(r))
+ goto error_free_blocks;
+
++i;
if (pages > pages_left)
- pages = pages_left;
+ pages_left = 0;
+ else
+ pages_left -= pages;
}
- spin_unlock(&mgr->lock);
- if (i == 1)
+ /* Free unused pages for contiguous allocation */
+ if (place->flags & TTM_PL_FLAG_CONTIGUOUS) {
+ u64 actual_size = (u64)node->base.num_pages << PAGE_SHIFT;
+
+ mutex_lock(&mgr->lock);
+ drm_buddy_block_trim(mm,
+ actual_size,
+ &node->blocks);
+ mutex_unlock(&mgr->lock);
+ }
+
+ list_for_each_entry(block, &node->blocks, link)
+ vis_usage += amdgpu_vram_mgr_vis_size(adev, block);
+
+ block = amdgpu_get_node(&node->blocks);
+ if (!block) {
+ r = -EINVAL;
+ goto error_fini;
+ }
+
+ node->base.start = amdgpu_node_start(block) >> PAGE_SHIFT;
+
+ if (i == 1 && place->flags & TTM_PL_FLAG_CONTIGUOUS)
node->base.placement |= TTM_PL_FLAG_CONTIGUOUS;
if (adev->gmc.xgmi.connected_to_cpu)
@@ -468,13 +488,13 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
*res = &node->base;
return 0;
-error_free:
- while (i--)
- drm_mm_remove_node(&node->mm_nodes[i]);
- spin_unlock(&mgr->lock);
+error_free_blocks:
+ mutex_lock(&mgr->lock);
+ drm_buddy_free_list(mm, &node->blocks);
+ mutex_unlock(&mgr->lock);
error_fini:
ttm_resource_fini(man, &node->base);
- kvfree(node);
+ kfree(node);
return r;
}
@@ -490,27 +510,26 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
static void amdgpu_vram_mgr_del(struct ttm_resource_manager *man,
struct ttm_resource *res)
{
- struct ttm_range_mgr_node *node = to_ttm_range_mgr_node(res);
+ struct amdgpu_vram_mgr_node *node = to_amdgpu_vram_mgr_node(res);
struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
struct amdgpu_device *adev = to_amdgpu_device(mgr);
+ struct drm_buddy *mm = &mgr->mm;
+ struct drm_buddy_block *block;
uint64_t vis_usage = 0;
- unsigned i, pages;
- spin_lock(&mgr->lock);
- for (i = 0, pages = res->num_pages; pages;
- pages -= node->mm_nodes[i].size, ++i) {
- struct drm_mm_node *mm = &node->mm_nodes[i];
+ mutex_lock(&mgr->lock);
+ list_for_each_entry(block, &node->blocks, link)
+ vis_usage += amdgpu_vram_mgr_vis_size(adev, block);
- drm_mm_remove_node(mm);
- vis_usage += amdgpu_vram_mgr_vis_size(adev, mm);
- }
amdgpu_vram_mgr_do_reserve(man);
- spin_unlock(&mgr->lock);
+
+ drm_buddy_free_list(mm, &node->blocks);
+ mutex_unlock(&mgr->lock);
atomic64_sub(vis_usage, &mgr->vis_usage);
ttm_resource_fini(man, res);
- kvfree(node);
+ kfree(node);
}
/**
@@ -648,13 +667,22 @@ static void amdgpu_vram_mgr_debug(struct ttm_resource_manager *man,
struct drm_printer *printer)
{
struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
+ struct drm_buddy *mm = &mgr->mm;
+ struct drm_buddy_block *block;
drm_printf(printer, " vis usage:%llu\n",
amdgpu_vram_mgr_vis_usage(mgr));
- spin_lock(&mgr->lock);
- drm_mm_print(&mgr->mm, printer);
- spin_unlock(&mgr->lock);
+ mutex_lock(&mgr->lock);
+ drm_printf(printer, "default_page_size: %lluKiB\n",
+ mgr->default_page_size >> 10);
+
+ drm_buddy_print(mm, printer);
+
+ drm_printf(printer, "reserved:\n");
+ list_for_each_entry(block, &mgr->reserved_pages, link)
+ drm_buddy_block_print(mm, block, printer);
+ mutex_unlock(&mgr->lock);
}
static const struct ttm_resource_manager_func amdgpu_vram_mgr_func = {
@@ -674,16 +702,21 @@ int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
{
struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
struct ttm_resource_manager *man = &mgr->manager;
+ int err;
ttm_resource_manager_init(man, &adev->mman.bdev,
adev->gmc.real_vram_size);
man->func = &amdgpu_vram_mgr_func;
- drm_mm_init(&mgr->mm, 0, man->size >> PAGE_SHIFT);
- spin_lock_init(&mgr->lock);
+ err = drm_buddy_init(&mgr->mm, man->size, PAGE_SIZE);
+ if (err)
+ return err;
+
+ mutex_init(&mgr->lock);
INIT_LIST_HEAD(&mgr->reservations_pending);
INIT_LIST_HEAD(&mgr->reserved_pages);
+ mgr->default_page_size = PAGE_SIZE;
ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, &mgr->manager);
ttm_resource_manager_set_used(man, true);
@@ -711,16 +744,16 @@ void amdgpu_vram_mgr_fini(struct amdgpu_device *adev)
if (ret)
return;
- spin_lock(&mgr->lock);
+ mutex_lock(&mgr->lock);
list_for_each_entry_safe(rsv, temp, &mgr->reservations_pending, node)
kfree(rsv);
list_for_each_entry_safe(rsv, temp, &mgr->reserved_pages, node) {
- drm_mm_remove_node(&rsv->mm_node);
+ drm_buddy_free_list(&mgr->mm, &rsv->block);
kfree(rsv);
}
- drm_mm_takedown(&mgr->mm);
- spin_unlock(&mgr->lock);
+ drm_buddy_fini(&mgr->mm);
+ mutex_unlock(&mgr->lock);
ttm_resource_manager_cleanup(man);
ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, NULL);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h
new file mode 100644
index 000000000000..e7d6bbf40c33
--- /dev/null
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: MIT
+ * Copyright 2021 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __AMDGPU_VRAM_MGR_H__
+#define __AMDGPU_VRAM_MGR_H__
+
+#include <drm/drm_buddy.h>
+
+struct amdgpu_vram_mgr {
+ struct ttm_resource_manager manager;
+ struct drm_buddy mm;
+ /* protects access to buffer objects */
+ struct mutex lock;
+ struct list_head reservations_pending;
+ struct list_head reserved_pages;
+ atomic64_t vis_usage;
+ u64 default_page_size;
+};
+
+struct amdgpu_vram_mgr_node {
+ struct ttm_resource base;
+ struct list_head blocks;
+ unsigned long flags;
+};
+
+static inline u64 amdgpu_node_start(struct drm_buddy_block *block)
+{
+ return drm_buddy_block_offset(block);
+}
+
+static inline u64 amdgpu_node_size(struct drm_buddy_block *block)
+{
+ return PAGE_SIZE << drm_buddy_block_order(block);
+}
+
+static inline struct drm_buddy_block *
+amdgpu_get_node(struct list_head *list)
+{
+ return list_first_entry_or_null(list, struct drm_buddy_block, link);
+}
+
+static inline struct amdgpu_vram_mgr_node *
+to_amdgpu_vram_mgr_node(struct ttm_resource *res)
+{
+ return container_of(res, struct amdgpu_vram_mgr_node, base);
+}
+
+#endif
--
2.25.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/amdgpu: add drm buddy support to amdgpu 2022-03-01 20:38 [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu Arunpravin @ 2022-03-01 23:05 ` Patchwork 2022-03-01 23:38 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2022-03-01 23:05 UTC (permalink / raw) To: Arunpravin; +Cc: intel-gfx == Series Details == Series: drm/amdgpu: add drm buddy support to amdgpu URL : https://patchwork.freedesktop.org/series/100908/ State : warning == Summary == $ dim checkpatch origin/drm-tip 8e830a55eacb drm/amdgpu: add drm buddy support to amdgpu -:76: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u32' over 'uint32_t' #76: FILE: drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h:41: + uint32_t mem_type; -:454: WARNING:AVOID_BUG: Avoid crashing the kernel - try using WARN_ON & recovery code rather than BUG() or BUG_ON() #454: FILE: drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:412: + BUG_ON(!node->base.num_pages); -:497: WARNING:AVOID_BUG: Avoid crashing the kernel - try using WARN_ON & recovery code rather than BUG() or BUG_ON() #497: FILE: drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:436: + BUG_ON(min_page_size < mm->chunk_size); -:676: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating? #676: new file mode 100644 total: 0 errors, 3 warnings, 1 checks, 656 lines checked ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for drm/amdgpu: add drm buddy support to amdgpu 2022-03-01 20:38 [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu Arunpravin 2022-03-01 23:05 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for " Patchwork @ 2022-03-01 23:38 ` Patchwork 2022-03-02 2:51 ` [Intel-gfx] [PATCH v9] " kernel test robot ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2022-03-01 23:38 UTC (permalink / raw) To: Arunpravin; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 7284 bytes --] == Series Details == Series: drm/amdgpu: add drm buddy support to amdgpu URL : https://patchwork.freedesktop.org/series/100908/ State : success == Summary == CI Bug Log - changes from CI_DRM_11306 -> Patchwork_22453 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/index.html Participating hosts (52 -> 43) ------------------------------ Additional (1): fi-icl-u2 Missing (10): fi-kbl-soraka fi-cml-u2 shard-tglu fi-hsw-4200u fi-bsw-cyan bat-adlp-4 fi-ctg-p8600 shard-rkl shard-dg1 fi-bdw-samus Known issues ------------ Here are the changes found in Patchwork_22453 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@amdgpu/amd_cs_nop@fork-gfx0: - fi-icl-u2: NOTRUN -> [SKIP][1] ([fdo#109315]) +17 similar issues [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-icl-u2/igt@amdgpu/amd_cs_nop@fork-gfx0.html * igt@amdgpu/amd_cs_nop@nop-compute0: - fi-pnv-d510: NOTRUN -> [SKIP][2] ([fdo#109271]) +17 similar issues [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-pnv-d510/igt@amdgpu/amd_cs_nop@nop-compute0.html * igt@amdgpu/amd_cs_nop@sync-fork-compute0: - fi-skl-6600u: NOTRUN -> [SKIP][3] ([fdo#109271]) +17 similar issues [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-skl-6600u/igt@amdgpu/amd_cs_nop@sync-fork-compute0.html * igt@gem_huc_copy@huc-copy: - fi-icl-u2: NOTRUN -> [SKIP][4] ([i915#2190]) [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-icl-u2/igt@gem_huc_copy@huc-copy.html * igt@gem_lmem_swapping@parallel-random-engines: - fi-icl-u2: NOTRUN -> [SKIP][5] ([i915#4613]) +3 similar issues [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-icl-u2/igt@gem_lmem_swapping@parallel-random-engines.html * igt@gem_lmem_swapping@random-engines: - fi-ivb-3770: NOTRUN -> [SKIP][6] ([fdo#109271]) +35 similar issues [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-ivb-3770/igt@gem_lmem_swapping@random-engines.html * igt@i915_selftest@live@hangcheck: - bat-dg1-5: [PASS][7] -> [DMESG-FAIL][8] ([i915#4494] / [i915#4957]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/bat-dg1-5/igt@i915_selftest@live@hangcheck.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/bat-dg1-5/igt@i915_selftest@live@hangcheck.html * igt@kms_chamelium@dp-hpd-fast: - fi-ivb-3770: NOTRUN -> [SKIP][9] ([fdo#109271] / [fdo#111827]) +8 similar issues [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-ivb-3770/igt@kms_chamelium@dp-hpd-fast.html * igt@kms_chamelium@hdmi-hpd-fast: - fi-icl-u2: NOTRUN -> [SKIP][10] ([fdo#111827]) +8 similar issues [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-icl-u2/igt@kms_chamelium@hdmi-hpd-fast.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic: - fi-icl-u2: NOTRUN -> [SKIP][11] ([fdo#109278]) +2 similar issues [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-icl-u2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html * igt@kms_force_connector_basic@force-load-detect: - fi-icl-u2: NOTRUN -> [SKIP][12] ([fdo#109285]) [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-icl-u2/igt@kms_force_connector_basic@force-load-detect.html * igt@prime_vgem@basic-userptr: - fi-icl-u2: NOTRUN -> [SKIP][13] ([i915#3301]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-icl-u2/igt@prime_vgem@basic-userptr.html * igt@runner@aborted: - fi-bdw-5557u: NOTRUN -> [FAIL][14] ([i915#2426] / [i915#4312]) [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-bdw-5557u/igt@runner@aborted.html #### Possible fixes #### * igt@core_hotunplug@unbind-rebind: - fi-blb-e6850: [FAIL][15] ([i915#3194]) -> [PASS][16] [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/fi-blb-e6850/igt@core_hotunplug@unbind-rebind.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-blb-e6850/igt@core_hotunplug@unbind-rebind.html * igt@i915_pm_rps@basic-api: - bat-dg1-5: [FAIL][17] ([i915#4032]) -> [PASS][18] [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/bat-dg1-5/igt@i915_pm_rps@basic-api.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/bat-dg1-5/igt@i915_pm_rps@basic-api.html * igt@i915_selftest@live@gt_pm: - {fi-jsl-1}: [DMESG-FAIL][19] ([i915#1886]) -> [PASS][20] [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/fi-jsl-1/igt@i915_selftest@live@gt_pm.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-jsl-1/igt@i915_selftest@live@gt_pm.html * igt@i915_selftest@live@requests: - fi-pnv-d510: [DMESG-FAIL][21] ([i915#2927] / [i915#4528]) -> [PASS][22] [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/fi-pnv-d510/igt@i915_selftest@live@requests.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/fi-pnv-d510/igt@i915_selftest@live@requests.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278 [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285 [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315 [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827 [i915#1886]: https://gitlab.freedesktop.org/drm/intel/issues/1886 [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190 [i915#2426]: https://gitlab.freedesktop.org/drm/intel/issues/2426 [i915#2927]: https://gitlab.freedesktop.org/drm/intel/issues/2927 [i915#3194]: https://gitlab.freedesktop.org/drm/intel/issues/3194 [i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301 [i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576 [i915#4032]: https://gitlab.freedesktop.org/drm/intel/issues/4032 [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312 [i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494 [i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528 [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613 [i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957 Build changes ------------- * Linux: CI_DRM_11306 -> Patchwork_22453 CI-20190529: 20190529 CI_DRM_11306: 0eb492df610222f39eb2ad5a903626dd3ad9aea2 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_6361: 2372a4beb6a33c5f0799a4a8ccbb93794f52dbca @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_22453: 8e830a55eacbeaf5fd3723f8f5e002bf2a786844 @ git://anongit.freedesktop.org/gfx-ci/linux == Linux commits == 8e830a55eacb drm/amdgpu: add drm buddy support to amdgpu == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/index.html [-- Attachment #2: Type: text/html, Size: 8518 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu 2022-03-01 20:38 [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu Arunpravin 2022-03-01 23:05 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for " Patchwork 2022-03-01 23:38 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork @ 2022-03-02 2:51 ` kernel test robot 2022-03-02 4:21 ` [Intel-gfx] ✓ Fi.CI.IGT: success for " Patchwork 2022-03-03 12:04 ` [Intel-gfx] [PATCH v9] " Christian König 4 siblings, 0 replies; 6+ messages in thread From: kernel test robot @ 2022-03-02 2:51 UTC (permalink / raw) To: Arunpravin, amd-gfx, dri-devel, intel-gfx Cc: kbuild-all, Arunpravin, matthew.auld, tzimmermann, alexander.deucher, christian.koenig Hi Arunpravin, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on drm/drm-next] [also build test WARNING on drm-tip/drm-tip] [cannot apply to drm-intel/for-linux-next v5.17-rc6 next-20220301] [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/Arunpravin/drm-amdgpu-add-drm-buddy-support-to-amdgpu/20220302-043936 base: git://anongit.freedesktop.org/drm/drm drm-next config: ia64-randconfig-r011-20220301 (https://download.01.org/0day-ci/archive/20220302/202203020700.yfCUTgQZ-lkp@intel.com/config) compiler: ia64-linux-gcc (GCC) 11.2.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 # https://github.com/0day-ci/linux/commit/22a06757ae067e29c09a9d95eaf2b9053833740f git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Arunpravin/drm-amdgpu-add-drm-buddy-support-to-amdgpu/20220302-043936 git checkout 22a06757ae067e29c09a9d95eaf2b9053833740f # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=ia64 SHELL=/bin/bash drivers/gpu/drm/amd/amdgpu/ 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/amd/amdgpu/amdgpu_vram_mgr.c: In function 'amdgpu_vram_mgr_new': >> drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:360:28: warning: variable 'mem_bytes' set but not used [-Wunused-but-set-variable] 360 | u64 vis_usage = 0, mem_bytes, max_bytes, min_page_size; | ^~~~~~~~~ vim +/mem_bytes +360 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c 343 344 /** 345 * amdgpu_vram_mgr_new - allocate new ranges 346 * 347 * @man: TTM memory type manager 348 * @tbo: TTM BO we need this range for 349 * @place: placement flags and restrictions 350 * @res: the resulting mem object 351 * 352 * Allocate VRAM for the given BO. 353 */ 354 static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, 355 struct ttm_buffer_object *tbo, 356 const struct ttm_place *place, 357 struct ttm_resource **res) 358 { 359 unsigned long lpfn, pages_per_node, pages_left, pages; > 360 u64 vis_usage = 0, mem_bytes, max_bytes, min_page_size; 361 struct amdgpu_vram_mgr *mgr = to_vram_mgr(man); 362 struct amdgpu_device *adev = to_amdgpu_device(mgr); 363 struct amdgpu_vram_mgr_node *node; 364 struct drm_buddy *mm = &mgr->mm; 365 struct drm_buddy_block *block; 366 unsigned i; 367 int r; 368 369 lpfn = place->lpfn; 370 if (!lpfn) 371 lpfn = man->size >> PAGE_SHIFT; 372 373 max_bytes = adev->gmc.mc_vram_size; 374 if (tbo->type != ttm_bo_type_kernel) 375 max_bytes -= AMDGPU_VM_RESERVED_VRAM; 376 377 mem_bytes = tbo->base.size; 378 if (place->flags & TTM_PL_FLAG_CONTIGUOUS) { 379 pages_per_node = ~0ul; 380 } else { 381 #ifdef CONFIG_TRANSPARENT_HUGEPAGE 382 pages_per_node = HPAGE_PMD_NR; 383 #else 384 /* default to 2MB */ 385 pages_per_node = 2UL << (20UL - PAGE_SHIFT); 386 #endif 387 pages_per_node = max_t(uint32_t, pages_per_node, 388 tbo->page_alignment); 389 } 390 391 node = kzalloc(sizeof(*node), GFP_KERNEL); 392 if (!node) 393 return -ENOMEM; 394 395 ttm_resource_init(tbo, place, &node->base); 396 397 /* bail out quickly if there's likely not enough VRAM for this BO */ 398 if (ttm_resource_manager_usage(man) > max_bytes) { 399 r = -ENOSPC; 400 goto error_fini; 401 } 402 403 INIT_LIST_HEAD(&node->blocks); 404 405 if (place->flags & TTM_PL_FLAG_TOPDOWN) 406 node->flags |= DRM_BUDDY_TOPDOWN_ALLOCATION; 407 408 if (place->fpfn || lpfn != man->size >> PAGE_SHIFT) 409 /* Allocate blocks in desired range */ 410 node->flags |= DRM_BUDDY_RANGE_ALLOCATION; 411 412 BUG_ON(!node->base.num_pages); 413 pages_left = node->base.num_pages; 414 415 i = 0; 416 while (pages_left) { 417 if (tbo->page_alignment) 418 min_page_size = tbo->page_alignment << PAGE_SHIFT; 419 else 420 min_page_size = mgr->default_page_size; 421 422 /* Limit maximum size to 2GB due to SG table limitations */ 423 pages = min(pages_left, 2UL << (30 - PAGE_SHIFT)); 424 425 if (pages >= pages_per_node) 426 min_page_size = pages_per_node << PAGE_SHIFT; 427 428 if (place->flags & TTM_PL_FLAG_CONTIGUOUS) { 429 pages = roundup_pow_of_two(pages); 430 min_page_size = pages << PAGE_SHIFT; 431 432 if (pages > lpfn) 433 lpfn = pages; 434 } 435 436 BUG_ON(min_page_size < mm->chunk_size); 437 438 mutex_lock(&mgr->lock); 439 r = drm_buddy_alloc_blocks(mm, (u64)place->fpfn << PAGE_SHIFT, 440 (u64)lpfn << PAGE_SHIFT, 441 (u64)pages << PAGE_SHIFT, 442 min_page_size, 443 &node->blocks, 444 node->flags); 445 mutex_unlock(&mgr->lock); 446 if (unlikely(r)) 447 goto error_free_blocks; 448 449 ++i; 450 451 if (pages > pages_left) 452 pages_left = 0; 453 else 454 pages_left -= pages; 455 } 456 457 /* Free unused pages for contiguous allocation */ 458 if (place->flags & TTM_PL_FLAG_CONTIGUOUS) { 459 u64 actual_size = (u64)node->base.num_pages << PAGE_SHIFT; 460 461 mutex_lock(&mgr->lock); 462 drm_buddy_block_trim(mm, 463 actual_size, 464 &node->blocks); 465 mutex_unlock(&mgr->lock); 466 } 467 468 list_for_each_entry(block, &node->blocks, link) 469 vis_usage += amdgpu_vram_mgr_vis_size(adev, block); 470 471 block = amdgpu_get_node(&node->blocks); 472 if (!block) { 473 r = -EINVAL; 474 goto error_fini; 475 } 476 477 node->base.start = amdgpu_node_start(block) >> PAGE_SHIFT; 478 479 if (i == 1 && place->flags & TTM_PL_FLAG_CONTIGUOUS) 480 node->base.placement |= TTM_PL_FLAG_CONTIGUOUS; 481 482 if (adev->gmc.xgmi.connected_to_cpu) 483 node->base.bus.caching = ttm_cached; 484 else 485 node->base.bus.caching = ttm_write_combined; 486 487 atomic64_add(vis_usage, &mgr->vis_usage); 488 *res = &node->base; 489 return 0; 490 491 error_free_blocks: 492 mutex_lock(&mgr->lock); 493 drm_buddy_free_list(mm, &node->blocks); 494 mutex_unlock(&mgr->lock); 495 error_fini: 496 ttm_resource_fini(man, &node->base); 497 kfree(node); 498 499 return r; 500 } 501 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Intel-gfx] ✓ Fi.CI.IGT: success for drm/amdgpu: add drm buddy support to amdgpu 2022-03-01 20:38 [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu Arunpravin ` (2 preceding siblings ...) 2022-03-02 2:51 ` [Intel-gfx] [PATCH v9] " kernel test robot @ 2022-03-02 4:21 ` Patchwork 2022-03-03 12:04 ` [Intel-gfx] [PATCH v9] " Christian König 4 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2022-03-02 4:21 UTC (permalink / raw) To: Arunpravin; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 30267 bytes --] == Series Details == Series: drm/amdgpu: add drm buddy support to amdgpu URL : https://patchwork.freedesktop.org/series/100908/ State : success == Summary == CI Bug Log - changes from CI_DRM_11306_full -> Patchwork_22453_full ==================================================== Summary ------- **SUCCESS** No regressions found. Participating hosts (13 -> 13) ------------------------------ No changes in participating hosts Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_22453_full: ### IGT changes ### #### Suppressed #### The following results come from untrusted machines, tests, or statuses. They do not affect the overall result. * igt@i915_selftest@live@hangcheck: - {shard-rkl}: NOTRUN -> [INCOMPLETE][1] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-5/igt@i915_selftest@live@hangcheck.html * {igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-a-hdmi-a-1-planes-upscale-downscale}: - {shard-tglu}: NOTRUN -> [SKIP][2] +3 similar issues [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-tglu-2/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-a-hdmi-a-1-planes-upscale-downscale.html * {igt@kms_plane_scaling@scaler-with-rotation-unity-scaling@pipe-b-edp-1-scaler-with-rotation}: - {shard-rkl}: NOTRUN -> [SKIP][3] +14 similar issues [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-6/igt@kms_plane_scaling@scaler-with-rotation-unity-scaling@pipe-b-edp-1-scaler-with-rotation.html * {igt@kms_plane_scaling@upscale-with-rotation-factor-0-25@pipe-b-hdmi-a-1-upscale-with-rotation}: - {shard-dg1}: NOTRUN -> [SKIP][4] +15 similar issues [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-dg1-19/igt@kms_plane_scaling@upscale-with-rotation-factor-0-25@pipe-b-hdmi-a-1-upscale-with-rotation.html New tests --------- New tests have been introduced between CI_DRM_11306_full and Patchwork_22453_full: ### New IGT tests (1) ### * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-75@pipe-d-edp-1-planes-upscale-downscale: - Statuses : 1 pass(s) - Exec time: [1.28] s Known issues ------------ Here are the changes found in Patchwork_22453_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_create@create-massive: - shard-kbl: NOTRUN -> [DMESG-WARN][5] ([i915#4991]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl4/igt@gem_create@create-massive.html * igt@gem_eio@in-flight-contexts-1us: - shard-tglb: [PASS][6] -> [TIMEOUT][7] ([i915#3063]) [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-tglb2/igt@gem_eio@in-flight-contexts-1us.html [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-tglb6/igt@gem_eio@in-flight-contexts-1us.html * igt@gem_exec_balancer@parallel-out-fence: - shard-kbl: NOTRUN -> [DMESG-WARN][8] ([i915#5076]) [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@gem_exec_balancer@parallel-out-fence.html * igt@gem_exec_capture@pi@rcs0: - shard-skl: [PASS][9] -> [INCOMPLETE][10] ([i915#4547]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-skl4/igt@gem_exec_capture@pi@rcs0.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl3/igt@gem_exec_capture@pi@rcs0.html * igt@gem_exec_fair@basic-none-share@rcs0: - shard-iclb: [PASS][11] -> [FAIL][12] ([i915#2842]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-iclb4/igt@gem_exec_fair@basic-none-share@rcs0.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb8/igt@gem_exec_fair@basic-none-share@rcs0.html * igt@gem_exec_fair@basic-none-solo@rcs0: - shard-kbl: NOTRUN -> [FAIL][13] ([i915#2842]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@gem_exec_fair@basic-none-solo@rcs0.html * igt@gem_exec_fair@basic-none@vcs0: - shard-apl: [PASS][14] -> [FAIL][15] ([i915#2842]) [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-apl3/igt@gem_exec_fair@basic-none@vcs0.html [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl2/igt@gem_exec_fair@basic-none@vcs0.html * igt@gem_exec_fair@basic-pace@vcs1: - shard-iclb: NOTRUN -> [FAIL][16] ([i915#2842]) [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb2/igt@gem_exec_fair@basic-pace@vcs1.html * igt@gem_exec_suspend@basic-s0@smem: - shard-snb: [PASS][17] -> [SKIP][18] ([fdo#109271]) [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-snb7/igt@gem_exec_suspend@basic-s0@smem.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-snb5/igt@gem_exec_suspend@basic-s0@smem.html * igt@gem_huc_copy@huc-copy: - shard-skl: NOTRUN -> [SKIP][19] ([fdo#109271] / [i915#2190]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl8/igt@gem_huc_copy@huc-copy.html * igt@gem_lmem_swapping@heavy-multi: - shard-apl: NOTRUN -> [SKIP][20] ([fdo#109271] / [i915#4613]) +1 similar issue [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl2/igt@gem_lmem_swapping@heavy-multi.html * igt@gem_lmem_swapping@heavy-verify-multi: - shard-skl: NOTRUN -> [SKIP][21] ([fdo#109271] / [i915#4613]) +2 similar issues [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl7/igt@gem_lmem_swapping@heavy-verify-multi.html * igt@gem_lmem_swapping@heavy-verify-random: - shard-iclb: NOTRUN -> [SKIP][22] ([i915#4613]) [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@gem_lmem_swapping@heavy-verify-random.html * igt@gem_pwrite@basic-exhaustion: - shard-skl: NOTRUN -> [WARN][23] ([i915#2658]) [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl10/igt@gem_pwrite@basic-exhaustion.html * igt@gem_render_copy@x-tiled-to-vebox-yf-tiled: - shard-kbl: NOTRUN -> [SKIP][24] ([fdo#109271]) +80 similar issues [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@gem_render_copy@x-tiled-to-vebox-yf-tiled.html * igt@gem_render_copy@y-tiled-mc-ccs-to-yf-tiled-ccs: - shard-iclb: NOTRUN -> [SKIP][25] ([i915#768]) [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@gem_render_copy@y-tiled-mc-ccs-to-yf-tiled-ccs.html * igt@gem_spin_batch@spin-each: - shard-skl: NOTRUN -> [FAIL][26] ([i915#2898]) [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl8/igt@gem_spin_batch@spin-each.html * igt@gen3_render_tiledy_blits: - shard-iclb: NOTRUN -> [SKIP][27] ([fdo#109289]) [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@gen3_render_tiledy_blits.html * igt@gen9_exec_parse@shadow-peek: - shard-tglb: NOTRUN -> [SKIP][28] ([i915#2527] / [i915#2856]) [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-tglb3/igt@gen9_exec_parse@shadow-peek.html * igt@i915_pm_dc@dc6-psr: - shard-skl: NOTRUN -> [FAIL][29] ([i915#454]) [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl4/igt@i915_pm_dc@dc6-psr.html * igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-dp: - shard-kbl: NOTRUN -> [SKIP][30] ([fdo#109271] / [i915#1937]) [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl4/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-dp.html * igt@i915_pm_sseu@full-enable: - shard-iclb: NOTRUN -> [SKIP][31] ([i915#4387]) [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@i915_pm_sseu@full-enable.html * igt@kms_async_flips@alternate-sync-async-flip: - shard-skl: [PASS][32] -> [FAIL][33] ([i915#2521]) [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-skl7/igt@kms_async_flips@alternate-sync-async-flip.html [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl6/igt@kms_async_flips@alternate-sync-async-flip.html * igt@kms_big_fb@x-tiled-32bpp-rotate-180: - shard-glk: [PASS][34] -> [DMESG-WARN][35] ([i915#118]) [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-glk9/igt@kms_big_fb@x-tiled-32bpp-rotate-180.html [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-glk2/igt@kms_big_fb@x-tiled-32bpp-rotate-180.html * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip: - shard-skl: NOTRUN -> [FAIL][36] ([i915#3743]) +4 similar issues [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl10/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip: - shard-skl: NOTRUN -> [SKIP][37] ([fdo#109271] / [i915#3777]) +3 similar issues [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl7/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip.html * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-async-flip: - shard-skl: NOTRUN -> [FAIL][38] ([i915#3763]) [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip: - shard-apl: NOTRUN -> [SKIP][39] ([fdo#109271] / [i915#3777]) [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl2/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html * igt@kms_ccs@pipe-a-crc-primary-rotation-180-y_tiled_gen12_rc_ccs_cc: - shard-kbl: NOTRUN -> [SKIP][40] ([fdo#109271] / [i915#3886]) +3 similar issues [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@kms_ccs@pipe-a-crc-primary-rotation-180-y_tiled_gen12_rc_ccs_cc.html * igt@kms_ccs@pipe-b-missing-ccs-buffer-y_tiled_gen12_rc_ccs_cc: - shard-apl: NOTRUN -> [SKIP][41] ([fdo#109271] / [i915#3886]) [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl2/igt@kms_ccs@pipe-b-missing-ccs-buffer-y_tiled_gen12_rc_ccs_cc.html * igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_rc_ccs_cc: - shard-iclb: NOTRUN -> [SKIP][42] ([fdo#109278] / [i915#3886]) +1 similar issue [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_rc_ccs_cc.html * igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_rc_ccs_cc: - shard-skl: NOTRUN -> [SKIP][43] ([fdo#109271] / [i915#3886]) +18 similar issues [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl4/igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_rc_ccs_cc.html * igt@kms_ccs@pipe-c-crc-primary-basic-y_tiled_ccs: - shard-apl: NOTRUN -> [SKIP][44] ([fdo#109271]) +47 similar issues [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl2/igt@kms_ccs@pipe-c-crc-primary-basic-y_tiled_ccs.html * igt@kms_chamelium@dp-crc-multiple: - shard-skl: NOTRUN -> [SKIP][45] ([fdo#109271] / [fdo#111827]) +33 similar issues [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl4/igt@kms_chamelium@dp-crc-multiple.html * igt@kms_chamelium@hdmi-hpd-for-each-pipe: - shard-kbl: NOTRUN -> [SKIP][46] ([fdo#109271] / [fdo#111827]) +5 similar issues [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@kms_chamelium@hdmi-hpd-for-each-pipe.html * igt@kms_color_chamelium@pipe-b-ctm-limited-range: - shard-iclb: NOTRUN -> [SKIP][47] ([fdo#109284] / [fdo#111827]) +1 similar issue [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_color_chamelium@pipe-b-ctm-limited-range.html * igt@kms_color_chamelium@pipe-b-ctm-red-to-blue: - shard-apl: NOTRUN -> [SKIP][48] ([fdo#109271] / [fdo#111827]) +2 similar issues [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl6/igt@kms_color_chamelium@pipe-b-ctm-red-to-blue.html * igt@kms_content_protection@type1: - shard-iclb: NOTRUN -> [SKIP][49] ([fdo#109300] / [fdo#111066]) [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_content_protection@type1.html * igt@kms_content_protection@uevent: - shard-kbl: NOTRUN -> [FAIL][50] ([i915#2105]) [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@kms_content_protection@uevent.html * igt@kms_cursor_crc@pipe-a-cursor-max-size-sliding: - shard-iclb: NOTRUN -> [SKIP][51] ([fdo#109278]) +4 similar issues [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_cursor_crc@pipe-a-cursor-max-size-sliding.html * igt@kms_cursor_edge_walk@pipe-a-128x128-left-edge: - shard-glk: [PASS][52] -> [DMESG-FAIL][53] ([i915#118]) [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-glk7/igt@kms_cursor_edge_walk@pipe-a-128x128-left-edge.html [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-glk8/igt@kms_cursor_edge_walk@pipe-a-128x128-left-edge.html * igt@kms_cursor_legacy@cursorb-vs-flipa-legacy: - shard-iclb: NOTRUN -> [SKIP][54] ([fdo#109274] / [fdo#109278]) +1 similar issue [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html * igt@kms_cursor_legacy@pipe-d-single-bo: - shard-kbl: NOTRUN -> [SKIP][55] ([fdo#109271] / [i915#533]) [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl4/igt@kms_cursor_legacy@pipe-d-single-bo.html * igt@kms_flip@2x-plain-flip-fb-recreate: - shard-iclb: NOTRUN -> [SKIP][56] ([fdo#109274]) [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_flip@2x-plain-flip-fb-recreate.html * igt@kms_flip@flip-vs-suspend-interruptible@c-dp1: - shard-apl: [PASS][57] -> [DMESG-WARN][58] ([i915#180]) +3 similar issues [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-apl7/igt@kms_flip@flip-vs-suspend-interruptible@c-dp1.html [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl6/igt@kms_flip@flip-vs-suspend-interruptible@c-dp1.html * igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a1: - shard-glk: [PASS][59] -> [FAIL][60] ([i915#2122]) [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-glk4/igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a1.html [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-glk1/igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a1.html * igt@kms_flip@plain-flip-ts-check-interruptible@a-edp1: - shard-skl: [PASS][61] -> [FAIL][62] ([i915#2122]) [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-skl10/igt@kms_flip@plain-flip-ts-check-interruptible@a-edp1.html [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl10/igt@kms_flip@plain-flip-ts-check-interruptible@a-edp1.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling: - shard-glk: [PASS][63] -> [FAIL][64] ([i915#4911]) [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-glk2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling.html [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-glk8/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling: - shard-iclb: [PASS][65] -> [SKIP][66] ([i915#3701]) [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-iclb8/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling.html [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb2/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling.html * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-blt: - shard-skl: NOTRUN -> [SKIP][67] ([fdo#109271]) +390 similar issues [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-blt.html * igt@kms_frontbuffer_tracking@fbc-suspend: - shard-kbl: [PASS][68] -> [INCOMPLETE][69] ([i915#2828] / [i915#3614]) [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-kbl1/igt@kms_frontbuffer_tracking@fbc-suspend.html [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@kms_frontbuffer_tracking@fbc-suspend.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt: - shard-iclb: NOTRUN -> [SKIP][70] ([fdo#109280]) +4 similar issues [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt.html * igt@kms_hdr@bpc-switch-suspend: - shard-kbl: [PASS][71] -> [DMESG-WARN][72] ([i915#180]) +2 similar issues [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-kbl3/igt@kms_hdr@bpc-switch-suspend.html [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl7/igt@kms_hdr@bpc-switch-suspend.html - shard-skl: [PASS][73] -> [FAIL][74] ([i915#1188]) [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-skl4/igt@kms_hdr@bpc-switch-suspend.html [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl9/igt@kms_hdr@bpc-switch-suspend.html * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-d: - shard-skl: NOTRUN -> [SKIP][75] ([fdo#109271] / [i915#533]) +3 similar issues [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl8/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-d.html * igt@kms_plane_alpha_blend@pipe-a-alpha-7efc: - shard-skl: NOTRUN -> [FAIL][76] ([fdo#108145] / [i915#265]) +5 similar issues [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl8/igt@kms_plane_alpha_blend@pipe-a-alpha-7efc.html - shard-kbl: NOTRUN -> [FAIL][77] ([fdo#108145] / [i915#265]) +2 similar issues [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@kms_plane_alpha_blend@pipe-a-alpha-7efc.html * igt@kms_plane_alpha_blend@pipe-c-alpha-7efc: - shard-apl: NOTRUN -> [FAIL][78] ([fdo#108145] / [i915#265]) [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl6/igt@kms_plane_alpha_blend@pipe-c-alpha-7efc.html * igt@kms_plane_alpha_blend@pipe-c-alpha-transparent-fb: - shard-skl: NOTRUN -> [FAIL][79] ([i915#265]) [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl4/igt@kms_plane_alpha_blend@pipe-c-alpha-transparent-fb.html * igt@kms_plane_lowres@pipe-a-tiling-x: - shard-iclb: NOTRUN -> [SKIP][80] ([i915#3536]) [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_plane_lowres@pipe-a-tiling-x.html * igt@kms_psr2_su@frontbuffer-xrgb8888: - shard-skl: NOTRUN -> [SKIP][81] ([fdo#109271] / [i915#658]) +2 similar issues [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl4/igt@kms_psr2_su@frontbuffer-xrgb8888.html - shard-iclb: [PASS][82] -> [SKIP][83] ([fdo#109642] / [fdo#111068] / [i915#658]) [82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-iclb2/igt@kms_psr2_su@frontbuffer-xrgb8888.html [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb1/igt@kms_psr2_su@frontbuffer-xrgb8888.html * igt@kms_psr@psr2_no_drrs: - shard-iclb: NOTRUN -> [SKIP][84] ([fdo#109441]) [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_psr@psr2_no_drrs.html * igt@kms_tv_load_detect@load-detect: - shard-iclb: NOTRUN -> [SKIP][85] ([fdo#109309]) [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_tv_load_detect@load-detect.html * igt@kms_vrr@flip-suspend: - shard-iclb: NOTRUN -> [SKIP][86] ([fdo#109502]) [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@kms_vrr@flip-suspend.html * igt@kms_writeback@writeback-invalid-parameters: - shard-skl: NOTRUN -> [SKIP][87] ([fdo#109271] / [i915#2437]) +1 similar issue [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl8/igt@kms_writeback@writeback-invalid-parameters.html * igt@perf@blocking: - shard-skl: [PASS][88] -> [FAIL][89] ([i915#1542]) [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-skl6/igt@perf@blocking.html [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl1/igt@perf@blocking.html * igt@perf@polling-small-buf: - shard-skl: [PASS][90] -> [FAIL][91] ([i915#1722]) [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-skl7/igt@perf@polling-small-buf.html [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl6/igt@perf@polling-small-buf.html * igt@prime_vgem@fence-flip-hang: - shard-iclb: NOTRUN -> [SKIP][92] ([fdo#109295]) [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@prime_vgem@fence-flip-hang.html * igt@syncobj_timeline@invalid-transfer-non-existent-point: - shard-skl: NOTRUN -> [DMESG-WARN][93] ([i915#5098]) [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl1/igt@syncobj_timeline@invalid-transfer-non-existent-point.html * igt@sysfs_clients@busy: - shard-apl: NOTRUN -> [SKIP][94] ([fdo#109271] / [i915#2994]) [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-apl2/igt@sysfs_clients@busy.html * igt@sysfs_clients@create: - shard-skl: NOTRUN -> [SKIP][95] ([fdo#109271] / [i915#2994]) +3 similar issues [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-skl4/igt@sysfs_clients@create.html * igt@sysfs_clients@sema-50: - shard-kbl: NOTRUN -> [SKIP][96] ([fdo#109271] / [i915#2994]) [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@sysfs_clients@sema-50.html * igt@sysfs_clients@split-10: - shard-iclb: NOTRUN -> [SKIP][97] ([i915#2994]) [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb6/igt@sysfs_clients@split-10.html #### Possible fixes #### * igt@fbdev@pan: - {shard-rkl}: [SKIP][98] ([i915#2582]) -> [PASS][99] [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-1/igt@fbdev@pan.html [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-6/igt@fbdev@pan.html * igt@feature_discovery@psr2: - shard-iclb: [SKIP][100] ([i915#658]) -> [PASS][101] [100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-iclb8/igt@feature_discovery@psr2.html [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb2/igt@feature_discovery@psr2.html * igt@gem_eio@kms: - shard-tglb: [FAIL][102] ([i915#232]) -> [PASS][103] [102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-tglb5/igt@gem_eio@kms.html [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-tglb7/igt@gem_eio@kms.html * igt@gem_eio@unwedge-stress: - shard-iclb: [TIMEOUT][104] ([i915#2481] / [i915#3070]) -> [PASS][105] [104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-iclb8/igt@gem_eio@unwedge-stress.html [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-iclb2/igt@gem_eio@unwedge-stress.html * igt@gem_exec_capture@pi@rcs0: - {shard-tglu}: [INCOMPLETE][106] ([i915#3371]) -> [PASS][107] [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-tglu-3/igt@gem_exec_capture@pi@rcs0.html [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-tglu-8/igt@gem_exec_capture@pi@rcs0.html * igt@gem_exec_fair@basic-deadline: - shard-glk: [FAIL][108] ([i915#2846]) -> [PASS][109] [108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-glk9/igt@gem_exec_fair@basic-deadline.html [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-glk2/igt@gem_exec_fair@basic-deadline.html * igt@gem_exec_fair@basic-none-solo@rcs0: - {shard-rkl}: [FAIL][110] ([i915#2842]) -> [PASS][111] [110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-5/igt@gem_exec_fair@basic-none-solo@rcs0.html [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-2/igt@gem_exec_fair@basic-none-solo@rcs0.html * igt@gem_exec_fair@basic-pace-share@rcs0: - shard-glk: [FAIL][112] ([i915#2842]) -> [PASS][113] [112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-glk9/igt@gem_exec_fair@basic-pace-share@rcs0.html [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-glk2/igt@gem_exec_fair@basic-pace-share@rcs0.html * igt@gem_exec_fair@basic-pace@bcs0: - shard-tglb: [FAIL][114] ([i915#2842]) -> [PASS][115] [114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-tglb3/igt@gem_exec_fair@basic-pace@bcs0.html [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-tglb6/igt@gem_exec_fair@basic-pace@bcs0.html * igt@gem_huc_copy@huc-copy: - shard-tglb: [SKIP][116] ([i915#2190]) -> [PASS][117] [116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-tglb7/igt@gem_huc_copy@huc-copy.html [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-tglb8/igt@gem_huc_copy@huc-copy.html * igt@gem_ppgtt@flink-and-close-vma-leak: - shard-glk: [FAIL][118] ([i915#644]) -> [PASS][119] [118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-glk8/igt@gem_ppgtt@flink-and-close-vma-leak.html [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-glk8/igt@gem_ppgtt@flink-and-close-vma-leak.html * igt@gem_workarounds@suspend-resume-fd: - shard-kbl: [DMESG-WARN][120] ([i915#180]) -> [PASS][121] +2 similar issues [120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-kbl6/igt@gem_workarounds@suspend-resume-fd.html [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-kbl3/igt@gem_workarounds@suspend-resume-fd.html * igt@i915_pm_backlight@basic-brightness: - {shard-rkl}: [SKIP][122] ([i915#3012]) -> [PASS][123] [122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-1/igt@i915_pm_backlight@basic-brightness.html [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-6/igt@i915_pm_backlight@basic-brightness.html * igt@i915_pm_rpm@dpms-mode-unset-lpsp: - {shard-rkl}: [SKIP][124] ([i915#1397]) -> [PASS][125] [124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-1/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-6/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html * igt@i915_pm_rpm@modeset-non-lpsp-stress: - {shard-dg1}: [SKIP][126] ([i915#1397]) -> [PASS][127] +2 similar issues [126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-dg1-12/igt@i915_pm_rpm@modeset-non-lpsp-stress.html [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-dg1-18/igt@i915_pm_rpm@modeset-non-lpsp-stress.html * igt@kms_atomic@atomic_plane_damage: - {shard-rkl}: [SKIP][128] ([i915#4098]) -> [PASS][129] +1 similar issue [128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-1/igt@kms_atomic@atomic_plane_damage.html [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-6/igt@kms_atomic@atomic_plane_damage.html * igt@kms_atomic@plane-primary-legacy: - {shard-rkl}: [SKIP][130] ([i915#1845]) -> [PASS][131] +19 similar issues [130]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-1/igt@kms_atomic@plane-primary-legacy.html [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-6/igt@kms_atomic@plane-primary-legacy.html * igt@kms_big_fb@y-tiled-16bpp-rotate-0: - shard-glk: [DMESG-WARN][132] ([i915#118]) -> [PASS][133] [132]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-glk4/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-glk1/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html * igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_rc_ccs: - {shard-rkl}: [SKIP][134] ([i915#1845] / [i915#4098]) -> [PASS][135] +2 similar issues [134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-5/igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_rc_ccs.html [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-6/igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_rc_ccs.html * igt@kms_color@pipe-a-ctm-red-to-blue: - {shard-rkl}: [SKIP][136] ([i915#1149] / [i915#1849]) -> [PASS][137] [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-5/igt@kms_color@pipe-a-ctm-red-to-blue.html [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/shard-rkl-6/igt@kms_color@pipe-a-ctm-red-to-blue.html * igt@kms_color@pipe-b-gamma: - {shard-rkl}: ([SKIP][138], [SKIP][139]) ([i915#1149] / [i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][140] [138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11306/shard-rkl-1/igt@kms_color@pipe-b-gamma.html [139]: https://intel-gfx-ci.01.org/ == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_22453/index.html [-- Attachment #2: Type: text/html, Size: 33588 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu 2022-03-01 20:38 [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu Arunpravin ` (3 preceding siblings ...) 2022-03-02 4:21 ` [Intel-gfx] ✓ Fi.CI.IGT: success for " Patchwork @ 2022-03-03 12:04 ` Christian König 4 siblings, 0 replies; 6+ messages in thread From: Christian König @ 2022-03-03 12:04 UTC (permalink / raw) To: Arunpravin, amd-gfx, dri-devel, intel-gfx Cc: alexander.deucher, tzimmermann, matthew.auld, christian.koenig Am 01.03.22 um 21:38 schrieb Arunpravin: > - Remove drm_mm references and replace with drm buddy functionalities > - Add res cursor support for drm buddy > > v2(Matthew Auld): > - replace spinlock with mutex as we call kmem_cache_zalloc > (..., GFP_KERNEL) in drm_buddy_alloc() function > > - lock drm_buddy_block_trim() function as it calls > mark_free/mark_split are all globally visible > > v3(Matthew Auld): > - remove trim method error handling as we address the failure case > at drm_buddy_block_trim() function > > v4: > - fix warnings reported by kernel test robot <lkp@intel.com> > > v5: > - fix merge conflict issue > > v6: > - fix warnings reported by kernel test robot <lkp@intel.com> > > v7: > - remove DRM_BUDDY_RANGE_ALLOCATION flag usage > > v8: > - keep DRM_BUDDY_RANGE_ALLOCATION flag usage > - resolve conflicts created by drm/amdgpu: remove VRAM accounting v2 > > v9(Christian): > - rename label name as fallback > - move struct amdgpu_vram_mgr to amdgpu_vram_mgr.h > - remove unnecessary flags from struct amdgpu_vram_reservation > - rewrite block NULL check condition > - change else style as per coding standard > - rewrite the node max size > - add a helper function to fetch the first entry from the list > > Signed-off-by: Arunpravin <Arunpravin.PaneerSelvam@amd.com> > --- > drivers/gpu/drm/Kconfig | 1 + > .../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h | 97 +++++-- > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 10 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 249 ++++++++++-------- > drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h | 68 +++++ > 5 files changed, 289 insertions(+), 136 deletions(-) > create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h > > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig > index f1422bee3dcc..5133c3f028ab 100644 > --- a/drivers/gpu/drm/Kconfig > +++ b/drivers/gpu/drm/Kconfig > @@ -280,6 +280,7 @@ config DRM_AMDGPU > select HWMON > select BACKLIGHT_CLASS_DEVICE > select INTERVAL_TREE > + select DRM_BUDDY > help > Choose this option if you have a recent AMD Radeon graphics card. > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h > index acfa207cf970..864c609ba00b 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h > @@ -30,12 +30,15 @@ > #include <drm/ttm/ttm_resource.h> > #include <drm/ttm/ttm_range_manager.h> > > +#include "amdgpu_vram_mgr.h" > + > /* state back for walking over vram_mgr and gtt_mgr allocations */ > struct amdgpu_res_cursor { > uint64_t start; > uint64_t size; > uint64_t remaining; > - struct drm_mm_node *node; > + void *node; > + uint32_t mem_type; > }; > > /** > @@ -52,27 +55,63 @@ static inline void amdgpu_res_first(struct ttm_resource *res, > uint64_t start, uint64_t size, > struct amdgpu_res_cursor *cur) > { > + struct drm_buddy_block *block; > + struct list_head *head, *next; > struct drm_mm_node *node; > > - if (!res || res->mem_type == TTM_PL_SYSTEM) { > - cur->start = start; > - cur->size = size; > - cur->remaining = size; > - cur->node = NULL; > - WARN_ON(res && start + size > res->num_pages << PAGE_SHIFT); > - return; > - } > + if (!res) > + goto fallback; > > BUG_ON(start + size > res->num_pages << PAGE_SHIFT); > > - node = to_ttm_range_mgr_node(res)->mm_nodes; > - while (start >= node->size << PAGE_SHIFT) > - start -= node++->size << PAGE_SHIFT; > + cur->mem_type = res->mem_type; > + > + switch (cur->mem_type) { > + case TTM_PL_VRAM: > + head = &to_amdgpu_vram_mgr_node(res)->blocks; > + > + block = list_first_entry_or_null(head, > + struct drm_buddy_block, > + link); > + if (!block) > + goto fallback; > + > + while (start >= amdgpu_node_size(block)) { > + start -= amdgpu_node_size(block); > + > + next = block->link.next; > + if (next != head) > + block = list_entry(next, struct drm_buddy_block, link); > + } > + > + cur->start = amdgpu_node_start(block) + start; > + cur->size = min(amdgpu_node_size(block) - start, size); > + cur->remaining = size; > + cur->node = block; > + break; > + case TTM_PL_TT: > + node = to_ttm_range_mgr_node(res)->mm_nodes; > + while (start >= node->size << PAGE_SHIFT) > + start -= node++->size << PAGE_SHIFT; > + > + cur->start = (node->start << PAGE_SHIFT) + start; > + cur->size = min((node->size << PAGE_SHIFT) - start, size); > + cur->remaining = size; > + cur->node = node; > + break; > + default: > + goto fallback; > + } > > - cur->start = (node->start << PAGE_SHIFT) + start; > - cur->size = min((node->size << PAGE_SHIFT) - start, size); > + return; > + > +fallback: > + cur->start = start; > + cur->size = size; > cur->remaining = size; > - cur->node = node; > + cur->node = NULL; > + WARN_ON(res && start + size > res->num_pages << PAGE_SHIFT); > + return; > } > > /** > @@ -85,7 +124,9 @@ static inline void amdgpu_res_first(struct ttm_resource *res, > */ > static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size) > { > - struct drm_mm_node *node = cur->node; > + struct drm_buddy_block *block; > + struct drm_mm_node *node; > + struct list_head *next; > > BUG_ON(size > cur->remaining); > > @@ -99,9 +140,27 @@ static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size) > return; > } > > - cur->node = ++node; > - cur->start = node->start << PAGE_SHIFT; > - cur->size = min(node->size << PAGE_SHIFT, cur->remaining); > + switch (cur->mem_type) { > + case TTM_PL_VRAM: > + block = cur->node; > + > + next = block->link.next; > + block = list_entry(next, struct drm_buddy_block, link); > + > + cur->node = block; > + cur->start = amdgpu_node_start(block); > + cur->size = min(amdgpu_node_size(block), cur->remaining); > + break; > + case TTM_PL_TT: > + node = cur->node; > + > + cur->node = ++node; > + cur->start = node->start << PAGE_SHIFT; > + cur->size = min(node->size << PAGE_SHIFT, cur->remaining); > + break; > + default: > + return; > + } > } > > #endif > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h > index 9120ae80ef52..6a70818039dd 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h > @@ -26,6 +26,7 @@ > > #include <linux/dma-direction.h> > #include <drm/gpu_scheduler.h> > +#include "amdgpu_vram_mgr.h" > #include "amdgpu.h" > > #define AMDGPU_PL_GDS (TTM_PL_PRIV + 0) > @@ -38,15 +39,6 @@ > > #define AMDGPU_POISON 0xd0bed0be > > -struct amdgpu_vram_mgr { > - struct ttm_resource_manager manager; > - struct drm_mm mm; > - spinlock_t lock; > - struct list_head reservations_pending; > - struct list_head reserved_pages; > - atomic64_t vis_usage; > -}; > - > struct amdgpu_gtt_mgr { > struct ttm_resource_manager manager; > struct drm_mm mm; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c > index 0a7611648573..cdf66802e6bc 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c > @@ -32,8 +32,10 @@ > #include "atom.h" > > struct amdgpu_vram_reservation { > + u64 start; > + u64 size; > + struct list_head block; > struct list_head node; > - struct drm_mm_node mm_node; > }; > > static inline struct amdgpu_vram_mgr * > @@ -194,10 +196,10 @@ const struct attribute_group amdgpu_vram_mgr_attr_group = { > * Calculate how many bytes of the MM node are inside visible VRAM > */ > static u64 amdgpu_vram_mgr_vis_size(struct amdgpu_device *adev, > - struct drm_mm_node *node) > + struct drm_buddy_block *block) > { > - uint64_t start = node->start << PAGE_SHIFT; > - uint64_t end = (node->size + node->start) << PAGE_SHIFT; > + u64 start = amdgpu_node_start(block); > + u64 end = start + amdgpu_node_size(block); > > if (start >= adev->gmc.visible_vram_size) > return 0; > @@ -218,9 +220,9 @@ u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo) > { > struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); > struct ttm_resource *res = bo->tbo.resource; > - unsigned pages = res->num_pages; > - struct drm_mm_node *mm; > - u64 usage; > + struct amdgpu_vram_mgr_node *node = to_amdgpu_vram_mgr_node(res); > + struct drm_buddy_block *block; > + u64 usage = 0; > > if (amdgpu_gmc_vram_full_visible(&adev->gmc)) > return amdgpu_bo_size(bo); > @@ -228,9 +230,8 @@ u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo) > if (res->start >= adev->gmc.visible_vram_size >> PAGE_SHIFT) > return 0; > > - mm = &container_of(res, struct ttm_range_mgr_node, base)->mm_nodes[0]; > - for (usage = 0; pages; pages -= mm->size, mm++) > - usage += amdgpu_vram_mgr_vis_size(adev, mm); > + list_for_each_entry(block, &node->blocks, link) > + usage += amdgpu_vram_mgr_vis_size(adev, block); > > return usage; > } > @@ -240,21 +241,28 @@ static void amdgpu_vram_mgr_do_reserve(struct ttm_resource_manager *man) > { > struct amdgpu_vram_mgr *mgr = to_vram_mgr(man); > struct amdgpu_device *adev = to_amdgpu_device(mgr); > - struct drm_mm *mm = &mgr->mm; > + struct drm_buddy *mm = &mgr->mm; > struct amdgpu_vram_reservation *rsv, *temp; > + struct drm_buddy_block *block; > uint64_t vis_usage; > > list_for_each_entry_safe(rsv, temp, &mgr->reservations_pending, node) { > - if (drm_mm_reserve_node(mm, &rsv->mm_node)) > + if (drm_buddy_alloc_blocks(mm, rsv->start, rsv->start + rsv->size, > + rsv->size, mm->chunk_size, &rsv->block, > + DRM_BUDDY_RANGE_ALLOCATION)) > + continue; > + > + block = amdgpu_get_node(&rsv->block); > + if (!block) > continue; > > dev_dbg(adev->dev, "Reservation 0x%llx - %lld, Succeeded\n", > - rsv->mm_node.start, rsv->mm_node.size); > + rsv->start, rsv->size); > > - vis_usage = amdgpu_vram_mgr_vis_size(adev, &rsv->mm_node); > + vis_usage = amdgpu_vram_mgr_vis_size(adev, block); > atomic64_add(vis_usage, &mgr->vis_usage); > spin_lock(&man->bdev->lru_lock); > - man->usage += rsv->mm_node.size << PAGE_SHIFT; > + man->usage += rsv->size; > spin_unlock(&man->bdev->lru_lock); > list_move(&rsv->node, &mgr->reserved_pages); > } > @@ -279,13 +287,15 @@ int amdgpu_vram_mgr_reserve_range(struct amdgpu_vram_mgr *mgr, > return -ENOMEM; > > INIT_LIST_HEAD(&rsv->node); > - rsv->mm_node.start = start >> PAGE_SHIFT; > - rsv->mm_node.size = size >> PAGE_SHIFT; > + INIT_LIST_HEAD(&rsv->block); > + > + rsv->start = start; > + rsv->size = size; > > - spin_lock(&mgr->lock); > + mutex_lock(&mgr->lock); > list_add_tail(&rsv->node, &mgr->reservations_pending); > amdgpu_vram_mgr_do_reserve(&mgr->manager); > - spin_unlock(&mgr->lock); > + mutex_unlock(&mgr->lock); > > return 0; > } > @@ -307,19 +317,19 @@ int amdgpu_vram_mgr_query_page_status(struct amdgpu_vram_mgr *mgr, > struct amdgpu_vram_reservation *rsv; > int ret; > > - spin_lock(&mgr->lock); > + mutex_lock(&mgr->lock); > > list_for_each_entry(rsv, &mgr->reservations_pending, node) { > - if ((rsv->mm_node.start <= start) && > - (start < (rsv->mm_node.start + rsv->mm_node.size))) { > + if (rsv->start <= start && > + (start < (rsv->start + rsv->size))) { > ret = -EBUSY; > goto out; > } > } > > list_for_each_entry(rsv, &mgr->reserved_pages, node) { > - if ((rsv->mm_node.start <= start) && > - (start < (rsv->mm_node.start + rsv->mm_node.size))) { > + if (rsv->start <= start && > + (start < (rsv->start + rsv->size))) { > ret = 0; > goto out; > } > @@ -327,32 +337,10 @@ int amdgpu_vram_mgr_query_page_status(struct amdgpu_vram_mgr *mgr, > > ret = -ENOENT; > out: > - spin_unlock(&mgr->lock); > + mutex_unlock(&mgr->lock); > return ret; > } > > -/** > - * amdgpu_vram_mgr_virt_start - update virtual start address > - * > - * @mem: ttm_resource to update > - * @node: just allocated node > - * > - * Calculate a virtual BO start address to easily check if everything is CPU > - * accessible. > - */ > -static void amdgpu_vram_mgr_virt_start(struct ttm_resource *mem, > - struct drm_mm_node *node) > -{ > - unsigned long start; > - > - start = node->start + node->size; > - if (start > mem->num_pages) > - start -= mem->num_pages; > - else > - start = 0; > - mem->start = max(mem->start, start); > -} > - > /** > * amdgpu_vram_mgr_new - allocate new ranges > * > @@ -368,13 +356,13 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, > const struct ttm_place *place, > struct ttm_resource **res) > { > - unsigned long lpfn, num_nodes, pages_per_node, pages_left, pages; > + unsigned long lpfn, pages_per_node, pages_left, pages; > + u64 vis_usage = 0, mem_bytes, max_bytes, min_page_size; > struct amdgpu_vram_mgr *mgr = to_vram_mgr(man); > struct amdgpu_device *adev = to_amdgpu_device(mgr); > - uint64_t vis_usage = 0, mem_bytes, max_bytes; > - struct ttm_range_mgr_node *node; > - struct drm_mm *mm = &mgr->mm; > - enum drm_mm_insert_mode mode; > + struct amdgpu_vram_mgr_node *node; > + struct drm_buddy *mm = &mgr->mm; > + struct drm_buddy_block *block; > unsigned i; > int r; > > @@ -389,7 +377,6 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, > mem_bytes = tbo->base.size; > if (place->flags & TTM_PL_FLAG_CONTIGUOUS) { > pages_per_node = ~0ul; > - num_nodes = 1; > } else { > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > pages_per_node = HPAGE_PMD_NR; > @@ -399,11 +386,9 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, > #endif > pages_per_node = max_t(uint32_t, pages_per_node, > tbo->page_alignment); > - num_nodes = DIV_ROUND_UP_ULL(PFN_UP(mem_bytes), pages_per_node); > } > > - node = kvmalloc(struct_size(node, mm_nodes, num_nodes), > - GFP_KERNEL | __GFP_ZERO); > + node = kzalloc(sizeof(*node), GFP_KERNEL); > if (!node) > return -ENOMEM; > > @@ -415,48 +400,83 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, > goto error_fini; > } > > - mode = DRM_MM_INSERT_BEST; > + INIT_LIST_HEAD(&node->blocks); > + > if (place->flags & TTM_PL_FLAG_TOPDOWN) > - mode = DRM_MM_INSERT_HIGH; > + node->flags |= DRM_BUDDY_TOPDOWN_ALLOCATION; > > - pages_left = node->base.num_pages; > + if (place->fpfn || lpfn != man->size >> PAGE_SHIFT) > + /* Allocate blocks in desired range */ > + node->flags |= DRM_BUDDY_RANGE_ALLOCATION; > > - /* Limit maximum size to 2GB due to SG table limitations */ > - pages = min(pages_left, 2UL << (30 - PAGE_SHIFT)); > + BUG_ON(!node->base.num_pages); > + pages_left = node->base.num_pages; > > i = 0; > - spin_lock(&mgr->lock); > while (pages_left) { > - uint32_t alignment = tbo->page_alignment; > + if (tbo->page_alignment) > + min_page_size = tbo->page_alignment << PAGE_SHIFT; > + else > + min_page_size = mgr->default_page_size; > + > + /* Limit maximum size to 2GB due to SG table limitations */ > + pages = min(pages_left, 2UL << (30 - PAGE_SHIFT)); > > if (pages >= pages_per_node) > - alignment = pages_per_node; > - > - r = drm_mm_insert_node_in_range(mm, &node->mm_nodes[i], pages, > - alignment, 0, place->fpfn, > - lpfn, mode); > - if (unlikely(r)) { > - if (pages > pages_per_node) { > - if (is_power_of_2(pages)) > - pages = pages / 2; > - else > - pages = rounddown_pow_of_two(pages); > - continue; > - } > - goto error_free; > + min_page_size = pages_per_node << PAGE_SHIFT; > + > + if (place->flags & TTM_PL_FLAG_CONTIGUOUS) { > + pages = roundup_pow_of_two(pages); > + min_page_size = pages << PAGE_SHIFT; > + > + if (pages > lpfn) > + lpfn = pages; > } > > - vis_usage += amdgpu_vram_mgr_vis_size(adev, &node->mm_nodes[i]); > - amdgpu_vram_mgr_virt_start(&node->base, &node->mm_nodes[i]); > - pages_left -= pages; > + BUG_ON(min_page_size < mm->chunk_size); > + > + mutex_lock(&mgr->lock); > + r = drm_buddy_alloc_blocks(mm, (u64)place->fpfn << PAGE_SHIFT, > + (u64)lpfn << PAGE_SHIFT, > + (u64)pages << PAGE_SHIFT, > + min_page_size, > + &node->blocks, > + node->flags); > + mutex_unlock(&mgr->lock); > + if (unlikely(r)) > + goto error_free_blocks; > + > ++i; > > if (pages > pages_left) > - pages = pages_left; > + pages_left = 0; > + else > + pages_left -= pages; > } > - spin_unlock(&mgr->lock); > > - if (i == 1) > + /* Free unused pages for contiguous allocation */ > + if (place->flags & TTM_PL_FLAG_CONTIGUOUS) { > + u64 actual_size = (u64)node->base.num_pages << PAGE_SHIFT; > + > + mutex_lock(&mgr->lock); > + drm_buddy_block_trim(mm, > + actual_size, > + &node->blocks); > + mutex_unlock(&mgr->lock); > + } > + > + list_for_each_entry(block, &node->blocks, link) > + vis_usage += amdgpu_vram_mgr_vis_size(adev, block); > + > + block = amdgpu_get_node(&node->blocks); > + if (!block) { > + r = -EINVAL; > + goto error_fini; > + } > + > + node->base.start = amdgpu_node_start(block) >> PAGE_SHIFT; > + > + if (i == 1 && place->flags & TTM_PL_FLAG_CONTIGUOUS) > node->base.placement |= TTM_PL_FLAG_CONTIGUOUS; > > if (adev->gmc.xgmi.connected_to_cpu) > @@ -468,13 +488,13 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, > *res = &node->base; > return 0; > > -error_free: > - while (i--) > - drm_mm_remove_node(&node->mm_nodes[i]); > - spin_unlock(&mgr->lock); > +error_free_blocks: > + mutex_lock(&mgr->lock); > + drm_buddy_free_list(mm, &node->blocks); > + mutex_unlock(&mgr->lock); > error_fini: > ttm_resource_fini(man, &node->base); > - kvfree(node); > + kfree(node); > > return r; > } > @@ -490,27 +510,26 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, > static void amdgpu_vram_mgr_del(struct ttm_resource_manager *man, > struct ttm_resource *res) > { > - struct ttm_range_mgr_node *node = to_ttm_range_mgr_node(res); > + struct amdgpu_vram_mgr_node *node = to_amdgpu_vram_mgr_node(res); > struct amdgpu_vram_mgr *mgr = to_vram_mgr(man); > struct amdgpu_device *adev = to_amdgpu_device(mgr); > + struct drm_buddy *mm = &mgr->mm; > + struct drm_buddy_block *block; > uint64_t vis_usage = 0; > - unsigned i, pages; > > - spin_lock(&mgr->lock); > - for (i = 0, pages = res->num_pages; pages; > - pages -= node->mm_nodes[i].size, ++i) { > - struct drm_mm_node *mm = &node->mm_nodes[i]; > + mutex_lock(&mgr->lock); > + list_for_each_entry(block, &node->blocks, link) > + vis_usage += amdgpu_vram_mgr_vis_size(adev, block); > > - drm_mm_remove_node(mm); > - vis_usage += amdgpu_vram_mgr_vis_size(adev, mm); > - } > amdgpu_vram_mgr_do_reserve(man); > - spin_unlock(&mgr->lock); > + > + drm_buddy_free_list(mm, &node->blocks); > + mutex_unlock(&mgr->lock); > > atomic64_sub(vis_usage, &mgr->vis_usage); > > ttm_resource_fini(man, res); > - kvfree(node); > + kfree(node); > } > > /** > @@ -648,13 +667,22 @@ static void amdgpu_vram_mgr_debug(struct ttm_resource_manager *man, > struct drm_printer *printer) > { > struct amdgpu_vram_mgr *mgr = to_vram_mgr(man); > + struct drm_buddy *mm = &mgr->mm; > + struct drm_buddy_block *block; > > drm_printf(printer, " vis usage:%llu\n", > amdgpu_vram_mgr_vis_usage(mgr)); > > - spin_lock(&mgr->lock); > - drm_mm_print(&mgr->mm, printer); > - spin_unlock(&mgr->lock); > + mutex_lock(&mgr->lock); > + drm_printf(printer, "default_page_size: %lluKiB\n", > + mgr->default_page_size >> 10); > + > + drm_buddy_print(mm, printer); > + > + drm_printf(printer, "reserved:\n"); > + list_for_each_entry(block, &mgr->reserved_pages, link) > + drm_buddy_block_print(mm, block, printer); > + mutex_unlock(&mgr->lock); > } > > static const struct ttm_resource_manager_func amdgpu_vram_mgr_func = { > @@ -674,16 +702,21 @@ int amdgpu_vram_mgr_init(struct amdgpu_device *adev) > { > struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr; > struct ttm_resource_manager *man = &mgr->manager; > + int err; > > ttm_resource_manager_init(man, &adev->mman.bdev, > adev->gmc.real_vram_size); > > man->func = &amdgpu_vram_mgr_func; > > - drm_mm_init(&mgr->mm, 0, man->size >> PAGE_SHIFT); > - spin_lock_init(&mgr->lock); > + err = drm_buddy_init(&mgr->mm, man->size, PAGE_SIZE); > + if (err) > + return err; > + > + mutex_init(&mgr->lock); > INIT_LIST_HEAD(&mgr->reservations_pending); > INIT_LIST_HEAD(&mgr->reserved_pages); > + mgr->default_page_size = PAGE_SIZE; > > ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, &mgr->manager); > ttm_resource_manager_set_used(man, true); > @@ -711,16 +744,16 @@ void amdgpu_vram_mgr_fini(struct amdgpu_device *adev) > if (ret) > return; > > - spin_lock(&mgr->lock); > + mutex_lock(&mgr->lock); > list_for_each_entry_safe(rsv, temp, &mgr->reservations_pending, node) > kfree(rsv); > > list_for_each_entry_safe(rsv, temp, &mgr->reserved_pages, node) { > - drm_mm_remove_node(&rsv->mm_node); > + drm_buddy_free_list(&mgr->mm, &rsv->block); > kfree(rsv); > } > - drm_mm_takedown(&mgr->mm); > - spin_unlock(&mgr->lock); > + drm_buddy_fini(&mgr->mm); > + mutex_unlock(&mgr->lock); > > ttm_resource_manager_cleanup(man); > ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, NULL); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h > new file mode 100644 > index 000000000000..e7d6bbf40c33 > --- /dev/null > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h > @@ -0,0 +1,68 @@ > +/* SPDX-License-Identifier: MIT > + * Copyright 2021 Advanced Micro Devices, Inc. > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR > + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > + * OTHER DEALINGS IN THE SOFTWARE. > + * > + */ > + > +#ifndef __AMDGPU_VRAM_MGR_H__ > +#define __AMDGPU_VRAM_MGR_H__ > + > +#include <drm/drm_buddy.h> > + > +struct amdgpu_vram_mgr { > + struct ttm_resource_manager manager; > + struct drm_buddy mm; > + /* protects access to buffer objects */ > + struct mutex lock; > + struct list_head reservations_pending; > + struct list_head reserved_pages; > + atomic64_t vis_usage; > + u64 default_page_size; > +}; > + > +struct amdgpu_vram_mgr_node { > + struct ttm_resource base; > + struct list_head blocks; > + unsigned long flags; > +}; > + > +static inline u64 amdgpu_node_start(struct drm_buddy_block *block) > +{ > + return drm_buddy_block_offset(block); > +} > + > +static inline u64 amdgpu_node_size(struct drm_buddy_block *block) > +{ > + return PAGE_SIZE << drm_buddy_block_order(block); > +} > + > +static inline struct drm_buddy_block * > +amdgpu_get_node(struct list_head *list) That function name is way to generic. Somebody could mix it up with something completely different and _get_ in a name usually means that you are grabbing a reference (which is not the case here). I suggest to call it something like amdgpu_vram_mgr_first_blcok() and move it from the headers into amdgpu_vram_mgr.c because code outside of that file shouldn't mess with this. Apart from that the looks really good now. Regards, Christian. > +{ > + return list_first_entry_or_null(list, struct drm_buddy_block, link); > +} > + > +static inline struct amdgpu_vram_mgr_node * > +to_amdgpu_vram_mgr_node(struct ttm_resource *res) > +{ > + return container_of(res, struct amdgpu_vram_mgr_node, base); > +} > + > +#endif ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-03-03 18:07 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-03-01 20:38 [Intel-gfx] [PATCH v9] drm/amdgpu: add drm buddy support to amdgpu Arunpravin 2022-03-01 23:05 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for " Patchwork 2022-03-01 23:38 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork 2022-03-02 2:51 ` [Intel-gfx] [PATCH v9] " kernel test robot 2022-03-02 4:21 ` [Intel-gfx] ✓ Fi.CI.IGT: success for " Patchwork 2022-03-03 12:04 ` [Intel-gfx] [PATCH v9] " Christian König
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox