lkml.org 
[lkml]   [2011]   [Aug]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [patch 15/36] Hexagon: Add init_task and process functions
    Date
    On Wednesday 17 August 2011 11:35:12 Richard Kuo wrote:
    > +/*
    > + * Spin, or better still, do a hardware or VM wait instruction
    > + * If hardware or VM offer wait termination even though interrupts
    > + * are disabled.
    > + */
    > +static void default_idle(void)
    > +{
    > + __vmwait();
    > +}
    > +
    > +void (*idle_sleep)(void) = default_idle;
    > +
    > +void cpu_idle(void)
    > +{
    > + while (1) {
    > + tick_nohz_stop_sched_tick(1);
    > + while (!need_resched())
    > + idle_sleep();
    > + tick_nohz_restart_sched_tick();
    > + schedule();
    > + }
    > +}

    This looks like you have the classic going to sleep race in here:

    You need to disable hardware interrupts before checking need_resched(),
    otherwise an interrupt might hit just after you have checked it and
    before you call __vmwait(). The definition of the __vmwait call
    must atomically reenable interrupts and suspend the CPU.

    Arnd


    \
     
     \ /
      Last update: 2011-08-17 22:45    [W:2.934 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site