Isn't this the same as src/util/simple_list.h? On 04/27/2015 09:03 PM, Jason Ekstrand wrote: > The linked list in gallium is pretty much the kernel list and we would like > to have a C-based linked list for all of mesa. Let's not duplicate and > just steal the gallium one. > --- > src/gallium/auxiliary/Makefile.sources | 1 - > src/gallium/auxiliary/hud/hud_private.h | 2 +- > .../auxiliary/pipebuffer/pb_buffer_fenced.c | 2 +- > src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c | 2 +- > src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c | 2 +- > src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c | 2 +- > src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c | 2 +- > src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c | 2 +- > src/gallium/auxiliary/util/u_debug_flush.c | 2 +- > src/gallium/auxiliary/util/u_debug_memory.c | 2 +- > src/gallium/auxiliary/util/u_dirty_surfaces.h | 2 +- > src/gallium/auxiliary/util/u_double_list.h | 146 > --------------------- > src/gallium/drivers/freedreno/freedreno_context.h | 2 +- > src/gallium/drivers/freedreno/freedreno_query_hw.h | 2 +- > src/gallium/drivers/freedreno/freedreno_resource.h | 2 +- > src/gallium/drivers/ilo/ilo_common.h | 2 +- > src/gallium/drivers/nouveau/nouveau_buffer.h | 2 +- > src/gallium/drivers/nouveau/nouveau_fence.c | 2 - > src/gallium/drivers/nouveau/nouveau_fence.h | 2 +- > src/gallium/drivers/nouveau/nouveau_mm.c | 2 +- > src/gallium/drivers/nouveau/nv30/nv30_screen.h | 2 +- > src/gallium/drivers/nouveau/nv50/nv50_resource.h | 2 +- > src/gallium/drivers/r600/compute_memory_pool.c | 2 +- > src/gallium/drivers/r600/evergreen_compute.c | 2 +- > src/gallium/drivers/r600/r600_llvm.c | 2 +- > src/gallium/drivers/r600/r600_pipe.h | 2 +- > src/gallium/drivers/radeon/r600_pipe_common.h | 2 +- > src/gallium/drivers/radeon/radeon_vce.h | 2 +- > src/gallium/drivers/svga/svga_context.h | 2 +- > src/gallium/drivers/svga/svga_resource_buffer.h | 2 - > .../drivers/svga/svga_resource_buffer_upload.c | 1 - > src/gallium/drivers/svga/svga_screen_cache.h | 2 +- > src/gallium/state_trackers/nine/basetexture9.h | 2 +- > src/gallium/state_trackers/nine/device9.h | 2 +- > src/gallium/state_trackers/nine/nine_state.h | 2 +- > src/gallium/state_trackers/nine/surface9.h | 2 +- > src/gallium/state_trackers/omx/vid_dec.h | 2 +- > src/gallium/state_trackers/omx/vid_enc.h | 2 +- > src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 2 +- > .../winsys/svga/drm/pb_buffer_simple_fenced.c | 2 +- > src/gallium/winsys/svga/drm/vmw_fence.c | 2 +- > src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 2 +- > src/util/Makefile.sources | 1 + > src/util/list.h | 146 > +++++++++++++++++++++ > 44 files changed, 184 insertions(+), 189 deletions(-) > delete mode 100644 src/gallium/auxiliary/util/u_double_list.h > create mode 100644 src/util/list.h > > diff --git a/src/gallium/auxiliary/Makefile.sources > b/src/gallium/auxiliary/Makefile.sources > index ec7547c..62e6b94 100644 > --- a/src/gallium/auxiliary/Makefile.sources > +++ b/src/gallium/auxiliary/Makefile.sources > @@ -197,7 +197,6 @@ C_SOURCES := \ > util/u_dirty_surfaces.h \ > util/u_dl.c \ > util/u_dl.h \ > - util/u_double_list.h \ > util/u_draw.c \ > util/u_draw.h \ > util/u_draw_quad.c \ > diff --git a/src/gallium/auxiliary/hud/hud_private.h > b/src/gallium/auxiliary/hud/hud_private.h > index 1606ada..c74dc3b 100644 > --- a/src/gallium/auxiliary/hud/hud_private.h > +++ b/src/gallium/auxiliary/hud/hud_private.h > @@ -29,7 +29,7 @@ > #define HUD_PRIVATE_H > > #include "pipe/p_context.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > struct hud_graph { > /* initialized by common code */ > diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c > b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c > index 9e0cace..7840467 100644 > --- a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c > +++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c > @@ -46,7 +46,7 @@ > #include "util/u_debug.h" > #include "os/os_thread.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "pb_buffer.h" > #include "pb_buffer_fenced.h" > diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c > b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c > index 5eb8d06..5023687 100644 > --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c > +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c > @@ -38,7 +38,7 @@ > #include "util/u_debug.h" > #include "os/os_thread.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_time.h" > > #include "pb_buffer.h" > diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c > b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c > index e5d8118..6236afb 100644 > --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c > +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c > @@ -38,7 +38,7 @@ > #include "os/os_thread.h" > #include "util/u_math.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_time.h" > #include "util/u_debug_stack.h" > > diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c > b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c > index aa98907..84eb6ed 100644 > --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c > +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c > @@ -37,7 +37,7 @@ > #include "util/u_debug.h" > #include "os/os_thread.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_mm.h" > #include "pb_buffer.h" > #include "pb_bufmgr.h" > diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c > b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c > index f2ff2d8..51525b0 100644 > --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c > +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c > @@ -40,7 +40,7 @@ > #include "os/os_thread.h" > #include "pipe/p_defines.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "pb_buffer.h" > #include "pb_bufmgr.h" > diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c > b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c > index 00a1dee..6a62b4f 100644 > --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c > +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c > @@ -41,7 +41,7 @@ > #include "os/os_thread.h" > #include "pipe/p_defines.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_time.h" > > #include "pb_buffer.h" > diff --git a/src/gallium/auxiliary/util/u_debug_flush.c > b/src/gallium/auxiliary/util/u_debug_flush.c > index cdefca2..52e72cd 100644 > --- a/src/gallium/auxiliary/util/u_debug_flush.c > +++ b/src/gallium/auxiliary/util/u_debug_flush.c > @@ -44,7 +44,7 @@ > #include "util/u_memory.h" > #include "util/u_debug_flush.h" > #include "util/u_hash_table.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_inlines.h" > #include "util/u_string.h" > #include "os/os_thread.h" > diff --git a/src/gallium/auxiliary/util/u_debug_memory.c > b/src/gallium/auxiliary/util/u_debug_memory.c > index 1ad0e72..747837c 100644 > --- a/src/gallium/auxiliary/util/u_debug_memory.c > +++ b/src/gallium/auxiliary/util/u_debug_memory.c > @@ -42,7 +42,7 @@ > > #include "util/u_debug.h" > #include "util/u_debug_stack.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > > #define DEBUG_MEMORY_MAGIC 0x6e34090aU > diff --git a/src/gallium/auxiliary/util/u_dirty_surfaces.h > b/src/gallium/auxiliary/util/u_dirty_surfaces.h > index f3618d9..d31f8b9 100644 > --- a/src/gallium/auxiliary/util/u_dirty_surfaces.h > +++ b/src/gallium/auxiliary/util/u_dirty_surfaces.h > @@ -29,7 +29,7 @@ > > #include "pipe/p_state.h" > > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_math.h" > > struct pipe_context; > diff --git a/src/gallium/auxiliary/util/u_double_list.h > b/src/gallium/auxiliary/util/u_double_list.h > deleted file mode 100644 > index e808333..0000000 > --- a/src/gallium/auxiliary/util/u_double_list.h > +++ /dev/null > @@ -1,146 +0,0 @@ > -/************************************************************************** > - * > - * Copyright 2006 VMware, 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. > - * > - **************************************************************************/ > - > -/** > - * \file > - * List macros heavily inspired by the Linux kernel > - * list handling. No list looping yet. > - * > - * Is not threadsafe, so common operations need to > - * be protected using an external mutex. > - */ > - > -#ifndef _U_DOUBLE_LIST_H_ > -#define _U_DOUBLE_LIST_H_ > - > - > -#include <stddef.h> > - > - > -struct list_head > -{ > - struct list_head *prev; > - struct list_head *next; > -}; > - > -static inline void list_inithead(struct list_head *item) > -{ > - item->prev = item; > - item->next = item; > -} > - > -static inline void list_add(struct list_head *item, struct list_head *list) > -{ > - item->prev = list; > - item->next = list->next; > - list->next->prev = item; > - list->next = item; > -} > - > -static inline void list_addtail(struct list_head *item, struct list_head > *list) > -{ > - item->next = list; > - item->prev = list->prev; > - list->prev->next = item; > - list->prev = item; > -} > - > -static inline void list_replace(struct list_head *from, struct list_head *to) > -{ > - to->prev = from->prev; > - to->next = from->next; > - from->next->prev = to; > - from->prev->next = to; > -} > - > -static inline void list_del(struct list_head *item) > -{ > - item->prev->next = item->next; > - item->next->prev = item->prev; > - item->prev = item->next = NULL; > -} > - > -static inline void list_delinit(struct list_head *item) > -{ > - item->prev->next = item->next; > - item->next->prev = item->prev; > - item->next = item; > - item->prev = item; > -} > - > -#define LIST_INITHEAD(__item) list_inithead(__item) > -#define LIST_ADD(__item, __list) list_add(__item, __list) > -#define LIST_ADDTAIL(__item, __list) list_addtail(__item, __list) > -#define LIST_REPLACE(__from, __to) list_replace(__from, __to) > -#define LIST_DEL(__item) list_del(__item) > -#define LIST_DELINIT(__item) list_delinit(__item) > - > -#define LIST_ENTRY(__type, __item, __field) \ > - ((__type *)(((char *)(__item)) - offsetof(__type, __field))) > - > -#define LIST_IS_EMPTY(__list) \ > - ((__list)->next == (__list)) > - > -/** > - * Cast from a pointer to a member of a struct back to the containing struct. > - * > - * 'sample' MUST be initialized, or else the result is undefined! > - */ > -#ifndef container_of > -#define container_of(ptr, sample, member) \ > - (void *)((char *)(ptr) \ > - - ((char *)&(sample)->member - (char *)(sample))) > -#endif > - > -#define LIST_FOR_EACH_ENTRY(pos, head, member) > \ > - for (pos = NULL, pos = container_of((head)->next, pos, member); \ > - &pos->member != (head); \ > - pos = container_of(pos->member.next, pos, member)) > - > -#define LIST_FOR_EACH_ENTRY_SAFE(pos, storage, head, member) \ > - for (pos = NULL, pos = container_of((head)->next, pos, member), \ > - storage = container_of(pos->member.next, pos, member); \ > - &pos->member != (head); \ > - pos = storage, storage = container_of(storage->member.next, storage, > member)) > - > -#define LIST_FOR_EACH_ENTRY_SAFE_REV(pos, storage, head, member) \ > - for (pos = NULL, pos = container_of((head)->prev, pos, member), \ > - storage = container_of(pos->member.prev, pos, member); \ > - &pos->member != (head); \ > - pos = storage, storage = container_of(storage->member.prev, storage, > member)) > - > -#define LIST_FOR_EACH_ENTRY_FROM(pos, start, head, member) \ > - for (pos = NULL, pos = container_of((start), pos, member); > \ > - &pos->member != (head); \ > - pos = container_of(pos->member.next, pos, member)) > - > -#define LIST_FOR_EACH_ENTRY_FROM_REV(pos, start, head, member) > \ > - for (pos = NULL, pos = container_of((start), pos, member); > \ > - &pos->member != (head); \ > - pos = container_of(pos->member.prev, pos, member)) > - > -#endif /*_U_DOUBLE_LIST_H_*/ > diff --git a/src/gallium/drivers/freedreno/freedreno_context.h > b/src/gallium/drivers/freedreno/freedreno_context.h > index a648689..1014c7b 100644 > --- a/src/gallium/drivers/freedreno/freedreno_context.h > +++ b/src/gallium/drivers/freedreno/freedreno_context.h > @@ -32,7 +32,7 @@ > #include "pipe/p_context.h" > #include "indices/u_primconvert.h" > #include "util/u_blitter.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_slab.h" > #include "util/u_string.h" > > diff --git a/src/gallium/drivers/freedreno/freedreno_query_hw.h > b/src/gallium/drivers/freedreno/freedreno_query_hw.h > index 62baa3a..8f4b1f5 100644 > --- a/src/gallium/drivers/freedreno/freedreno_query_hw.h > +++ b/src/gallium/drivers/freedreno/freedreno_query_hw.h > @@ -29,7 +29,7 @@ > #ifndef FREEDRENO_QUERY_HW_H_ > #define FREEDRENO_QUERY_HW_H_ > > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "freedreno_query.h" > #include "freedreno_context.h" > diff --git a/src/gallium/drivers/freedreno/freedreno_resource.h > b/src/gallium/drivers/freedreno/freedreno_resource.h > index a2a540c..36580a3 100644 > --- a/src/gallium/drivers/freedreno/freedreno_resource.h > +++ b/src/gallium/drivers/freedreno/freedreno_resource.h > @@ -29,7 +29,7 @@ > #ifndef FREEDRENO_RESOURCE_H_ > #define FREEDRENO_RESOURCE_H_ > > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_range.h" > #include "util/u_transfer.h" > > diff --git a/src/gallium/drivers/ilo/ilo_common.h > b/src/gallium/drivers/ilo/ilo_common.h > index 1ed964f..85ca502 100644 > --- a/src/gallium/drivers/ilo/ilo_common.h > +++ b/src/gallium/drivers/ilo/ilo_common.h > @@ -33,7 +33,7 @@ > #include "pipe/p_format.h" > > #include "util/u_debug.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_format.h" > #include "util/u_inlines.h" > #include "util/u_math.h" > diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.h > b/src/gallium/drivers/nouveau/nouveau_buffer.h > index f881adc..de77f48 100644 > --- a/src/gallium/drivers/nouveau/nouveau_buffer.h > +++ b/src/gallium/drivers/nouveau/nouveau_buffer.h > @@ -3,7 +3,7 @@ > > #include "util/u_range.h" > #include "util/u_transfer.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > struct pipe_resource; > struct nouveau_context; > diff --git a/src/gallium/drivers/nouveau/nouveau_fence.c > b/src/gallium/drivers/nouveau/nouveau_fence.c > index a9448a4..17a5174 100644 > --- a/src/gallium/drivers/nouveau/nouveau_fence.c > +++ b/src/gallium/drivers/nouveau/nouveau_fence.c > @@ -20,8 +20,6 @@ > * OTHER DEALINGS IN THE SOFTWARE. > */ > > -#include "util/u_double_list.h" > - > #include "nouveau_screen.h" > #include "nouveau_winsys.h" > #include "nouveau_fence.h" > diff --git a/src/gallium/drivers/nouveau/nouveau_fence.h > b/src/gallium/drivers/nouveau/nouveau_fence.h > index 3984a9a..7bb132a 100644 > --- a/src/gallium/drivers/nouveau/nouveau_fence.h > +++ b/src/gallium/drivers/nouveau/nouveau_fence.h > @@ -3,7 +3,7 @@ > #define __NOUVEAU_FENCE_H__ > > #include "util/u_inlines.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #define NOUVEAU_FENCE_STATE_AVAILABLE 0 > #define NOUVEAU_FENCE_STATE_EMITTING 1 > diff --git a/src/gallium/drivers/nouveau/nouveau_mm.c > b/src/gallium/drivers/nouveau/nouveau_mm.c > index 87f2f46..9c454c5 100644 > --- a/src/gallium/drivers/nouveau/nouveau_mm.c > +++ b/src/gallium/drivers/nouveau/nouveau_mm.c > @@ -3,7 +3,7 @@ > > #include "util/u_inlines.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "nouveau_winsys.h" > #include "nouveau_screen.h" > diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.h > b/src/gallium/drivers/nouveau/nv30/nv30_screen.h > index 0b3bbbb..3f2e47f 100644 > --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.h > +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.h > @@ -3,7 +3,7 @@ > > #include <stdio.h> > > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "nouveau_debug.h" > #include "nouveau_screen.h" > diff --git a/src/gallium/drivers/nouveau/nv50/nv50_resource.h > b/src/gallium/drivers/nouveau/nv50/nv50_resource.h > index 36d70d8..f7ee135 100644 > --- a/src/gallium/drivers/nouveau/nv50/nv50_resource.h > +++ b/src/gallium/drivers/nouveau/nv50/nv50_resource.h > @@ -3,7 +3,7 @@ > #define __NV50_RESOURCE_H__ > > #include "util/u_transfer.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "nouveau_winsys.h" > #include "nouveau_buffer.h" > diff --git a/src/gallium/drivers/r600/compute_memory_pool.c > b/src/gallium/drivers/r600/compute_memory_pool.c > index 30b77a4..413aa3d 100644 > --- a/src/gallium/drivers/r600/compute_memory_pool.c > +++ b/src/gallium/drivers/r600/compute_memory_pool.c > @@ -26,7 +26,7 @@ > #include "pipe/p_state.h" > #include "pipe/p_context.h" > #include "util/u_blitter.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_transfer.h" > #include "util/u_surface.h" > #include "util/u_pack_color.h" > diff --git a/src/gallium/drivers/r600/evergreen_compute.c > b/src/gallium/drivers/r600/evergreen_compute.c > index 90fdd79..4c3c34c 100644 > --- a/src/gallium/drivers/r600/evergreen_compute.c > +++ b/src/gallium/drivers/r600/evergreen_compute.c > @@ -30,7 +30,7 @@ > #include "pipe/p_state.h" > #include "pipe/p_context.h" > #include "util/u_blitter.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_transfer.h" > #include "util/u_surface.h" > #include "util/u_pack_color.h" > diff --git a/src/gallium/drivers/r600/r600_llvm.c > b/src/gallium/drivers/r600/r600_llvm.c > index af46044..72e2dc4 100644 > --- a/src/gallium/drivers/r600/r600_llvm.c > +++ b/src/gallium/drivers/r600/r600_llvm.c > @@ -4,7 +4,7 @@ > #include "gallivm/lp_bld_intr.h" > #include "gallivm/lp_bld_gather.h" > #include "tgsi/tgsi_parse.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_memory.h" > > #include "evergreend.h" > diff --git a/src/gallium/drivers/r600/r600_pipe.h > b/src/gallium/drivers/r600/r600_pipe.h > index ac69895..4ea270d 100644 > --- a/src/gallium/drivers/r600/r600_pipe.h > +++ b/src/gallium/drivers/r600/r600_pipe.h > @@ -33,7 +33,7 @@ > #include "r600_public.h" > > #include "util/u_suballoc.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_transfer.h" > > #define R600_NUM_ATOMS 73 > diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h > b/src/gallium/drivers/radeon/r600_pipe_common.h > index febd2a1..b3c6485 100644 > --- a/src/gallium/drivers/radeon/r600_pipe_common.h > +++ b/src/gallium/drivers/radeon/r600_pipe_common.h > @@ -37,7 +37,7 @@ > #include "radeon/drm/radeon_winsys.h" > > #include "util/u_blitter.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_range.h" > #include "util/u_slab.h" > #include "util/u_suballoc.h" > diff --git a/src/gallium/drivers/radeon/radeon_vce.h > b/src/gallium/drivers/radeon/radeon_vce.h > index 7f0cd1f..d0b205c 100644 > --- a/src/gallium/drivers/radeon/radeon_vce.h > +++ b/src/gallium/drivers/radeon/radeon_vce.h > @@ -34,7 +34,7 @@ > #ifndef RADEON_VCE_H > #define RADEON_VCE_H > > -#include "util/u_double_list.h" > +#include "util/list.h" > > #define RVCE_RELOC(buf, usage, domain) (enc->ws->cs_add_reloc(enc->cs, > (buf), (usage), domain, RADEON_PRIO_MIN)) > > diff --git a/src/gallium/drivers/svga/svga_context.h > b/src/gallium/drivers/svga/svga_context.h > index a75f2a8..630f5f7 100644 > --- a/src/gallium/drivers/svga/svga_context.h > +++ b/src/gallium/drivers/svga/svga_context.h > @@ -32,7 +32,7 @@ > #include "pipe/p_state.h" > > #include "util/u_blitter.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "tgsi/tgsi_scan.h" > > diff --git a/src/gallium/drivers/svga/svga_resource_buffer.h > b/src/gallium/drivers/svga/svga_resource_buffer.h > index 36467cf..83b3d34 100644 > --- a/src/gallium/drivers/svga/svga_resource_buffer.h > +++ b/src/gallium/drivers/svga/svga_resource_buffer.h > @@ -31,8 +31,6 @@ > #include "pipe/p_state.h" > #include "util/u_transfer.h" > > -#include "util/u_double_list.h" > - > #include "svga_screen_cache.h" > #include "svga_screen.h" > #include "svga_cmd.h" > diff --git a/src/gallium/drivers/svga/svga_resource_buffer_upload.c > b/src/gallium/drivers/svga/svga_resource_buffer_upload.c > index 3fc14f8..5686531 100644 > --- a/src/gallium/drivers/svga/svga_resource_buffer_upload.c > +++ b/src/gallium/drivers/svga/svga_resource_buffer_upload.c > @@ -30,7 +30,6 @@ > #include "util/u_inlines.h" > #include "util/u_math.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > > #include "svga_cmd.h" > #include "svga_context.h" > diff --git a/src/gallium/drivers/svga/svga_screen_cache.h > b/src/gallium/drivers/svga/svga_screen_cache.h > index 96e1e9c..56ac62b 100644 > --- a/src/gallium/drivers/svga/svga_screen_cache.h > +++ b/src/gallium/drivers/svga/svga_screen_cache.h > @@ -34,7 +34,7 @@ > > #include "os/os_thread.h" > > -#include "util/u_double_list.h" > +#include "util/list.h" > > > /* Guess the storage size of cached surfaces and try and keep it under > diff --git a/src/gallium/state_trackers/nine/basetexture9.h > b/src/gallium/state_trackers/nine/basetexture9.h > index 0062771..2541c9b 100644 > --- a/src/gallium/state_trackers/nine/basetexture9.h > +++ b/src/gallium/state_trackers/nine/basetexture9.h > @@ -25,7 +25,7 @@ > > #include "resource9.h" > #include "util/u_inlines.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > struct NineBaseTexture9 > { > diff --git a/src/gallium/state_trackers/nine/device9.h > b/src/gallium/state_trackers/nine/device9.h > index f412088..b4ff2ad 100644 > --- a/src/gallium/state_trackers/nine/device9.h > +++ b/src/gallium/state_trackers/nine/device9.h > @@ -42,7 +42,7 @@ struct u_upload_mgr; > struct NineSwapChain9; > struct NineStateBlock9; > > -#include "util/u_double_list.h" > +#include "util/list.h" > > struct NineDevice9 > { > diff --git a/src/gallium/state_trackers/nine/nine_state.h > b/src/gallium/state_trackers/nine/nine_state.h > index 1916959..2bf3f63 100644 > --- a/src/gallium/state_trackers/nine/nine_state.h > +++ b/src/gallium/state_trackers/nine/nine_state.h > @@ -26,7 +26,7 @@ > #include "d3d9.h" > #include "nine_defines.h" > #include "pipe/p_state.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #define NINED3DSAMP_MINLOD (D3DSAMP_DMAPOFFSET + 1) > #define NINED3DSAMP_SHADOW (D3DSAMP_DMAPOFFSET + 2) > diff --git a/src/gallium/state_trackers/nine/surface9.h > b/src/gallium/state_trackers/nine/surface9.h > index 32e1722..8695eae 100644 > --- a/src/gallium/state_trackers/nine/surface9.h > +++ b/src/gallium/state_trackers/nine/surface9.h > @@ -26,7 +26,7 @@ > #include "resource9.h" > > #include "pipe/p_state.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "util/u_rect.h" > #include "util/u_inlines.h" > > diff --git a/src/gallium/state_trackers/omx/vid_dec.h > b/src/gallium/state_trackers/omx/vid_dec.h > index 9acf872..4585ff6 100644 > --- a/src/gallium/state_trackers/omx/vid_dec.h > +++ b/src/gallium/state_trackers/omx/vid_dec.h > @@ -48,7 +48,7 @@ > #include "pipe/p_video_state.h" > #include "state_tracker/drm_driver.h" > #include "os/os_thread.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #define OMX_VID_DEC_BASE_NAME "OMX.mesa.video_decoder" > > diff --git a/src/gallium/state_trackers/omx/vid_enc.h > b/src/gallium/state_trackers/omx/vid_enc.h > index ca6ee91..c8d192b 100644 > --- a/src/gallium/state_trackers/omx/vid_enc.h > +++ b/src/gallium/state_trackers/omx/vid_enc.h > @@ -41,7 +41,7 @@ > #include <bellagio/st_static_component_loader.h> > #include <bellagio/omx_base_filter.h> > > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "vl/vl_defines.h" > #include "vl/vl_compositor.h" > diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c > b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c > index e609d68..7fff1f4 100644 > --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c > +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c > @@ -29,7 +29,7 @@ > #include "util/u_hash_table.h" > #include "util/u_memory.h" > #include "util/simple_list.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "os/os_thread.h" > #include "os/os_mman.h" > #include "os/os_time.h" > diff --git a/src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c > b/src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c > index 888aebb..16eb751 100644 > --- a/src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c > +++ b/src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c > @@ -46,7 +46,7 @@ > #include "util/u_debug.h" > #include "os/os_thread.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "pipebuffer/pb_buffer.h" > #include "pipebuffer/pb_bufmgr.h" > diff --git a/src/gallium/winsys/svga/drm/vmw_fence.c > b/src/gallium/winsys/svga/drm/vmw_fence.c > index 8af2250..1b24239 100644 > --- a/src/gallium/winsys/svga/drm/vmw_fence.c > +++ b/src/gallium/winsys/svga/drm/vmw_fence.c > @@ -24,7 +24,7 @@ > **********************************************************/ > #include "util/u_memory.h" > #include "util/u_atomic.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > #include "os/os_thread.h" > > #include "pipebuffer/pb_buffer_fenced.h" > diff --git a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c > b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c > index e61a173..740b920 100644 > --- a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c > +++ b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c > @@ -47,7 +47,7 @@ > #include "util/u_format.h" > #include "util/u_math.h" > #include "util/u_memory.h" > -#include "util/u_double_list.h" > +#include "util/list.h" > > #include "state_tracker/sw_winsys.h" > #include "state_tracker/drm_driver.h" > diff --git a/src/util/Makefile.sources b/src/util/Makefile.sources > index 3e0d02b..dc55939 100644 > --- a/src/util/Makefile.sources > +++ b/src/util/Makefile.sources > @@ -7,6 +7,7 @@ MESA_UTIL_FILES := \ > format_srgb.h \ > hash_table.c \ > hash_table.h \ > + list.h \ > macros.h \ > ralloc.c \ > ralloc.h \ > diff --git a/src/util/list.h b/src/util/list.h > new file mode 100644 > index 0000000..9dcf671 > --- /dev/null > +++ b/src/util/list.h > @@ -0,0 +1,146 @@ > +/************************************************************************** > + * > + * Copyright 2006 VMware, 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. > + * > + **************************************************************************/ > + > +/** > + * \file > + * List macros heavily inspired by the Linux kernel > + * list handling. No list looping yet. > + * > + * Is not threadsafe, so common operations need to > + * be protected using an external mutex. > + */ > + > +#ifndef _UTIL_LIST_H_ > +#define _UTIL_LIST_H_ > + > + > +#include <stddef.h> > + > + > +struct list_head > +{ > + struct list_head *prev; > + struct list_head *next; > +}; > + > +static inline void list_inithead(struct list_head *item) > +{ > + item->prev = item; > + item->next = item; > +} > + > +static inline void list_add(struct list_head *item, struct list_head *list) > +{ > + item->prev = list; > + item->next = list->next; > + list->next->prev = item; > + list->next = item; > +} > + > +static inline void list_addtail(struct list_head *item, struct list_head > *list) > +{ > + item->next = list; > + item->prev = list->prev; > + list->prev->next = item; > + list->prev = item; > +} > + > +static inline void list_replace(struct list_head *from, struct list_head *to) > +{ > + to->prev = from->prev; > + to->next = from->next; > + from->next->prev = to; > + from->prev->next = to; > +} > + > +static inline void list_del(struct list_head *item) > +{ > + item->prev->next = item->next; > + item->next->prev = item->prev; > + item->prev = item->next = NULL; > +} > + > +static inline void list_delinit(struct list_head *item) > +{ > + item->prev->next = item->next; > + item->next->prev = item->prev; > + item->next = item; > + item->prev = item; > +} > + > +#define LIST_INITHEAD(__item) list_inithead(__item) > +#define LIST_ADD(__item, __list) list_add(__item, __list) > +#define LIST_ADDTAIL(__item, __list) list_addtail(__item, __list) > +#define LIST_REPLACE(__from, __to) list_replace(__from, __to) > +#define LIST_DEL(__item) list_del(__item) > +#define LIST_DELINIT(__item) list_delinit(__item) > + > +#define LIST_ENTRY(__type, __item, __field) \ > + ((__type *)(((char *)(__item)) - offsetof(__type, __field))) > + > +#define LIST_IS_EMPTY(__list) \ > + ((__list)->next == (__list)) > + > +/** > + * Cast from a pointer to a member of a struct back to the containing struct. > + * > + * 'sample' MUST be initialized, or else the result is undefined! > + */ > +#ifndef container_of > +#define container_of(ptr, sample, member) \ > + (void *)((char *)(ptr) \ > + - ((char *)&(sample)->member - (char *)(sample))) > +#endif > + > +#define LIST_FOR_EACH_ENTRY(pos, head, member) > \ > + for (pos = NULL, pos = container_of((head)->next, pos, member); \ > + &pos->member != (head); \ > + pos = container_of(pos->member.next, pos, member)) > + > +#define LIST_FOR_EACH_ENTRY_SAFE(pos, storage, head, member) \ > + for (pos = NULL, pos = container_of((head)->next, pos, member), \ > + storage = container_of(pos->member.next, pos, member); \ > + &pos->member != (head); \ > + pos = storage, storage = container_of(storage->member.next, storage, > member)) > + > +#define LIST_FOR_EACH_ENTRY_SAFE_REV(pos, storage, head, member) \ > + for (pos = NULL, pos = container_of((head)->prev, pos, member), \ > + storage = container_of(pos->member.prev, pos, member); \ > + &pos->member != (head); \ > + pos = storage, storage = container_of(storage->member.prev, storage, > member)) > + > +#define LIST_FOR_EACH_ENTRY_FROM(pos, start, head, member) \ > + for (pos = NULL, pos = container_of((start), pos, member); > \ > + &pos->member != (head); \ > + pos = container_of(pos->member.next, pos, member)) > + > +#define LIST_FOR_EACH_ENTRY_FROM_REV(pos, start, head, member) > \ > + for (pos = NULL, pos = container_of((start), pos, member); > \ > + &pos->member != (head); \ > + pos = container_of(pos->member.prev, pos, member)) > + > +#endif /*_UTIL_LIST_H_*/ >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev