From ad4c9a589344c072cda469995017ccb003d58a53 Mon Sep 17 00:00:00 2001 From: Nick Ewalt Date: Thu, 11 Oct 2018 14:56:39 -0700 Subject: [PATCH] staging: gasket: fix free in gasket_free_coherent_memory_all Actually free gasket_coherent_page_entries and just call gasket_free_coherent_memory_all from gasket_free_coherent_memory. Change-Id: I1d016abd5f66e0620a37f6851e43fcfd6c96868a Signed-off-by: Nick Ewalt --- gasket_page_table.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/gasket_page_table.c b/gasket_page_table.c index 3aff2aa..bf5c8ff 100644 --- a/gasket_page_table.c +++ b/gasket_page_table.c @@ -1344,15 +1344,8 @@ int gasket_free_coherent_memory(struct gasket_dev *gasket_dev, u64 size, if (driver_desc->coherent_buffer_description.base != dma_address) return -EADDRNOTAVAIL; - if (gasket_dev->coherent_buffer.length_bytes) { - dma_free_coherent(gasket_get_device(gasket_dev), - gasket_dev->coherent_buffer.length_bytes, - gasket_dev->coherent_buffer.virt_base, - gasket_dev->coherent_buffer.phys_base); - gasket_dev->coherent_buffer.length_bytes = 0; - gasket_dev->coherent_buffer.virt_base = NULL; - gasket_dev->coherent_buffer.phys_base = 0; - } + gasket_free_coherent_memory_all(gasket_dev, index); + return 0; } @@ -1372,4 +1365,8 @@ void gasket_free_coherent_memory_all( gasket_dev->coherent_buffer.virt_base = NULL; gasket_dev->coherent_buffer.phys_base = 0; } + + kfree(gasket_dev->page_table[index]->coherent_pages); + gasket_dev->page_table[index]->coherent_pages = NULL; + gasket_dev->page_table[index]->num_coherent_pages = 0; }