static int ion_cp_change_mem_v2(unsigned int phy_base, unsigned int size, void *data, int lock) { enum cp_mem_usage usage = (enum cp_mem_usage) data; unsigned long *chunk_list; int nchunks; int ret; int i; if (usage < 0 || usage >= MAX_USAGE) return -EINVAL; if (!IS_ALIGNED(size, V2_CHUNK_SIZE)) { pr_err("%s: heap size is not aligned to %x\n", __func__, V2_CHUNK_SIZE); return -EINVAL; } nchunks = size / V2_CHUNK_SIZE; chunk_list = allocate_contiguous_ebi(sizeof(unsigned long)*nchunks, SZ_4K, 0); if (!chunk_list) return -ENOMEM; for (i = 0; i < nchunks; i++) chunk_list[i] = phy_base + i * V2_CHUNK_SIZE; ret = ion_cp_change_chunks_state(memory_pool_node_paddr(chunk_list), nchunks, V2_CHUNK_SIZE, usage, lock); free_contiguous_memory(chunk_list); return ret; }
static void msm_buspm_dev_free(struct file *filp) { struct msm_buspm_map_dev *dev = filp->private_data; if (dev) { pr_debug("freeing memory at 0x%p\n", dev->vaddr); free_contiguous_memory(dev->vaddr); dev->paddr = 0L; dev->vaddr = NULL; } }