drm/radeon: keep start and end offset in the SA
authorChristian König <deathsimple@vodafone.de>
Wed, 9 May 2012 13:34:52 +0000 (15:34 +0200)
committerDave Airlie <airlied@redhat.com>
Wed, 9 May 2012 16:22:34 +0000 (17:22 +0100)
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>
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_cs.c
drivers/gpu/drm/radeon/radeon_object.h
drivers/gpu/drm/radeon/radeon_sa.c

index 8a6b1b3..d1c2154 100644 (file)
@@ -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;
 };
 
 /*
index 289b0d7..b778037 100644 (file)
@@ -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:
index d9fca1e..99ab46a 100644 (file)
@@ -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,
index 1db0568..3bea7ba 100644 (file)
@@ -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);
 }