util/slab: use simple_mtx_t

Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13152>
This commit is contained in:
Marek Olšák 2021-10-01 15:40:40 -04:00 committed by Marge Bot
parent 8f68978caa
commit 28bde89556
3 changed files with 12 additions and 11 deletions

View File

@ -26,4 +26,5 @@ libcrocuswinsys = static_library(
inc_gallium, inc_gallium_aux, inc_gallium_drivers, inc_gallium, inc_gallium_aux, inc_gallium_drivers,
], ],
gnu_symbol_visibility : 'hidden', gnu_symbol_visibility : 'hidden',
dependencies : [dep_valgrind],
) )

View File

@ -106,7 +106,7 @@ slab_create_parent(struct slab_parent_pool *parent,
unsigned item_size, unsigned item_size,
unsigned num_items) unsigned num_items)
{ {
mtx_init(&parent->mutex, mtx_plain); simple_mtx_init(&parent->mutex, mtx_plain);
parent->element_size = ALIGN_POT(sizeof(struct slab_element_header) + item_size, parent->element_size = ALIGN_POT(sizeof(struct slab_element_header) + item_size,
sizeof(intptr_t)); sizeof(intptr_t));
parent->num_elements = num_items; parent->num_elements = num_items;
@ -115,7 +115,7 @@ slab_create_parent(struct slab_parent_pool *parent,
void void
slab_destroy_parent(struct slab_parent_pool *parent) slab_destroy_parent(struct slab_parent_pool *parent)
{ {
mtx_destroy(&parent->mutex); simple_mtx_destroy(&parent->mutex);
} }
/** /**
@ -141,7 +141,7 @@ void slab_destroy_child(struct slab_child_pool *pool)
if (!pool->parent) if (!pool->parent)
return; /* the slab probably wasn't even created */ return; /* the slab probably wasn't even created */
mtx_lock(&pool->parent->mutex); simple_mtx_lock(&pool->parent->mutex);
while (pool->pages) { while (pool->pages) {
struct slab_page_header *page = pool->pages; struct slab_page_header *page = pool->pages;
@ -160,7 +160,7 @@ void slab_destroy_child(struct slab_child_pool *pool)
slab_free_orphaned(elt); slab_free_orphaned(elt);
} }
mtx_unlock(&pool->parent->mutex); simple_mtx_unlock(&pool->parent->mutex);
while (pool->free) { while (pool->free) {
struct slab_element_header *elt = pool->free; struct slab_element_header *elt = pool->free;
@ -211,10 +211,10 @@ slab_alloc(struct slab_child_pool *pool)
/* First, collect elements that belong to us but were freed from a /* First, collect elements that belong to us but were freed from a
* different child pool. * different child pool.
*/ */
mtx_lock(&pool->parent->mutex); simple_mtx_lock(&pool->parent->mutex);
pool->free = pool->migrated; pool->free = pool->migrated;
pool->migrated = NULL; pool->migrated = NULL;
mtx_unlock(&pool->parent->mutex); simple_mtx_unlock(&pool->parent->mutex);
/* Now allocate a new page. */ /* Now allocate a new page. */
if (!pool->free && !slab_add_new_page(pool)) if (!pool->free && !slab_add_new_page(pool))
@ -258,7 +258,7 @@ void slab_free(struct slab_child_pool *pool, void *ptr)
/* The slow case: migration or an orphaned page. */ /* The slow case: migration or an orphaned page. */
if (pool->parent) if (pool->parent)
mtx_lock(&pool->parent->mutex); simple_mtx_lock(&pool->parent->mutex);
/* Note: we _must_ re-read elt->owner here because the owning child pool /* Note: we _must_ re-read elt->owner here because the owning child pool
* may have been destroyed by another thread in the meantime. * may have been destroyed by another thread in the meantime.
@ -270,10 +270,10 @@ void slab_free(struct slab_child_pool *pool, void *ptr)
elt->next = owner->migrated; elt->next = owner->migrated;
owner->migrated = elt; owner->migrated = elt;
if (pool->parent) if (pool->parent)
mtx_unlock(&pool->parent->mutex); simple_mtx_unlock(&pool->parent->mutex);
} else { } else {
if (pool->parent) if (pool->parent)
mtx_unlock(&pool->parent->mutex); simple_mtx_unlock(&pool->parent->mutex);
slab_free_orphaned(elt); slab_free_orphaned(elt);
} }

View File

@ -42,7 +42,7 @@
#ifndef SLAB_H #ifndef SLAB_H
#define SLAB_H #define SLAB_H
#include "c11/threads.h" #include "simple_mtx.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -52,7 +52,7 @@ struct slab_element_header;
struct slab_page_header; struct slab_page_header;
struct slab_parent_pool { struct slab_parent_pool {
mtx_t mutex; simple_mtx_t mutex;
unsigned element_size; unsigned element_size;
unsigned num_elements; unsigned num_elements;
}; };