How I ended up writing new real-time kernel
Honest question: What's the value, if any, of using intrusive linked lists in this context? That is, I would have handled linked lists as something like:    struct TN_ListItem {
        TN_ListItem * prev;
        TN_ListItem * next;
        void * data;
    }

I can immediately see that each TN_ListItem would take up an extra word of memory in order to store the pointer to the data. Is that the main crux of the issue, or is there something more?