attilio 9a7f4738f4 - Fix a race in sched_switch() of sched_4bsd.
In the case of the thread being on a sleepqueue or a turnstile, the
  sched_lock was acquired (without the aid of the td_lock interface) and
  the td_lock was dropped. This was going to break locking rules on other
  threads willing to access to the thread (via the td_lock interface) and
  modify his flags (allowed as long as the container lock was different
  by the one used in sched_switch).
  In order to prevent this situation, while sched_lock is acquired there
  the td_lock gets blocked. [0]
- Merge the ULE's internal function thread_block_switch() into the global
  thread_lock_block() and make the former semantic as the default for
  thread_lock_block(). This means that thread_lock_block() will not
  disable interrupts when called (and consequently thread_unlock_block()
  will not re-enabled them when called). This should be done manually
  when necessary.
  Note, however, that ULE's thread_unblock_switch() is not reaped
  because it does reflect a difference in semantic due in ULE (the
  td_lock may not be necessarilly still blocked_lock when calling this).
  While asymmetric, it does describe a remarkable difference in semantic
  that is good to keep in mind.

[0] Reported by:	Kohji Okuno
			<okuno dot kohji at jp dot panasonic dot com>
Tested by:		Giovanni Trematerra
			<giovanni dot trematerra at gmail dot com>
MFC:			2 weeks
2010-01-23 15:54:21 +00:00
..
2009-10-27 11:01:15 +00:00
2010-01-07 01:24:09 +00:00
2008-09-22 10:37:02 +00:00
2009-12-25 20:03:03 +00:00
2009-08-23 09:55:06 +00:00
2010-01-04 12:39:42 +00:00
2009-10-27 11:01:15 +00:00
2009-10-27 11:01:15 +00:00
2010-01-04 20:59:52 +00:00
2010-01-18 18:58:03 +00:00
2010-01-04 20:59:52 +00:00
2009-05-26 09:19:21 +00:00
2010-01-11 20:44:05 +00:00