mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
drm/ttm: rework on ttm_resource to use size_t type
Change ttm_resource structure from num_pages to size_t size in bytes. v1 -> v2: change PFN_UP(dst_mem->size) to ttm->num_pages v1 -> v2: change bo->resource->size to bo->base.size at some places v1 -> v2: remove the local variable v1 -> v2: cleanup cmp_size_smaller_first() v2 -> v3: adding missing PFN_UP in ttm_bo_vm_fault_reserved Signed-off-by: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20221027091237.983582-1-Amaranath.Somalapuram@amd.com Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
committed by
Christian König
parent
e1e7bc481d
commit
e3c92eb4a8
@@ -144,7 +144,7 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
|
||||
node->base.start = node->mm_nodes[0].start;
|
||||
} else {
|
||||
node->mm_nodes[0].start = 0;
|
||||
node->mm_nodes[0].size = node->base.num_pages;
|
||||
node->mm_nodes[0].size = PFN_UP(node->base.size);
|
||||
node->base.start = AMDGPU_BO_INVALID_OFFSET;
|
||||
}
|
||||
|
||||
|
||||
@@ -542,6 +542,7 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
|
||||
/* GWS and OA don't need any alignment. */
|
||||
page_align = bp->byte_align;
|
||||
size <<= PAGE_SHIFT;
|
||||
|
||||
} else if (bp->domain & AMDGPU_GEM_DOMAIN_GDS) {
|
||||
/* Both size and alignment must be a multiple of 4. */
|
||||
page_align = ALIGN(bp->byte_align, 4);
|
||||
@@ -776,7 +777,7 @@ int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.resource->num_pages, &bo->kmap);
|
||||
r = ttm_bo_kmap(&bo->tbo, 0, PFN_UP(bo->tbo.base.size), &bo->kmap);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
|
||||
if (!res)
|
||||
goto fallback;
|
||||
|
||||
BUG_ON(start + size > res->num_pages << PAGE_SHIFT);
|
||||
BUG_ON(start + size > res->size);
|
||||
|
||||
cur->mem_type = res->mem_type;
|
||||
|
||||
@@ -110,7 +110,7 @@ fallback:
|
||||
cur->size = size;
|
||||
cur->remaining = size;
|
||||
cur->node = NULL;
|
||||
WARN_ON(res && start + size > res->num_pages << PAGE_SHIFT);
|
||||
WARN_ON(res && start + size > res->size);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ TRACE_EVENT(amdgpu_bo_create,
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->bo = bo;
|
||||
__entry->pages = bo->tbo.resource->num_pages;
|
||||
__entry->pages = PFN_UP(bo->tbo.resource->size);
|
||||
__entry->type = bo->tbo.resource->mem_type;
|
||||
__entry->prefer = bo->preferred_domains;
|
||||
__entry->allow = bo->allowed_domains;
|
||||
|
||||
@@ -381,7 +381,7 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
|
||||
dst.offset = 0;
|
||||
|
||||
r = amdgpu_ttm_copy_mem_to_mem(adev, &src, &dst,
|
||||
new_mem->num_pages << PAGE_SHIFT,
|
||||
new_mem->size,
|
||||
amdgpu_bo_encrypted(abo),
|
||||
bo->base.resv, &fence);
|
||||
if (r)
|
||||
@@ -424,7 +424,7 @@ error:
|
||||
static bool amdgpu_mem_visible(struct amdgpu_device *adev,
|
||||
struct ttm_resource *mem)
|
||||
{
|
||||
u64 mem_size = (u64)mem->num_pages << PAGE_SHIFT;
|
||||
u64 mem_size = (u64)mem->size;
|
||||
struct amdgpu_res_cursor cursor;
|
||||
u64 end;
|
||||
|
||||
@@ -568,7 +568,7 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_device *bdev,
|
||||
struct ttm_resource *mem)
|
||||
{
|
||||
struct amdgpu_device *adev = amdgpu_ttm_adev(bdev);
|
||||
size_t bus_size = (size_t)mem->num_pages << PAGE_SHIFT;
|
||||
size_t bus_size = (size_t)mem->size;
|
||||
|
||||
switch (mem->mem_type) {
|
||||
case TTM_PL_SYSTEM:
|
||||
|
||||
@@ -439,7 +439,7 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
|
||||
/* Allocate blocks in desired range */
|
||||
vres->flags |= DRM_BUDDY_RANGE_ALLOCATION;
|
||||
|
||||
remaining_size = (u64)vres->base.num_pages << PAGE_SHIFT;
|
||||
remaining_size = (u64)vres->base.size;
|
||||
|
||||
mutex_lock(&mgr->lock);
|
||||
while (remaining_size) {
|
||||
@@ -498,7 +498,7 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
|
||||
LIST_HEAD(temp);
|
||||
|
||||
trim_list = &vres->blocks;
|
||||
original_size = (u64)vres->base.num_pages << PAGE_SHIFT;
|
||||
original_size = (u64)vres->base.size;
|
||||
|
||||
/*
|
||||
* If size value is rounded up to min_block_size, trim the last
|
||||
@@ -533,8 +533,8 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
|
||||
amdgpu_vram_mgr_block_size(block);
|
||||
start >>= PAGE_SHIFT;
|
||||
|
||||
if (start > vres->base.num_pages)
|
||||
start -= vres->base.num_pages;
|
||||
if (start > PFN_UP(vres->base.size))
|
||||
start -= PFN_UP(vres->base.size);
|
||||
else
|
||||
start = 0;
|
||||
vres->base.start = max(vres->base.start, start);
|
||||
|
||||
@@ -649,7 +649,7 @@ bool i915_ttm_resource_mappable(struct ttm_resource *res)
|
||||
if (!i915_ttm_cpu_maps_iomem(res))
|
||||
return true;
|
||||
|
||||
return bman_res->used_visible_size == bman_res->base.num_pages;
|
||||
return bman_res->used_visible_size == PFN_UP(bman_res->base.size);
|
||||
}
|
||||
|
||||
static int i915_ttm_io_mem_reserve(struct ttm_device *bdev, struct ttm_resource *mem)
|
||||
|
||||
@@ -158,7 +158,7 @@ struct i915_refct_sgt *i915_rsgt_from_buddy_resource(struct ttm_resource *res,
|
||||
u32 page_alignment)
|
||||
{
|
||||
struct i915_ttm_buddy_resource *bman_res = to_ttm_buddy_resource(res);
|
||||
const u64 size = res->num_pages << PAGE_SHIFT;
|
||||
const u64 size = res->size;
|
||||
const u32 max_segment = round_down(UINT_MAX, page_alignment);
|
||||
struct drm_buddy *mm = bman_res->mm;
|
||||
struct list_head *blocks = &bman_res->blocks;
|
||||
@@ -177,7 +177,7 @@ struct i915_refct_sgt *i915_rsgt_from_buddy_resource(struct ttm_resource *res,
|
||||
|
||||
i915_refct_sgt_init(rsgt, size);
|
||||
st = &rsgt->table;
|
||||
if (sg_alloc_table(st, res->num_pages, GFP_KERNEL)) {
|
||||
if (sg_alloc_table(st, PFN_UP(res->size), GFP_KERNEL)) {
|
||||
i915_refct_sgt_put(rsgt);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
@@ -62,8 +62,8 @@ static int i915_ttm_buddy_man_alloc(struct ttm_resource_manager *man,
|
||||
if (place->fpfn || lpfn != man->size)
|
||||
bman_res->flags |= DRM_BUDDY_RANGE_ALLOCATION;
|
||||
|
||||
GEM_BUG_ON(!bman_res->base.num_pages);
|
||||
size = bman_res->base.num_pages << PAGE_SHIFT;
|
||||
GEM_BUG_ON(!bman_res->base.size);
|
||||
size = bman_res->base.size;
|
||||
|
||||
min_page_size = bman->default_page_size;
|
||||
if (bo->page_alignment)
|
||||
@@ -72,7 +72,7 @@ static int i915_ttm_buddy_man_alloc(struct ttm_resource_manager *man,
|
||||
GEM_BUG_ON(min_page_size < mm->chunk_size);
|
||||
GEM_BUG_ON(!IS_ALIGNED(size, min_page_size));
|
||||
|
||||
if (place->fpfn + bman_res->base.num_pages != place->lpfn &&
|
||||
if (place->fpfn + PFN_UP(bman_res->base.size) != place->lpfn &&
|
||||
place->flags & TTM_PL_FLAG_CONTIGUOUS) {
|
||||
unsigned long pages;
|
||||
|
||||
@@ -108,7 +108,7 @@ static int i915_ttm_buddy_man_alloc(struct ttm_resource_manager *man,
|
||||
goto err_free_blocks;
|
||||
|
||||
if (place->flags & TTM_PL_FLAG_CONTIGUOUS) {
|
||||
u64 original_size = (u64)bman_res->base.num_pages << PAGE_SHIFT;
|
||||
u64 original_size = (u64)bman_res->base.size;
|
||||
|
||||
drm_buddy_block_trim(mm,
|
||||
original_size,
|
||||
@@ -116,7 +116,7 @@ static int i915_ttm_buddy_man_alloc(struct ttm_resource_manager *man,
|
||||
}
|
||||
|
||||
if (lpfn <= bman->visible_size) {
|
||||
bman_res->used_visible_size = bman_res->base.num_pages;
|
||||
bman_res->used_visible_size = PFN_UP(bman_res->base.size);
|
||||
} else {
|
||||
struct drm_buddy_block *block;
|
||||
|
||||
@@ -228,7 +228,7 @@ static bool i915_ttm_buddy_man_compatible(struct ttm_resource_manager *man,
|
||||
|
||||
if (!place->fpfn &&
|
||||
place->lpfn == i915_ttm_buddy_man_visible_size(man))
|
||||
return bman_res->used_visible_size == res->num_pages;
|
||||
return bman_res->used_visible_size == PFN_UP(res->size);
|
||||
|
||||
/* Check each drm buddy block individually */
|
||||
list_for_each_entry(block, &bman_res->blocks, link) {
|
||||
|
||||
@@ -244,7 +244,7 @@ void intel_region_ttm_resource_free(struct intel_memory_region *mem,
|
||||
struct ttm_resource_manager *man = mem->region_private;
|
||||
struct ttm_buffer_object mock_bo = {};
|
||||
|
||||
mock_bo.base.size = res->num_pages << PAGE_SHIFT;
|
||||
mock_bo.base.size = res->size;
|
||||
mock_bo.bdev = &mem->i915->bdev;
|
||||
res->bo = &mock_bo;
|
||||
|
||||
|
||||
@@ -532,7 +532,7 @@ nouveau_bo_map(struct nouveau_bo *nvbo)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = ttm_bo_kmap(&nvbo->bo, 0, nvbo->bo.resource->num_pages, &nvbo->kmap);
|
||||
ret = ttm_bo_kmap(&nvbo->bo, 0, PFN_UP(nvbo->bo.base.size), &nvbo->kmap);
|
||||
|
||||
ttm_bo_unreserve(&nvbo->bo);
|
||||
return ret;
|
||||
@@ -1236,7 +1236,7 @@ vm_fault_t nouveau_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
|
||||
} else {
|
||||
/* make sure bo is in mappable vram */
|
||||
if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA ||
|
||||
bo->resource->start + bo->resource->num_pages < mappable)
|
||||
bo->resource->start + PFN_UP(bo->resource->size) < mappable)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < nvbo->placement.num_placement; ++i) {
|
||||
|
||||
@@ -52,7 +52,7 @@ nv04_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
|
||||
u32 src_offset = old_reg->start << PAGE_SHIFT;
|
||||
u32 dst_ctxdma = nouveau_bo_mem_ctxdma(bo, chan, new_reg);
|
||||
u32 dst_offset = new_reg->start << PAGE_SHIFT;
|
||||
u32 page_count = new_reg->num_pages;
|
||||
u32 page_count = PFN_UP(new_reg->size);
|
||||
int ret;
|
||||
|
||||
ret = PUSH_WAIT(push, 3);
|
||||
@@ -62,7 +62,7 @@ nv04_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
|
||||
PUSH_MTHD(push, NV039, SET_CONTEXT_DMA_BUFFER_IN, src_ctxdma,
|
||||
SET_CONTEXT_DMA_BUFFER_OUT, dst_ctxdma);
|
||||
|
||||
page_count = new_reg->num_pages;
|
||||
page_count = PFN_UP(new_reg->size);
|
||||
while (page_count) {
|
||||
int line_count = (page_count > 2047) ? 2047 : page_count;
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ nv50_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
|
||||
{
|
||||
struct nouveau_mem *mem = nouveau_mem(old_reg);
|
||||
struct nvif_push *push = chan->chan.push;
|
||||
u64 length = (new_reg->num_pages << PAGE_SHIFT);
|
||||
u64 length = new_reg->size;
|
||||
u64 src_offset = mem->vma[0].addr;
|
||||
u64 dst_offset = mem->vma[1].addr;
|
||||
int src_tiled = !!mem->kind;
|
||||
|
||||
@@ -44,7 +44,7 @@ nv84_bo_move_exec(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
PUSH_NVSQ(push, NV74C1, 0x0304, new_reg->num_pages << PAGE_SHIFT,
|
||||
PUSH_NVSQ(push, NV74C1, 0x0304, new_reg->size,
|
||||
0x0308, upper_32_bits(mem->vma[0].addr),
|
||||
0x030c, lower_32_bits(mem->vma[0].addr),
|
||||
0x0310, upper_32_bits(mem->vma[1].addr),
|
||||
|
||||
@@ -44,10 +44,10 @@ nva3_bo_move_copy(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
|
||||
struct nvif_push *push = chan->chan.push;
|
||||
u64 src_offset = mem->vma[0].addr;
|
||||
u64 dst_offset = mem->vma[1].addr;
|
||||
u32 page_count = new_reg->num_pages;
|
||||
u32 page_count = PFN_UP(new_reg->size);
|
||||
int ret;
|
||||
|
||||
page_count = new_reg->num_pages;
|
||||
page_count = PFN_UP(new_reg->size);
|
||||
while (page_count) {
|
||||
int line_count = (page_count > 8191) ? 8191 : page_count;
|
||||
|
||||
|
||||
@@ -42,10 +42,10 @@ nvc0_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
|
||||
struct nouveau_mem *mem = nouveau_mem(old_reg);
|
||||
u64 src_offset = mem->vma[0].addr;
|
||||
u64 dst_offset = mem->vma[1].addr;
|
||||
u32 page_count = new_reg->num_pages;
|
||||
u32 page_count = PFN_UP(new_reg->size);
|
||||
int ret;
|
||||
|
||||
page_count = new_reg->num_pages;
|
||||
page_count = PFN_UP(new_reg->size);
|
||||
while (page_count) {
|
||||
int line_count = (page_count > 2047) ? 2047 : page_count;
|
||||
|
||||
|
||||
@@ -37,10 +37,10 @@ nvc0_bo_move_copy(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
|
||||
struct nvif_push *push = chan->chan.push;
|
||||
u64 src_offset = mem->vma[0].addr;
|
||||
u64 dst_offset = mem->vma[1].addr;
|
||||
u32 page_count = new_reg->num_pages;
|
||||
u32 page_count = PFN_UP(new_reg->size);
|
||||
int ret;
|
||||
|
||||
page_count = new_reg->num_pages;
|
||||
page_count = PFN_UP(new_reg->size);
|
||||
while (page_count) {
|
||||
int line_count = (page_count > 8191) ? 8191 : page_count;
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ nve0_bo_move_copy(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
|
||||
PITCH_IN, PAGE_SIZE,
|
||||
PITCH_OUT, PAGE_SIZE,
|
||||
LINE_LENGTH_IN, PAGE_SIZE,
|
||||
LINE_COUNT, new_reg->num_pages);
|
||||
LINE_COUNT, PFN_UP(new_reg->size));
|
||||
|
||||
PUSH_IMMD(push, NVA0B5, LAUNCH_DMA,
|
||||
NVDEF(NVA0B5, LAUNCH_DMA, DATA_TRANSFER_TYPE, NON_PIPELINED) |
|
||||
|
||||
@@ -679,7 +679,7 @@ nouveau_gem_pushbuf_reloc_apply(struct nouveau_cli *cli,
|
||||
}
|
||||
|
||||
if (!nvbo->kmap.virtual) {
|
||||
ret = ttm_bo_kmap(&nvbo->bo, 0, nvbo->bo.resource->num_pages,
|
||||
ret = ttm_bo_kmap(&nvbo->bo, 0, PFN_UP(nvbo->bo.base.size),
|
||||
&nvbo->kmap);
|
||||
if (ret) {
|
||||
NV_PRINTK(err, cli, "failed kmap for reloc\n");
|
||||
@@ -868,8 +868,7 @@ revalidate:
|
||||
if (unlikely(cmd != req->suffix0)) {
|
||||
if (!nvbo->kmap.virtual) {
|
||||
ret = ttm_bo_kmap(&nvbo->bo, 0,
|
||||
nvbo->bo.resource->
|
||||
num_pages,
|
||||
PFN_UP(nvbo->bo.base.size),
|
||||
&nvbo->kmap);
|
||||
if (ret) {
|
||||
WIND_RING(chan);
|
||||
|
||||
@@ -115,7 +115,7 @@ nouveau_mem_host(struct ttm_resource *reg, struct ttm_tt *tt)
|
||||
|
||||
mutex_lock(&drm->master.lock);
|
||||
ret = nvif_mem_ctor_type(mmu, "ttmHostMem", cli->mem->oclass, type, PAGE_SHIFT,
|
||||
reg->num_pages << PAGE_SHIFT,
|
||||
reg->size,
|
||||
&args, sizeof(args), &mem->mem);
|
||||
mutex_unlock(&drm->master.lock);
|
||||
return ret;
|
||||
@@ -128,7 +128,7 @@ nouveau_mem_vram(struct ttm_resource *reg, bool contig, u8 page)
|
||||
struct nouveau_cli *cli = mem->cli;
|
||||
struct nouveau_drm *drm = cli->drm;
|
||||
struct nvif_mmu *mmu = &cli->mmu;
|
||||
u64 size = ALIGN(reg->num_pages << PAGE_SHIFT, 1 << page);
|
||||
u64 size = ALIGN(reg->size, 1 << page);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&drm->master.lock);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user