On Fri, 30 Nov 2001, H. Peter Anvin wrote:
> Davide Libenzi wrote:
>
> >
> > Again this is the "current" diff :
> >
> > static inline struct task_struct * get_current(void)
> > {
> > - struct task_struct *current;
> > - __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
> > - return current;
> > + unsigned long *tskptr;
> > + __asm__("andl %%esp,%0; ":"=r" (tskptr) : "0" (~8191UL));
> > + return (struct task_struct *) *tskptr;
> > }
> >
> > that will probably resolve in something like:
> >
> > movl %esp, %eax
> > andl $-8192, %eax
> > movl (%eax), %eax
> >
>
>
> This seems to confuddle the idea of colouring the kernel stack.
It's task_truct colouring not stack, to colour the stack you've to go in
arch/??/kernel/process.c and jitter the stack pointer.
The task_struct colouring is done at task_struct creation time :
+struct task_struct *alloc_task_struct(void)
+{
+ unsigned long tskb = __get_free_pages(GFP_KERNEL, 1), tsk;
+ tsk = tskb | ((tskb >> 13) & 0x00000060) | SMP_CACHE_BYTES;
+ *(unsigned long *) tskb = tsk;
+ return (struct task_struct *) tsk;
+}
- Davide
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Fri Nov 30 2001 - 21:00:41 EST