A razão pela qual precisamos do thread_info é devido ao fato de que estamos alocando a memória para task_struct usando o Slab Allocator . Agora você pode perguntar qual é a relação entre eles?
Para entender, você precisa entender como o Slab Allocator funciona.
Sem o Slab Allocator, os desenvolvedores do kernel poderiam alocar memória para task_struct na pilha do kernel para o processo em particular, para que ele possa ser acessado facilmente. Agora, com o advento do Slab Allocator, a memória é alocada para o task_struct, conforme determinado pelo Slab Allocator. Portanto, com o Slab Allocator você tem task_struct armazenado em algum outro lugar e não na pilha do kernel do processo em particular. Agora, os desenvolvedores do Kernel introduziram o thread_info e colocaram um ponteiro no local onde o task_struct reside. Assim, temos thread_info na pilha do kernel do processo em vez de task_struct . E é por isso que temos que viver com o thread_info.
Você pode ler sobre Slab Allocator no livro de Robert Love Linux Kernel Development.