-#define list_entry(_ptr, _type, _member) \
- container_of(_ptr, _type, _member)
+#define list_entry(_ptr, _type, _member, _list) \
+ (&container_of(_ptr, _type, _member)->_member == &((_list)->head) \
+ ? NULL \
+ : container_of(_ptr, _type, _member))
+
+#define list_prev_entry(_list, _pos, _member) \
+ list_entry(_pos->_member.prev, typeof(*_pos), _member, _list)
+
+#define list_next_entry(_list, _pos, _member) \
+ list_entry(_pos->_member.next, typeof(*_pos), _member, _list)