diff options
author | Alan Cox <alan@linux.intel.com> | 2017-04-12 19:21:33 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-04-14 10:07:27 +0200 |
commit | da22013f7df4e1f49b03d763aae7b12b1cd805d7 (patch) | |
tree | fab8170277322ea530bb4cf5444436cdc62af4b3 /drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c | |
parent | 83fceac0504fbcbe2aad420f7791ed740cc20612 (diff) | |
download | op-kernel-dev-da22013f7df4e1f49b03d763aae7b12b1cd805d7.zip op-kernel-dev-da22013f7df4e1f49b03d763aae7b12b1cd805d7.tar.gz |
atomisp: remove indirection from sh_css_malloc
We have one hard coded set of behaviour so unpick the indirection and function
pointers. This isn't the whole story. A lot of the callers are known sizes and
use cases so we can switch them directly to kmalloc later on.
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c')
-rw-r--r-- | drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c index aa19419..30f7196 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c @@ -13,6 +13,10 @@ */ /*! \file */ +#include <linux/mm.h> +#include <linux/slab.h> +#include <linux/vmalloc.h> + #include "ia_css.h" #include "sh_css_hrt.h" /* only for file 2 MIPI */ #include "ia_css_buffer.h" @@ -1679,15 +1683,8 @@ ia_css_load_firmware(const struct ia_css_env *env, ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "ia_css_load_firmware() enter\n"); /* make sure we initialize my_css */ - if ((my_css.malloc != env->cpu_mem_env.alloc) || - (my_css.free != env->cpu_mem_env.free) || - (my_css.flush != env->cpu_mem_env.flush) - ) - { + if (my_css.flush != env->cpu_mem_env.flush) { ia_css_reset_defaults(&my_css); - - my_css.malloc = env->cpu_mem_env.alloc; - my_css.free = env->cpu_mem_env.free; my_css.flush = env->cpu_mem_env.flush; } @@ -1715,8 +1712,6 @@ ia_css_init(const struct ia_css_env *env, ia_css_blctrl_cfg blctrl_cfg; #endif - void *(*malloc_func)(size_t size, bool zero_mem); - void (*free_func)(void *ptr); void (*flush_func)(struct ia_css_acc_fw *fw); hrt_data select, enable; @@ -1765,8 +1760,6 @@ ia_css_init(const struct ia_css_env *env, IA_CSS_ENTER("void"); - malloc_func = env->cpu_mem_env.alloc; - free_func = env->cpu_mem_env.free; flush_func = env->cpu_mem_env.flush; pipe_global_init(); @@ -1786,16 +1779,9 @@ ia_css_init(const struct ia_css_env *env, ia_css_save_mmu_base_addr(mmu_l1_base); #endif - if (malloc_func == NULL || free_func == NULL) { - IA_CSS_LEAVE_ERR(IA_CSS_ERR_INVALID_ARGUMENTS); - return IA_CSS_ERR_INVALID_ARGUMENTS; - } - ia_css_reset_defaults(&my_css); my_css_save.driver_env = *env; - my_css.malloc = malloc_func; - my_css.free = free_func; my_css.flush = flush_func; err = ia_css_rmgr_init(); @@ -2018,25 +2004,35 @@ ia_css_enable_isys_event_queue(bool enable) void *sh_css_malloc(size_t size) { ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "sh_css_malloc() enter: size=%d\n",size); - if (size > 0 && my_css.malloc) - return my_css.malloc(size, false); - return NULL; + /* FIXME: This first test can probably go away */ + if (size == 0) + return NULL; + if (size > PAGE_SIZE) + return vmalloc(size); + return kmalloc(size, GFP_KERNEL); } void *sh_css_calloc(size_t N, size_t size) { + void *p; + ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "sh_css_calloc() enter: N=%d, size=%d\n",N,size); - if (size > 0 && my_css.malloc) - return my_css.malloc(N*size, true); + + /* FIXME: this test can probably go away */ + if (size > 0) { + p = sh_css_malloc(N*size); + if (p) + memset(p, 0, size); + } return NULL; } void sh_css_free(void *ptr) { - IA_CSS_ENTER_PRIVATE("ptr = %p", ptr); - if (ptr && my_css.free) - my_css.free(ptr); - IA_CSS_LEAVE_PRIVATE("void"); + if (is_vmalloc_addr(ptr)) + vfree(ptr); + else + kfree(ptr); } /* For Acceleration API: Flush FW (shared buffer pointer) arguments */ |