xref: /linux/drivers/gpu/drm/i915/i915_list_util.h (revision 4f38da1f027ea2c9f01bb71daa7a299c191b6940)
1*2f04432fSJani Nikula /* SPDX-License-Identifier: MIT */
2*2f04432fSJani Nikula /* Copyright © 2025 Intel Corporation */
3*2f04432fSJani Nikula 
4*2f04432fSJani Nikula #ifndef __I915_LIST_UTIL_H__
5*2f04432fSJani Nikula #define __I915_LIST_UTIL_H__
6*2f04432fSJani Nikula 
7*2f04432fSJani Nikula #include <linux/list.h>
8*2f04432fSJani Nikula #include <asm/rwonce.h>
9*2f04432fSJani Nikula 
10*2f04432fSJani Nikula static inline void __list_del_many(struct list_head *head,
11*2f04432fSJani Nikula 				   struct list_head *first)
12*2f04432fSJani Nikula {
13*2f04432fSJani Nikula 	first->prev = head;
14*2f04432fSJani Nikula 	WRITE_ONCE(head->next, first);
15*2f04432fSJani Nikula }
16*2f04432fSJani Nikula 
17*2f04432fSJani Nikula static inline int list_is_last_rcu(const struct list_head *list,
18*2f04432fSJani Nikula 				   const struct list_head *head)
19*2f04432fSJani Nikula {
20*2f04432fSJani Nikula 	return READ_ONCE(list->next) == head;
21*2f04432fSJani Nikula }
22*2f04432fSJani Nikula 
23*2f04432fSJani Nikula #endif /* __I915_LIST_UTIL_H__ */
24