+#define LSTACK_INIT \
+ TCON_WRAP_INIT({ NULL, })
+
+/**
+ * lstack_entry - convert an lstack_link back into the structure containing it.
+ * @s: the stack
+ * @l: the lstack_link
+ *
+ * Example:
+ * struct element {
+ * int value;
+ * struct lstack_link link;
+ * } e;
+ * LSTACK(struct element, link) my_stack;
+ * assert(lstack_entry(&my_stack, &e.link) == &e);
+ */
+#define lstack_entry(s_, l_) tcon_container_of((s_), canary, (l_))
+
+
+/**
+ * lstack_init_from_top - initialize a stack with a given top element
+ * @s: the lstack to initialize
+ * @e: pointer to the top element of the new stack
+ *
+ * USE WITH CAUTION: This is for handling unusual cases where you have
+ * a pointer to an element in a previously constructed stack but can't
+ * conveniently pass around a normal struct lstack. Usually you
+ * should use lstack_init().
+ *
+ * Example:
+ * struct element {
+ * int value;
+ * struct lstack_link link;
+ * } e;
+ * LSTACK(struct element, link) stack1 = LSTACK_INIT;
+ * LSTACK(struct element, link) stack2;
+ *
+ * lstack_push(&stack1, &e);
+ *
+ * lstack_init_from_top(&stack2, lstack_top(&stack1));
+ */
+#define lstack_init_from_top(s_, e_) \
+ (lstack_init_(tcon_unwrap(s_), tcon_member_of((s_), canary, (e_))))