From 09b2f6124a9ad850dcefc18c30462908341b0f7a Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 21 Mar 2017 16:10:08 -0700 Subject: [PATCH] i965/drm: Switch to util/list.h instead of libdrm_lists.h. Both are kernel style lists, so this is trivial. Reviewed-by: Chris Wilson Acked-by: Jason Ekstrand --- src/mesa/drivers/dri/i965/Makefile.sources | 1 - src/mesa/drivers/dri/i965/intel_bufmgr_gem.c | 91 ++++++++++---------- src/mesa/drivers/dri/i965/libdrm_lists.h | 122 --------------------------- 3 files changed, 45 insertions(+), 169 deletions(-) delete mode 100644 src/mesa/drivers/dri/i965/libdrm_lists.h diff --git a/src/mesa/drivers/dri/i965/Makefile.sources b/src/mesa/drivers/dri/i965/Makefile.sources index 9ae764f..1d2c6e0 100644 --- a/src/mesa/drivers/dri/i965/Makefile.sources +++ b/src/mesa/drivers/dri/i965/Makefile.sources @@ -163,7 +163,6 @@ i965_FILES = \ intel_tiled_memcpy.c \ intel_tiled_memcpy.h \ intel_upload.c \ - libdrm_lists.h \ libdrm_macros.h \ uthash.h diff --git a/src/mesa/drivers/dri/i965/intel_bufmgr_gem.c b/src/mesa/drivers/dri/i965/intel_bufmgr_gem.c index c67f813..e116788 100644 --- a/src/mesa/drivers/dri/i965/intel_bufmgr_gem.c +++ b/src/mesa/drivers/dri/i965/intel_bufmgr_gem.c @@ -57,7 +57,7 @@ #define ETIME ETIMEDOUT #endif #include "libdrm_macros.h" -#include "libdrm_lists.h" +#include "util/list.h" #include "brw_bufmgr.h" #include "intel_bufmgr_priv.h" #include "intel_chipset.h" @@ -113,7 +113,7 @@ atomic_add_unless(int *v, int add, int unless) typedef struct _drm_bacon_bo_gem drm_bacon_bo_gem; struct drm_bacon_gem_bo_bucket { - drmMMListHead head; + struct list_head head; unsigned long size; }; @@ -139,12 +139,12 @@ typedef struct _drm_bacon_bufmgr_gem { int num_buckets; time_t time; - drmMMListHead managers; + struct list_head managers; drm_bacon_bo_gem *name_table; drm_bacon_bo_gem *handle_table; - drmMMListHead vma_cache; + struct list_head vma_cache; int vma_count, vma_open, vma_max; uint64_t gtt_size; @@ -237,10 +237,10 @@ struct _drm_bacon_bo_gem { */ void *user_virtual; int map_count; - drmMMListHead vma_list; + struct list_head vma_list; /** BO cache list */ - drmMMListHead head; + struct list_head head; /** * Boolean of whether this BO and its children have been included in @@ -701,16 +701,16 @@ static void drm_bacon_gem_bo_cache_purge_bucket(drm_bacon_bufmgr_gem *bufmgr_gem, struct drm_bacon_gem_bo_bucket *bucket) { - while (!DRMLISTEMPTY(&bucket->head)) { + while (!list_empty(&bucket->head)) { drm_bacon_bo_gem *bo_gem; - bo_gem = DRMLISTENTRY(drm_bacon_bo_gem, - bucket->head.next, head); + bo_gem = LIST_ENTRY(drm_bacon_bo_gem, + bucket->head.next, head); if (drm_bacon_gem_bo_madvise_internal (bufmgr_gem, bo_gem, I915_MADV_DONTNEED)) break; - DRMLISTDEL(&bo_gem->head); + list_del(&bo_gem->head); drm_bacon_gem_bo_free(&bo_gem->bo); } } @@ -754,15 +754,15 @@ drm_bacon_gem_bo_alloc_internal(drm_bacon_bufmgr *bufmgr, /* Get a buffer out of the cache if available */ retry: alloc_from_cache = false; - if (bucket != NULL && !DRMLISTEMPTY(&bucket->head)) { + if (bucket != NULL && !list_empty(&bucket->head)) { if (for_render) { /* Allocate new render-target BOs from the tail (MRU) * of the list, as it will likely be hot in the GPU * cache and in the aperture for us. */ - bo_gem = DRMLISTENTRY(drm_bacon_bo_gem, - bucket->head.prev, head); - DRMLISTDEL(&bo_gem->head); + bo_gem = LIST_ENTRY(drm_bacon_bo_gem, + bucket->head.prev, head); + list_del(&bo_gem->head); alloc_from_cache = true; bo_gem->bo.align = alignment; } else { @@ -774,11 +774,11 @@ retry: * allocating a new buffer is probably faster than * waiting for the GPU to finish. */ - bo_gem = DRMLISTENTRY(drm_bacon_bo_gem, - bucket->head.next, head); + bo_gem = LIST_ENTRY(drm_bacon_bo_gem, + bucket->head.next, head); if (!drm_bacon_gem_bo_busy(&bo_gem->bo)) { alloc_from_cache = true; - DRMLISTDEL(&bo_gem->head); + list_del(&bo_gem->head); } } @@ -807,9 +807,9 @@ retry: if (!bo_gem) goto err; - /* drm_bacon_gem_bo_free calls DRMLISTDEL() for an uninitialized + /* drm_bacon_gem_bo_free calls list_del() for an uninitialized list (vma_list), so better set the list head here */ - DRMINITLISTHEAD(&bo_gem->vma_list); + list_inithead(&bo_gem->vma_list); bo_gem->bo.size = bo_size; @@ -965,7 +965,7 @@ drm_bacon_gem_bo_alloc_userptr(drm_bacon_bufmgr *bufmgr, return NULL; p_atomic_set(&bo_gem->refcount, 1); - DRMINITLISTHEAD(&bo_gem->vma_list); + list_inithead(&bo_gem->vma_list); bo_gem->bo.size = size; @@ -1142,7 +1142,7 @@ drm_bacon_bo_gem_create_from_name(drm_bacon_bufmgr *bufmgr, goto out; p_atomic_set(&bo_gem->refcount, 1); - DRMINITLISTHEAD(&bo_gem->vma_list); + list_inithead(&bo_gem->vma_list); bo_gem->bo.size = open_arg.size; bo_gem->bo.offset = 0; @@ -1193,7 +1193,7 @@ drm_bacon_gem_bo_free(drm_bacon_bo *bo) struct drm_gem_close close; int ret; - DRMLISTDEL(&bo_gem->vma_list); + list_del(&bo_gem->vma_list); if (bo_gem->mem_virtual) { VG(VALGRIND_FREELIKE_BLOCK(bo_gem->mem_virtual, 0)); drm_munmap(bo_gem->mem_virtual, bo_gem->bo.size); @@ -1254,15 +1254,15 @@ drm_bacon_gem_cleanup_bo_cache(drm_bacon_bufmgr_gem *bufmgr_gem, time_t time) struct drm_bacon_gem_bo_bucket *bucket = &bufmgr_gem->cache_bucket[i]; - while (!DRMLISTEMPTY(&bucket->head)) { + while (!list_empty(&bucket->head)) { drm_bacon_bo_gem *bo_gem; - bo_gem = DRMLISTENTRY(drm_bacon_bo_gem, - bucket->head.next, head); + bo_gem = LIST_ENTRY(drm_bacon_bo_gem, + bucket->head.next, head); if (time - bo_gem->free_time <= 1) break; - DRMLISTDEL(&bo_gem->head); + list_del(&bo_gem->head); drm_bacon_gem_bo_free(&bo_gem->bo); } @@ -1289,11 +1289,11 @@ static void drm_bacon_gem_bo_purge_vma_cache(drm_bacon_bufmgr_gem *bufmgr_gem) while (bufmgr_gem->vma_count > limit) { drm_bacon_bo_gem *bo_gem; - bo_gem = DRMLISTENTRY(drm_bacon_bo_gem, - bufmgr_gem->vma_cache.next, - vma_list); + bo_gem = LIST_ENTRY(drm_bacon_bo_gem, + bufmgr_gem->vma_cache.next, + vma_list); assert(bo_gem->map_count == 0); - DRMLISTDELINIT(&bo_gem->vma_list); + list_delinit(&bo_gem->vma_list); if (bo_gem->mem_virtual) { drm_munmap(bo_gem->mem_virtual, bo_gem->bo.size); @@ -1317,7 +1317,7 @@ static void drm_bacon_gem_bo_close_vma(drm_bacon_bufmgr_gem *bufmgr_gem, drm_bacon_bo_gem *bo_gem) { bufmgr_gem->vma_open--; - DRMLISTADDTAIL(&bo_gem->vma_list, &bufmgr_gem->vma_cache); + list_addtail(&bo_gem->vma_list, &bufmgr_gem->vma_cache); if (bo_gem->mem_virtual) bufmgr_gem->vma_count++; if (bo_gem->wc_virtual) @@ -1331,7 +1331,7 @@ static void drm_bacon_gem_bo_open_vma(drm_bacon_bufmgr_gem *bufmgr_gem, drm_bacon_bo_gem *bo_gem) { bufmgr_gem->vma_open++; - DRMLISTDEL(&bo_gem->vma_list); + list_del(&bo_gem->vma_list); if (bo_gem->mem_virtual) bufmgr_gem->vma_count--; if (bo_gem->wc_virtual) @@ -1401,7 +1401,7 @@ drm_bacon_gem_bo_unreference_final(drm_bacon_bo *bo, time_t time) bo_gem->name = NULL; bo_gem->validate_index = -1; - DRMLISTADDTAIL(&bo_gem->head, &bucket->head); + list_addtail(&bo_gem->head, &bucket->head); } else { drm_bacon_gem_bo_free(bo); } @@ -1928,10 +1928,10 @@ drm_bacon_bufmgr_gem_destroy(drm_bacon_bufmgr *bufmgr) &bufmgr_gem->cache_bucket[i]; drm_bacon_bo_gem *bo_gem; - while (!DRMLISTEMPTY(&bucket->head)) { - bo_gem = DRMLISTENTRY(drm_bacon_bo_gem, - bucket->head.next, head); - DRMLISTDEL(&bo_gem->head); + while (!list_empty(&bucket->head)) { + bo_gem = LIST_ENTRY(drm_bacon_bo_gem, + bucket->head.next, head); + list_del(&bo_gem->head); drm_bacon_gem_bo_free(&bo_gem->bo); } @@ -2668,7 +2668,7 @@ drm_bacon_bo_gem_create_from_prime(drm_bacon_bufmgr *bufmgr, int prime_fd, int s goto out; p_atomic_set(&bo_gem->refcount, 1); - DRMINITLISTHEAD(&bo_gem->vma_list); + list_inithead(&bo_gem->vma_list); /* Determine size of bo. The fd-to-handle ioctl really should * return the size, but it doesn't. If we have kernel 3.12 or @@ -3084,7 +3084,7 @@ add_bucket(drm_bacon_bufmgr_gem *bufmgr_gem, int size) assert(i < ARRAY_SIZE(bufmgr_gem->cache_bucket)); - DRMINITLISTHEAD(&bufmgr_gem->cache_bucket[i].head); + list_inithead(&bufmgr_gem->cache_bucket[i].head); bufmgr_gem->cache_bucket[i].size = size; bufmgr_gem->num_buckets++; } @@ -3369,14 +3369,13 @@ drm_bacon_get_min_eu_in_pool(int fd) } static pthread_mutex_t bufmgr_list_mutex = PTHREAD_MUTEX_INITIALIZER; -static drmMMListHead bufmgr_list = { &bufmgr_list, &bufmgr_list }; +static struct list_head bufmgr_list = { &bufmgr_list, &bufmgr_list }; static drm_bacon_bufmgr_gem * drm_bacon_bufmgr_gem_find(int fd) { - drm_bacon_bufmgr_gem *bufmgr_gem; - - DRMLISTFOREACHENTRY(bufmgr_gem, &bufmgr_list, managers) { + list_for_each_entry(drm_bacon_bufmgr_gem, + bufmgr_gem, &bufmgr_list, managers) { if (bufmgr_gem->fd == fd) { p_atomic_inc(&bufmgr_gem->refcount); return bufmgr_gem; @@ -3395,7 +3394,7 @@ drm_bacon_bufmgr_gem_unref(drm_bacon_bufmgr *bufmgr) pthread_mutex_lock(&bufmgr_list_mutex); if (p_atomic_dec_zero(&bufmgr_gem->refcount)) { - DRMLISTDEL(&bufmgr_gem->managers); + list_del(&bufmgr_gem->managers); drm_bacon_bufmgr_gem_destroy(bufmgr); } @@ -3751,10 +3750,10 @@ drm_bacon_bufmgr_gem_init(int fd, int batch_size) init_cache_buckets(bufmgr_gem); - DRMINITLISTHEAD(&bufmgr_gem->vma_cache); + list_inithead(&bufmgr_gem->vma_cache); bufmgr_gem->vma_max = -1; /* unlimited by default */ - DRMLISTADD(&bufmgr_gem->managers, &bufmgr_list); + list_add(&bufmgr_gem->managers, &bufmgr_list); exit: pthread_mutex_unlock(&bufmgr_list_mutex); diff --git a/src/mesa/drivers/dri/i965/libdrm_lists.h b/src/mesa/drivers/dri/i965/libdrm_lists.h deleted file mode 100644 index f6f46a2..0000000 --- a/src/mesa/drivers/dri/i965/libdrm_lists.h +++ /dev/null @@ -1,122 +0,0 @@ -/************************************************************************** - * - * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND. USA. - * All Rights Reserved. - * - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ - -/* - * List macros heavily inspired by the Linux kernel - * list handling. No list looping yet. - */ - -#include - -#ifndef typeof -#define typeof __typeof__ -#endif - -typedef struct _drmMMListHead -{ - struct _drmMMListHead *prev; - struct _drmMMListHead *next; -} drmMMListHead; - -#define DRMINITLISTHEAD(__item) \ - do{ \ - (__item)->prev = (__item); \ - (__item)->next = (__item); \ - } while (0) - -#define DRMLISTADD(__item, __list) \ - do { \ - (__item)->prev = (__list); \ - (__item)->next = (__list)->next; \ - (__list)->next->prev = (__item); \ - (__list)->next = (__item); \ - } while (0) - -#define DRMLISTADDTAIL(__item, __list) \ - do { \ - (__item)->next = (__list); \ - (__item)->prev = (__list)->prev; \ - (__list)->prev->next = (__item); \ - (__list)->prev = (__item); \ - } while(0) - -#define DRMLISTDEL(__item) \ - do { \ - (__item)->prev->next = (__item)->next; \ - (__item)->next->prev = (__item)->prev; \ - } while(0) - -#define DRMLISTDELINIT(__item) \ - do { \ - (__item)->prev->next = (__item)->next; \ - (__item)->next->prev = (__item)->prev; \ - (__item)->next = (__item); \ - (__item)->prev = (__item); \ - } while(0) - -#define DRMLISTENTRY(__type, __item, __field) \ - ((__type *)(((char *) (__item)) - offsetof(__type, __field))) - -#define DRMLISTEMPTY(__item) ((__item)->next == (__item)) - -#define DRMLISTSINGLE(__list) \ - (!DRMLISTEMPTY(__list) && ((__list)->next == (__list)->prev)) - -#define DRMLISTFOREACH(__item, __list) \ - for ((__item) = (__list)->next; \ - (__item) != (__list); (__item) = (__item)->next) - -#define DRMLISTFOREACHSAFE(__item, __temp, __list) \ - for ((__item) = (__list)->next, (__temp) = (__item)->next; \ - (__item) != (__list); \ - (__item) = (__temp), (__temp) = (__item)->next) - -#define DRMLISTFOREACHSAFEREVERSE(__item, __temp, __list) \ - for ((__item) = (__list)->prev, (__temp) = (__item)->prev; \ - (__item) != (__list); \ - (__item) = (__temp), (__temp) = (__item)->prev) - -#define DRMLISTFOREACHENTRY(__item, __list, __head) \ - for ((__item) = DRMLISTENTRY(typeof(*__item), (__list)->next, __head); \ - &(__item)->__head != (__list); \ - (__item) = DRMLISTENTRY(typeof(*__item), \ - (__item)->__head.next, __head)) - -#define DRMLISTFOREACHENTRYSAFE(__item, __temp, __list, __head) \ - for ((__item) = DRMLISTENTRY(typeof(*__item), (__list)->next, __head), \ - (__temp) = DRMLISTENTRY(typeof(*__item), \ - (__item)->__head.next, __head); \ - &(__item)->__head != (__list); \ - (__item) = (__temp), \ - (__temp) = DRMLISTENTRY(typeof(*__item), \ - (__temp)->__head.next, __head)) - -#define DRMLISTJOIN(__list, __join) if (!DRMLISTEMPTY(__list)) { \ - (__list)->next->prev = (__join); \ - (__list)->prev->next = (__join)->next; \ - (__join)->next->prev = (__list)->prev; \ - (__join)->next = (__list)->next; \ -} -- 2.7.4