24#ifndef DRM_SCHEDULER_SPSC_QUEUE_H_
25#define DRM_SCHEDULER_SPSC_QUEUE_H_
51 atomic_long_set(&
queue->tail, (
long)&
queue->head);
52 atomic_set(&
queue->job_count, 0);
62 return atomic_read(&
queue->job_count);
73 atomic_inc(&
queue->job_count);
74 smp_mb__after_atomic();
87 return tail == &
queue->head;
109 if (atomic_long_cmpxchg(&
queue->tail,
110 (
long)&
node->next, (
long) &
queue->head) != (
long)&
node->next) {
118 atomic_dec(&
queue->job_count);
#define NULL
Definition actypes.h:561
#define unlikely(x)
Definition compiler.h:30
void int node
Definition kthread.h:31
#define READ_ONCE(x)
Definition kernel.h:605
#define smp_rmb()
Definition kernel.h:620
#define WRITE_ONCE(x, val)
Definition kernel.h:608
#define smp_wmb()
Definition kernel.h:623
#define preempt_disable()
Definition preempt.h:284
#define preempt_enable()
Definition preempt.h:287
Definition spsc_queue.h:32
struct spsc_node * next
Definition spsc_queue.h:35
Definition spsc_queue.h:38
atomic_t job_count
Definition spsc_queue.h:45
atomic_long_t tail
Definition spsc_queue.h:43
struct spsc_node * head
Definition spsc_queue.h:40
struct VirtioQueue * queue
Definition virtiokbd.c:45