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