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
next prev parent 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.