lkml.org 
[lkml]   [2002]   [Jun]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC] 4KB stack + irq stack for x86
    On Wed, Jun 05, 2002 at 08:33:13AM -0700, Linus Torvalds wrote:
    > So, as far as I can tell, we now get a nasty aliasing issue on
    > "current_thread_info()->flags", and information like NEED_RESCHED and
    > SIGPENDING end up being set in the wrong place. They get set on the
    > _interrupt_ thread_info, not the "process native" thread_info.
    >
    > Or did I miss some subtlety?

    Ah, you're right. If anyone uses current_thread_info from IRQ context
    it will set the flags in the wrong structure. However, it actually
    works because nobody does that currently: all of the _thread_flag users
    appear to be coming in from task context. Mostly that's luck as I
    didn't change the smp ipis to switch stacks, so the only place that
    is an interrupt and needs to access the actual thread data, does.

    > Comments? We can deprecate "current_thread_info()", but that would make
    > some things slightly less efficient.

    I think we can keep it and flush out any misuse by a couple of
    carefully placed BUG() checks (ie anyone using current_thread_info
    directly from IRQ context really needs to go via current->thread_info,
    so that could be made a BUG()). The only bit I'm not certain about
    is the preempt_count handling. I rather like having addr_limit set
    to 0 as it will prevent copy*user from working in IRQ context.

    Another alternative is to move the task structure back into the same
    page as the stack, but that would require a commitment to fix the
    large stack users (there aren't many, and I'm certainly willing). This
    approach would work well with a guard page and the task struct at the
    top. Also, there is at least 348 bytes of task_struct which should be
    moved out: io_bitmaps should only be allocated for the tasks that use
    it (its 132 bytes, and we copy it into the per cpu tss nowadays, so
    making it a pointer should be fine), and the credentials (groups +
    rlim + user ids: >216) need to move to a struct cred for use by NFS,
    AIO and pthreads. That alone would get task_struct down to 1072 bytes
    on x86 UP (1328 bytes on SMP), which leaves almost 3KB for the task
    context stack.

    Thoughts?

    -ben
    --
    "You will be reincarnated as a toad; and you will be much happier."
    -
    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/

    \
     
     \ /
      Last update: 2005-03-22 13:26    [W:4.079 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site