• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  #include <stdlib.h>
2  #include "io_u_queue.h"
3  
io_u_qinit(struct io_u_queue * q,unsigned int nr)4  int io_u_qinit(struct io_u_queue *q, unsigned int nr)
5  {
6  	q->io_us = calloc(nr, sizeof(struct io_u *));
7  	if (!q->io_us)
8  		return 1;
9  
10  	q->nr = 0;
11  	q->max = nr;
12  	return 0;
13  }
14  
io_u_qexit(struct io_u_queue * q)15  void io_u_qexit(struct io_u_queue *q)
16  {
17  	free(q->io_us);
18  }
19  
io_u_rinit(struct io_u_ring * ring,unsigned int nr)20  int io_u_rinit(struct io_u_ring *ring, unsigned int nr)
21  {
22  	ring->max = nr + 1;
23  	if (ring->max & (ring->max - 1)) {
24  		ring->max--;
25  		ring->max |= ring->max >> 1;
26  		ring->max |= ring->max >> 2;
27  		ring->max |= ring->max >> 4;
28  		ring->max |= ring->max >> 8;
29  		ring->max |= ring->max >> 16;
30  		ring->max++;
31  	}
32  
33  	ring->ring = calloc(ring->max, sizeof(struct io_u *));
34  	if (!ring->ring)
35  		return 1;
36  
37  	ring->head = ring->tail = 0;
38  	return 0;
39  }
40  
io_u_rexit(struct io_u_ring * ring)41  void io_u_rexit(struct io_u_ring *ring)
42  {
43  	free(ring->ring);
44  }
45