From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============4932165989600482863==" MIME-Version: 1.0 From: kbuild test robot To: kbuild-all@lists.01.org Subject: Re: [PATCH] remoteproc: core: Add a memory efficient coredump function Date: Sat, 28 Mar 2020 12:06:34 +0800 Message-ID: <202003281250.ccITOkWk%lkp@intel.com> In-Reply-To: <1585353412-19644-1-git-send-email-rishabhb@codeaurora.org> List-Id: --===============4932165989600482863== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Rishabh, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on linux/master v5.6-rc7] [cannot apply to remoteproc/for-next rpmsg/for-next next-20200326] [if your patch is applied to the wrong git tree, please drop us a note to h= elp improve the system. BTW, we also suggest to use '--base' option to specify = the base tree in git format-patch, please see https://stackoverflow.com/a/37406= 982] url: https://github.com/0day-ci/linux/commits/Rishabh-Bhatnagar/remotepr= oc-core-Add-a-memory-efficient-coredump-function/20200328-075826 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git = 69c5eea3128e775fd3c70ecf0098105d96dee330 config: s390-randconfig-a001-20200327 (attached as .config) compiler: s390-linux-gcc (GCC) 9.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=3D9.2.0 make.cross ARCH=3Ds390 = If you fix the issue, kindly add following tag Reported-by: kbuild test robot All error/warnings (new ones prefixed by >>): In file included from include/linux/printk.h:331, from include/linux/kernel.h:15, from drivers/remoteproc/remoteproc_core.c:19: drivers/remoteproc/remoteproc_core.c: In function 'rproc_read_dump': >> drivers/remoteproc/remoteproc_core.c:1592:24: warning: format '%d' expec= ts argument of type 'int', but argument 4 has type 'size_t' {aka 'long unsi= gned int'} [-Wformat=3D] 1592 | dev_dbg(&rproc->dev, "Copied %d bytes to userspace\n", | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/dynamic_debug.h:125:15: note: in definition of macro '__dy= namic_func_call' 125 | func(&id, ##__VA_ARGS__); \ | ^~~~~~~~~~~ include/linux/dynamic_debug.h:157:2: note: in expansion of macro '_dynam= ic_func_call' 157 | _dynamic_func_call(fmt,__dynamic_dev_dbg, \ | ^~~~~~~~~~~~~~~~~~ include/linux/dev_printk.h:114:2: note: in expansion of macro 'dynamic_d= ev_dbg' 114 | dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) | ^~~~~~~~~~~~~~~ include/linux/dev_printk.h:114:23: note: in expansion of macro 'dev_fmt' 114 | dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) | ^~~~~~~ >> drivers/remoteproc/remoteproc_core.c:1592:3: note: in expansion of macro= 'dev_dbg' 1592 | dev_dbg(&rproc->dev, "Copied %d bytes to userspace\n", | ^~~~~~~ drivers/remoteproc/remoteproc_core.c:1592:33: note: format string is def= ined here 1592 | dev_dbg(&rproc->dev, "Copied %d bytes to userspace\n", | ~^ | | | int | %ld drivers/remoteproc/remoteproc_core.c: In function 'rproc_coredump': >> drivers/remoteproc/remoteproc_core.c:1721:1: warning: ISO C90 forbids mi= xed declarations and code [-Wdeclaration-after-statement] 1721 | int rproc_trigger_recovery(struct rproc *rproc) | ^~~ >> drivers/remoteproc/remoteproc_core.c:1764:13: error: invalid storage cla= ss for function 'rproc_crash_handler_work' 1764 | static void rproc_crash_handler_work(struct work_struct *work) | ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: >> drivers/remoteproc/remoteproc_core.c:1851:15: error: non-static declarat= ion of 'rproc_boot' follows static declaration 1851 | EXPORT_SYMBOL(rproc_boot); | ^~~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ | ^~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ >> drivers/remoteproc/remoteproc_core.c:1851:1: note: in expansion of macro= 'EXPORT_SYMBOL' 1851 | EXPORT_SYMBOL(rproc_boot); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:1800:5: note: previous definition o= f 'rproc_boot' was here 1800 | int rproc_boot(struct rproc *rproc) | ^~~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: >> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations= and code [-Wdeclaration-after-statement] 67 | static const struct kernel_symbol __ksymtab_##sym \ | ^~~~~~ include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENT= RY' 108 | __KSYMTAB_ENTRY(sym, sec) | ^~~~~~~~~~~~~~~ include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SY= MBOL' 147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec,= ns) | ^~~~~~~~~~~~~~~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ >> drivers/remoteproc/remoteproc_core.c:1851:1: note: in expansion of macro= 'EXPORT_SYMBOL' 1851 | EXPORT_SYMBOL(rproc_boot); | ^~~~~~~~~~~~~ >> drivers/remoteproc/remoteproc_core.c:1905:15: error: non-static declarat= ion of 'rproc_shutdown' follows static declaration 1905 | EXPORT_SYMBOL(rproc_shutdown); | ^~~~~~~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ | ^~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:1905:1: note: in expansion of macro= 'EXPORT_SYMBOL' 1905 | EXPORT_SYMBOL(rproc_shutdown); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:1872:6: note: previous definition o= f 'rproc_shutdown' was here 1872 | void rproc_shutdown(struct rproc *rproc) | ^~~~~~~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: >> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations= and code [-Wdeclaration-after-statement] 67 | static const struct kernel_symbol __ksymtab_##sym \ | ^~~~~~ include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENT= RY' 108 | __KSYMTAB_ENTRY(sym, sec) | ^~~~~~~~~~~~~~~ include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SY= MBOL' 147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec,= ns) | ^~~~~~~~~~~~~~~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:1905:1: note: in expansion of macro= 'EXPORT_SYMBOL' 1905 | EXPORT_SYMBOL(rproc_shutdown); | ^~~~~~~~~~~~~ >> drivers/remoteproc/remoteproc_core.c:1955:15: error: non-static declarat= ion of 'rproc_get_by_phandle' follows static declaration 1955 | EXPORT_SYMBOL(rproc_get_by_phandle); | ^~~~~~~~~~~~~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ | ^~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:1955:1: note: in expansion of macro= 'EXPORT_SYMBOL' 1955 | EXPORT_SYMBOL(rproc_get_by_phandle); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:1950:15: note: previous definition = of 'rproc_get_by_phandle' was here 1950 | struct rproc *rproc_get_by_phandle(phandle phandle) | ^~~~~~~~~~~~~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: >> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations= and code [-Wdeclaration-after-statement] 67 | static const struct kernel_symbol __ksymtab_##sym \ | ^~~~~~ include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENT= RY' 108 | __KSYMTAB_ENTRY(sym, sec) | ^~~~~~~~~~~~~~~ include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SY= MBOL' 147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec,= ns) | ^~~~~~~~~~~~~~~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:1955:1: note: in expansion of macro= 'EXPORT_SYMBOL' 1955 | EXPORT_SYMBOL(rproc_get_by_phandle); | ^~~~~~~~~~~~~ >> drivers/remoteproc/remoteproc_core.c:2005:15: error: non-static declarat= ion of 'rproc_add' follows static declaration 2005 | EXPORT_SYMBOL(rproc_add); | ^~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ | ^~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2005:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2005 | EXPORT_SYMBOL(rproc_add); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:1977:5: note: previous definition o= f 'rproc_add' was here 1977 | int rproc_add(struct rproc *rproc) | ^~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: >> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations= and code [-Wdeclaration-after-statement] 67 | static const struct kernel_symbol __ksymtab_##sym \ | ^~~~~~ include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENT= RY' 108 | __KSYMTAB_ENTRY(sym, sec) | ^~~~~~~~~~~~~~~ include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SY= MBOL' 147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec,= ns) | ^~~~~~~~~~~~~~~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2005:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2005 | EXPORT_SYMBOL(rproc_add); | ^~~~~~~~~~~~~ >> drivers/remoteproc/remoteproc_core.c:2016:13: error: invalid storage cla= ss for function 'rproc_type_release' 2016 | static void rproc_type_release(struct device *dev) | ^~~~~~~~~~~~~~~~~~ >> drivers/remoteproc/remoteproc_core.c:2034:13: error: initializer element= is not constant 2034 | .release =3D rproc_type_release, | ^~~~~~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2034:13: note: (near initialization= for 'rproc_type.release') In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: >> drivers/remoteproc/remoteproc_core.c:2150:15: error: non-static declarat= ion of 'rproc_alloc' follows static declaration 2150 | EXPORT_SYMBOL(rproc_alloc); | ^~~~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ | ^~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2150:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2150 | EXPORT_SYMBOL(rproc_alloc); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2060:15: note: previous definition = of 'rproc_alloc' was here 2060 | struct rproc *rproc_alloc(struct device *dev, const char *name, | ^~~~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: >> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations= and code [-Wdeclaration-after-statement] 67 | static const struct kernel_symbol __ksymtab_##sym \ | ^~~~~~ include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENT= RY' 108 | __KSYMTAB_ENTRY(sym, sec) | ^~~~~~~~~~~~~~~ include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SY= MBOL' 147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec,= ns) | ^~~~~~~~~~~~~~~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2150:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2150 | EXPORT_SYMBOL(rproc_alloc); | ^~~~~~~~~~~~~ >> drivers/remoteproc/remoteproc_core.c:2165:15: error: non-static declarat= ion of 'rproc_free' follows static declaration 2165 | EXPORT_SYMBOL(rproc_free); | ^~~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ | ^~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2165:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2165 | EXPORT_SYMBOL(rproc_free); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2161:6: note: previous definition o= f 'rproc_free' was here 2161 | void rproc_free(struct rproc *rproc) | ^~~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: >> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations= and code [-Wdeclaration-after-statement] 67 | static const struct kernel_symbol __ksymtab_##sym \ | ^~~~~~ include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENT= RY' 108 | __KSYMTAB_ENTRY(sym, sec) | ^~~~~~~~~~~~~~~ include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SY= MBOL' 147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec,= ns) | ^~~~~~~~~~~~~~~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2165:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2165 | EXPORT_SYMBOL(rproc_free); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2181:15: error: non-static declarat= ion of 'rproc_put' follows static declaration 2181 | EXPORT_SYMBOL(rproc_put); | ^~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ | ^~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2181:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2181 | EXPORT_SYMBOL(rproc_put); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2176:6: note: previous definition o= f 'rproc_put' was here 2176 | void rproc_put(struct rproc *rproc) | ^~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations= and code [-Wdeclaration-after-statement] 67 | static const struct kernel_symbol __ksymtab_##sym \ | ^~~~~~ include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENT= RY' 108 | __KSYMTAB_ENTRY(sym, sec) | ^~~~~~~~~~~~~~~ include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SY= MBOL' 147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec,= ns) | ^~~~~~~~~~~~~~~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2181:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2181 | EXPORT_SYMBOL(rproc_put); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2223:15: error: non-static declarat= ion of 'rproc_del' follows static declaration 2223 | EXPORT_SYMBOL(rproc_del); | ^~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ | ^~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2223:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2223 | EXPORT_SYMBOL(rproc_del); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2198:5: note: previous definition o= f 'rproc_del' was here 2198 | int rproc_del(struct rproc *rproc) | ^~~~~~~~~ In file included from include/linux/linkage.h:7, from include/linux/kernel.h:8, from drivers/remoteproc/remoteproc_core.c:19: include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations= and code [-Wdeclaration-after-statement] 67 | static const struct kernel_symbol __ksymtab_##sym \ | ^~~~~~ include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENT= RY' 108 | __KSYMTAB_ENTRY(sym, sec) | ^~~~~~~~~~~~~~~ include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SY= MBOL' 147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec,= ns) | ^~~~~~~~~~~~~~~~ include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYM= BOL' 155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "") | ^~~~~~~~~~~~~~~ include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMB= OL' 158 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") | ^~~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2223:1: note: in expansion of macro= 'EXPORT_SYMBOL' 2223 | EXPORT_SYMBOL(rproc_del); | ^~~~~~~~~~~~~ drivers/remoteproc/remoteproc_core.c:2236:15: error: non-static declarat= ion of 'rproc_add_subdev' follows static declaration 2236 | EXPORT_SYMBOL(rproc_add_subdev); | ^~~~~~~~~~~~~~~~ include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SY= MBOL' 98 | extern typeof(sym) sym; \ vim +/rproc_crash_handler_work +1764 drivers/remoteproc/remoteproc_core.c 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1549 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1550 static ssize_t rproc_= read_dump(char *buffer, loff_t offset, size_t count, 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1551 void *data, size_= t elfcorelen) 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1552 { 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1553 void *device_mem =3D= NULL; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1554 unsigned long data_l= eft =3D 0; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1555 unsigned long bytes_= left =3D count; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1556 unsigned long addr = =3D 0; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1557 size_t copy_size =3D= 0; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1558 struct rproc *rproc = =3D data; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1559 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1560 if (offset < elfcore= len) { 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1561 copy_size =3D elfco= relen - offset; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1562 copy_size =3D min(c= opy_size, bytes_left); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1563 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1564 memcpy(buffer, rpro= c->elfcore + offset, copy_size); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1565 offset +=3D copy_si= ze; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1566 bytes_left -=3D cop= y_size; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1567 buffer +=3D copy_si= ze; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1568 } 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1569 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1570 while (bytes_left) { 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1571 addr =3D get_offset= (offset - elfcorelen, &rproc->dump_segments, 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1572 &data_left); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1573 /* EOF check */ 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1574 if (data_left =3D= =3D 0) { 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1575 pr_info("Ramdump c= omplete. %lld bytes read.", offset); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1576 return 0; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1577 } 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1578 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1579 copy_size =3D min_t= (size_t, bytes_left, data_left); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1580 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1581 device_mem =3D rpro= c->ops->da_to_va(rproc, addr, copy_size); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1582 if (!device_mem) { 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1583 pr_err("Unable to = ioremap: addr %lx, size %zd\n", 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1584 addr, copy_size); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1585 return -ENOMEM; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1586 } 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1587 memcpy(buffer, devi= ce_mem, copy_size); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1588 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1589 offset +=3D copy_si= ze; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1590 buffer +=3D copy_si= ze; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1591 bytes_left -=3D cop= y_size; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 @1592 dev_dbg(&rproc->dev= , "Copied %d bytes to userspace\n", 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1593 copy_size); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1594 } 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1595 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1596 return count; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1597 } 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1598 = ab8f873bb90da7 Sibi Sankar 2018-10-17 1599 /** ab8f873bb90da7 Sibi Sankar 2018-10-17 1600 * rproc_coredump_add= _custom_segment() - add custom coredump segment ab8f873bb90da7 Sibi Sankar 2018-10-17 1601 * @rproc: handle of = a remote processor ab8f873bb90da7 Sibi Sankar 2018-10-17 1602 * @da: device addre= ss ab8f873bb90da7 Sibi Sankar 2018-10-17 1603 * @size: size of seg= ment ab8f873bb90da7 Sibi Sankar 2018-10-17 1604 * @dumpfn: custom du= mp function called for each segment during coredump ab8f873bb90da7 Sibi Sankar 2018-10-17 1605 * @priv: private data ab8f873bb90da7 Sibi Sankar 2018-10-17 1606 * ab8f873bb90da7 Sibi Sankar 2018-10-17 1607 * Add device memory = to the list of segments to be included in the coredump ab8f873bb90da7 Sibi Sankar 2018-10-17 1608 * and associate the = segment with the given custom dump function and private ab8f873bb90da7 Sibi Sankar 2018-10-17 1609 * data. ab8f873bb90da7 Sibi Sankar 2018-10-17 1610 * ab8f873bb90da7 Sibi Sankar 2018-10-17 1611 * Return: 0 on succe= ss, negative errno on error. ab8f873bb90da7 Sibi Sankar 2018-10-17 1612 */ ab8f873bb90da7 Sibi Sankar 2018-10-17 1613 int rproc_coredump_ad= d_custom_segment(struct rproc *rproc, ab8f873bb90da7 Sibi Sankar 2018-10-17 1614 dma_addr_t = da, size_t size, ab8f873bb90da7 Sibi Sankar 2018-10-17 1615 void (*dump= fn)(struct rproc *rproc, ab8f873bb90da7 Sibi Sankar 2018-10-17 1616 struct rpr= oc_dump_segment *segment, ab8f873bb90da7 Sibi Sankar 2018-10-17 1617 void *dest= ), ab8f873bb90da7 Sibi Sankar 2018-10-17 1618 void *priv) ab8f873bb90da7 Sibi Sankar 2018-10-17 1619 { ab8f873bb90da7 Sibi Sankar 2018-10-17 1620 struct rproc_dump_se= gment *segment; ab8f873bb90da7 Sibi Sankar 2018-10-17 1621 = ab8f873bb90da7 Sibi Sankar 2018-10-17 1622 segment =3D kzalloc(= sizeof(*segment), GFP_KERNEL); ab8f873bb90da7 Sibi Sankar 2018-10-17 1623 if (!segment) ab8f873bb90da7 Sibi Sankar 2018-10-17 1624 return -ENOMEM; ab8f873bb90da7 Sibi Sankar 2018-10-17 1625 = ab8f873bb90da7 Sibi Sankar 2018-10-17 1626 segment->da =3D da; ab8f873bb90da7 Sibi Sankar 2018-10-17 1627 segment->size =3D si= ze; ab8f873bb90da7 Sibi Sankar 2018-10-17 1628 segment->priv =3D pr= iv; ab8f873bb90da7 Sibi Sankar 2018-10-17 1629 segment->dump =3D du= mpfn; ab8f873bb90da7 Sibi Sankar 2018-10-17 1630 = ab8f873bb90da7 Sibi Sankar 2018-10-17 1631 list_add_tail(&segme= nt->node, &rproc->dump_segments); ab8f873bb90da7 Sibi Sankar 2018-10-17 1632 = ab8f873bb90da7 Sibi Sankar 2018-10-17 1633 return 0; ab8f873bb90da7 Sibi Sankar 2018-10-17 1634 } ab8f873bb90da7 Sibi Sankar 2018-10-17 1635 EXPORT_SYMBOL(rproc_c= oredump_add_custom_segment); ab8f873bb90da7 Sibi Sankar 2018-10-17 1636 = 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1637 /** 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1638 * rproc_coredump() -= perform coredump 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1639 * @rproc: rproc hand= le 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1640 * 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1641 * This function will= generate an ELF header for the registered segments 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1642 * and create a devco= redump device associated with rproc. 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1643 */ 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1644 static void rproc_cor= edump(struct rproc *rproc) 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1645 { 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1646 struct rproc_dump_se= gment *segment; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1647 struct elf32_phdr *p= hdr; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1648 struct elf32_hdr *eh= dr; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1649 size_t header_size; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1650 size_t offset; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1651 void *data; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1652 int phnum =3D 0; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1653 = 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1654 if (list_empty(&rpro= c->dump_segments)) 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1655 return; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1656 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1657 header_size =3D size= of(*ehdr); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1658 list_for_each_entry(= segment, &rproc->dump_segments, node) { 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1659 header_size +=3D si= zeof(*phdr); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1660 = 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1661 phnum++; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1662 } 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1663 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1664 data =3D vmalloc(hea= der_size); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1665 if (!data) 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1666 return; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1667 = 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1668 ehdr =3D data; 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1669 rproc->elfcore =3D d= ata; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1670 = 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1671 memset(ehdr, 0, size= of(*ehdr)); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1672 memcpy(ehdr->e_ident= , ELFMAG, SELFMAG); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1673 ehdr->e_ident[EI_CLA= SS] =3D ELFCLASS32; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1674 ehdr->e_ident[EI_DAT= A] =3D ELFDATA2LSB; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1675 ehdr->e_ident[EI_VER= SION] =3D EV_CURRENT; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1676 ehdr->e_ident[EI_OSA= BI] =3D ELFOSABI_NONE; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1677 ehdr->e_type =3D ET_= CORE; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1678 ehdr->e_machine =3D = EM_NONE; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1679 ehdr->e_version =3D = EV_CURRENT; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1680 ehdr->e_entry =3D rp= roc->bootaddr; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1681 ehdr->e_phoff =3D si= zeof(*ehdr); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1682 ehdr->e_ehsize =3D s= izeof(*ehdr); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1683 ehdr->e_phentsize = =3D sizeof(*phdr); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1684 ehdr->e_phnum =3D ph= num; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1685 = 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1686 phdr =3D data + ehdr= ->e_phoff; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1687 offset =3D ehdr->e_p= hoff + sizeof(*phdr) * ehdr->e_phnum; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1688 list_for_each_entry(= segment, &rproc->dump_segments, node) { 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1689 memset(phdr, 0, siz= eof(*phdr)); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1690 phdr->p_type =3D PT= _LOAD; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1691 phdr->p_offset =3D = offset; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1692 phdr->p_vaddr =3D s= egment->da; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1693 phdr->p_paddr =3D s= egment->da; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1694 phdr->p_filesz =3D = segment->size; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1695 phdr->p_memsz =3D s= egment->size; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1696 phdr->p_flags =3D P= F_R | PF_W | PF_X; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1697 phdr->p_align =3D 0; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1698 = 3952105df4723a Sibi Sankar 2018-10-17 1699 if (segment->dump) { 3952105df4723a Sibi Sankar 2018-10-17 1700 segment->dump(rpro= c, segment, data + offset); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1701 = 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1702 offset +=3D phdr->p= _filesz; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1703 phdr++; 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1704 } 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1705 dev_coredumpm(&rproc= ->dev, NULL, rproc, header_size, GFP_KERNEL, 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1706 rproc_read_dump, r= proc_free_dump); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1707 = 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1708 wait_for_completion(= &rproc->dump_done); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1709 } 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1710 = 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1711 /** 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1712 * rproc_trigger_reco= very() - recover a remoteproc 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1713 * @rproc: the remote= processor 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1714 * 56324d7a229486 Anna, Suman 2016-08-12 1715 * The recovery is do= ne by resetting all the virtio devices, that way all the 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1716 * rpmsg drivers will= be reseted along with the remote processor making the 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1717 * remoteproc functio= nal again. 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1718 * 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1719 * This function can = sleep, so it cannot be called from atomic context. 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1720 */ 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 @1721 int rproc_trigger_rec= overy(struct rproc *rproc) 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1722 { 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1723 const struct firmwar= e *firmware_p; 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1724 struct device *dev = =3D &rproc->dev; 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1725 int ret; 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1726 = 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1727 dev_err(dev, "recove= ring %s\n", rproc->name); 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1728 = 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1729 ret =3D mutex_lock_i= nterruptible(&rproc->lock); 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1730 if (ret) 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1731 return ret; 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1732 = fcd58037f28bf7 Arnaud Pouliquen 2018-04-10 1733 ret =3D rproc_stop(r= proc, true); 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1734 if (ret) 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1735 goto unlock_mutex; ddf711872c9d2b Bjorn Andersson 2016-08-11 1736 = 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1737 /* generate coredump= */ 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1738 rproc_coredump(rproc= ); 1aef2742e1f04a Rishabh Bhatnagar 2020-03-27 1739 reinit_completion(&r= proc->dump_done); 2666ca9197e3d3 Sarangdhar Joshi 2018-01-05 1740 = 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1741 /* load firmware */ 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1742 ret =3D request_firm= ware(&firmware_p, rproc->firmware, dev); 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1743 if (ret < 0) { 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1744 dev_err(dev, "reque= st_firmware failed: %d\n", ret); 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1745 goto unlock_mutex; 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1746 } ddf711872c9d2b Bjorn Andersson 2016-08-11 1747 = 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1748 /* boot the remote p= rocessor up again */ 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1749 ret =3D rproc_start(= rproc, firmware_p); 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1750 = 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1751 release_firmware(fir= mware_p); 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1752 = 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1753 unlock_mutex: 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1754 mutex_unlock(&rproc-= >lock); 7e83cab824a867 Sarangdhar Joshi 2017-05-26 1755 return ret; 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1756 } 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1757 = 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1758 /** 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1759 * rproc_crash_handle= r_work() - handle a crash 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1760 * 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1761 * This function need= s to handle everything related to a crash, like cpu 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1762 * registers and stac= k dump, information to help to debug the fatal error, etc. 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1763 */ 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 @1764 static void rproc_cra= sh_handler_work(struct work_struct *work) 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1765 { 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1766 struct rproc *rproc = =3D container_of(work, struct rproc, crash_handler); 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1767 struct device *dev = =3D &rproc->dev; 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1768 = 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1769 dev_dbg(dev, "enter = %s\n", __func__); 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1770 = 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1771 mutex_lock(&rproc->l= ock); 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1772 = 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1773 if (rproc->state =3D= =3D RPROC_CRASHED || rproc->state =3D=3D RPROC_OFFLINE) { 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1774 /* handle only the = first crash detected */ 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1775 mutex_unlock(&rproc= ->lock); 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1776 return; 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1777 } 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1778 = 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1779 rproc->state =3D RPR= OC_CRASHED; 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1780 dev_err(dev, "handli= ng crash #%u in %s\n", ++rproc->crash_cnt, 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1781 rproc->name); 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1782 = 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1783 mutex_unlock(&rproc-= >lock); 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1784 = 2e37abb89a2ef1 Fernando Guzman Lugo 2012-09-18 1785 if (!rproc->recovery= _disabled) 70b85ef83ce352 Fernando Guzman Lugo 2012-08-30 1786 rproc_trigger_recov= ery(rproc); 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1787 } 8afd519c3470f6 Fernando Guzman Lugo 2012-08-30 1788 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1789 /** 1b0ef9068f053d Suman Anna 2017-07-20 1790 * rproc_boot() - boo= t a remote processor 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1791 * @rproc: handle of = a remote processor 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1792 * 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1793 * Boot a remote proc= essor (i.e. load its firmware, power it on, ...). 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1794 * 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1795 * If the remote proc= essor is already powered on, this function immediately 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1796 * returns (successfu= lly). 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1797 * 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1798 * Returns 0 on succe= ss, and an appropriate error value otherwise. 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1799 */ 1b0ef9068f053d Suman Anna 2017-07-20 1800 int rproc_boot(struct= rproc *rproc) 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1801 { 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1802 const struct firmwar= e *firmware_p; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1803 struct device *dev; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1804 int ret; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1805 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1806 if (!rproc) { 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1807 pr_err("invalid rpr= oc handle\n"); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1808 return -EINVAL; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1809 } 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1810 = b5ab5e24e960b9 Ohad Ben-Cohen 2012-05-30 1811 dev =3D &rproc->dev; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1812 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1813 ret =3D mutex_lock_i= nterruptible(&rproc->lock); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1814 if (ret) { 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1815 dev_err(dev, "can't= lock rproc %s: %d\n", rproc->name, ret); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1816 return ret; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1817 } 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1818 = 2099c77d4af7d1 Sarangdhar Joshi 2017-01-23 1819 if (rproc->state =3D= =3D RPROC_DELETED) { 2099c77d4af7d1 Sarangdhar Joshi 2017-01-23 1820 ret =3D -ENODEV; 2099c77d4af7d1 Sarangdhar Joshi 2017-01-23 1821 dev_err(dev, "can't= boot deleted rproc %s\n", rproc->name); 2099c77d4af7d1 Sarangdhar Joshi 2017-01-23 1822 goto unlock_mutex; 2099c77d4af7d1 Sarangdhar Joshi 2017-01-23 1823 } 2099c77d4af7d1 Sarangdhar Joshi 2017-01-23 1824 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1825 /* skip the boot pro= cess if rproc is already powered up */ 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1826 if (atomic_inc_retur= n(&rproc->power) > 1) { 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1827 ret =3D 0; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1828 goto unlock_mutex; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1829 } 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1830 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1831 dev_info(dev, "power= ing up %s\n", rproc->name); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1832 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1833 /* load firmware */ 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1834 ret =3D request_firm= ware(&firmware_p, rproc->firmware, dev); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1835 if (ret < 0) { 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1836 dev_err(dev, "reque= st_firmware failed: %d\n", ret); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1837 goto downref_rproc; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1838 } 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1839 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1840 ret =3D rproc_fw_boo= t(rproc, firmware_p); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1841 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1842 release_firmware(fir= mware_p); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1843 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1844 downref_rproc: fbb6aacb078285 Bjorn Andersson 2016-10-02 1845 if (ret) 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1846 atomic_dec(&rproc->= power); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1847 unlock_mutex: 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1848 mutex_unlock(&rproc-= >lock); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1849 return ret; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1850 } 400e64df6b237e Ohad Ben-Cohen 2011-10-20 @1851 EXPORT_SYMBOL(rproc_b= oot); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1852 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1853 /** 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1854 * rproc_shutdown() -= power off the remote processor 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1855 * @rproc: the remote= processor 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1856 * 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1857 * Power off a remote= processor (previously booted with rproc_boot()). 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1858 * 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1859 * In case @rproc is = still being used by an additional user(s), then 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1860 * this function will= just decrement the power refcount and exit, 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1861 * without really pow= ering off the device. 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1862 * 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1863 * Every call to rpro= c_boot() must (eventually) be accompanied by a call 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1864 * to rproc_shutdown(= ). Calling rproc_shutdown() redundantly is a bug. 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1865 * 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1866 * Notes: 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1867 * - we're not decrem= enting the rproc's refcount, only the power refcount. 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1868 * which means that= the @rproc handle stays valid even after rproc_shutdown() 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1869 * returns, and use= rs can still use it with a subsequent rproc_boot(), if 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1870 * needed. 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1871 */ 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1872 void rproc_shutdown(s= truct rproc *rproc) 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1873 { b5ab5e24e960b9 Ohad Ben-Cohen 2012-05-30 1874 struct device *dev = =3D &rproc->dev; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1875 int ret; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1876 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1877 ret =3D mutex_lock_i= nterruptible(&rproc->lock); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1878 if (ret) { 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1879 dev_err(dev, "can't= lock rproc %s: %d\n", rproc->name, ret); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1880 return; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1881 } 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1882 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1883 /* if the remote pro= c is still needed, bail out */ 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1884 if (!atomic_dec_and_= test(&rproc->power)) 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1885 goto out; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1886 = fcd58037f28bf7 Arnaud Pouliquen 2018-04-10 1887 ret =3D rproc_stop(r= proc, false); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1888 if (ret) { 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1889 atomic_inc(&rproc->= power); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1890 goto out; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1891 } 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1892 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1893 /* clean up all acqu= ired resources */ 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1894 rproc_resource_clean= up(rproc); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1895 = 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1896 rproc_disable_iommu(= rproc); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1897 = 988d204cdaf604 Bjorn Andersson 2016-08-11 1898 /* Free the copy of = the resource table */ a0c10687ec9506 Bjorn Andersson 2016-12-30 1899 kfree(rproc->cached_= table); a0c10687ec9506 Bjorn Andersson 2016-12-30 1900 rproc->cached_table = =3D NULL; 988d204cdaf604 Bjorn Andersson 2016-08-11 1901 rproc->table_ptr =3D= NULL; 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1902 out: 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1903 mutex_unlock(&rproc-= >lock); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1904 } 400e64df6b237e Ohad Ben-Cohen 2011-10-20 @1905 EXPORT_SYMBOL(rproc_s= hutdown); 400e64df6b237e Ohad Ben-Cohen 2011-10-20 1906 = fec47d863587c2 Dave Gerlach 2015-05-22 1907 /** fec47d863587c2 Dave Gerlach 2015-05-22 1908 * rproc_get_by_phand= le() - find a remote processor by phandle fec47d863587c2 Dave Gerlach 2015-05-22 1909 * @phandle: phandle = to the rproc fec47d863587c2 Dave Gerlach 2015-05-22 1910 * fec47d863587c2 Dave Gerlach 2015-05-22 1911 * Finds an rproc han= dle using the remote processor's phandle, and then fec47d863587c2 Dave Gerlach 2015-05-22 1912 * return a handle to= the rproc. fec47d863587c2 Dave Gerlach 2015-05-22 1913 * fec47d863587c2 Dave Gerlach 2015-05-22 1914 * This function incr= ements the remote processor's refcount, so always fec47d863587c2 Dave Gerlach 2015-05-22 1915 * use rproc_put() to= decrement it back once rproc isn't needed anymore. fec47d863587c2 Dave Gerlach 2015-05-22 1916 * fec47d863587c2 Dave Gerlach 2015-05-22 1917 * Returns the rproc = handle on success, and NULL on failure. fec47d863587c2 Dave Gerlach 2015-05-22 1918 */ 8de3dbd0895beb Ohad Ben-Cohen 2015-06-18 1919 #ifdef CONFIG_OF fec47d863587c2 Dave Gerlach 2015-05-22 1920 struct rproc *rproc_g= et_by_phandle(phandle phandle) fec47d863587c2 Dave Gerlach 2015-05-22 1921 { fec47d863587c2 Dave Gerlach 2015-05-22 1922 struct rproc *rproc = =3D NULL, *r; fec47d863587c2 Dave Gerlach 2015-05-22 1923 struct device_node *= np; fec47d863587c2 Dave Gerlach 2015-05-22 1924 = fec47d863587c2 Dave Gerlach 2015-05-22 1925 np =3D of_find_node_= by_phandle(phandle); fec47d863587c2 Dave Gerlach 2015-05-22 1926 if (!np) fec47d863587c2 Dave Gerlach 2015-05-22 1927 return NULL; fec47d863587c2 Dave Gerlach 2015-05-22 1928 = fec47d863587c2 Dave Gerlach 2015-05-22 1929 mutex_lock(&rproc_li= st_mutex); fec47d863587c2 Dave Gerlach 2015-05-22 1930 list_for_each_entry(= r, &rproc_list, node) { fec47d863587c2 Dave Gerlach 2015-05-22 1931 if (r->dev.parent &= & r->dev.parent->of_node =3D=3D np) { fbb6aacb078285 Bjorn Andersson 2016-10-02 1932 /* prevent underly= ing implementation from being removed */ fbb6aacb078285 Bjorn Andersson 2016-10-02 1933 if (!try_module_ge= t(r->dev.parent->driver->owner)) { fbb6aacb078285 Bjorn Andersson 2016-10-02 1934 dev_err(&r->dev, = "can't get owner\n"); fbb6aacb078285 Bjorn Andersson 2016-10-02 1935 break; fbb6aacb078285 Bjorn Andersson 2016-10-02 1936 } fbb6aacb078285 Bjorn Andersson 2016-10-02 1937 = fec47d863587c2 Dave Gerlach 2015-05-22 1938 rproc =3D r; fec47d863587c2 Dave Gerlach 2015-05-22 1939 get_device(&rproc-= >dev); fec47d863587c2 Dave Gerlach 2015-05-22 1940 break; fec47d863587c2 Dave Gerlach 2015-05-22 1941 } fec47d863587c2 Dave Gerlach 2015-05-22 1942 } fec47d863587c2 Dave Gerlach 2015-05-22 1943 mutex_unlock(&rproc_= list_mutex); fec47d863587c2 Dave Gerlach 2015-05-22 1944 = fec47d863587c2 Dave Gerlach 2015-05-22 1945 of_node_put(np); fec47d863587c2 Dave Gerlach 2015-05-22 1946 = fec47d863587c2 Dave Gerlach 2015-05-22 1947 return rproc; fec47d863587c2 Dave Gerlach 2015-05-22 1948 } 8de3dbd0895beb Ohad Ben-Cohen 2015-06-18 1949 #else 8de3dbd0895beb Ohad Ben-Cohen 2015-06-18 1950 struct rproc *rproc_g= et_by_phandle(phandle phandle) 8de3dbd0895beb Ohad Ben-Cohen 2015-06-18 1951 { 8de3dbd0895beb Ohad Ben-Cohen 2015-06-18 1952 return NULL; 8de3dbd0895beb Ohad Ben-Cohen 2015-06-18 1953 } 8de3dbd0895beb Ohad Ben-Cohen 2015-06-18 1954 #endif fec47d863587c2 Dave Gerlach 2015-05-22 @1955 EXPORT_SYMBOL(rproc_g= et_by_phandle); fec47d863587c2 Dave Gerlach 2015-05-22 1956 = :::::: The code at line 1764 was first introduced by commit :::::: 8afd519c3470f685f964deebd61aa51d83cde90a remoteproc: add rproc_repor= t_crash function to notify rproc crashes :::::: TO: Fernando Guzman Lugo :::::: CC: Ohad Ben-Cohen --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org --===============4932165989600482863== Content-Type: application/gzip MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="config.gz" 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 3ra4qpI6ljIOpd//A9lZxcr+5AEA --===============4932165989600482863==--