Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Jan 2010 16:04:56 +0900 (JST)
From:      Kohji Okuno <okuno.kohji@jp.panasonic.com>
To:        attilio@freebsd.org
Cc:        jroberson@jroberson.net, freebsd-current@freebsd.org, okuno.kohji@jp.panasonic.com
Subject:   Re: Bug about sched_4bsd?
Message-ID:  <20100118.160456.519459540419521301.okuno.kohji@jp.panasonic.com>
In-Reply-To: <20100118.155352.59640143160034670.okuno.kohji@jp.panasonic.com>
References:  <20100117.152835.119882392487126976.okuno.kohji@jp.panasonic.com> <3bbf2fe11001171858o4568fe38l9b2db54ec9856b50@mail.gmail.com> <20100118.155352.59640143160034670.okuno.kohji@jp.panasonic.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hello,

I have a question.

The sleeping thread (on turnstile or on sleepque) can set sched_lock
to td_lock, kernel are allowed?

Best regards,
 Kohji Okuno.

> Hello,
> 
> Thank you, Attilio.
> I checked your patch. I think that your patch is better.
> I tested the patch quickly, and I think it's OK.
> # This probrem does not occur easily :-<
> 
> 
> What do you think about maybe_resched()?
> I have never experienced about maybe_resched(), but I think that the
> race condition may occur.
> 
> <<Back Trace>>
> sched_4bsd.c:	  maybe_resched()
> sched_4bsd.c:	  resetpriority_thread()
> sched_4bsd.c:	  sched_nice()			get thread_lock(td)
> kern_resource.c:  donice()
> kern_resource.c:  setpriority()			get PROC_LOCK()
> 
> static void
> maybe_resched(struct thread *td)
> {
>         THREAD_LOCK_ASSERT(td, MA_OWNED);
>         if (td->td_priority < curthread->td_priority)
>                 curthread->td_flags |= TDF_NEEDRESCHED;
> }
> 
> I think, when td->td_lock is not &sched_lock, curthread->td_lock is
> not locked in maybe_resched().
> 
> Best regards,
>  Kohji Okuno.
> 
> From: Attilio Rao <attilio@freebsd.org>
> Subject: Re: Bug about sched_4bsd?
> Date: Mon, 18 Jan 2010 03:58:41 +0100
> Message-ID: <3bbf2fe11001171858o4568fe38l9b2db54ec9856b50@mail.gmail.com>
> 
>> 2010/1/17 Kohji Okuno <okuno.kohji@jp.panasonic.com>:
>>> Hello,
>>>
>>> Could you check sched_4bsd.patch, please?
>> 
>> I think, instead, that what needs to happen is to have sched_switch()
>> to do a lock handover from sleepq/turnstile spinlock to schedlock.
>> That way, if threads are willing to contest on td_lock they will be
>> still inhibited.
>> I'm not sure if this patch breaks any invariant, if you may test I
>> would appreciate:
>> http://www.freebsd.org/~attilio/sched_4bsd_schedlock.diff
>> 
>> Reviews and comments are appreciated.
>> BTW, nice catch.
>> 
>> Attilio
>> 
>> 
>> -- 
>> Peace can only be achieved by understanding - A. Einstein
>> _______________________________________________
>> freebsd-current@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
> 
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100118.160456.519459540419521301.okuno.kohji>