aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorThomas Gschwantner <tharre3@gmail.com>2018-07-01 05:28:38 +0200
committerJonathan Neuschäfer <j.neuschaefer@gmx.net>2018-07-01 05:35:01 +0200
commit9d630a7d991c5d0718e3c6e36399cb5728c222d8 (patch)
tree294ea18c8329cbaf81cdc0c695a2d793279755bd
parentmpmc_ptr_ring: add include guard (diff)
downloadwireguard-monolithic-historical-9d630a7d991c5d0718e3c6e36399cb5728c222d8.tar.xz
wireguard-monolithic-historical-9d630a7d991c5d0718e3c6e36399cb5728c222d8.zip
mpmc_ptr_ring: use unsigned int instead of size_t
For producers/consumers we use atomic_t which is really int, so size_t could either be too large, wasting memory, or too small (unlikely). For size, we also want to be using unsigned int, since the mask that we derive from it is ANDed with producer/consumer.
-rw-r--r--src/mpmc_ptr_ring.h20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/mpmc_ptr_ring.h b/src/mpmc_ptr_ring.h
index f437ae3..183aa24 100644
--- a/src/mpmc_ptr_ring.h
+++ b/src/mpmc_ptr_ring.h
@@ -41,7 +41,7 @@
struct mpmc_ptr_ring {
/* Read-mostly data */
void **queue;
- size_t size;
+ unsigned int size;
/* consumer_head: updated in _consume; read in _produce */
atomic_t consumer_head ____cacheline_aligned_in_smp;
@@ -53,7 +53,7 @@ struct mpmc_ptr_ring {
static inline bool mpmc_ptr_ring_empty(struct mpmc_ptr_ring *r)
{
- size_t ptail, chead;
+ unsigned int ptail, chead;
/* Order the following reads against earlier stuff */
smp_rmb();
@@ -66,8 +66,8 @@ static inline bool mpmc_ptr_ring_empty(struct mpmc_ptr_ring *r)
static inline int mpmc_ptr_ring_produce(struct mpmc_ptr_ring *r, void *ptr)
{
- size_t p, c;
- size_t mask = r->size - 1;
+ unsigned int p, c;
+ unsigned int mask = r->size - 1;
p = atomic_read(&r->producer_head);
@@ -79,7 +79,7 @@ static inline int mpmc_ptr_ring_produce(struct mpmc_ptr_ring *r, void *ptr)
if (atomic_cmpxchg(&r->producer_head, p, p + 1) == p)
break;
} else {
- size_t new_p;
+ unsigned int new_p;
smp_rmb();
new_p = atomic_read(&r->producer_head);
@@ -109,9 +109,9 @@ static inline int mpmc_ptr_ring_produce(struct mpmc_ptr_ring *r, void *ptr)
static inline void *mpmc_ptr_ring_consume(struct mpmc_ptr_ring *r)
{
- size_t c, p, old_c;
+ unsigned int c, p, old_c;
void *element;
- size_t mask = r->size - 1;
+ unsigned int mask = r->size - 1;
for (;;) {
c = atomic_read(&r->consumer_head);
@@ -141,7 +141,7 @@ static inline void *mpmc_ptr_ring_consume(struct mpmc_ptr_ring *r)
/*
* Warning: size must be greater than the number of concurrent consumers
*/
-static inline int mpmc_ptr_ring_init(struct mpmc_ptr_ring *r, int size, gfp_t gfp)
+static inline int mpmc_ptr_ring_init(struct mpmc_ptr_ring *r, unsigned int size, gfp_t gfp)
{
if (WARN_ONCE(!is_power_of_2(size), "size must be a power of two"))
return -EINVAL;
@@ -177,8 +177,8 @@ static inline void mpmc_ptr_ring_cleanup(struct mpmc_ptr_ring *r, void (*destroy
*/
static inline void *__mpmc_ptr_ring_peek(struct mpmc_ptr_ring *r)
{
- size_t c, p;
- size_t mask = r->size - 1;
+ unsigned int c, p;
+ unsigned int mask = r->size - 1;
void *element;
c = atomic_read(&r->consumer_head);