kernel - Fix spinlock bug introduced with windowing
* The exclusive spinlock contention code was improperly assuming that
non-zero EXCLWAIT bits prevented the SHARED bit from being set. This
is no longer true, shared locks can sometimes override EXCLWAIT.
This assumption could result in spin_lock() returning with a shared
lock instead of an exclusive lock.
* Fixed by ensuring that the SHARED bit is cleared when resolving the
contended exclusive lock.
* Should hopefully fix the pmap pv == NULL assertion.
Reported-by: dillon, zrj