This actually really simplifies some ULE locking as well as hopefully reducing the contention on the scheduler lock as switch is quite a long operation. The reason this simplifies ULE locking is that we will no longer spin waiting for block locked to clear in sched_switch() while we have the tdq locked. This also gets rid of cases where we have to pretend the lock directly changed ownership and assign the owner and clear lock profiling. All in all it's a less unique locking pattern.
switches are obviously protected against preemption by spinlock_enter(). The blocked lock still provides protection against switching into a thread that is in the process of switching out.