Bypassing the DMA API is bad style, even when we don't expect any
actual problems. Let's utilize the right API helpers for setting the
DMA masks and check for returned errors, so that we benefit from
common sanity checks.
io_subchannel_allocate_dev() required some extra massaging, so that we
can return an errno other than -ENOMEM.