Files
simtrace2/firmware/libcommon/include/llist_irqsafe.h
2017-11-28 19:16:57 +01:00

42 lines
720 B
C

#pragma once
#include "osmocom/core/linuxlist.h"
#include "utils.h"
static inline void llist_add_irqsafe(struct llist_head *_new,
struct llist_head *head)
{
unsigned long x;
local_irq_save(x);
llist_add(_new, head);
local_irq_restore(x);
}
static inline void llist_add_tail_irqsafe(struct llist_head *_new,
struct llist_head *head)
{
unsigned long x;
local_irq_save(x);
llist_add_tail(_new, head);
__enable_irq();
}
static inline struct llist_head *llist_head_dequeue_irqsafe(struct llist_head *head)
{
struct llist_head *lh;
unsigned long x;
local_irq_save(x);
if (llist_empty(head)) {
lh = NULL;
} else {
lh = head->next;
llist_del(lh);
}
local_irq_restore(x);
return lh;
}