Re: [PATCH v2 3/6] misc: fastrpc: Add support for context Invoke method

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Srinivas,

I love your patch! Perhaps something to improve:

[auto build test WARNING on char-misc/char-misc-testing]
[also build test WARNING on v4.20-rc6 next-20181207]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Srinivas-Kandagatla/misc-Add-support-to-Qualcomm-FastRPC-driver/20181210-093054
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=arm 

All warnings (new ones prefixed by >>):

   drivers//misc/fastrpc.c: In function 'fastrpc_get_args':
>> drivers//misc/fastrpc.c:528:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
       rpra[i].pv = (uint64_t) ctx->args[i].ptr;
                    ^
>> drivers//misc/fastrpc.c:545:26: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
        err = copy_from_user((void *)rpra[i].pv,
                             ^
   drivers//misc/fastrpc.c:551:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
        memcpy((void *)rpra[i].pv, ctx->args[i].ptr,
               ^
   drivers//misc/fastrpc.c:558:16: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
      rpra[i].pv = (uint64_t) ctx->args[i].ptr;
                   ^
   drivers//misc/fastrpc.c: In function 'fastrpc_put_args':
   drivers//misc/fastrpc.c:591:8: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
           (void  *)rpra[i].pv, rpra[i].len);
           ^
   drivers//misc/fastrpc.c:597:29: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
       memcpy(ctx->args[i].ptr, (void *)rpra[i].pv,
                                ^

vim +528 drivers//misc/fastrpc.c

   485	
   486	static int fastrpc_get_args(uint32_t kernel, struct fastrpc_invoke_ctx *ctx)
   487	{
   488		struct device *dev = ctx->fl->sctx->dev;
   489		struct fastrpc_remote_arg *rpra;
   490		struct fastrpc_invoke_buf *list;
   491		struct fastrpc_phy_page *pages;
   492		uintptr_t args;
   493		size_t rlen = 0, pkt_size = 0, metalen = 0;
   494		int inbufs, i, err = 0;
   495	
   496		inbufs = REMOTE_SCALARS_INBUFS(ctx->sc);
   497		metalen = fastrpc_get_meta_size(ctx);
   498		pkt_size = fastrpc_get_payload_size(ctx, metalen);
   499		fastrpc_create_maps(ctx);
   500		ctx->used_sz = pkt_size;
   501	
   502		err = fastrpc_buf_alloc(ctx->fl, dev, pkt_size, &ctx->buf);
   503		if (err)
   504			goto bail;
   505	
   506		rpra = ctx->buf->virt;
   507		list = ctx->buf->virt + ctx->nscalars * sizeof(*rpra);
   508		pages = ctx->buf->virt + ctx->nscalars * (sizeof(*list) +
   509			sizeof(*rpra));
   510		args = (uintptr_t)ctx->buf->virt + metalen;
   511		rlen = pkt_size - metalen;
   512		ctx->rpra = rpra;
   513	
   514		for (i = 0; i < ctx->nbufs; ++i) {
   515			size_t len = ctx->args[i].length;
   516	
   517			rpra[i].pv = 0;
   518			rpra[i].len = len;
   519			list[i].num = len ? 1 : 0;
   520			list[i].pgidx = i;
   521	
   522			if (!len)
   523				continue;
   524	
   525			pages[i].size = roundup(len, PAGE_SIZE);
   526	
   527			if (ctx->maps[i]) {
 > 528				rpra[i].pv = (uint64_t) ctx->args[i].ptr;
   529				pages[i].addr = ctx->maps[i]->phys;
   530			} else {
   531				rlen -= ALIGN(args, FASTRPC_ALIGN) - args;
   532				args = ALIGN(args, FASTRPC_ALIGN);
   533				if (rlen < len)
   534					goto bail;
   535	
   536				rpra[i].pv = (args);
   537				pages[i].addr = ctx->buf->phys + (pkt_size - rlen);
   538				pages[i].addr = pages[i].addr &	PAGE_MASK;
   539				args = args + len;
   540				rlen -= len;
   541			}
   542	
   543			if (i < inbufs && !ctx->maps[i]) {
   544				if (!kernel) {
 > 545					err = copy_from_user((void *)rpra[i].pv,
   546						     (void __user *)ctx->args[i].ptr,
   547						     ctx->args[i].length);
   548					if (err)
   549						goto bail;
   550				} else {
   551					memcpy((void *)rpra[i].pv, ctx->args[i].ptr,
   552					       ctx->args[i].length);
   553				}
   554			}
   555		}
   556	
   557		for (i = ctx->nbufs; i < ctx->nscalars; ++i) {
   558			rpra[i].pv = (uint64_t) ctx->args[i].ptr;
   559			rpra[i].len = ctx->args[i].length;
   560			list[i].num = ctx->args[i].length ? 1 : 0;
   561			list[i].pgidx = i;
   562			pages[i].addr = ctx->maps[i]->phys;
   563			pages[i].size = ctx->maps[i]->size;
   564		}
   565	
   566	bail:
   567		if (err)
   568			dev_err(dev, "Error: get invoke args failed:%d\n", err);
   569	
   570		return err;
   571	}
   572	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux