The SNDCTL_*INFO ioctls can report info about any device in the system,
not only the one they were issued on. Both dispatchers unnecessarily
busied the caller's device first. The caller's device is kept alive
anyway, until destroy_dev() drains the cdev threadcount.
Busying the wrong device also prevented the handlers from busying the
one they actually want to report info on, because this would recurse on
the sx whenever the two were the same, so they walked the channel lists
under PCM_LOCK instead.
Busy each device as it is inspected, and give up the topology lock once
it is busied rather than holding it across the walks.
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation