David Young wrote:
I am experimenting with detaching xbd(4) units during shutdown. xbd_xenbus_detach() hangs in this the loop, below: hypervisor_mask_event(sc->sc_evtchn); event_remove_handler(sc->sc_evtchn, &xbd_handler, sc); while (xengnt_status(sc->sc_ring_gntref)) { tsleep(xbd_xenbus_detach, PRIBIO, "xbd_ref", hz/2);} xengnt_revoke_access(sc->sc_ring_gntref);uvm_km_free(kernel_map, (vaddr_t)sc->sc_ring.sring, PAGE_SIZE, UVM_KMF_WIRED);
The dom0 is expected not to use the grant table ring during device removal, and clear transfering/writing/reading states. If it does not (hence, infinite loop on status), something is wrong in dom0.
What version/OS are you running as dom0? Is the vbd (dom0 side) a file (used through vnd(4)), or a block device?
> Should this routine follow some other protocol in order to close down > and revoke the grant_ref_t?Hardly, revocation will end in panic() (you cannot free a grant table entry while there is a read/write lock acquired by the other end on the referenced page).
-- Jean-Yves Migeon jeanyves.migeon%free.fr@localhost