All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Jeya R <jeyr@codeaurora.org>,
	linux-arm-msm@vger.kernel.org, srinivas.kandagatla@linaro.org
Cc: kbuild-all@lists.01.org, Jeya R <jeyr@codeaurora.org>,
	gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	fastrpc.upstream@qti.qualcomm.com, bkumar@qti.qualcomm.com,
	ekangupt@qti.qualcomm.com, jeyr@qti.qualcomm.com
Subject: Re: [PATCH 3/3] misc: fastrpc: Handle mapping of invoke argument with attribute
Date: Wed, 1 Dec 2021 02:18:03 +0800	[thread overview]
Message-ID: <202112010230.ONOKNnFv-lkp@intel.com> (raw)
In-Reply-To: <1638277072-6459-6-git-send-email-jeyr@codeaurora.org>

Hi Jeya,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on char-misc/char-misc-testing]
[also build test ERROR on robh/for-next linux/master linus/master v5.16-rc3 next-20211130]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jeya-R/Add-vmid-property-and-mapping-attribute/20211130-205941
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git 5d331b5922551637c586cdf5fdc1778910fc937f
config: alpha-randconfig-r025-20211130 (https://download.01.org/0day-ci/archive/20211201/202112010230.ONOKNnFv-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/d8dfc6d253cf3fe6c952b900243caf9b0b120ddf
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jeya-R/Add-vmid-property-and-mapping-attribute/20211130-205941
        git checkout d8dfc6d253cf3fe6c952b900243caf9b0b120ddf
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=alpha SHELL=/bin/bash drivers/misc/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   drivers/misc/fastrpc.c: In function 'fastrpc_free_map':
>> drivers/misc/fastrpc.c:263:13: error: invalid storage class for function 'fastrpc_map_put'
     263 | static void fastrpc_map_put(struct fastrpc_map *map)
         |             ^~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:263:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     263 | static void fastrpc_map_put(struct fastrpc_map *map)
         | ^~~~~~
>> drivers/misc/fastrpc.c:269:13: error: invalid storage class for function 'fastrpc_map_get'
     269 | static void fastrpc_map_get(struct fastrpc_map *map)
         |             ^~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:275:12: error: invalid storage class for function 'fastrpc_map_find'
     275 | static int fastrpc_map_find(struct fastrpc_user *fl, int fd,
         |            ^~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:294:13: error: invalid storage class for function 'fastrpc_buf_free'
     294 | static void fastrpc_buf_free(struct fastrpc_buf *buf)
         |             ^~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:301:12: error: invalid storage class for function 'fastrpc_buf_alloc'
     301 | static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
         |            ^~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:337:13: error: invalid storage class for function 'fastrpc_channel_ctx_free'
     337 | static void fastrpc_channel_ctx_free(struct kref *ref)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:346:13: error: invalid storage class for function 'fastrpc_channel_ctx_get'
     346 | static void fastrpc_channel_ctx_get(struct fastrpc_channel_ctx *cctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:351:13: error: invalid storage class for function 'fastrpc_channel_ctx_put'
     351 | static void fastrpc_channel_ctx_put(struct fastrpc_channel_ctx *cctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:356:13: error: invalid storage class for function 'fastrpc_context_free'
     356 | static void fastrpc_context_free(struct kref *ref)
         |             ^~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:383:13: error: invalid storage class for function 'fastrpc_context_get'
     383 | static void fastrpc_context_get(struct fastrpc_invoke_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:388:13: error: invalid storage class for function 'fastrpc_context_put'
     388 | static void fastrpc_context_put(struct fastrpc_invoke_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:393:13: error: invalid storage class for function 'fastrpc_context_put_wq'
     393 | static void fastrpc_context_put_wq(struct work_struct *work)
         |             ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:402:12: error: invalid storage class for function 'olaps_cmp'
     402 | static int olaps_cmp(const void *a, const void *b)
         |            ^~~~~~~~~
>> drivers/misc/fastrpc.c:414:13: error: invalid storage class for function 'fastrpc_get_buff_overlaps'
     414 | static void fastrpc_get_buff_overlaps(struct fastrpc_invoke_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:450:35: error: invalid storage class for function 'fastrpc_context_alloc'
     450 | static struct fastrpc_invoke_ctx *fastrpc_context_alloc(
         |                                   ^~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:528:1: error: invalid storage class for function 'fastrpc_map_dma_buf'
     528 | fastrpc_map_dma_buf(struct dma_buf_attachment *attachment,
         | ^~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:543:13: error: invalid storage class for function 'fastrpc_unmap_dma_buf'
     543 | static void fastrpc_unmap_dma_buf(struct dma_buf_attachment *attach,
         |             ^~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:550:13: error: invalid storage class for function 'fastrpc_release'
     550 | static void fastrpc_release(struct dma_buf *dmabuf)
         |             ^~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:557:12: error: invalid storage class for function 'fastrpc_dma_buf_attach'
     557 | static int fastrpc_dma_buf_attach(struct dma_buf *dmabuf,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:587:13: error: invalid storage class for function 'fastrpc_dma_buf_detatch'
     587 | static void fastrpc_dma_buf_detatch(struct dma_buf *dmabuf,
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:600:12: error: invalid storage class for function 'fastrpc_vmap'
     600 | static int fastrpc_vmap(struct dma_buf *dmabuf, struct dma_buf_map *map)
         |            ^~~~~~~~~~~~
   drivers/misc/fastrpc.c:609:12: error: invalid storage class for function 'fastrpc_mmap'
     609 | static int fastrpc_mmap(struct dma_buf *dmabuf,
         |            ^~~~~~~~~~~~
   drivers/misc/fastrpc.c:620:19: error: initializer element is not constant
     620 |         .attach = fastrpc_dma_buf_attach,
         |                   ^~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:620:19: note: (near initialization for 'fastrpc_dma_buf_ops.attach')
   drivers/misc/fastrpc.c:621:19: error: initializer element is not constant
     621 |         .detach = fastrpc_dma_buf_detatch,
         |                   ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:621:19: note: (near initialization for 'fastrpc_dma_buf_ops.detach')
   drivers/misc/fastrpc.c:622:24: error: initializer element is not constant
     622 |         .map_dma_buf = fastrpc_map_dma_buf,
         |                        ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:622:24: note: (near initialization for 'fastrpc_dma_buf_ops.map_dma_buf')
   drivers/misc/fastrpc.c:623:26: error: initializer element is not constant
     623 |         .unmap_dma_buf = fastrpc_unmap_dma_buf,
         |                          ^~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:623:26: note: (near initialization for 'fastrpc_dma_buf_ops.unmap_dma_buf')
   drivers/misc/fastrpc.c:624:17: error: initializer element is not constant
     624 |         .mmap = fastrpc_mmap,
         |                 ^~~~~~~~~~~~
   drivers/misc/fastrpc.c:624:17: note: (near initialization for 'fastrpc_dma_buf_ops.mmap')
   drivers/misc/fastrpc.c:625:17: error: initializer element is not constant
     625 |         .vmap = fastrpc_vmap,
         |                 ^~~~~~~~~~~~
   drivers/misc/fastrpc.c:625:17: note: (near initialization for 'fastrpc_dma_buf_ops.vmap')
   drivers/misc/fastrpc.c:626:20: error: initializer element is not constant
     626 |         .release = fastrpc_release,
         |                    ^~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:626:20: note: (near initialization for 'fastrpc_dma_buf_ops.release')
   drivers/misc/fastrpc.c:629:12: error: invalid storage class for function 'fastrpc_map_create'
     629 | static int fastrpc_map_create(struct fastrpc_user *fl, int fd,
         |            ^~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:724:12: error: invalid storage class for function 'fastrpc_get_meta_size'
     724 | static int fastrpc_get_meta_size(struct fastrpc_invoke_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:737:12: error: invalid storage class for function 'fastrpc_get_payload_size'
     737 | static u64 fastrpc_get_payload_size(struct fastrpc_invoke_ctx *ctx, int metalen)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:756:12: error: invalid storage class for function 'fastrpc_create_maps'
     756 | static int fastrpc_create_maps(struct fastrpc_invoke_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c: In function 'fastrpc_create_maps':
   drivers/misc/fastrpc.c:767:82: error: 'x' undeclared (first use in this function)
     767 |                                          ctx->args[i].length, ctx->args[i].attr, x->maps[i]);
         |                                                                                  ^
   drivers/misc/fastrpc.c:767:82: note: each undeclared identifier is reported only once for each function it appears in
   drivers/misc/fastrpc.c: In function 'fastrpc_free_map':
   drivers/misc/fastrpc.c:777:12: error: invalid storage class for function 'fastrpc_get_args'
     777 | static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:900:12: error: invalid storage class for function 'fastrpc_put_args'
     900 | static int fastrpc_put_args(struct fastrpc_invoke_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:926:12: error: invalid storage class for function 'fastrpc_invoke_send'
     926 | static int fastrpc_invoke_send(struct fastrpc_session_ctx *sctx,
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:958:12: error: invalid storage class for function 'fastrpc_internal_invoke'
     958 | static int fastrpc_internal_invoke(struct fastrpc_user *fl,  u32 kernel,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1031:12: error: invalid storage class for function 'fastrpc_init_create_process'
    1031 | static int fastrpc_init_create_process(struct fastrpc_user *fl,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1143:36: error: invalid storage class for function 'fastrpc_session_alloc'
    1143 | static struct fastrpc_session_ctx *fastrpc_session_alloc(
         |                                    ^~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1163:13: error: invalid storage class for function 'fastrpc_session_free'
    1163 | static void fastrpc_session_free(struct fastrpc_channel_ctx *cctx,
         |             ^~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1173:12: error: invalid storage class for function 'fastrpc_release_current_dsp_process'
    1173 | static int fastrpc_release_current_dsp_process(struct fastrpc_user *fl)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1189:12: error: invalid storage class for function 'fastrpc_device_release'
    1189 | static int fastrpc_device_release(struct inode *inode, struct file *file)
         |            ^~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1232:12: error: invalid storage class for function 'fastrpc_device_open'
    1232 | static int fastrpc_device_open(struct inode *inode, struct file *filp)
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1271:12: error: invalid storage class for function 'fastrpc_dmabuf_alloc'
    1271 | static int fastrpc_dmabuf_alloc(struct fastrpc_user *fl, char __user *argp)
         |            ^~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1309:12: error: invalid storage class for function 'fastrpc_init_attach'
    1309 | static int fastrpc_init_attach(struct fastrpc_user *fl, int pd)
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1325:12: error: invalid storage class for function 'fastrpc_invoke'
    1325 | static int fastrpc_invoke(struct fastrpc_user *fl, char __user *argp)
         |            ^~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1355:12: error: invalid storage class for function 'fastrpc_req_munmap_impl'
    1355 | static int fastrpc_req_munmap_impl(struct fastrpc_user *fl,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1401:12: error: invalid storage class for function 'fastrpc_req_munmap'


vim +/fastrpc_map_put +263 drivers/misc/fastrpc.c

c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  262  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @263  static void fastrpc_map_put(struct fastrpc_map *map)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  264  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  265  	if (map)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  266  		kref_put(&map->refcount, fastrpc_free_map);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  267  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  268  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @269  static void fastrpc_map_get(struct fastrpc_map *map)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  270  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  271  	if (map)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  272  		kref_get(&map->refcount);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  273  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  274  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @275  static int fastrpc_map_find(struct fastrpc_user *fl, int fd,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  276  			    struct fastrpc_map **ppmap)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  277  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  278  	struct fastrpc_map *map = NULL;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  279  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  280  	mutex_lock(&fl->mutex);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  281  	list_for_each_entry(map, &fl->maps, node) {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  282  		if (map->fd == fd) {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  283  			fastrpc_map_get(map);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  284  			*ppmap = map;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  285  			mutex_unlock(&fl->mutex);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  286  			return 0;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  287  		}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  288  	}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  289  	mutex_unlock(&fl->mutex);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  290  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  291  	return -ENOENT;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  292  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  293  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @294  static void fastrpc_buf_free(struct fastrpc_buf *buf)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  295  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  296  	dma_free_coherent(buf->dev, buf->size, buf->virt,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  297  			  FASTRPC_PHYS(buf->phys));
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  298  	kfree(buf);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  299  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  300  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @301  static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  302  			     u64 size, struct fastrpc_buf **obuf)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  303  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  304  	struct fastrpc_buf *buf;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  305  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  306  	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  307  	if (!buf)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  308  		return -ENOMEM;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  309  
6cffd79504ce040 Srinivas Kandagatla 2019-02-08  310  	INIT_LIST_HEAD(&buf->attachments);
2419e55e532de14 Jorge Ramirez-Ortiz 2019-10-09  311  	INIT_LIST_HEAD(&buf->node);
6cffd79504ce040 Srinivas Kandagatla 2019-02-08  312  	mutex_init(&buf->lock);
6cffd79504ce040 Srinivas Kandagatla 2019-02-08  313  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  314  	buf->fl = fl;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  315  	buf->virt = NULL;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  316  	buf->phys = 0;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  317  	buf->size = size;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  318  	buf->dev = dev;
2419e55e532de14 Jorge Ramirez-Ortiz 2019-10-09  319  	buf->raddr = 0;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  320  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  321  	buf->virt = dma_alloc_coherent(dev, buf->size, (dma_addr_t *)&buf->phys,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  322  				       GFP_KERNEL);
41db5f8397eee75 Jorge Ramirez-Ortiz 2019-07-05  323  	if (!buf->virt) {
41db5f8397eee75 Jorge Ramirez-Ortiz 2019-07-05  324  		mutex_destroy(&buf->lock);
41db5f8397eee75 Jorge Ramirez-Ortiz 2019-07-05  325  		kfree(buf);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  326  		return -ENOMEM;
41db5f8397eee75 Jorge Ramirez-Ortiz 2019-07-05  327  	}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  328  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  329  	if (fl->sctx && fl->sctx->sid)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  330  		buf->phys += ((u64)fl->sctx->sid << 32);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  331  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  332  	*obuf = buf;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  333  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  334  	return 0;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  335  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  336  
278d56f970ae6e0 Bjorn Andersson     2019-08-29 @337  static void fastrpc_channel_ctx_free(struct kref *ref)
278d56f970ae6e0 Bjorn Andersson     2019-08-29  338  {
278d56f970ae6e0 Bjorn Andersson     2019-08-29  339  	struct fastrpc_channel_ctx *cctx;
278d56f970ae6e0 Bjorn Andersson     2019-08-29  340  
278d56f970ae6e0 Bjorn Andersson     2019-08-29  341  	cctx = container_of(ref, struct fastrpc_channel_ctx, refcount);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  342  
278d56f970ae6e0 Bjorn Andersson     2019-08-29  343  	kfree(cctx);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  344  }
278d56f970ae6e0 Bjorn Andersson     2019-08-29  345  
278d56f970ae6e0 Bjorn Andersson     2019-08-29 @346  static void fastrpc_channel_ctx_get(struct fastrpc_channel_ctx *cctx)
278d56f970ae6e0 Bjorn Andersson     2019-08-29  347  {
278d56f970ae6e0 Bjorn Andersson     2019-08-29  348  	kref_get(&cctx->refcount);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  349  }
278d56f970ae6e0 Bjorn Andersson     2019-08-29  350  
278d56f970ae6e0 Bjorn Andersson     2019-08-29 @351  static void fastrpc_channel_ctx_put(struct fastrpc_channel_ctx *cctx)
278d56f970ae6e0 Bjorn Andersson     2019-08-29  352  {
278d56f970ae6e0 Bjorn Andersson     2019-08-29  353  	kref_put(&cctx->refcount, fastrpc_channel_ctx_free);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  354  }
278d56f970ae6e0 Bjorn Andersson     2019-08-29  355  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @356  static void fastrpc_context_free(struct kref *ref)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  357  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  358  	struct fastrpc_invoke_ctx *ctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  359  	struct fastrpc_channel_ctx *cctx;
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  360  	unsigned long flags;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  361  	int i;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  362  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  363  	ctx = container_of(ref, struct fastrpc_invoke_ctx, refcount);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  364  	cctx = ctx->cctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  365  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  366  	for (i = 0; i < ctx->nscalars; i++)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  367  		fastrpc_map_put(ctx->maps[i]);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  368  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  369  	if (ctx->buf)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  370  		fastrpc_buf_free(ctx->buf);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  371  
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  372  	spin_lock_irqsave(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  373  	idr_remove(&cctx->ctx_idr, ctx->ctxid >> 4);
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  374  	spin_unlock_irqrestore(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  375  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  376  	kfree(ctx->maps);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  377  	kfree(ctx->olaps);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  378  	kfree(ctx);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  379  
278d56f970ae6e0 Bjorn Andersson     2019-08-29  380  	fastrpc_channel_ctx_put(cctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  381  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  382  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @383  static void fastrpc_context_get(struct fastrpc_invoke_ctx *ctx)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  384  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  385  	kref_get(&ctx->refcount);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  386  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  387  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @388  static void fastrpc_context_put(struct fastrpc_invoke_ctx *ctx)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  389  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  390  	kref_put(&ctx->refcount, fastrpc_context_free);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  391  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  392  
8e7389c79b40ed4 Thierry Escande     2019-03-07 @393  static void fastrpc_context_put_wq(struct work_struct *work)
8e7389c79b40ed4 Thierry Escande     2019-03-07  394  {
8e7389c79b40ed4 Thierry Escande     2019-03-07  395  	struct fastrpc_invoke_ctx *ctx =
8e7389c79b40ed4 Thierry Escande     2019-03-07  396  			container_of(work, struct fastrpc_invoke_ctx, put_work);
8e7389c79b40ed4 Thierry Escande     2019-03-07  397  
8e7389c79b40ed4 Thierry Escande     2019-03-07  398  	fastrpc_context_put(ctx);
8e7389c79b40ed4 Thierry Escande     2019-03-07  399  }
8e7389c79b40ed4 Thierry Escande     2019-03-07  400  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  401  #define CMP(aa, bb) ((aa) == (bb) ? 0 : (aa) < (bb) ? -1 : 1)
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07 @402  static int olaps_cmp(const void *a, const void *b)
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  403  {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  404  	struct fastrpc_buf_overlap *pa = (struct fastrpc_buf_overlap *)a;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  405  	struct fastrpc_buf_overlap *pb = (struct fastrpc_buf_overlap *)b;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  406  	/* sort with lowest starting buffer first */
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  407  	int st = CMP(pa->start, pb->start);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  408  	/* sort with highest ending buffer first */
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  409  	int ed = CMP(pb->end, pa->end);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  410  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  411  	return st == 0 ? ed : st;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  412  }
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  413  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07 @414  static void fastrpc_get_buff_overlaps(struct fastrpc_invoke_ctx *ctx)
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  415  {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  416  	u64 max_end = 0;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  417  	int i;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  418  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  419  	for (i = 0; i < ctx->nbufs; ++i) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  420  		ctx->olaps[i].start = ctx->args[i].ptr;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  421  		ctx->olaps[i].end = ctx->olaps[i].start + ctx->args[i].length;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  422  		ctx->olaps[i].raix = i;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  423  	}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  424  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  425  	sort(ctx->olaps, ctx->nbufs, sizeof(*ctx->olaps), olaps_cmp, NULL);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  426  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  427  	for (i = 0; i < ctx->nbufs; ++i) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  428  		/* Falling inside previous range */
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  429  		if (ctx->olaps[i].start < max_end) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  430  			ctx->olaps[i].mstart = max_end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  431  			ctx->olaps[i].mend = ctx->olaps[i].end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  432  			ctx->olaps[i].offset = max_end - ctx->olaps[i].start;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  433  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  434  			if (ctx->olaps[i].end > max_end) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  435  				max_end = ctx->olaps[i].end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  436  			} else {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  437  				ctx->olaps[i].mend = 0;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  438  				ctx->olaps[i].mstart = 0;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  439  			}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  440  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  441  		} else  {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  442  			ctx->olaps[i].mend = ctx->olaps[i].end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  443  			ctx->olaps[i].mstart = ctx->olaps[i].start;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  444  			ctx->olaps[i].offset = 0;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  445  			max_end = ctx->olaps[i].end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  446  		}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  447  	}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  448  }
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  449  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @450  static struct fastrpc_invoke_ctx *fastrpc_context_alloc(
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  451  			struct fastrpc_user *user, u32 kernel, u32 sc,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  452  			struct fastrpc_invoke_args *args)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  453  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  454  	struct fastrpc_channel_ctx *cctx = user->cctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  455  	struct fastrpc_invoke_ctx *ctx = NULL;
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  456  	unsigned long flags;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  457  	int ret;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  458  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  459  	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  460  	if (!ctx)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  461  		return ERR_PTR(-ENOMEM);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  462  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  463  	INIT_LIST_HEAD(&ctx->node);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  464  	ctx->fl = user;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  465  	ctx->nscalars = REMOTE_SCALARS_LENGTH(sc);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  466  	ctx->nbufs = REMOTE_SCALARS_INBUFS(sc) +
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  467  		     REMOTE_SCALARS_OUTBUFS(sc);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  468  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  469  	if (ctx->nscalars) {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  470  		ctx->maps = kcalloc(ctx->nscalars,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  471  				    sizeof(*ctx->maps), GFP_KERNEL);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  472  		if (!ctx->maps) {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  473  			kfree(ctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  474  			return ERR_PTR(-ENOMEM);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  475  		}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  476  		ctx->olaps = kcalloc(ctx->nscalars,
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  477  				    sizeof(*ctx->olaps), GFP_KERNEL);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  478  		if (!ctx->olaps) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  479  			kfree(ctx->maps);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  480  			kfree(ctx);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  481  			return ERR_PTR(-ENOMEM);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  482  		}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  483  		ctx->args = args;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  484  		fastrpc_get_buff_overlaps(ctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  485  	}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  486  
278d56f970ae6e0 Bjorn Andersson     2019-08-29  487  	/* Released in fastrpc_context_put() */
278d56f970ae6e0 Bjorn Andersson     2019-08-29  488  	fastrpc_channel_ctx_get(cctx);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  489  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  490  	ctx->sc = sc;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  491  	ctx->retval = -1;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  492  	ctx->pid = current->pid;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  493  	ctx->tgid = user->tgid;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  494  	ctx->cctx = cctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  495  	init_completion(&ctx->work);
8e7389c79b40ed4 Thierry Escande     2019-03-07  496  	INIT_WORK(&ctx->put_work, fastrpc_context_put_wq);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  497  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  498  	spin_lock(&user->lock);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  499  	list_add_tail(&ctx->node, &user->pending);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  500  	spin_unlock(&user->lock);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  501  
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  502  	spin_lock_irqsave(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  503  	ret = idr_alloc_cyclic(&cctx->ctx_idr, ctx, 1,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  504  			       FASTRPC_CTX_MAX, GFP_ATOMIC);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  505  	if (ret < 0) {
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  506  		spin_unlock_irqrestore(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  507  		goto err_idr;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  508  	}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  509  	ctx->ctxid = ret << 4;
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  510  	spin_unlock_irqrestore(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  511  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  512  	kref_init(&ctx->refcount);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  513  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  514  	return ctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  515  err_idr:
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  516  	spin_lock(&user->lock);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  517  	list_del(&ctx->node);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  518  	spin_unlock(&user->lock);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  519  	fastrpc_channel_ctx_put(cctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  520  	kfree(ctx->maps);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  521  	kfree(ctx->olaps);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  522  	kfree(ctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  523  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  524  	return ERR_PTR(ret);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  525  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  526  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 3/3] misc: fastrpc: Handle mapping of invoke argument with attribute
Date: Wed, 01 Dec 2021 02:18:03 +0800	[thread overview]
Message-ID: <202112010230.ONOKNnFv-lkp@intel.com> (raw)
In-Reply-To: <1638277072-6459-6-git-send-email-jeyr@codeaurora.org>

[-- Attachment #1: Type: text/plain, Size: 33760 bytes --]

Hi Jeya,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on char-misc/char-misc-testing]
[also build test ERROR on robh/for-next linux/master linus/master v5.16-rc3 next-20211130]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jeya-R/Add-vmid-property-and-mapping-attribute/20211130-205941
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git 5d331b5922551637c586cdf5fdc1778910fc937f
config: alpha-randconfig-r025-20211130 (https://download.01.org/0day-ci/archive/20211201/202112010230.ONOKNnFv-lkp(a)intel.com/config)
compiler: alpha-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/d8dfc6d253cf3fe6c952b900243caf9b0b120ddf
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jeya-R/Add-vmid-property-and-mapping-attribute/20211130-205941
        git checkout d8dfc6d253cf3fe6c952b900243caf9b0b120ddf
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=alpha SHELL=/bin/bash drivers/misc/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   drivers/misc/fastrpc.c: In function 'fastrpc_free_map':
>> drivers/misc/fastrpc.c:263:13: error: invalid storage class for function 'fastrpc_map_put'
     263 | static void fastrpc_map_put(struct fastrpc_map *map)
         |             ^~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:263:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     263 | static void fastrpc_map_put(struct fastrpc_map *map)
         | ^~~~~~
>> drivers/misc/fastrpc.c:269:13: error: invalid storage class for function 'fastrpc_map_get'
     269 | static void fastrpc_map_get(struct fastrpc_map *map)
         |             ^~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:275:12: error: invalid storage class for function 'fastrpc_map_find'
     275 | static int fastrpc_map_find(struct fastrpc_user *fl, int fd,
         |            ^~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:294:13: error: invalid storage class for function 'fastrpc_buf_free'
     294 | static void fastrpc_buf_free(struct fastrpc_buf *buf)
         |             ^~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:301:12: error: invalid storage class for function 'fastrpc_buf_alloc'
     301 | static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
         |            ^~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:337:13: error: invalid storage class for function 'fastrpc_channel_ctx_free'
     337 | static void fastrpc_channel_ctx_free(struct kref *ref)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:346:13: error: invalid storage class for function 'fastrpc_channel_ctx_get'
     346 | static void fastrpc_channel_ctx_get(struct fastrpc_channel_ctx *cctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:351:13: error: invalid storage class for function 'fastrpc_channel_ctx_put'
     351 | static void fastrpc_channel_ctx_put(struct fastrpc_channel_ctx *cctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:356:13: error: invalid storage class for function 'fastrpc_context_free'
     356 | static void fastrpc_context_free(struct kref *ref)
         |             ^~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:383:13: error: invalid storage class for function 'fastrpc_context_get'
     383 | static void fastrpc_context_get(struct fastrpc_invoke_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:388:13: error: invalid storage class for function 'fastrpc_context_put'
     388 | static void fastrpc_context_put(struct fastrpc_invoke_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:393:13: error: invalid storage class for function 'fastrpc_context_put_wq'
     393 | static void fastrpc_context_put_wq(struct work_struct *work)
         |             ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:402:12: error: invalid storage class for function 'olaps_cmp'
     402 | static int olaps_cmp(const void *a, const void *b)
         |            ^~~~~~~~~
>> drivers/misc/fastrpc.c:414:13: error: invalid storage class for function 'fastrpc_get_buff_overlaps'
     414 | static void fastrpc_get_buff_overlaps(struct fastrpc_invoke_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:450:35: error: invalid storage class for function 'fastrpc_context_alloc'
     450 | static struct fastrpc_invoke_ctx *fastrpc_context_alloc(
         |                                   ^~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:528:1: error: invalid storage class for function 'fastrpc_map_dma_buf'
     528 | fastrpc_map_dma_buf(struct dma_buf_attachment *attachment,
         | ^~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:543:13: error: invalid storage class for function 'fastrpc_unmap_dma_buf'
     543 | static void fastrpc_unmap_dma_buf(struct dma_buf_attachment *attach,
         |             ^~~~~~~~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:550:13: error: invalid storage class for function 'fastrpc_release'
     550 | static void fastrpc_release(struct dma_buf *dmabuf)
         |             ^~~~~~~~~~~~~~~
>> drivers/misc/fastrpc.c:557:12: error: invalid storage class for function 'fastrpc_dma_buf_attach'
     557 | static int fastrpc_dma_buf_attach(struct dma_buf *dmabuf,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:587:13: error: invalid storage class for function 'fastrpc_dma_buf_detatch'
     587 | static void fastrpc_dma_buf_detatch(struct dma_buf *dmabuf,
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:600:12: error: invalid storage class for function 'fastrpc_vmap'
     600 | static int fastrpc_vmap(struct dma_buf *dmabuf, struct dma_buf_map *map)
         |            ^~~~~~~~~~~~
   drivers/misc/fastrpc.c:609:12: error: invalid storage class for function 'fastrpc_mmap'
     609 | static int fastrpc_mmap(struct dma_buf *dmabuf,
         |            ^~~~~~~~~~~~
   drivers/misc/fastrpc.c:620:19: error: initializer element is not constant
     620 |         .attach = fastrpc_dma_buf_attach,
         |                   ^~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:620:19: note: (near initialization for 'fastrpc_dma_buf_ops.attach')
   drivers/misc/fastrpc.c:621:19: error: initializer element is not constant
     621 |         .detach = fastrpc_dma_buf_detatch,
         |                   ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:621:19: note: (near initialization for 'fastrpc_dma_buf_ops.detach')
   drivers/misc/fastrpc.c:622:24: error: initializer element is not constant
     622 |         .map_dma_buf = fastrpc_map_dma_buf,
         |                        ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:622:24: note: (near initialization for 'fastrpc_dma_buf_ops.map_dma_buf')
   drivers/misc/fastrpc.c:623:26: error: initializer element is not constant
     623 |         .unmap_dma_buf = fastrpc_unmap_dma_buf,
         |                          ^~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:623:26: note: (near initialization for 'fastrpc_dma_buf_ops.unmap_dma_buf')
   drivers/misc/fastrpc.c:624:17: error: initializer element is not constant
     624 |         .mmap = fastrpc_mmap,
         |                 ^~~~~~~~~~~~
   drivers/misc/fastrpc.c:624:17: note: (near initialization for 'fastrpc_dma_buf_ops.mmap')
   drivers/misc/fastrpc.c:625:17: error: initializer element is not constant
     625 |         .vmap = fastrpc_vmap,
         |                 ^~~~~~~~~~~~
   drivers/misc/fastrpc.c:625:17: note: (near initialization for 'fastrpc_dma_buf_ops.vmap')
   drivers/misc/fastrpc.c:626:20: error: initializer element is not constant
     626 |         .release = fastrpc_release,
         |                    ^~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:626:20: note: (near initialization for 'fastrpc_dma_buf_ops.release')
   drivers/misc/fastrpc.c:629:12: error: invalid storage class for function 'fastrpc_map_create'
     629 | static int fastrpc_map_create(struct fastrpc_user *fl, int fd,
         |            ^~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:724:12: error: invalid storage class for function 'fastrpc_get_meta_size'
     724 | static int fastrpc_get_meta_size(struct fastrpc_invoke_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:737:12: error: invalid storage class for function 'fastrpc_get_payload_size'
     737 | static u64 fastrpc_get_payload_size(struct fastrpc_invoke_ctx *ctx, int metalen)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:756:12: error: invalid storage class for function 'fastrpc_create_maps'
     756 | static int fastrpc_create_maps(struct fastrpc_invoke_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c: In function 'fastrpc_create_maps':
   drivers/misc/fastrpc.c:767:82: error: 'x' undeclared (first use in this function)
     767 |                                          ctx->args[i].length, ctx->args[i].attr, x->maps[i]);
         |                                                                                  ^
   drivers/misc/fastrpc.c:767:82: note: each undeclared identifier is reported only once for each function it appears in
   drivers/misc/fastrpc.c: In function 'fastrpc_free_map':
   drivers/misc/fastrpc.c:777:12: error: invalid storage class for function 'fastrpc_get_args'
     777 | static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:900:12: error: invalid storage class for function 'fastrpc_put_args'
     900 | static int fastrpc_put_args(struct fastrpc_invoke_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:926:12: error: invalid storage class for function 'fastrpc_invoke_send'
     926 | static int fastrpc_invoke_send(struct fastrpc_session_ctx *sctx,
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:958:12: error: invalid storage class for function 'fastrpc_internal_invoke'
     958 | static int fastrpc_internal_invoke(struct fastrpc_user *fl,  u32 kernel,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1031:12: error: invalid storage class for function 'fastrpc_init_create_process'
    1031 | static int fastrpc_init_create_process(struct fastrpc_user *fl,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1143:36: error: invalid storage class for function 'fastrpc_session_alloc'
    1143 | static struct fastrpc_session_ctx *fastrpc_session_alloc(
         |                                    ^~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1163:13: error: invalid storage class for function 'fastrpc_session_free'
    1163 | static void fastrpc_session_free(struct fastrpc_channel_ctx *cctx,
         |             ^~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1173:12: error: invalid storage class for function 'fastrpc_release_current_dsp_process'
    1173 | static int fastrpc_release_current_dsp_process(struct fastrpc_user *fl)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1189:12: error: invalid storage class for function 'fastrpc_device_release'
    1189 | static int fastrpc_device_release(struct inode *inode, struct file *file)
         |            ^~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1232:12: error: invalid storage class for function 'fastrpc_device_open'
    1232 | static int fastrpc_device_open(struct inode *inode, struct file *filp)
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1271:12: error: invalid storage class for function 'fastrpc_dmabuf_alloc'
    1271 | static int fastrpc_dmabuf_alloc(struct fastrpc_user *fl, char __user *argp)
         |            ^~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1309:12: error: invalid storage class for function 'fastrpc_init_attach'
    1309 | static int fastrpc_init_attach(struct fastrpc_user *fl, int pd)
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1325:12: error: invalid storage class for function 'fastrpc_invoke'
    1325 | static int fastrpc_invoke(struct fastrpc_user *fl, char __user *argp)
         |            ^~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1355:12: error: invalid storage class for function 'fastrpc_req_munmap_impl'
    1355 | static int fastrpc_req_munmap_impl(struct fastrpc_user *fl,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/fastrpc.c:1401:12: error: invalid storage class for function 'fastrpc_req_munmap'


vim +/fastrpc_map_put +263 drivers/misc/fastrpc.c

c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  262  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @263  static void fastrpc_map_put(struct fastrpc_map *map)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  264  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  265  	if (map)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  266  		kref_put(&map->refcount, fastrpc_free_map);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  267  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  268  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @269  static void fastrpc_map_get(struct fastrpc_map *map)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  270  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  271  	if (map)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  272  		kref_get(&map->refcount);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  273  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  274  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @275  static int fastrpc_map_find(struct fastrpc_user *fl, int fd,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  276  			    struct fastrpc_map **ppmap)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  277  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  278  	struct fastrpc_map *map = NULL;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  279  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  280  	mutex_lock(&fl->mutex);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  281  	list_for_each_entry(map, &fl->maps, node) {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  282  		if (map->fd == fd) {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  283  			fastrpc_map_get(map);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  284  			*ppmap = map;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  285  			mutex_unlock(&fl->mutex);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  286  			return 0;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  287  		}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  288  	}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  289  	mutex_unlock(&fl->mutex);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  290  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  291  	return -ENOENT;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  292  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  293  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @294  static void fastrpc_buf_free(struct fastrpc_buf *buf)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  295  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  296  	dma_free_coherent(buf->dev, buf->size, buf->virt,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  297  			  FASTRPC_PHYS(buf->phys));
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  298  	kfree(buf);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  299  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  300  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @301  static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  302  			     u64 size, struct fastrpc_buf **obuf)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  303  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  304  	struct fastrpc_buf *buf;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  305  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  306  	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  307  	if (!buf)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  308  		return -ENOMEM;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  309  
6cffd79504ce040 Srinivas Kandagatla 2019-02-08  310  	INIT_LIST_HEAD(&buf->attachments);
2419e55e532de14 Jorge Ramirez-Ortiz 2019-10-09  311  	INIT_LIST_HEAD(&buf->node);
6cffd79504ce040 Srinivas Kandagatla 2019-02-08  312  	mutex_init(&buf->lock);
6cffd79504ce040 Srinivas Kandagatla 2019-02-08  313  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  314  	buf->fl = fl;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  315  	buf->virt = NULL;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  316  	buf->phys = 0;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  317  	buf->size = size;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  318  	buf->dev = dev;
2419e55e532de14 Jorge Ramirez-Ortiz 2019-10-09  319  	buf->raddr = 0;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  320  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  321  	buf->virt = dma_alloc_coherent(dev, buf->size, (dma_addr_t *)&buf->phys,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  322  				       GFP_KERNEL);
41db5f8397eee75 Jorge Ramirez-Ortiz 2019-07-05  323  	if (!buf->virt) {
41db5f8397eee75 Jorge Ramirez-Ortiz 2019-07-05  324  		mutex_destroy(&buf->lock);
41db5f8397eee75 Jorge Ramirez-Ortiz 2019-07-05  325  		kfree(buf);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  326  		return -ENOMEM;
41db5f8397eee75 Jorge Ramirez-Ortiz 2019-07-05  327  	}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  328  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  329  	if (fl->sctx && fl->sctx->sid)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  330  		buf->phys += ((u64)fl->sctx->sid << 32);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  331  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  332  	*obuf = buf;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  333  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  334  	return 0;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  335  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  336  
278d56f970ae6e0 Bjorn Andersson     2019-08-29 @337  static void fastrpc_channel_ctx_free(struct kref *ref)
278d56f970ae6e0 Bjorn Andersson     2019-08-29  338  {
278d56f970ae6e0 Bjorn Andersson     2019-08-29  339  	struct fastrpc_channel_ctx *cctx;
278d56f970ae6e0 Bjorn Andersson     2019-08-29  340  
278d56f970ae6e0 Bjorn Andersson     2019-08-29  341  	cctx = container_of(ref, struct fastrpc_channel_ctx, refcount);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  342  
278d56f970ae6e0 Bjorn Andersson     2019-08-29  343  	kfree(cctx);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  344  }
278d56f970ae6e0 Bjorn Andersson     2019-08-29  345  
278d56f970ae6e0 Bjorn Andersson     2019-08-29 @346  static void fastrpc_channel_ctx_get(struct fastrpc_channel_ctx *cctx)
278d56f970ae6e0 Bjorn Andersson     2019-08-29  347  {
278d56f970ae6e0 Bjorn Andersson     2019-08-29  348  	kref_get(&cctx->refcount);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  349  }
278d56f970ae6e0 Bjorn Andersson     2019-08-29  350  
278d56f970ae6e0 Bjorn Andersson     2019-08-29 @351  static void fastrpc_channel_ctx_put(struct fastrpc_channel_ctx *cctx)
278d56f970ae6e0 Bjorn Andersson     2019-08-29  352  {
278d56f970ae6e0 Bjorn Andersson     2019-08-29  353  	kref_put(&cctx->refcount, fastrpc_channel_ctx_free);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  354  }
278d56f970ae6e0 Bjorn Andersson     2019-08-29  355  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @356  static void fastrpc_context_free(struct kref *ref)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  357  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  358  	struct fastrpc_invoke_ctx *ctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  359  	struct fastrpc_channel_ctx *cctx;
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  360  	unsigned long flags;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  361  	int i;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  362  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  363  	ctx = container_of(ref, struct fastrpc_invoke_ctx, refcount);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  364  	cctx = ctx->cctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  365  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  366  	for (i = 0; i < ctx->nscalars; i++)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  367  		fastrpc_map_put(ctx->maps[i]);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  368  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  369  	if (ctx->buf)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  370  		fastrpc_buf_free(ctx->buf);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  371  
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  372  	spin_lock_irqsave(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  373  	idr_remove(&cctx->ctx_idr, ctx->ctxid >> 4);
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  374  	spin_unlock_irqrestore(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  375  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  376  	kfree(ctx->maps);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  377  	kfree(ctx->olaps);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  378  	kfree(ctx);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  379  
278d56f970ae6e0 Bjorn Andersson     2019-08-29  380  	fastrpc_channel_ctx_put(cctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  381  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  382  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @383  static void fastrpc_context_get(struct fastrpc_invoke_ctx *ctx)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  384  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  385  	kref_get(&ctx->refcount);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  386  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  387  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @388  static void fastrpc_context_put(struct fastrpc_invoke_ctx *ctx)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  389  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  390  	kref_put(&ctx->refcount, fastrpc_context_free);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  391  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  392  
8e7389c79b40ed4 Thierry Escande     2019-03-07 @393  static void fastrpc_context_put_wq(struct work_struct *work)
8e7389c79b40ed4 Thierry Escande     2019-03-07  394  {
8e7389c79b40ed4 Thierry Escande     2019-03-07  395  	struct fastrpc_invoke_ctx *ctx =
8e7389c79b40ed4 Thierry Escande     2019-03-07  396  			container_of(work, struct fastrpc_invoke_ctx, put_work);
8e7389c79b40ed4 Thierry Escande     2019-03-07  397  
8e7389c79b40ed4 Thierry Escande     2019-03-07  398  	fastrpc_context_put(ctx);
8e7389c79b40ed4 Thierry Escande     2019-03-07  399  }
8e7389c79b40ed4 Thierry Escande     2019-03-07  400  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  401  #define CMP(aa, bb) ((aa) == (bb) ? 0 : (aa) < (bb) ? -1 : 1)
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07 @402  static int olaps_cmp(const void *a, const void *b)
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  403  {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  404  	struct fastrpc_buf_overlap *pa = (struct fastrpc_buf_overlap *)a;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  405  	struct fastrpc_buf_overlap *pb = (struct fastrpc_buf_overlap *)b;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  406  	/* sort with lowest starting buffer first */
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  407  	int st = CMP(pa->start, pb->start);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  408  	/* sort with highest ending buffer first */
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  409  	int ed = CMP(pb->end, pa->end);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  410  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  411  	return st == 0 ? ed : st;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  412  }
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  413  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07 @414  static void fastrpc_get_buff_overlaps(struct fastrpc_invoke_ctx *ctx)
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  415  {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  416  	u64 max_end = 0;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  417  	int i;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  418  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  419  	for (i = 0; i < ctx->nbufs; ++i) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  420  		ctx->olaps[i].start = ctx->args[i].ptr;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  421  		ctx->olaps[i].end = ctx->olaps[i].start + ctx->args[i].length;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  422  		ctx->olaps[i].raix = i;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  423  	}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  424  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  425  	sort(ctx->olaps, ctx->nbufs, sizeof(*ctx->olaps), olaps_cmp, NULL);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  426  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  427  	for (i = 0; i < ctx->nbufs; ++i) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  428  		/* Falling inside previous range */
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  429  		if (ctx->olaps[i].start < max_end) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  430  			ctx->olaps[i].mstart = max_end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  431  			ctx->olaps[i].mend = ctx->olaps[i].end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  432  			ctx->olaps[i].offset = max_end - ctx->olaps[i].start;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  433  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  434  			if (ctx->olaps[i].end > max_end) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  435  				max_end = ctx->olaps[i].end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  436  			} else {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  437  				ctx->olaps[i].mend = 0;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  438  				ctx->olaps[i].mstart = 0;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  439  			}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  440  
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  441  		} else  {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  442  			ctx->olaps[i].mend = ctx->olaps[i].end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  443  			ctx->olaps[i].mstart = ctx->olaps[i].start;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  444  			ctx->olaps[i].offset = 0;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  445  			max_end = ctx->olaps[i].end;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  446  		}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  447  	}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  448  }
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  449  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08 @450  static struct fastrpc_invoke_ctx *fastrpc_context_alloc(
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  451  			struct fastrpc_user *user, u32 kernel, u32 sc,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  452  			struct fastrpc_invoke_args *args)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  453  {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  454  	struct fastrpc_channel_ctx *cctx = user->cctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  455  	struct fastrpc_invoke_ctx *ctx = NULL;
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  456  	unsigned long flags;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  457  	int ret;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  458  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  459  	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  460  	if (!ctx)
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  461  		return ERR_PTR(-ENOMEM);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  462  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  463  	INIT_LIST_HEAD(&ctx->node);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  464  	ctx->fl = user;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  465  	ctx->nscalars = REMOTE_SCALARS_LENGTH(sc);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  466  	ctx->nbufs = REMOTE_SCALARS_INBUFS(sc) +
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  467  		     REMOTE_SCALARS_OUTBUFS(sc);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  468  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  469  	if (ctx->nscalars) {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  470  		ctx->maps = kcalloc(ctx->nscalars,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  471  				    sizeof(*ctx->maps), GFP_KERNEL);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  472  		if (!ctx->maps) {
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  473  			kfree(ctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  474  			return ERR_PTR(-ENOMEM);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  475  		}
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  476  		ctx->olaps = kcalloc(ctx->nscalars,
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  477  				    sizeof(*ctx->olaps), GFP_KERNEL);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  478  		if (!ctx->olaps) {
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  479  			kfree(ctx->maps);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  480  			kfree(ctx);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  481  			return ERR_PTR(-ENOMEM);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  482  		}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  483  		ctx->args = args;
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  484  		fastrpc_get_buff_overlaps(ctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  485  	}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  486  
278d56f970ae6e0 Bjorn Andersson     2019-08-29  487  	/* Released in fastrpc_context_put() */
278d56f970ae6e0 Bjorn Andersson     2019-08-29  488  	fastrpc_channel_ctx_get(cctx);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  489  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  490  	ctx->sc = sc;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  491  	ctx->retval = -1;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  492  	ctx->pid = current->pid;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  493  	ctx->tgid = user->tgid;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  494  	ctx->cctx = cctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  495  	init_completion(&ctx->work);
8e7389c79b40ed4 Thierry Escande     2019-03-07  496  	INIT_WORK(&ctx->put_work, fastrpc_context_put_wq);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  497  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  498  	spin_lock(&user->lock);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  499  	list_add_tail(&ctx->node, &user->pending);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  500  	spin_unlock(&user->lock);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  501  
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  502  	spin_lock_irqsave(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  503  	ret = idr_alloc_cyclic(&cctx->ctx_idr, ctx, 1,
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  504  			       FASTRPC_CTX_MAX, GFP_ATOMIC);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  505  	if (ret < 0) {
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  506  		spin_unlock_irqrestore(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  507  		goto err_idr;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  508  	}
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  509  	ctx->ctxid = ret << 4;
977e6c8d1d18061 Srinivas Kandagatla 2019-03-07  510  	spin_unlock_irqrestore(&cctx->lock, flags);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  511  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  512  	kref_init(&ctx->refcount);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  513  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  514  	return ctx;
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  515  err_idr:
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  516  	spin_lock(&user->lock);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  517  	list_del(&ctx->node);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  518  	spin_unlock(&user->lock);
278d56f970ae6e0 Bjorn Andersson     2019-08-29  519  	fastrpc_channel_ctx_put(cctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  520  	kfree(ctx->maps);
25e8dfb83cda0a1 Srinivas Kandagatla 2019-03-07  521  	kfree(ctx->olaps);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  522  	kfree(ctx);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  523  
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  524  	return ERR_PTR(ret);
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  525  }
c68cfb718c8f97b Srinivas Kandagatla 2019-02-08  526  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

  reply	other threads:[~2021-11-30 18:26 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-30 12:57 [PATCH 0/3] Add vmid property and mapping attribute Jeya R
2021-11-30 12:57 ` [PATCH 1/3] dt-bindings: misc: add fastrpc domain vmid property Jeya R
2021-11-30 13:17   ` Srinivas Kandagatla
2021-11-30 12:57 ` [PATCH 1/2] misc: fastrpc: Add fdlist implementation Jeya R
2021-11-30 20:20   ` kernel test robot
2021-11-30 20:20     ` kernel test robot
2021-11-30 23:52   ` kernel test robot
2021-11-30 23:52     ` kernel test robot
2021-11-30 12:57 ` [PATCH 2/2] misc: fastrpc: Add dma handle implementation Jeya R
2021-11-30 22:44   ` kernel test robot
2021-11-30 22:44     ` kernel test robot
2021-12-01  0:22   ` kernel test robot
2021-12-01  0:22     ` kernel test robot
2021-11-30 12:57 ` [PATCH 2/3] misc: fastrpc: Read virtual machine IDs during probe Jeya R
2021-11-30 12:57 ` [PATCH 3/3] misc: fastrpc: Handle mapping of invoke argument with attribute Jeya R
2021-11-30 18:18   ` kernel test robot [this message]
2021-11-30 18:18     ` kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202112010230.ONOKNnFv-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=bkumar@qti.qualcomm.com \
    --cc=ekangupt@qti.qualcomm.com \
    --cc=fastrpc.upstream@qti.qualcomm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jeyr@codeaurora.org \
    --cc=jeyr@qti.qualcomm.com \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=srinivas.kandagatla@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.