blob: d9c003d9490b92744773d1fd0e6e924c95e28924 [file] [log] [blame]
#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;
}