Skip to content

Commit 3db461b

Browse files
committed
Ring Queues
1 parent 76c7387 commit 3db461b

File tree

12 files changed

+2294
-4
lines changed

12 files changed

+2294
-4
lines changed

src/queue/ring_q.h

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* ring_q.h
3+
*
4+
*/
5+
6+
#ifndef QUEUE_RING_Q_H_
7+
#define QUEUE_RING_Q_H_
8+
9+
#include "rte_ring.h"
10+
11+
class queue
12+
{
13+
public:
14+
queue(unsigned int q_size, unsigned int type = 0)
15+
{
16+
ring = rte_ring_create("test", q_size, SOCKET_ID_ANY, type);
17+
}
18+
virtual ~queue()
19+
{
20+
free(ring);
21+
}
22+
unsigned int enqueue(void * const * obj_array){(void)obj_array; return 0;}
23+
unsigned int dequeue(void ** obj_array){(void)obj_array; return 0;}
24+
25+
unsigned int obj_count(){return rte_ring_count(ring);};
26+
private:
27+
rte_ring *ring;
28+
};
29+
30+
31+
class spc_queue : public queue
32+
{
33+
public:
34+
spc_queue(std::size_t q_size) : queue(q_size, RING_F_SP_ENQ | RING_F_SC_DEQ) {}
35+
private:
36+
};
37+
38+
class mpc_queue : public queue
39+
{
40+
41+
};
42+
43+
44+
45+
#endif /* QUEUE_RING_Q_H_ */

src/rte/rte_atomic.h

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*-
2+
* BSD LICENSE
3+
*
4+
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
5+
* All rights reserved.
6+
*
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions
9+
* are met:
10+
*
11+
* * Redistributions of source code must retain the above copyright
12+
* notice, this list of conditions and the following disclaimer.
13+
* * Redistributions in binary form must reproduce the above copyright
14+
* notice, this list of conditions and the following disclaimer in
15+
* the documentation and/or other materials provided with the
16+
* distribution.
17+
* * Neither the name of Intel Corporation nor the names of its
18+
* contributors may be used to endorse or promote products derived
19+
* from this software without specific prior written permission.
20+
*
21+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32+
*/
33+
34+
#ifndef _RTE_ATOMIC_H_
35+
#define _RTE_ATOMIC_H_
36+
37+
#ifdef __cplusplus
38+
extern "C" {
39+
#endif
40+
41+
#define MPLOCKED "lock ; " /**< Insert MP lock prefix. */
42+
43+
/**
44+
* Compiler barrier.
45+
*
46+
* Guarantees that operation reordering does not occur at compile time
47+
* for operations directly before and after the barrier.
48+
*/
49+
#define rte_compiler_barrier() do { \
50+
asm volatile ("" : : : "memory"); \
51+
} while(0)
52+
53+
static inline int
54+
rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src)
55+
{
56+
uint8_t res;
57+
58+
asm volatile(
59+
MPLOCKED
60+
"cmpxchgl %[src], %[dst];"
61+
"sete %[res];"
62+
: [res] "=a" (res), /* output */
63+
[dst] "=m" (*dst)
64+
: [src] "r" (src), /* input */
65+
"a" (exp),
66+
"m" (*dst)
67+
: "memory"); /* no-clobber list */
68+
return res;
69+
}
70+
71+
#ifdef __cplusplus
72+
}
73+
#endif
74+
75+
#endif /* _RTE_ATOMIC_H_ */

src/rte/rte_branch_prediction.h

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*-
2+
* BSD LICENSE
3+
*
4+
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
5+
* All rights reserved.
6+
*
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions
9+
* are met:
10+
*
11+
* * Redistributions of source code must retain the above copyright
12+
* notice, this list of conditions and the following disclaimer.
13+
* * Redistributions in binary form must reproduce the above copyright
14+
* notice, this list of conditions and the following disclaimer in
15+
* the documentation and/or other materials provided with the
16+
* distribution.
17+
* * Neither the name of Intel Corporation nor the names of its
18+
* contributors may be used to endorse or promote products derived
19+
* from this software without specific prior written permission.
20+
*
21+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32+
*/
33+
34+
/**
35+
* @file
36+
* Branch Prediction Helpers in RTE
37+
*/
38+
39+
#ifndef _RTE_BRANCH_PREDICTION_H_
40+
#define _RTE_BRANCH_PREDICTION_H_
41+
42+
/**
43+
* Check if a branch is likely to be taken.
44+
*
45+
* This compiler builtin allows the developer to indicate if a branch is
46+
* likely to be taken. Example:
47+
*
48+
* if (likely(x > 1))
49+
* do_stuff();
50+
*
51+
*/
52+
#ifndef likely
53+
#define likely(x) __builtin_expect((x),1)
54+
#endif /* likely */
55+
56+
/**
57+
* Check if a branch is unlikely to be taken.
58+
*
59+
* This compiler builtin allows the developer to indicate if a branch is
60+
* unlikely to be taken. Example:
61+
*
62+
* if (unlikely(x < 1))
63+
* do_stuff();
64+
*
65+
*/
66+
#ifndef unlikely
67+
#define unlikely(x) __builtin_expect((x),0)
68+
#endif /* unlikely */
69+
70+
#endif /* _RTE_BRANCH_PREDICTION_H_ */

0 commit comments

Comments
 (0)