drm/radeon: keep start and end offset in the SA
Instead of offset + size keep start and end offset directly. Signed-off-by: Christian König <deathsimple@vodafone.de> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
711a972933
commit
e6661a9664
@ -396,8 +396,8 @@ struct radeon_sa_bo;
|
||||
struct radeon_sa_bo {
|
||||
struct list_head list;
|
||||
struct radeon_sa_manager *manager;
|
||||
unsigned offset;
|
||||
unsigned size;
|
||||
unsigned soffset;
|
||||
unsigned eoffset;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -477,7 +477,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev,
|
||||
/* ib pool is bind at 0 in virtual address space to gpu_addr is the
|
||||
* offset inside the pool bo
|
||||
*/
|
||||
parser->const_ib->gpu_addr = parser->const_ib->sa_bo.offset;
|
||||
parser->const_ib->gpu_addr = parser->const_ib->sa_bo.soffset;
|
||||
r = radeon_ib_schedule(rdev, parser->const_ib);
|
||||
if (r)
|
||||
goto out;
|
||||
@ -487,7 +487,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev,
|
||||
/* ib pool is bind at 0 in virtual address space to gpu_addr is the
|
||||
* offset inside the pool bo
|
||||
*/
|
||||
parser->ib->gpu_addr = parser->ib->sa_bo.offset;
|
||||
parser->ib->gpu_addr = parser->ib->sa_bo.soffset;
|
||||
parser->ib->is_const_ib = false;
|
||||
r = radeon_ib_schedule(rdev, parser->ib);
|
||||
out:
|
||||
|
@ -149,12 +149,12 @@ extern struct radeon_bo_va *radeon_bo_va(struct radeon_bo *rbo,
|
||||
|
||||
static inline uint64_t radeon_sa_bo_gpu_addr(struct radeon_sa_bo *sa_bo)
|
||||
{
|
||||
return sa_bo->manager->gpu_addr + sa_bo->offset;
|
||||
return sa_bo->manager->gpu_addr + sa_bo->soffset;
|
||||
}
|
||||
|
||||
static inline void * radeon_sa_bo_cpu_addr(struct radeon_sa_bo *sa_bo)
|
||||
{
|
||||
return sa_bo->manager->cpu_ptr + sa_bo->offset;
|
||||
return sa_bo->manager->cpu_ptr + sa_bo->soffset;
|
||||
}
|
||||
|
||||
extern int radeon_sa_bo_manager_init(struct radeon_device *rdev,
|
||||
|
@ -152,11 +152,11 @@ int radeon_sa_bo_new(struct radeon_device *rdev,
|
||||
offset = 0;
|
||||
list_for_each_entry(tmp, &sa_manager->sa_bo, list) {
|
||||
/* room before this object ? */
|
||||
if (offset < tmp->offset && (tmp->offset - offset) >= size) {
|
||||
if (offset < tmp->soffset && (tmp->soffset - offset) >= size) {
|
||||
head = tmp->list.prev;
|
||||
goto out;
|
||||
}
|
||||
offset = tmp->offset + tmp->size;
|
||||
offset = tmp->eoffset;
|
||||
wasted = offset % align;
|
||||
if (wasted) {
|
||||
wasted = align - wasted;
|
||||
@ -166,7 +166,7 @@ int radeon_sa_bo_new(struct radeon_device *rdev,
|
||||
/* room at the end ? */
|
||||
head = sa_manager->sa_bo.prev;
|
||||
tmp = list_entry(head, struct radeon_sa_bo, list);
|
||||
offset = tmp->offset + tmp->size;
|
||||
offset = tmp->eoffset;
|
||||
wasted = offset % align;
|
||||
if (wasted) {
|
||||
wasted = align - wasted;
|
||||
@ -180,8 +180,8 @@ int radeon_sa_bo_new(struct radeon_device *rdev,
|
||||
|
||||
out:
|
||||
sa_bo->manager = sa_manager;
|
||||
sa_bo->offset = offset;
|
||||
sa_bo->size = size;
|
||||
sa_bo->soffset = offset;
|
||||
sa_bo->eoffset = offset + size;
|
||||
list_add(&sa_bo->list, head);
|
||||
spin_unlock(&sa_manager->lock);
|
||||
return 0;
|
||||
@ -202,7 +202,8 @@ void radeon_sa_bo_dump_debug_info(struct radeon_sa_manager *sa_manager,
|
||||
|
||||
spin_lock(&sa_manager->lock);
|
||||
list_for_each_entry(i, &sa_manager->sa_bo, list) {
|
||||
seq_printf(m, "offset %08d: size %4d\n", i->offset, i->size);
|
||||
seq_printf(m, "[%08x %08x] size %4d [%p]\n",
|
||||
i->soffset, i->eoffset, i->eoffset - i->soffset, i);
|
||||
}
|
||||
spin_unlock(&sa_manager->lock);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user