vbox6: implement ioctl(SUPPAGEFREE &request)

Fixes #4674
This commit is contained in:
Christian Helmuth 2023-09-25 16:13:54 +02:00
parent 15d1beca1b
commit 9db4293d7a
3 changed files with 10 additions and 7 deletions

View File

@ -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;
}

View File

@ -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));
}

View File

@ -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