// SPDX-License-Identifier: GPL-2.0-only /* * Copyright 2023 Red Hat */ #include "funnel-queue.h" #include "cpu.h" #include "memory-alloc.h" #include "permassert.h" int vdo_make_funnel_queue(struct funnel_queue **queue_ptr) { … } void vdo_free_funnel_queue(struct funnel_queue *queue) { … } static struct funnel_queue_entry *get_oldest(struct funnel_queue *queue) { … } /* * Poll a queue, removing the oldest entry if the queue is not empty. This function must only be * called from a single consumer thread. */ struct funnel_queue_entry *vdo_funnel_queue_poll(struct funnel_queue *queue) { … } /* * Check whether the funnel queue is empty or not. If the queue is in a transition state with one * or more entries being added such that the list view is incomplete, this function will report the * queue as empty. */ bool vdo_is_funnel_queue_empty(struct funnel_queue *queue) { … } /* * Check whether the funnel queue is idle or not. If the queue has entries available to be * retrieved, it is not idle. If the queue is in a transition state with one or more entries being * added such that the list view is incomplete, it may not be possible to retrieve an entry with * the vdo_funnel_queue_poll() function, but the queue will not be considered idle. */ bool vdo_is_funnel_queue_idle(struct funnel_queue *queue) { … }