From 243a9ec3ca1171781a68cc2f6d263e9c5d5d1bc6 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 18 May 2021 18:08:12 +0200 Subject: [PATCH] gpu/intel: free up context/memory ring _unmap_dataspace_ggtt requires the cap of Ggtt::Mapping (ring_map, ctx_map) in order to find the right metadata and to free up the ggtt entries. Also the pte range is removed already if the metadata was found. Issue #4148 #4233 --- repos/os/src/drivers/gpu/intel/main.cc | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/repos/os/src/drivers/gpu/intel/main.cc b/repos/os/src/drivers/gpu/intel/main.cc index b1b5a192e6..52a7123ed4 100644 --- a/repos/os/src/drivers/gpu/intel/main.cc +++ b/repos/os/src/drivers/gpu/intel/main.cc @@ -615,18 +615,14 @@ struct Igd::Device /* free ring memory */ { _env.rm().detach(engine->ring_vaddr); - _unmap_dataspace_ggtt(md_alloc, engine->ring_ds); + _unmap_dataspace_ggtt(md_alloc, engine->ring_map.cap); _free_dataspace(md_alloc, engine->ring_ds); - size_t const offset = (engine->ring_gmaddr / PAGE_SIZE) - 1; - _ggtt->remove_pte_range(offset, Engine::RING_PAGES); } /* free context memory */ { _env.rm().detach(engine->ctx_vaddr - PAGE_SIZE); - _unmap_dataspace_ggtt(md_alloc, engine->ctx_ds); + _unmap_dataspace_ggtt(md_alloc, engine->ctx_map.cap); _free_dataspace(md_alloc, engine->ctx_ds); - size_t const offset = (engine->ctx_gmaddr / PAGE_SIZE) - 1; - _ggtt->remove_pte_range(offset, Engine::CONTEXT_PAGES); } /* free engine */ Genode::destroy(&md_alloc, engine);