[openib-general] [PATCH] kDAPL: cstyle dat-provider/dapl_ring_buffer_util.c
Tom Duffy
tduffy at sun.com
Thu Jun 23 16:11:06 PDT 2005
Signed-off-by: Tom Duffy <tduffy at sun.com>
Index: linux-kernel-work/dat-provider/dapl_ring_buffer_util.c
===================================================================
--- linux-kernel-work/dat-provider/dapl_ring_buffer_util.c (revision 2704)
+++ linux-kernel-work/dat-provider/dapl_ring_buffer_util.c (working copy)
@@ -63,9 +63,8 @@ u32 dapl_rbuf_alloc(struct dapl_ring_buf
/* Put size on a power of 2 boundary */
rsize = 1;
- while ((int) rsize < size) {
+ while ((int) rsize < size)
rsize <<= 1;
- }
rbuf->base = kmalloc(rsize * sizeof *rbuf->base, GFP_ATOMIC);
if (rbuf->base) {
@@ -100,42 +99,37 @@ u32 dapl_rbuf_alloc(struct dapl_ring_buf
*/
u32 dapl_rbuf_realloc(struct dapl_ring_buffer *rbuf, int size)
{
- struct dapl_ring_buffer new_rbuf;
- void *entry;
- u32 dat_status = DAT_SUCCESS;
-
- /* decreasing the size or retaining the old size is not allowed */
- if (size <= rbuf->lim + 1)
- {
- dat_status = DAT_ERROR (DAT_INVALID_PARAMETER, DAT_INVALID_ARG2);
- goto bail;
- }
-
- /*
- * !This is NOT ATOMIC!
- * Simple algorithm: Allocate a new ring buffer, take everything
- * out of the old one and put it in the new one, and release the
- * old base buffer.
- */
- dat_status = dapl_rbuf_alloc (&new_rbuf, size);
- if (dat_status != DAT_SUCCESS)
- {
- goto bail;
- }
-
- while ( (entry = dapl_rbuf_remove(rbuf)) != NULL)
- {
- /* We know entries will fit so ignore the return code */
- (void)dapl_rbuf_add (&new_rbuf, entry);
- }
+ struct dapl_ring_buffer new_rbuf;
+ void *entry;
+ u32 status = DAT_SUCCESS;
+
+ /* decreasing the size or retaining the old size is not allowed */
+ if (size <= rbuf->lim + 1) {
+ status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG2);
+ goto bail;
+ }
+
+ /*
+ * !This is NOT ATOMIC!
+ * Simple algorithm: Allocate a new ring buffer, take everything
+ * out of the old one and put it in the new one, and release the
+ * old base buffer.
+ */
+ status = dapl_rbuf_alloc(&new_rbuf, size);
+ if (status != DAT_SUCCESS)
+ goto bail;
+
+ while ((entry = dapl_rbuf_remove(rbuf)) != NULL)
+ /* We know entries will fit so ignore the return code */
+ (void)dapl_rbuf_add(&new_rbuf, entry);
- /* release the old base buffer */
- kfree(rbuf->base);
+ /* release the old base buffer */
+ kfree(rbuf->base);
- *rbuf = new_rbuf;
+ *rbuf = new_rbuf;
- bail:
- return dat_status;
+bail:
+ return status;
}
/*
@@ -155,9 +149,8 @@ u32 dapl_rbuf_realloc(struct dapl_ring_b
*/
void dapl_rbuf_destroy(struct dapl_ring_buffer *rbuf)
{
- if ((NULL == rbuf) || (NULL == rbuf->base)) {
+ if ((NULL == rbuf) || (NULL == rbuf->base))
return;
- }
kfree(rbuf->base);
rbuf->base = NULL;
@@ -221,22 +214,18 @@ u32 dapl_rbuf_add(struct dapl_ring_buffe
*/
void *dapl_rbuf_remove(struct dapl_ring_buffer *rbuf)
{
- int pos;
- int val;
+ int pos, val;
- while (atomic_read(&rbuf->head) !=
- atomic_read(&rbuf->tail)) {
+ while (atomic_read(&rbuf->head) != atomic_read(&rbuf->tail)) {
pos = atomic_read(&rbuf->tail);
val = dapl_os_atomic_assign(&rbuf->tail, pos, pos + 1);
if (val == pos) {
pos = (pos + 1) & rbuf->lim; /* verify in range */
-
return rbuf->base[pos];
}
}
return NULL;
-
}
/*
@@ -261,12 +250,10 @@ int dapl_rbuf_count(struct dapl_ring_buf
head = atomic_read(&rbuf->head) & rbuf->lim;
tail = atomic_read(&rbuf->tail) & rbuf->lim;
- if (head > tail) {
+ if (head > tail)
count = head - tail;
- } else {
- /* add 1 to lim as it is a mask, number of entries - 1 */
+ else /* add 1 to lim as it is a mask, number of entries - 1 */
count = (rbuf->lim + 1 - tail + head) & rbuf->lim;
- }
return count;
}
@@ -292,12 +279,11 @@ int dapl_rbuf_count(struct dapl_ring_buf
*/
void dapl_rbuf_adjust(struct dapl_ring_buffer *rbuf, unsigned long offset)
{
- int pos;
+ int pos;
- pos = atomic_read(&rbuf->head);
- while ( pos != atomic_read(&rbuf->tail) )
- {
- rbuf->base[pos] = rbuf->base[pos] + offset;
- pos = (pos + 1) & rbuf->lim; /* verify in range */
- }
+ pos = atomic_read(&rbuf->head);
+ while (pos != atomic_read(&rbuf->tail)) {
+ rbuf->base[pos] = rbuf->base[pos] + offset;
+ pos = (pos + 1) & rbuf->lim; /* verify in range */
+ }
}
More information about the general
mailing list