Committed in revision 2705.

On Thu, 23 Jun 2005, Tom Duffy wrote:

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

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to