diff --git a/zircon/kernel/object/guest_dispatcher.cpp b/zircon/kernel/object/guest_dispatcher.cpp index d1b4d4316555e5b329b112cb0d3438176d13c9f2..2d78522ffcdc019ad1b1fb65c5786b790500e07a 100644 --- a/zircon/kernel/object/guest_dispatcher.cpp +++ b/zircon/kernel/object/guest_dispatcher.cpp @@ -16,7 +16,7 @@ KCOUNTER(dispatcher_guest_create_count, "dispatcher.guest.create") KCOUNTER(dispatcher_guest_destroy_count, "dispatcher.guest.destroy") // static -zx_status_t GuestDispatcher::Create(fbl::RefPtr<Dispatcher>* guest_dispatcher, +zx_status_t GuestDispatcher::Create(KernelHandle<GuestDispatcher>* guest_handle, zx_rights_t* guest_rights, KernelHandle<VmAddressRegionDispatcher>* vmar_handle, zx_rights_t* vmar_rights) { @@ -27,19 +27,20 @@ zx_status_t GuestDispatcher::Create(fbl::RefPtr<Dispatcher>* guest_dispatcher, } fbl::AllocChecker ac; - auto disp = fbl::AdoptRef(new (&ac) GuestDispatcher(ktl::move(guest))); + KernelHandle new_guest_handle(fbl::AdoptRef(new (&ac) GuestDispatcher(ktl::move(guest)))); if (!ac.check()) { return ZX_ERR_NO_MEMORY; } - status = VmAddressRegionDispatcher::Create(disp->guest()->AddressSpace()->RootVmar(), 0, - vmar_handle, vmar_rights); + status = VmAddressRegionDispatcher::Create( + new_guest_handle.dispatcher()->guest()->AddressSpace()->RootVmar(), 0, vmar_handle, + vmar_rights); if (status != ZX_OK) { return status; } *guest_rights = default_rights(); - *guest_dispatcher = ktl::move(disp); + *guest_handle = ktl::move(new_guest_handle); return ZX_OK; } diff --git a/zircon/kernel/object/include/object/guest_dispatcher.h b/zircon/kernel/object/include/object/guest_dispatcher.h index 1256182aebc978f53ef390212d071d6f49b433cc..f722e6ed02ad53eeb7e308962d7158e98543ec67 100644 --- a/zircon/kernel/object/include/object/guest_dispatcher.h +++ b/zircon/kernel/object/include/object/guest_dispatcher.h @@ -16,7 +16,7 @@ class VmObject; class GuestDispatcher final : public SoloDispatcher<GuestDispatcher, ZX_DEFAULT_GUEST_RIGHTS> { public: - static zx_status_t Create(fbl::RefPtr<Dispatcher>* guest_dispatcher, + static zx_status_t Create(KernelHandle<GuestDispatcher>* guest_handle, zx_rights_t* guest_rights, KernelHandle<VmAddressRegionDispatcher>* vmar_handle, zx_rights_t* vmar_rights); diff --git a/zircon/kernel/syscalls/hypervisor.cpp b/zircon/kernel/syscalls/hypervisor.cpp index 13af7c642c0e450e984460045411a9812f94288b..4277c75b19af41621a8a7fc3909c5972edabff48 100644 --- a/zircon/kernel/syscalls/hypervisor.cpp +++ b/zircon/kernel/syscalls/hypervisor.cpp @@ -29,15 +29,15 @@ zx_status_t sys_guest_create(zx_handle_t resource, uint32_t options, user_out_ha if (status != ZX_OK) return status; - fbl::RefPtr<Dispatcher> guest_dispatcher; + KernelHandle<GuestDispatcher> new_guest_handle; KernelHandle<VmAddressRegionDispatcher> new_vmar_handle; zx_rights_t guest_rights, vmar_rights; status = - GuestDispatcher::Create(&guest_dispatcher, &guest_rights, &new_vmar_handle, &vmar_rights); + GuestDispatcher::Create(&new_guest_handle, &guest_rights, &new_vmar_handle, &vmar_rights); if (status != ZX_OK) return status; - status = guest_handle->make(ktl::move(guest_dispatcher), guest_rights); + status = guest_handle->make(ktl::move(new_guest_handle), guest_rights); if (status != ZX_OK) return status; return vmar_handle->make(ktl::move(new_vmar_handle), vmar_rights);