Commit af822177 authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab

[media] staging: atomisp: Fix endless recursion in hmm_init

hmm_init calls hmm_alloc to set dummy_ptr, hmm_alloc calls
hmm_init when dummy_ptr is not yet set, which is the case in
the call from hmm_init, so it calls hmm_init again, this continues
until we have a stack overflow due to the recursion.

This commit fixes this by adding a separate flag for tracking if
hmm_init has been called. Not pretty, but it gets the job done,
eventually we should be able to remove the hmm_init call from
hmm_alloc.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent f1e627a4
...@@ -43,6 +43,7 @@ struct hmm_bo_device bo_device; ...@@ -43,6 +43,7 @@ struct hmm_bo_device bo_device;
struct hmm_pool dynamic_pool; struct hmm_pool dynamic_pool;
struct hmm_pool reserved_pool; struct hmm_pool reserved_pool;
static ia_css_ptr dummy_ptr; static ia_css_ptr dummy_ptr;
static bool hmm_initialized;
struct _hmm_mem_stat hmm_mem_stat; struct _hmm_mem_stat hmm_mem_stat;
/* p: private /* p: private
...@@ -186,6 +187,8 @@ int hmm_init(void) ...@@ -186,6 +187,8 @@ int hmm_init(void)
if (ret) if (ret)
dev_err(atomisp_dev, "hmm_bo_device_init failed.\n"); dev_err(atomisp_dev, "hmm_bo_device_init failed.\n");
hmm_initialized = true;
/* /*
* As hmm use NULL to indicate invalid ISP virtual address, * As hmm use NULL to indicate invalid ISP virtual address,
* and ISP_VM_START is defined to 0 too, so we allocate * and ISP_VM_START is defined to 0 too, so we allocate
...@@ -217,6 +220,7 @@ void hmm_cleanup(void) ...@@ -217,6 +220,7 @@ void hmm_cleanup(void)
dummy_ptr = 0; dummy_ptr = 0;
hmm_bo_device_exit(&bo_device); hmm_bo_device_exit(&bo_device);
hmm_initialized = false;
} }
ia_css_ptr hmm_alloc(size_t bytes, enum hmm_bo_type type, ia_css_ptr hmm_alloc(size_t bytes, enum hmm_bo_type type,
...@@ -229,7 +233,7 @@ ia_css_ptr hmm_alloc(size_t bytes, enum hmm_bo_type type, ...@@ -229,7 +233,7 @@ ia_css_ptr hmm_alloc(size_t bytes, enum hmm_bo_type type,
/* Check if we are initialized. In the ideal world we wouldn't need /* Check if we are initialized. In the ideal world we wouldn't need
this but we can tackle it once the driver is a lot cleaner */ this but we can tackle it once the driver is a lot cleaner */
if (!dummy_ptr) if (!hmm_initialized)
hmm_init(); hmm_init();
/*Get page number from size*/ /*Get page number from size*/
pgnr = size_to_pgnr_ceil(bytes); pgnr = size_to_pgnr_ceil(bytes);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment