[Mesa-dev] [PATCH] gallium/util: replace pipe_condvar with cnd_t

Marek Olšák maraeo at gmail.com
Mon Mar 6 21:28:26 UTC 2017


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Mon, Mar 6, 2017 at 12:41 AM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
> pipe_condvar was made unnecessary with fd33a6bcd7f12.
>
> Cc: Emil Velikov <emil.l.velikov at gmail.com>
> ---
>  src/gallium/auxiliary/os/os_thread.h              | 8 ++------
>  src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c | 2 +-
>  src/gallium/auxiliary/util/u_queue.h              | 6 +++---
>  src/gallium/auxiliary/util/u_ringbuffer.c         | 2 +-
>  src/gallium/drivers/llvmpipe/lp_fence.h           | 2 +-
>  src/gallium/drivers/rbug/rbug_context.h           | 2 +-
>  src/gallium/state_trackers/nine/nine_queue.c      | 4 ++--
>  src/gallium/state_trackers/nine/nine_state.c      | 2 +-
>  8 files changed, 12 insertions(+), 16 deletions(-)
>
> diff --git a/src/gallium/auxiliary/os/os_thread.h b/src/gallium/auxiliary/os/os_thread.h
> index ad2cda4..b15dd05 100644
> --- a/src/gallium/auxiliary/os/os_thread.h
> +++ b/src/gallium/auxiliary/os/os_thread.h
> @@ -114,24 +114,20 @@ __pipe_mutex_assert_locked(mtx_t *mutex)
>     /* NOTE: this would not work for recursive mutexes, but
>      * mtx_t doesn't support those
>      */
>     int ret = mtx_trylock(mutex);
>     assert(ret == thrd_busy);
>     if (ret == thrd_success)
>        mtx_unlock(mutex);
>  #endif
>  }
>
> -/* pipe_condvar
> - */
> -typedef cnd_t pipe_condvar;
> -
>
>  /*
>   * pipe_barrier
>   */
>
>  #if (defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS) || defined(PIPE_OS_HURD)) && !defined(PIPE_OS_ANDROID)
>
>  typedef pthread_barrier_t pipe_barrier;
>
>  static inline void pipe_barrier_init(pipe_barrier *barrier, unsigned count)
> @@ -150,21 +146,21 @@ static inline void pipe_barrier_wait(pipe_barrier *barrier)
>  }
>
>
>  #else /* If the OS doesn't have its own, implement barriers using a mutex and a condvar */
>
>  typedef struct {
>     unsigned count;
>     unsigned waiters;
>     uint64_t sequence;
>     mtx_t mutex;
> -   pipe_condvar condvar;
> +   cnd_t condvar;
>  } pipe_barrier;
>
>  static inline void pipe_barrier_init(pipe_barrier *barrier, unsigned count)
>  {
>     barrier->count = count;
>     barrier->waiters = 0;
>     barrier->sequence = 0;
>     (void) mtx_init(&barrier->mutex, mtx_plain);
>     cnd_init(&barrier->condvar);
>  }
> @@ -202,21 +198,21 @@ static inline void pipe_barrier_wait(pipe_barrier *barrier)
>  #endif
>
>
>  /*
>   * Semaphores
>   */
>
>  typedef struct
>  {
>     mtx_t mutex;
> -   pipe_condvar cond;
> +   cnd_t cond;
>     int counter;
>  } pipe_semaphore;
>
>
>  static inline void
>  pipe_semaphore_init(pipe_semaphore *sema, int init_val)
>  {
>     (void) mtx_init(&sema->mutex, mtx_plain);
>     cnd_init(&sema->cond);
>     sema->counter = init_val;
> diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
> index a89236e..96c0683 100644
> --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
> +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
> @@ -64,21 +64,21 @@ struct pb_slab_buffer
>
>     struct list_head head;
>
>     unsigned mapCount;
>
>     /** Offset relative to the start of the slab buffer. */
>     pb_size start;
>
>     /** Use when validating, to signal that all mappings are finished */
>     /* TODO: Actually validation does not reach this stage yet */
> -   pipe_condvar event;
> +   cnd_t event;
>  };
>
>
>  /**
>   * Slab -- a contiguous piece of memory.
>   */
>  struct pb_slab
>  {
>     struct list_head head;
>     struct list_head freeBuffers;
> diff --git a/src/gallium/auxiliary/util/u_queue.h b/src/gallium/auxiliary/util/u_queue.h
> index 635545f..d62d87d 100644
> --- a/src/gallium/auxiliary/util/u_queue.h
> +++ b/src/gallium/auxiliary/util/u_queue.h
> @@ -34,39 +34,39 @@
>  #define U_QUEUE_H
>
>  #include "os/os_thread.h"
>  #include "util/list.h"
>
>  /* Job completion fence.
>   * Put this into your job structure.
>   */
>  struct util_queue_fence {
>     mtx_t mutex;
> -   pipe_condvar cond;
> +   cnd_t cond;
>     int signalled;
>  };
>
>  typedef void (*util_queue_execute_func)(void *job, int thread_index);
>
>  struct util_queue_job {
>     void *job;
>     struct util_queue_fence *fence;
>     util_queue_execute_func execute;
>     util_queue_execute_func cleanup;
>  };
>
>  /* Put this into your context. */
>  struct util_queue {
>     const char *name;
>     mtx_t lock;
> -   pipe_condvar has_queued_cond;
> -   pipe_condvar has_space_cond;
> +   cnd_t has_queued_cond;
> +   cnd_t has_space_cond;
>     thrd_t *threads;
>     int num_queued;
>     unsigned num_threads;
>     int kill_threads;
>     int max_jobs;
>     int write_idx, read_idx; /* ring buffer pointers */
>     struct util_queue_job *jobs;
>
>     /* for cleanup at exit(), protected by exit_mutex */
>     struct list_head head;
> diff --git a/src/gallium/auxiliary/util/u_ringbuffer.c b/src/gallium/auxiliary/util/u_ringbuffer.c
> index fd51f26..4d61668 100644
> --- a/src/gallium/auxiliary/util/u_ringbuffer.c
> +++ b/src/gallium/auxiliary/util/u_ringbuffer.c
> @@ -9,21 +9,21 @@
>   */
>  struct util_ringbuffer
>  {
>     struct util_packet *buf;
>     unsigned mask;
>
>     /* Can this be done with atomic variables??
>      */
>     unsigned head;
>     unsigned tail;
> -   pipe_condvar change;
> +   cnd_t change;
>     mtx_t mutex;
>  };
>
>
>  struct util_ringbuffer *util_ringbuffer_create( unsigned dwords )
>  {
>     struct util_ringbuffer *ring = CALLOC_STRUCT(util_ringbuffer);
>     if (!ring)
>        return NULL;
>
> diff --git a/src/gallium/drivers/llvmpipe/lp_fence.h b/src/gallium/drivers/llvmpipe/lp_fence.h
> index 4fc0801..b720264 100644
> --- a/src/gallium/drivers/llvmpipe/lp_fence.h
> +++ b/src/gallium/drivers/llvmpipe/lp_fence.h
> @@ -37,21 +37,21 @@
>
>  struct pipe_screen;
>
>
>  struct lp_fence
>  {
>     struct pipe_reference reference;
>     unsigned id;
>
>     mtx_t mutex;
> -   pipe_condvar signalled;
> +   cnd_t signalled;
>
>     boolean issued;
>     unsigned rank;
>     unsigned count;
>  };
>
>
>  struct lp_fence *
>  lp_fence_create(unsigned rank);
>
> diff --git a/src/gallium/drivers/rbug/rbug_context.h b/src/gallium/drivers/rbug/rbug_context.h
> index 6f11fa4..e89c6ea 100644
> --- a/src/gallium/drivers/rbug/rbug_context.h
> +++ b/src/gallium/drivers/rbug/rbug_context.h
> @@ -52,21 +52,21 @@ struct rbug_context {
>        struct rbug_resource *texs[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_SAMPLER_VIEWS];
>        unsigned num_views[PIPE_SHADER_TYPES];
>
>        unsigned nr_cbufs;
>        struct rbug_resource *cbufs[PIPE_MAX_COLOR_BUFS];
>        struct rbug_resource *zsbuf;
>     } curr;
>
>     /* draw locking */
>     mtx_t draw_mutex;
> -   pipe_condvar draw_cond;
> +   cnd_t draw_cond;
>     unsigned draw_num_rules;
>     int draw_blocker;
>     int draw_blocked;
>
>     struct {
>        struct rbug_shader *shader[PIPE_SHADER_TYPES];
>
>        struct rbug_resource *texture;
>        struct rbug_resource *surf;
>
> diff --git a/src/gallium/state_trackers/nine/nine_queue.c b/src/gallium/state_trackers/nine/nine_queue.c
> index 2a65a1e..7a85798 100644
> --- a/src/gallium/state_trackers/nine/nine_queue.c
> +++ b/src/gallium/state_trackers/nine/nine_queue.c
> @@ -65,22 +65,22 @@ struct nine_cmdbuf {
>      void *mem_pool;
>      BOOL full;
>  };
>
>  struct nine_queue_pool {
>      struct nine_cmdbuf pool[NINE_CMD_BUFS];
>      unsigned head;
>      unsigned tail;
>      unsigned cur_instr;
>      BOOL worker_wait;
> -    pipe_condvar event_pop;
> -    pipe_condvar event_push;
> +    cnd_t event_pop;
> +    cnd_t event_push;
>      mtx_t mutex_pop;
>      mtx_t mutex_push;
>  };
>
>  /* Consumer functions: */
>  void
>  nine_queue_wait_flush(struct nine_queue_pool* ctx)
>  {
>      struct nine_cmdbuf *cmdbuf = &ctx->pool[ctx->tail];
>
> diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c
> index bfceeee..e6d215a 100644
> --- a/src/gallium/state_trackers/nine/nine_state.c
> +++ b/src/gallium/state_trackers/nine/nine_state.c
> @@ -56,21 +56,21 @@
>  /* Nine CSMT */
>
>  struct csmt_instruction {
>      int (* func)(struct NineDevice9 *This, struct csmt_instruction *instr);
>  };
>
>  struct csmt_context {
>      thrd_t worker;
>      struct nine_queue_pool* pool;
>      BOOL terminate;
> -    pipe_condvar event_processed;
> +    cnd_t event_processed;
>      mtx_t mutex_processed;
>      struct NineDevice9 *device;
>      BOOL processed;
>      BOOL toPause;
>      BOOL hasPaused;
>      mtx_t thread_running;
>      mtx_t thread_resume;
>  };
>
>  /* Wait for instruction to be processed.
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list