On Tue, Jul 21, 2020 at 09:32:38AM +0200, Christian König wrote: > Only functional change is to always keep io_reserved_count up to date > for debugging even when it is not used otherwise. Functional change in a cleanup patch. Tsk. It looks correct though ... Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > > Signed-off-by: Christian König <christian.koenig@xxxxxxx> > --- > drivers/gpu/drm/ttm/ttm_bo_util.c | 97 +++++++++++++++---------------- > 1 file changed, 48 insertions(+), 49 deletions(-) > > diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c > index 6c05f4fd15ae..7fb3e0bcbab4 100644 > --- a/drivers/gpu/drm/ttm/ttm_bo_util.c > +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c > @@ -115,39 +115,35 @@ static int ttm_mem_io_evict(struct ttm_mem_type_manager *man) > { > struct ttm_buffer_object *bo; > > - if (!man->use_io_reserve_lru || list_empty(&man->io_reserve_lru)) > + bo = list_first_entry_or_null(&man->io_reserve_lru, > + struct ttm_buffer_object, > + io_reserve_lru); > + if (!bo) > return -ENOSPC; > > - bo = list_first_entry(&man->io_reserve_lru, > - struct ttm_buffer_object, > - io_reserve_lru); > list_del_init(&bo->io_reserve_lru); > ttm_bo_unmap_virtual_locked(bo); > - > return 0; > } > > - > int ttm_mem_io_reserve(struct ttm_bo_device *bdev, > struct ttm_mem_reg *mem) > { > struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; > - int ret = 0; > + int ret; > + > + if (mem->bus.io_reserved_count++) > + return 0; > > if (!bdev->driver->io_mem_reserve) > return 0; > - if (likely(!man->use_io_reserve_lru)) > - return bdev->driver->io_mem_reserve(bdev, mem); > > - if (bdev->driver->io_mem_reserve && > - mem->bus.io_reserved_count++ == 0) { > retry: > - ret = bdev->driver->io_mem_reserve(bdev, mem); > - if (ret == -ENOSPC) { > - ret = ttm_mem_io_evict(man); > - if (ret == 0) > - goto retry; > - } > + ret = bdev->driver->io_mem_reserve(bdev, mem); > + if (ret == -ENOSPC) { > + ret = ttm_mem_io_evict(man); > + if (ret == 0) > + goto retry; > } > return ret; > } > @@ -155,35 +151,31 @@ int ttm_mem_io_reserve(struct ttm_bo_device *bdev, > void ttm_mem_io_free(struct ttm_bo_device *bdev, > struct ttm_mem_reg *mem) > { > - struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; > - > - if (likely(!man->use_io_reserve_lru)) > + if (--mem->bus.io_reserved_count) > return; > > - if (bdev->driver->io_mem_reserve && > - --mem->bus.io_reserved_count == 0 && > - bdev->driver->io_mem_free) > - bdev->driver->io_mem_free(bdev, mem); > + if (!bdev->driver->io_mem_free) > + return; > > + bdev->driver->io_mem_free(bdev, mem); > } > > int ttm_mem_io_reserve_vm(struct ttm_buffer_object *bo) > { > + struct ttm_mem_type_manager *man = &bo->bdev->man[bo->mem.mem_type]; > struct ttm_mem_reg *mem = &bo->mem; > int ret; > > - if (!mem->bus.io_reserved_vm) { > - struct ttm_mem_type_manager *man = > - &bo->bdev->man[mem->mem_type]; > + if (mem->bus.io_reserved_vm) > + return 0; > > - ret = ttm_mem_io_reserve(bo->bdev, mem); > - if (unlikely(ret != 0)) > - return ret; > - mem->bus.io_reserved_vm = true; > - if (man->use_io_reserve_lru) > - list_add_tail(&bo->io_reserve_lru, > - &man->io_reserve_lru); > - } > + ret = ttm_mem_io_reserve(bo->bdev, mem); > + if (unlikely(ret != 0)) > + return ret; > + mem->bus.io_reserved_vm = true; > + if (man->use_io_reserve_lru) > + list_add_tail(&bo->io_reserve_lru, > + &man->io_reserve_lru); > return 0; > } > > @@ -191,15 +183,17 @@ void ttm_mem_io_free_vm(struct ttm_buffer_object *bo) > { > struct ttm_mem_reg *mem = &bo->mem; > > - if (mem->bus.io_reserved_vm) { > - mem->bus.io_reserved_vm = false; > - list_del_init(&bo->io_reserve_lru); > - ttm_mem_io_free(bo->bdev, mem); > - } > + if (!mem->bus.io_reserved_vm) > + return; > + > + mem->bus.io_reserved_vm = false; > + list_del_init(&bo->io_reserve_lru); > + ttm_mem_io_free(bo->bdev, mem); > } > > -static int ttm_mem_reg_ioremap(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem, > - void **virtual) > +static int ttm_mem_reg_ioremap(struct ttm_bo_device *bdev, > + struct ttm_mem_reg *mem, > + void **virtual) > { > struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; > int ret; > @@ -216,9 +210,11 @@ static int ttm_mem_reg_ioremap(struct ttm_bo_device *bdev, struct ttm_mem_reg *m > addr = mem->bus.addr; > } else { > if (mem->placement & TTM_PL_FLAG_WC) > - addr = ioremap_wc(mem->bus.base + mem->bus.offset, mem->bus.size); > + addr = ioremap_wc(mem->bus.base + mem->bus.offset, > + mem->bus.size); > else > - addr = ioremap(mem->bus.base + mem->bus.offset, mem->bus.size); > + addr = ioremap(mem->bus.base + mem->bus.offset, > + mem->bus.size); > if (!addr) { > (void) ttm_mem_io_lock(man, false); > ttm_mem_io_free(bdev, mem); > @@ -230,8 +226,9 @@ static int ttm_mem_reg_ioremap(struct ttm_bo_device *bdev, struct ttm_mem_reg *m > return 0; > } > > -static void ttm_mem_reg_iounmap(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem, > - void *virtual) > +static void ttm_mem_reg_iounmap(struct ttm_bo_device *bdev, > + struct ttm_mem_reg *mem, > + void *virtual) > { > struct ttm_mem_type_manager *man; > > @@ -513,11 +510,13 @@ static int ttm_bo_ioremap(struct ttm_buffer_object *bo, > } else { > map->bo_kmap_type = ttm_bo_map_iomap; > if (mem->placement & TTM_PL_FLAG_WC) > - map->virtual = ioremap_wc(bo->mem.bus.base + bo->mem.bus.offset + offset, > + map->virtual = ioremap_wc(bo->mem.bus.base + > + bo->mem.bus.offset + offset, > size); > else > - map->virtual = ioremap(bo->mem.bus.base + bo->mem.bus.offset + offset, > - size); > + map->virtual = ioremap(bo->mem.bus.base + > + bo->mem.bus.offset + offset, > + size); > } > return (!map->virtual) ? -ENOMEM : 0; > } > -- > 2.17.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel