ULE/yielding patch for testing.
Jeff Roberson
jroberson at chesapeake.net
Thu Oct 4 19:08:20 PDT 2007
On Thu, 4 Oct 2007, Daniel Eischen wrote:
> On Thu, 4 Oct 2007, Jeff Roberson wrote:
>
>> On Thu, 4 Oct 2007, Daniel Eischen wrote:
>>
>>> On Thu, 4 Oct 2007, Jeff Roberson wrote:
>>>
>>>>
>>>> I believe I have fixed this bug in the enclosed patch. It is rooted from
>>>> /usr/src/sys so you should cd there to apply it.
>>>
>>> This doesn't break realtime threads doing a sched_yield() does
>>> it? I couldn't easily see how the priority gets set back into
>>> the realtime class range. But then, maybe I'm a dummy ;-)
>>
>> Well the historical behavior was for sched_yield() to not adjust
>> priorities. It just requeues at the back of the queue for that priority. Xu
>> changed this in 7.0 but he didn't answer my mail as to why. We have a
>> yield() call that does drop to the max timeshare priority, however, it
>> doesn't seem to have a man page.
>>
>> The code removed was this:
>>
>> - if (td->td_pri_class == PRI_TIMESHARE)
>> - sched_prio(td, PRI_MAX_TIMESHARE);
>>
>>
>> So it really only effected timesharing threads.
>
> As I read the change, now it affects real-time (which is the
> desired behavior since it is a POSIX real-time extension).
> But it should have POSIX-defined behavior, which is to requeue
> at the back of the queue for that priority.
It effected real-time before. There is a mi_switch() after that priority
adjustment. That switch re-adds the thread at the back of the queue for
that priority. This patch just removes the priority adjustment for
timeshare threads.
>
> --
> DE
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
>
More information about the freebsd-current
mailing list