The SMT wake_idle code really wants to look at a non-local CPU's domain in
order to check for idle siblings.
So change the domain attachment code a little bit so we continue to hold a
runqueue's lock while attaching a new domain. This means the locking rules
have changed to: you may access your own domain without any lock, you must
hold a remote runqueue's lock in order to view its domain.