From 9db4293d7ad1c97d9322a57402e4d3c69b43efc2 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 25 Sep 2023 16:13:54 +0200 Subject: [PATCH] vbox6: implement ioctl(SUPPAGEFREE &request) Fixes #4674 --- repos/ports/src/virtualbox6/sup.cc | 11 +++++++---- repos/ports/src/virtualbox6/sup_gmm.cc | 4 ++-- repos/ports/src/virtualbox6/sup_gmm.h | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/repos/ports/src/virtualbox6/sup.cc b/repos/ports/src/virtualbox6/sup.cc index 477514af3a..77aa33b279 100644 --- a/repos/ports/src/virtualbox6/sup.cc +++ b/repos/ports/src/virtualbox6/sup.cc @@ -326,8 +326,6 @@ static int vmmr0_gmm_free_pages(GMMFREEPAGESREQ &request) GMMFREEPAGEDESC &page = request.aPages[i]; - Sup::Gmm::Pages one_page { 1 }; - using Vmm_addr = Sup::Gmm::Vmm_addr; using Page_id = Sup::Gmm::Page_id; @@ -335,7 +333,7 @@ static int vmmr0_gmm_free_pages(GMMFREEPAGESREQ &request) Vmm_addr const vmm_addr = sup_drv->gmm().vmm_addr(page_id); - sup_drv->gmm().free(vmm_addr, one_page); + sup_drv->gmm().free(vmm_addr); } return VINF_SUCCESS; @@ -700,7 +698,12 @@ static void ioctl(SUPGETPAGINGMODE &request) static void ioctl(SUPPAGEFREE &request) { - warning("SUPPAGEFREE called"); + using Vmm_addr = Sup::Gmm::Vmm_addr; + + Vmm_addr const vmm_addr { (addr_t)request.u.In.pvR3 }; + + sup_drv->gmm().free(vmm_addr); + request.Hdr.rc = VINF_SUCCESS; } diff --git a/repos/ports/src/virtualbox6/sup_gmm.cc b/repos/ports/src/virtualbox6/sup_gmm.cc index 33a13f429c..3c4f3200da 100644 --- a/repos/ports/src/virtualbox6/sup_gmm.cc +++ b/repos/ports/src/virtualbox6/sup_gmm.cc @@ -121,9 +121,9 @@ Sup::Gmm::Vmm_addr Sup::Gmm::alloc_from_reservation(Pages pages) } -void Sup::Gmm::free(Vmm_addr addr, Pages pages) +void Sup::Gmm::free(Vmm_addr addr) { - _alloc.free((void *)(addr.value - _map.base.value), 1); + _alloc.free((void *)(addr.value - _map.base.value)); } diff --git a/repos/ports/src/virtualbox6/sup_gmm.h b/repos/ports/src/virtualbox6/sup_gmm.h index 3decb87ae6..d03b7c1c77 100644 --- a/repos/ports/src/virtualbox6/sup_gmm.h +++ b/repos/ports/src/virtualbox6/sup_gmm.h @@ -176,7 +176,7 @@ class Sup::Gmm /** * Free pages in pool */ - void free(Vmm_addr, Pages); + void free(Vmm_addr); /** * Get page ID for VMM address inside linear area