From dbbd60534d0e747c4d76a96b0655ef25ae507446 Mon Sep 17 00:00:00 2001 From: David Pursell <dpursell@google.com> Date: Mon, 22 Apr 2019 19:44:51 +0000 Subject: [PATCH] [handle][guest] Create() KernelHandles ZX-3612 Test: runtests -t hypervisor-test Change-Id: Id6631e9fde04e6a0756061cc62df4f04159dc1f9 --- zircon/kernel/object/guest_dispatcher.cpp | 11 ++++++----- .../kernel/object/include/object/guest_dispatcher.h | 2 +- zircon/kernel/syscalls/hypervisor.cpp | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/zircon/kernel/object/guest_dispatcher.cpp b/zircon/kernel/object/guest_dispatcher.cpp index d1b4d431655..2d78522ffcd 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 1256182aebc..f722e6ed02a 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 13af7c642c0..4277c75b19a 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); -- GitLab