Lines Matching refs:ring

66 void rds_ib_ring_init(struct rds_ib_work_ring *ring, u32 nr)
68 memset(ring, 0, sizeof(*ring));
69 ring->w_nr = nr;
70 rdsdebug("ring %p nr %u\n", ring, ring->w_nr);
73 static inline u32 __rds_ib_ring_used(struct rds_ib_work_ring *ring)
78 diff = ring->w_alloc_ctr - (u32) atomic_read(&ring->w_free_ctr);
79 BUG_ON(diff > ring->w_nr);
84 void rds_ib_ring_resize(struct rds_ib_work_ring *ring, u32 nr)
88 BUG_ON(__rds_ib_ring_used(ring));
89 ring->w_nr = nr;
92 static int __rds_ib_ring_empty(struct rds_ib_work_ring *ring)
94 return __rds_ib_ring_used(ring) == 0;
97 u32 rds_ib_ring_alloc(struct rds_ib_work_ring *ring, u32 val, u32 *pos)
101 avail = ring->w_nr - __rds_ib_ring_used(ring);
103 rdsdebug("ring %p val %u next %u free %u\n", ring, val,
104 ring->w_alloc_ptr, avail);
108 *pos = ring->w_alloc_ptr;
110 ring->w_alloc_ptr = (ring->w_alloc_ptr + ret) % ring->w_nr;
111 ring->w_alloc_ctr += ret;
117 void rds_ib_ring_free(struct rds_ib_work_ring *ring, u32 val)
119 ring->w_free_ptr = (ring->w_free_ptr + val) % ring->w_nr;
120 atomic_add(val, &ring->w_free_ctr);
122 if (__rds_ib_ring_empty(ring) &&
127 void rds_ib_ring_unalloc(struct rds_ib_work_ring *ring, u32 val)
129 ring->w_alloc_ptr = (ring->w_alloc_ptr - val) % ring->w_nr;
130 ring->w_alloc_ctr -= val;
133 int rds_ib_ring_empty(struct rds_ib_work_ring *ring)
135 return __rds_ib_ring_empty(ring);
138 int rds_ib_ring_low(struct rds_ib_work_ring *ring)
140 return __rds_ib_ring_used(ring) <= (ring->w_nr >> 1);
144 * returns the oldest allocated ring entry. This will be the next one
147 u32 rds_ib_ring_oldest(struct rds_ib_work_ring *ring)
149 return ring->w_free_ptr;
156 u32 rds_ib_ring_completed(struct rds_ib_work_ring *ring, u32 wr_id, u32 oldest)
163 ret = ring->w_nr - oldest + (unsigned long long)wr_id + 1;
165 rdsdebug("ring %p ret %u wr_id %u oldest %u\n", ring, ret,