-#define cds_hlist_entry(ptr, type, member) \
- ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
+#define cds_hlist_entry(ptr, type, member) caa_container_of(ptr, type, member)
+
+/* Get typed element from list at a given position, keeping NULL pointers. */
+#define cds_hlist_entry_safe(ptr, type, member) \
+ ({ \
+ __typeof__(ptr) ____ret = (ptr); \
+ ____ret ? cds_hlist_entry(____ret, type, member) : NULL; \
+ })