Message ID | 1638163720-23123-3-git-send-email-jeyr@codeaurora.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | Add DMA handle implementation | expand |
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 v5.16-rc3 next-20211126] [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-DMA-handle-implementation/20211129-133228 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git cd455ebb748c4e198c8158e5d61b3034bf10f22b config: hexagon-randconfig-r045-20211129 (https://download.01.org/0day-ci/archive/20211129/202111291504.W1SMyI4E-lkp@intel.com/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project df08b2fe8b35cb63dfb3b49738a3494b9b4e6f8e) 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/d8e9cc594aeafa392d306e883c741b984b5fc89a git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Jeya-R/Add-DMA-handle-implementation/20211129-133228 git checkout d8e9cc594aeafa392d306e883c741b984b5fc89a # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon 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 errors (new ones prefixed by >>): >> drivers/misc/fastrpc.c:721:17: error: use of 'fastrpc_remote_arg' with tag type that does not match previous declaration size = (sizeof(struct fastrpc_remote_arg) + ^~~~~~ union drivers/misc/fastrpc.c:106:7: note: previous use is here union fastrpc_remote_arg { ^ drivers/misc/fastrpc.c:925:2: error: use of 'fastrpc_remote_arg' with tag type that does not match previous declaration struct fastrpc_remote_arg *rpra = ctx->rpra; ^~~~~~ union drivers/misc/fastrpc.c:106:7: note: previous use is here union fastrpc_remote_arg { ^ >> drivers/misc/fastrpc.c:942:43: error: no member named 'pv' in 'union fastrpc_remote_arg' void *src = (void *)(uintptr_t)rpra[i].pv; ~~~~~~~ ^ >> drivers/misc/fastrpc.c:944:22: error: no member named 'len' in 'union fastrpc_remote_arg' u64 len = rpra[i].len; ~~~~~~~ ^ drivers/misc/fastrpc.c:958:25: error: use of undeclared identifier 'fl' if (!fastrpc_map_find(fl, (int)fdlist[i], &mmap)) ^ 5 errors generated. vim +/fastrpc_remote_arg +721 drivers/misc/fastrpc.c c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 689 c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 690 /* c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 691 * Fastrpc payload buffer with metadata looks like: c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 692 * c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 693 * >>>>>> START of METADATA <<<<<<<<< c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 694 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 695 * | Arguments | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 696 * | type:(struct fastrpc_remote_arg)| c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 697 * | (0 - N) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 698 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 699 * | Invoke Buffer list | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 700 * | type:(struct fastrpc_invoke_buf)| c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 701 * | (0 - N) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 702 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 703 * | Page info list | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 704 * | type:(struct fastrpc_phy_page) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 705 * | (0 - N) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 706 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 707 * | Optional info | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 708 * |(can be specific to SoC/Firmware)| c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 709 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 710 * >>>>>>>> END of METADATA <<<<<<<<< c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 711 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 712 * | Inline ARGS | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 713 * | (0-N) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 714 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 715 */ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 716 c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 717 static int fastrpc_get_meta_size(struct fastrpc_invoke_ctx *ctx) c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 718 { c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 719 int size = 0; c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 720 c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 @721 size = (sizeof(struct fastrpc_remote_arg) + c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 722 sizeof(struct fastrpc_invoke_buf) + c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 723 sizeof(struct fastrpc_phy_page)) * ctx->nscalars + c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 724 sizeof(u64) * FASTRPC_MAX_FDLIST + c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 725 sizeof(u32) * FASTRPC_MAX_CRCLIST; c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 726 c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 727 return size; c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 728 } c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 729 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.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 v5.16-rc3 next-20211126] [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-DMA-handle-implementation/20211129-133228 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git cd455ebb748c4e198c8158e5d61b3034bf10f22b config: microblaze-randconfig-r031-20211128 (https://download.01.org/0day-ci/archive/20211129/202111291710.WVYQ9Aed-lkp@intel.com/config) compiler: microblaze-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/d8e9cc594aeafa392d306e883c741b984b5fc89a git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Jeya-R/Add-DMA-handle-implementation/20211129-133228 git checkout d8e9cc594aeafa392d306e883c741b984b5fc89a # 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=microblaze 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 errors (new ones prefixed by >>): drivers/misc/fastrpc.c: In function 'fastrpc_get_meta_size': >> drivers/misc/fastrpc.c:721:31: error: 'fastrpc_remote_arg' defined as wrong kind of tag 721 | size = (sizeof(struct fastrpc_remote_arg) + | ^~~~~~~~~~~~~~~~~~ >> drivers/misc/fastrpc.c:721:24: error: invalid application of 'sizeof' to incomplete type 'struct fastrpc_remote_arg' 721 | size = (sizeof(struct fastrpc_remote_arg) + | ^~~~~~ drivers/misc/fastrpc.c: In function 'fastrpc_put_args': drivers/misc/fastrpc.c:925:16: error: 'fastrpc_remote_arg' defined as wrong kind of tag 925 | struct fastrpc_remote_arg *rpra = ctx->rpra; | ^~~~~~~~~~~~~~~~~~ >> drivers/misc/fastrpc.c:925:43: error: initialization of 'struct fastrpc_remote_arg *' from incompatible pointer type 'union fastrpc_remote_arg *' [-Werror=incompatible-pointer-types] 925 | struct fastrpc_remote_arg *rpra = ctx->rpra; | ^~~ drivers/misc/fastrpc.c:935:55: error: invalid application of 'sizeof' to incomplete type 'struct fastrpc_remote_arg' 935 | list = ctx->buf->virt + ctx->nscalars * sizeof(*rpra); | ^ drivers/misc/fastrpc.c:937:23: error: invalid application of 'sizeof' to incomplete type 'struct fastrpc_remote_arg' 937 | sizeof(*rpra)); | ^ >> drivers/misc/fastrpc.c:942:60: error: invalid use of undefined type 'struct fastrpc_remote_arg' 942 | void *src = (void *)(uintptr_t)rpra[i].pv; | ^ drivers/misc/fastrpc.c:942:63: error: invalid use of undefined type 'struct fastrpc_remote_arg' 942 | void *src = (void *)(uintptr_t)rpra[i].pv; | ^ drivers/misc/fastrpc.c:944:39: error: invalid use of undefined type 'struct fastrpc_remote_arg' 944 | u64 len = rpra[i].len; | ^ drivers/misc/fastrpc.c:944:42: error: invalid use of undefined type 'struct fastrpc_remote_arg' 944 | u64 len = rpra[i].len; | ^ drivers/misc/fastrpc.c:958:39: error: 'fl' undeclared (first use in this function); did you mean 'fd'? 958 | if (!fastrpc_map_find(fl, (int)fdlist[i], &mmap)) | ^~ | fd drivers/misc/fastrpc.c:958:39: note: each undeclared identifier is reported only once for each function it appears in At top level: drivers/misc/fastrpc.c:717:12: warning: 'fastrpc_get_meta_size' defined but not used [-Wunused-function] 717 | static int fastrpc_get_meta_size(struct fastrpc_invoke_ctx *ctx) | ^~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/fastrpc_remote_arg +721 drivers/misc/fastrpc.c c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 689 c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 690 /* c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 691 * Fastrpc payload buffer with metadata looks like: c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 692 * c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 693 * >>>>>> START of METADATA <<<<<<<<< c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 694 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 695 * | Arguments | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 696 * | type:(struct fastrpc_remote_arg)| c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 697 * | (0 - N) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 698 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 699 * | Invoke Buffer list | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 700 * | type:(struct fastrpc_invoke_buf)| c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 701 * | (0 - N) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 702 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 703 * | Page info list | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 704 * | type:(struct fastrpc_phy_page) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 705 * | (0 - N) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 706 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 707 * | Optional info | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 708 * |(can be specific to SoC/Firmware)| c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 709 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 710 * >>>>>>>> END of METADATA <<<<<<<<< c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 711 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 712 * | Inline ARGS | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 713 * | (0-N) | c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 714 * +---------------------------------+ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 715 */ c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 716 c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 717 static int fastrpc_get_meta_size(struct fastrpc_invoke_ctx *ctx) c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 718 { c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 719 int size = 0; c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 720 c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 @721 size = (sizeof(struct fastrpc_remote_arg) + c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 722 sizeof(struct fastrpc_invoke_buf) + c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 723 sizeof(struct fastrpc_phy_page)) * ctx->nscalars + c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 724 sizeof(u64) * FASTRPC_MAX_FDLIST + c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 725 sizeof(u32) * FASTRPC_MAX_CRCLIST; c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 726 c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 727 return size; c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 728 } c68cfb718c8f97 Srinivas Kandagatla 2019-02-08 729 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 3c937ff..77071ee3 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -92,9 +92,20 @@ struct fastrpc_invoke_buf { u32 pgidx; /* index to start of contiguous region */ }; -struct fastrpc_remote_arg { - u64 pv; - u64 len; +struct fastrpc_remote_dmahandle { + s32 fd; /* dma handle fd */ + u32 offset; /* dma handle offset */ + u32 len; /* dma handle length */ +}; + +struct fastrpc_remote_buf { + u64 pv; /* buffer pointer */ + u64 len; /* length of buffer */ +}; + +union fastrpc_remote_arg { + struct fastrpc_remote_buf buf; + struct fastrpc_remote_dmahandle dma; }; struct fastrpc_mmap_rsp_msg { @@ -189,7 +200,7 @@ struct fastrpc_invoke_ctx { struct work_struct put_work; struct fastrpc_msg msg; struct fastrpc_user *fl; - struct fastrpc_remote_arg *rpra; + union fastrpc_remote_arg *rpra; struct fastrpc_map **maps; struct fastrpc_buf *buf; struct fastrpc_invoke_args *args; @@ -760,12 +771,26 @@ static int fastrpc_create_maps(struct fastrpc_invoke_ctx *ctx) return 0; } +static struct fastrpc_invoke_buf *fastrpc_invoke_buf_start(union fastrpc_remote_arg *pra, u32 sc) +{ + unsigned int len = REMOTE_SCALARS_LENGTH(sc); + + return (struct fastrpc_invoke_buf *)(&pra[len]); +} + +static struct fastrpc_phy_page *fastrpc_phy_page_start(u32 sc, struct fastrpc_invoke_buf *buf) +{ + unsigned int len = REMOTE_SCALARS_LENGTH(sc); + + return (struct fastrpc_phy_page *)(&buf[len]); +} + static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) { struct device *dev = ctx->fl->sctx->dev; - struct fastrpc_remote_arg *rpra; + union fastrpc_remote_arg *rpra = NULL; struct fastrpc_invoke_buf *list; - struct fastrpc_phy_page *pages; + struct fastrpc_phy_page *pages, *ipage; int inbufs, i, oix, err = 0; u64 len, rlen, pkt_size; u64 pg_start, pg_end; @@ -773,7 +798,13 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) int metalen; inbufs = REMOTE_SCALARS_INBUFS(ctx->sc); - metalen = fastrpc_get_meta_size(ctx); + list = fastrpc_invoke_buf_start(rpra, ctx->sc); + pages = fastrpc_phy_page_start(ctx->sc, list); + ipage = pages; + ipage += ctx->nscalars; + metalen = (size_t)&ipage[0] + + sizeof(u64) * FASTRPC_MAX_FDLIST + + sizeof(u32) * FASTRPC_MAX_CRCLIST; pkt_size = fastrpc_get_payload_size(ctx, metalen); err = fastrpc_create_maps(ctx); @@ -788,12 +819,11 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) memset(ctx->buf->virt, 0, pkt_size); rpra = ctx->buf->virt; - list = ctx->buf->virt + ctx->nscalars * sizeof(*rpra); - pages = ctx->buf->virt + ctx->nscalars * (sizeof(*list) + - sizeof(*rpra)); + ctx->rpra = rpra; + list = fastrpc_invoke_buf_start(rpra, ctx->sc); + pages = fastrpc_phy_page_start(ctx->sc, list); args = (uintptr_t)ctx->buf->virt + metalen; rlen = pkt_size - metalen; - ctx->rpra = rpra; for (oix = 0; oix < ctx->nbufs; ++oix) { int mlen; @@ -801,8 +831,8 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) i = ctx->olaps[oix].raix; len = ctx->args[i].length; - rpra[i].pv = 0; - rpra[i].len = len; + rpra[i].buf.pv = 0; + rpra[i].buf.len = len; list[i].num = len ? 1 : 0; list[i].pgidx = i; @@ -812,7 +842,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) if (ctx->maps[i]) { struct vm_area_struct *vma = NULL; - rpra[i].pv = (u64) ctx->args[i].ptr; + rpra[i].buf.pv = (u64) ctx->args[i].ptr; pages[i].addr = ctx->maps[i]->phys; mmap_read_lock(current->mm); @@ -839,7 +869,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) if (rlen < mlen) goto bail; - rpra[i].pv = args - ctx->olaps[oix].offset; + rpra[i].buf.pv = args - ctx->olaps[oix].offset; pages[i].addr = ctx->buf->phys - ctx->olaps[oix].offset + (pkt_size - rlen); @@ -853,7 +883,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) } if (i < inbufs && !ctx->maps[i]) { - void *dst = (void *)(uintptr_t)rpra[i].pv; + void *dst = (void *)(uintptr_t)rpra[i].buf.pv; void *src = (void *)(uintptr_t)ctx->args[i].ptr; if (!kernel) { @@ -869,12 +899,17 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) } for (i = ctx->nbufs; i < ctx->nscalars; ++i) { - rpra[i].pv = (u64) ctx->args[i].ptr; - rpra[i].len = ctx->args[i].length; + rpra[i].buf.pv = (u64) ctx->args[i].ptr; + rpra[i].buf.len = ctx->args[i].length; list[i].num = ctx->args[i].length ? 1 : 0; list[i].pgidx = i; - pages[i].addr = ctx->maps[i]->phys; - pages[i].size = ctx->maps[i]->size; + if (ctx->maps[i]) { + pages[i].addr = ctx->maps[i]->phys; + pages[i].size = ctx->maps[i]->size; + } + rpra[i].dma.fd = ctx->args[i].fd; + rpra[i].dma.len = ctx->args[i].length; + rpra[i].dma.offset = (u64) ctx->args[i].ptr; } bail:
Add dma handle instructions to remote arguments. Signed-off-by: Jeya R <jeyr@codeaurora.org> --- drivers/misc/fastrpc.c | 75 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 20 deletions(-)