Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21ea7936 authored by Rohit Sekhar's avatar Rohit Sekhar
Browse files

Merge branch 'v1-r' of ssh://gitlab.e.foundation/e/devices/FP4/msm-4.19 into v1-r

parents fdb7ef01 93685a13
Loading
Loading
Loading
Loading
+28 −4
Original line number Diff line number Diff line
@@ -415,6 +415,7 @@ struct fastrpc_mmap {
	int uncached;
	int secure;
	uintptr_t attr;
	bool is_filemap; /*flag to indicate map used in process init*/
};

enum fastrpc_perfkeys {
@@ -481,6 +482,8 @@ struct fastrpc_file {
	uint32_t ws_timeout;
	/* To indicate attempt has been made to allocate memory for debug_buf */
	int debug_buf_alloced_attempted;
       /* Flag to indicate dynamic process creation status*/
       bool in_process_create;
};

static struct fastrpc_apps gfa;
@@ -834,9 +837,10 @@ static int fastrpc_mmap_remove(struct fastrpc_file *fl, uintptr_t va,

	spin_lock(&me->hlock);
	hlist_for_each_entry_safe(map, n, &me->maps, hn) {
		if (map->raddr == va &&
		if (map->refs == 1 && map->raddr == va &&
			map->raddr + map->len == va + len &&
			map->refs == 1) {
            /*Remove map if not used in process initialization*/
                       !map->is_filemap) {
			match = map;
			hlist_del_init(&map->hn);
			break;
@@ -848,9 +852,10 @@ static int fastrpc_mmap_remove(struct fastrpc_file *fl, uintptr_t va,
		return 0;
	}
	hlist_for_each_entry_safe(map, n, &fl->maps, hn) {
		if (map->raddr == va &&
		if (map->refs == 1 && map->raddr == va &&
			map->raddr + map->len == va + len &&
			map->refs == 1) {
            /*Remove map if not used in process initialization*/
                       !map->is_filemap) {
			match = map;
			hlist_del_init(&map->hn);
			break;
@@ -985,6 +990,7 @@ static int fastrpc_mmap_create(struct fastrpc_file *fl, int fd,
	map->refs = 1;
	map->fl = fl;
	map->fd = fd;
	map->is_filemap = false;
	map->attr = attr;
	if (mflags == ADSP_MMAP_HEAP_ADDR ||
				mflags == ADSP_MMAP_REMOTE_HEAP_ADDR) {
@@ -2573,6 +2579,15 @@ static int fastrpc_init_process(struct fastrpc_file *fl,
			int siglen;
		} inbuf;

               spin_lock(&fl->hlock);
               if (fl->in_process_create) {
                       err = -EALREADY;
                       pr_err("Already in create init process\n");
                       spin_unlock(&fl->hlock);
                       return err;
               }
               fl->in_process_create = true;
               spin_unlock(&fl->hlock);
		inbuf.pgid = fl->tgid;
		inbuf.namelen = strlen(current->comm) + 1;
		inbuf.filelen = init->filelen;
@@ -2587,6 +2602,8 @@ static int fastrpc_init_process(struct fastrpc_file *fl,
			VERIFY(err, !fastrpc_mmap_create(fl, init->filefd, 0,
				init->file, init->filelen, mflags, &file));
			mutex_unlock(&fl->map_mutex);
                       if (file)
                               file->is_filemap = true;
			if (err)
				goto bail;
		}
@@ -2780,6 +2797,11 @@ static int fastrpc_init_process(struct fastrpc_file *fl,
		fastrpc_mmap_free(file, 0);
		mutex_unlock(&fl->map_mutex);
	}
       if (init->flags == FASTRPC_INIT_CREATE) {
               spin_lock(&fl->hlock);
               fl->in_process_create = false;
               spin_unlock(&fl->hlock);
       }
	return err;
}

@@ -3684,6 +3706,7 @@ static int fastrpc_file_free(struct fastrpc_file *fl)
	}
	spin_lock(&fl->hlock);
	fl->file_close = 1;
	fl->in_process_create = false;
	spin_unlock(&fl->hlock);
	if (!IS_ERR_OR_NULL(fl->init_mem))
		fastrpc_buf_free(fl->init_mem, 0);
@@ -4077,6 +4100,7 @@ static int fastrpc_device_open(struct inode *inode, struct file *filp)
	fl->cid = -1;
	fl->dev_minor = dev_minor;
	fl->init_mem = NULL;
	fl->in_process_create = false;
	memset(&fl->perf, 0, sizeof(fl->perf));
	fl->qos_request = 0;
	fl->dsp_proc_init = 0;