Messages in this thread | | | Date | Fri, 16 Jul 2021 06:04:02 +0800 | From | kernel test robot <> | Subject | [linux-stable-rc:linux-4.14.y 9785/9999] arch/powerpc/kernel/hw_breakpoint.c:106:6: error: no previous prototype for 'arch_unregister_hw_breakpoint' |
| |
Hi Frédéric,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.14.y head: 4416c389d63e76d897a5788f6145f08522cf58b4 commit: a5ef8f46a2ab471eed32a948185a05eac9613b13 [9785/9999] gcc-common.h: Update for GCC 10 config: powerpc64-randconfig-r023-20210715 (attached as .config) compiler: powerpc-linux-gcc (GCC) 10.3.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://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/commit/?id=a5ef8f46a2ab471eed32a948185a05eac9613b13 git remote add linux-stable-rc https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git git fetch --no-tags linux-stable-rc linux-4.14.y git checkout a5ef8f46a2ab471eed32a948185a05eac9613b13 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-10.3.0 make.cross ARCH=powerpc64
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 >>):
In file included from include/linux/workqueue.h:9, from include/linux/srcu.h:34, from include/linux/notifier.h:16, from include/linux/memory_hotplug.h:7, from include/linux/mmzone.h:782, from include/linux/gfp.h:6, from include/linux/idr.h:16, from include/linux/kernfs.h:14, from include/linux/sysfs.h:16, from include/linux/kobject.h:21, from include/linux/device.h:17, from arch/powerpc/include/asm/perf_event_server.h:14, from arch/powerpc/include/asm/perf_event.h:18, from include/linux/perf_event.h:24, from include/linux/hw_breakpoint.h:5, from arch/powerpc/kernel/hw_breakpoint.c:25: include/linux/timer.h: In function 'timer_setup': include/linux/timer.h:179:23: error: cast between incompatible function types from 'void (*)(struct timer_list *)' to 'void (*)(long unsigned int)' [-Werror=cast-function-type] 179 | __setup_timer(timer, (TIMER_FUNC_TYPE)callback, | ^ include/linux/timer.h:144:25: note: in definition of macro '__setup_timer' 144 | (_timer)->function = (_fn); \ | ^~~ arch/powerpc/kernel/hw_breakpoint.c: At top level: >> arch/powerpc/kernel/hw_breakpoint.c:106:6: error: no previous prototype for 'arch_unregister_hw_breakpoint' [-Werror=missing-prototypes] 106 | void arch_unregister_hw_breakpoint(struct perf_event *bp) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> arch/powerpc/kernel/hw_breakpoint.c:209:5: error: no previous prototype for 'hw_breakpoint_handler' [-Werror=missing-prototypes] 209 | int hw_breakpoint_handler(struct die_args *args) | ^~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors -- In file included from include/linux/workqueue.h:9, from include/linux/srcu.h:34, from include/linux/notifier.h:16, from include/linux/memory_hotplug.h:7, from include/linux/mmzone.h:782, from include/linux/gfp.h:6, from include/linux/mm.h:10, from include/linux/memblock.h:18, from arch/powerpc/kernel/btext.c:11: include/linux/timer.h: In function 'timer_setup': include/linux/timer.h:179:23: error: cast between incompatible function types from 'void (*)(struct timer_list *)' to 'void (*)(long unsigned int)' [-Werror=cast-function-type] 179 | __setup_timer(timer, (TIMER_FUNC_TYPE)callback, | ^ include/linux/timer.h:144:25: note: in definition of macro '__setup_timer' 144 | (_timer)->function = (_fn); \ | ^~~ arch/powerpc/kernel/btext.c: At top level: >> arch/powerpc/kernel/btext.c:173:5: error: no previous prototype for 'btext_initialize' [-Werror=missing-prototypes] 173 | int btext_initialize(struct device_node *np) | ^~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors -- In file included from include/linux/workqueue.h:9, from include/linux/srcu.h:34, from include/linux/notifier.h:16, from arch/powerpc/include/asm/uprobes.h:25, from include/linux/uprobes.h:62, from include/linux/mm_types.h:14, from include/linux/fs.h:22, from include/linux/debugfs.h:18, from arch/powerpc/mm/dump_hashpagetable.c:16: include/linux/timer.h: In function 'timer_setup': include/linux/timer.h:179:23: error: cast between incompatible function types from 'void (*)(struct timer_list *)' to 'void (*)(long unsigned int)' [-Werror=cast-function-type] 179 | __setup_timer(timer, (TIMER_FUNC_TYPE)callback, | ^ include/linux/timer.h:144:25: note: in definition of macro '__setup_timer' 144 | (_timer)->function = (_fn); \ | ^~~ In file included from arch/powerpc/mm/dump_hashpagetable.c:27: arch/powerpc/include/asm/plpar_wrappers.h: In function 'get_cede_latency_hint': >> arch/powerpc/include/asm/plpar_wrappers.h:27:9: error: implicit declaration of function 'get_lppaca'; did you mean 'get_page'? [-Werror=implicit-function-declaration] 27 | return get_lppaca()->cede_latency_hint; | ^~~~~~~~~~ | get_page >> arch/powerpc/include/asm/plpar_wrappers.h:27:21: error: invalid type argument of '->' (have 'int') 27 | return get_lppaca()->cede_latency_hint; | ^~ arch/powerpc/include/asm/plpar_wrappers.h: In function 'set_cede_latency_hint': arch/powerpc/include/asm/plpar_wrappers.h:32:14: error: invalid type argument of '->' (have 'int') 32 | get_lppaca()->cede_latency_hint = latency_hint; | ^~ arch/powerpc/include/asm/plpar_wrappers.h: In function 'extended_cede_processor': >> arch/powerpc/include/asm/plpar_wrappers.h:51:4: error: implicit declaration of function '__hard_irq_enable'; did you mean 'may_hard_irq_enable'? [-Werror=implicit-function-declaration] 51 | __hard_irq_enable(); | ^~~~~~~~~~~~~~~~~ | may_hard_irq_enable arch/powerpc/include/asm/plpar_wrappers.h: In function 'vpa_call': >> arch/powerpc/include/asm/plpar_wrappers.h:62:16: error: left shift count >= width of type [-Werror=shift-count-overflow] 62 | flags = flags << H_VPA_FUNC_SHIFT; | ^~ In file included from arch/powerpc/include/asm/plpar_wrappers.h:8, from arch/powerpc/mm/dump_hashpagetable.c:27: arch/powerpc/include/asm/plpar_wrappers.h: In function 'plpar_pte_read_4': >> arch/powerpc/include/asm/hvcall.h:120:23: error: left shift count >= width of type [-Werror=shift-count-overflow] 120 | #define H_READ_4 (1UL<<(63-26)) /* Return 4 PTEs */ | ^~ arch/powerpc/include/asm/plpar_wrappers.h:183:44: note: in expansion of macro 'H_READ_4' 183 | rc = plpar_hcall9(H_READ, retbuf, flags | H_READ_4, ptex); | ^~~~~~~~ arch/powerpc/include/asm/plpar_wrappers.h: In function 'plpar_pte_read_4_raw': >> arch/powerpc/include/asm/hvcall.h:120:23: error: left shift count >= width of type [-Werror=shift-count-overflow] 120 | #define H_READ_4 (1UL<<(63-26)) /* Return 4 PTEs */ | ^~ arch/powerpc/include/asm/plpar_wrappers.h:201:48: note: in expansion of macro 'H_READ_4' 201 | rc = plpar_hcall9_raw(H_READ, retbuf, flags | H_READ_4, ptex); | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c: At top level: >> arch/powerpc/mm/dump_hashpagetable.c:69:13: error: 'SLB_VSID_B' undeclared here (not in a function) 69 | .mask = SLB_VSID_B, | ^~~~~~~~~~ >> arch/powerpc/mm/dump_hashpagetable.c:70:13: error: 'SLB_VSID_B_256M' undeclared here (not in a function) 70 | .val = SLB_VSID_B_256M, | ^~~~~~~~~~~~~~~ >> arch/powerpc/mm/dump_hashpagetable.c:74:11: error: 'HPTE_V_SECONDARY' undeclared here (not in a function) 74 | .mask = HPTE_V_SECONDARY, | ^~~~~~~~~~~~~~~~ >> arch/powerpc/mm/dump_hashpagetable.c:79:11: error: 'HPTE_V_VALID' undeclared here (not in a function) 79 | .mask = HPTE_V_VALID, | ^~~~~~~~~~~~ >> arch/powerpc/mm/dump_hashpagetable.c:84:11: error: 'HPTE_V_BOLTED' undeclared here (not in a function) 84 | .mask = HPTE_V_BOLTED, | ^~~~~~~~~~~~~ >> arch/powerpc/mm/dump_hashpagetable.c:93:11: error: 'HPTE_R_PP0' undeclared here (not in a function) 93 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ^~~~~~~~~~ >> arch/powerpc/mm/dump_hashpagetable.c:93:24: error: 'HPTE_R_PP' undeclared here (not in a function) 93 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ^~~~~~~~~ >> arch/powerpc/mm/dump_hashpagetable.c:93:22: error: invalid operands to binary | (have 'const struct flag_info *' and 'const struct flag_info *') 93 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ~~~~~~~~~~ ^ | | | | | const struct flag_info * | const struct flag_info * >> arch/powerpc/mm/dump_hashpagetable.c:93:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 93 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ^~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:93:11: note: (near initialization for 'r_flag_array[0].mask') >> arch/powerpc/mm/dump_hashpagetable.c:93:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:93:11: note: (near initialization for 'r_flag_array[0].mask') arch/powerpc/mm/dump_hashpagetable.c:97:22: error: invalid operands to binary | (have 'const struct flag_info *' and 'const struct flag_info *') 97 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ~~~~~~~~~~ ^ | | | | | const struct flag_info * | const struct flag_info * arch/powerpc/mm/dump_hashpagetable.c:97:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 97 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ^~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:97:11: note: (near initialization for 'r_flag_array[1].mask') arch/powerpc/mm/dump_hashpagetable.c:97:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:97:11: note: (near initialization for 'r_flag_array[1].mask') arch/powerpc/mm/dump_hashpagetable.c:101:22: error: invalid operands to binary | (have 'const struct flag_info *' and 'const struct flag_info *') 101 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ~~~~~~~~~~ ^ | | | | | const struct flag_info * | const struct flag_info * arch/powerpc/mm/dump_hashpagetable.c:101:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 101 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ^~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:101:11: note: (near initialization for 'r_flag_array[2].mask') arch/powerpc/mm/dump_hashpagetable.c:101:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:101:11: note: (near initialization for 'r_flag_array[2].mask') arch/powerpc/mm/dump_hashpagetable.c:105:22: error: invalid operands to binary | (have 'const struct flag_info *' and 'const struct flag_info *') 105 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ~~~~~~~~~~ ^ | | | | | const struct flag_info * | const struct flag_info * arch/powerpc/mm/dump_hashpagetable.c:105:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 105 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ^~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:105:11: note: (near initialization for 'r_flag_array[3].mask') arch/powerpc/mm/dump_hashpagetable.c:105:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:105:11: note: (near initialization for 'r_flag_array[3].mask') arch/powerpc/mm/dump_hashpagetable.c:109:22: error: invalid operands to binary | (have 'const struct flag_info *' and 'const struct flag_info *') 109 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ~~~~~~~~~~ ^ | | | | | const struct flag_info * | const struct flag_info * arch/powerpc/mm/dump_hashpagetable.c:109:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 109 | .mask = HPTE_R_PP0 | HPTE_R_PP, | ^~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:109:11: note: (near initialization for 'r_flag_array[4].mask') arch/powerpc/mm/dump_hashpagetable.c:109:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:109:11: note: (near initialization for 'r_flag_array[4].mask') >> arch/powerpc/mm/dump_hashpagetable.c:110:10: error: 'PP_RXXX' undeclared here (not in a function); did you mean 'PP_RXRX'? 110 | .val = PP_RXXX, | ^~~~~~~ | PP_RXRX arch/powerpc/mm/dump_hashpagetable.c:110:10: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:110:10: note: (near initialization for 'r_flag_array[4].val') arch/powerpc/mm/dump_hashpagetable.c:110:10: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:110:10: note: (near initialization for 'r_flag_array[4].val') >> arch/powerpc/mm/dump_hashpagetable.c:113:11: error: 'HPTE_R_KEY_HI' undeclared here (not in a function) 113 | .mask = HPTE_R_KEY_HI | HPTE_R_KEY_LO, | ^~~~~~~~~~~~~ >> arch/powerpc/mm/dump_hashpagetable.c:113:27: error: 'HPTE_R_KEY_LO' undeclared here (not in a function) 113 | .mask = HPTE_R_KEY_HI | HPTE_R_KEY_LO, | ^~~~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:113:25: error: invalid operands to binary | (have 'const struct flag_info *' and 'const struct flag_info *') 113 | .mask = HPTE_R_KEY_HI | HPTE_R_KEY_LO, | ~~~~~~~~~~~~~ ^ | | | | | const struct flag_info * | const struct flag_info * arch/powerpc/mm/dump_hashpagetable.c:113:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 113 | .mask = HPTE_R_KEY_HI | HPTE_R_KEY_LO, | ^~~~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:113:11: note: (near initialization for 'r_flag_array[5].mask') arch/powerpc/mm/dump_hashpagetable.c:113:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:113:11: note: (near initialization for 'r_flag_array[5].mask') arch/powerpc/mm/dump_hashpagetable.c:114:24: error: invalid operands to binary | (have 'const struct flag_info *' and 'const struct flag_info *') 114 | .val = HPTE_R_KEY_HI | HPTE_R_KEY_LO, | ~~~~~~~~~~~~~ ^ | | | | | const struct flag_info * | const struct flag_info * arch/powerpc/mm/dump_hashpagetable.c:114:10: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 114 | .val = HPTE_R_KEY_HI | HPTE_R_KEY_LO, | ^~~~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:114:10: note: (near initialization for 'r_flag_array[5].val') arch/powerpc/mm/dump_hashpagetable.c:114:10: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:114:10: note: (near initialization for 'r_flag_array[5].val') >> arch/powerpc/mm/dump_hashpagetable.c:119:11: error: 'HPTE_R_R' undeclared here (not in a function) 119 | .mask = HPTE_R_R, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:119:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:119:11: note: (near initialization for 'r_flag_array[6].mask') arch/powerpc/mm/dump_hashpagetable.c:119:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:119:11: note: (near initialization for 'r_flag_array[6].mask') arch/powerpc/mm/dump_hashpagetable.c:120:10: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 120 | .val = HPTE_R_R, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:120:10: note: (near initialization for 'r_flag_array[6].val') arch/powerpc/mm/dump_hashpagetable.c:120:10: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:120:10: note: (near initialization for 'r_flag_array[6].val') arch/powerpc/mm/dump_hashpagetable.c:124:11: error: 'HPTE_R_C' undeclared here (not in a function) 124 | .mask = HPTE_R_C, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:124:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:124:11: note: (near initialization for 'r_flag_array[7].mask') arch/powerpc/mm/dump_hashpagetable.c:124:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:124:11: note: (near initialization for 'r_flag_array[7].mask') arch/powerpc/mm/dump_hashpagetable.c:125:10: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 125 | .val = HPTE_R_C, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:125:10: note: (near initialization for 'r_flag_array[7].val') arch/powerpc/mm/dump_hashpagetable.c:125:10: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:125:10: note: (near initialization for 'r_flag_array[7].val') arch/powerpc/mm/dump_hashpagetable.c:129:11: error: 'HPTE_R_N' undeclared here (not in a function) 129 | .mask = HPTE_R_N, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:129:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:129:11: note: (near initialization for 'r_flag_array[8].mask') arch/powerpc/mm/dump_hashpagetable.c:129:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:129:11: note: (near initialization for 'r_flag_array[8].mask') arch/powerpc/mm/dump_hashpagetable.c:130:10: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 130 | .val = HPTE_R_N, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:130:10: note: (near initialization for 'r_flag_array[8].val') arch/powerpc/mm/dump_hashpagetable.c:130:10: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:130:10: note: (near initialization for 'r_flag_array[8].val') arch/powerpc/mm/dump_hashpagetable.c:133:11: error: 'HPTE_R_WIMG' undeclared here (not in a function) 133 | .mask = HPTE_R_WIMG, | ^~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:133:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:133:11: note: (near initialization for 'r_flag_array[9].mask') arch/powerpc/mm/dump_hashpagetable.c:133:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:133:11: note: (near initialization for 'r_flag_array[9].mask') arch/powerpc/mm/dump_hashpagetable.c:134:10: error: 'HPTE_R_W' undeclared here (not in a function) 134 | .val = HPTE_R_W, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:134:10: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:134:10: note: (near initialization for 'r_flag_array[9].val') arch/powerpc/mm/dump_hashpagetable.c:134:10: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:134:10: note: (near initialization for 'r_flag_array[9].val') arch/powerpc/mm/dump_hashpagetable.c:137:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 137 | .mask = HPTE_R_WIMG, | ^~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:137:11: note: (near initialization for 'r_flag_array[10].mask') arch/powerpc/mm/dump_hashpagetable.c:137:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:137:11: note: (near initialization for 'r_flag_array[10].mask') arch/powerpc/mm/dump_hashpagetable.c:138:10: error: 'HPTE_R_I' undeclared here (not in a function) 138 | .val = HPTE_R_I, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:138:10: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:138:10: note: (near initialization for 'r_flag_array[10].val') arch/powerpc/mm/dump_hashpagetable.c:138:10: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:138:10: note: (near initialization for 'r_flag_array[10].val') arch/powerpc/mm/dump_hashpagetable.c:141:11: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] 141 | .mask = HPTE_R_WIMG, | ^~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:141:11: note: (near initialization for 'r_flag_array[11].mask') arch/powerpc/mm/dump_hashpagetable.c:141:11: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:141:11: note: (near initialization for 'r_flag_array[11].mask') arch/powerpc/mm/dump_hashpagetable.c:142:10: error: 'HPTE_R_G' undeclared here (not in a function) 142 | .val = HPTE_R_G, | ^~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:142:10: error: initialization of 'long long unsigned int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:142:10: note: (near initialization for 'r_flag_array[11].val') arch/powerpc/mm/dump_hashpagetable.c:142:10: error: initializer element is not constant arch/powerpc/mm/dump_hashpagetable.c:142:10: note: (near initialization for 'r_flag_array[11].val') arch/powerpc/mm/dump_hashpagetable.c: In function 'dump_hpte_info': arch/powerpc/mm/dump_hashpagetable.c:199:37: error: implicit declaration of function 'HPTE_V_AVPN_VAL' [-Werror=implicit-function-declaration] 199 | seq_printf(st->seq, "AVPN:%llx\t", HPTE_V_AVPN_VAL(v)); | ^~~~~~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:199:31: error: format '%llx' expects argument of type 'long long unsigned int', but argument 3 has type 'int' [-Werror=format=] 199 | seq_printf(st->seq, "AVPN:%llx\t", HPTE_V_AVPN_VAL(v)); | ~~~^ ~~~~~~~~~~~~~~~~~~ | | | | | int | long long unsigned int | %x arch/powerpc/mm/dump_hashpagetable.c: In function 'native_find': arch/powerpc/mm/dump_hashpagetable.c:217:17: error: 'mmu_kernel_ssize' undeclared (first use in this function) 217 | int i, ssize = mmu_kernel_ssize; | ^~~~~~~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:217:17: note: each undeclared identifier is reported only once for each function it appears in arch/powerpc/mm/dump_hashpagetable.c:217:17: error: initialization of 'int' from 'const struct flag_info *' makes integer from pointer without a cast [-Werror=int-conversion] arch/powerpc/mm/dump_hashpagetable.c:218:24: error: 'mmu_psize_defs' undeclared (first use in this function) 218 | unsigned long shift = mmu_psize_defs[psize].shift; | ^~~~~~~~~~~~~~ arch/powerpc/mm/dump_hashpagetable.c:221:9: error: implicit declaration of function 'get_kernel_vsid'; did you mean 'get_kernel_page'? [-Werror=implicit-function-declaration] 221 | vsid = get_kernel_vsid(ea, ssize); ..
vim +/arch_unregister_hw_breakpoint +106 arch/powerpc/kernel/hw_breakpoint.c
5aae8a53708025 K.Prasad 2010-06-15 101 5aae8a53708025 K.Prasad 2010-06-15 102 /* 5aae8a53708025 K.Prasad 2010-06-15 103 * Perform cleanup of arch-specific counters during unregistration 5aae8a53708025 K.Prasad 2010-06-15 104 * of the perf-event 5aae8a53708025 K.Prasad 2010-06-15 105 */ 5aae8a53708025 K.Prasad 2010-06-15 @106 void arch_unregister_hw_breakpoint(struct perf_event *bp) 5aae8a53708025 K.Prasad 2010-06-15 107 { 5aae8a53708025 K.Prasad 2010-06-15 108 /* 5aae8a53708025 K.Prasad 2010-06-15 109 * If the breakpoint is unregistered between a hw_breakpoint_handler() 5aae8a53708025 K.Prasad 2010-06-15 110 * and the single_step_dabr_instruction(), then cleanup the breakpoint 5aae8a53708025 K.Prasad 2010-06-15 111 * restoration variables to prevent dangling pointers. fb822e6076d972 Ravi Bangoria 2016-03-02 112 * FIXME, this should not be using bp->ctx at all! Sayeth peterz. 5aae8a53708025 K.Prasad 2010-06-15 113 */ fb822e6076d972 Ravi Bangoria 2016-03-02 114 if (bp->ctx && bp->ctx->task && bp->ctx->task != ((void *)-1L)) 5aae8a53708025 K.Prasad 2010-06-15 115 bp->ctx->task->thread.last_hit_ubp = NULL; 5aae8a53708025 K.Prasad 2010-06-15 116 } 5aae8a53708025 K.Prasad 2010-06-15 117 5aae8a53708025 K.Prasad 2010-06-15 118 /* 5aae8a53708025 K.Prasad 2010-06-15 119 * Check for virtual address in kernel space. 5aae8a53708025 K.Prasad 2010-06-15 120 */ 5aae8a53708025 K.Prasad 2010-06-15 121 int arch_check_bp_in_kernelspace(struct perf_event *bp) 5aae8a53708025 K.Prasad 2010-06-15 122 { 5aae8a53708025 K.Prasad 2010-06-15 123 struct arch_hw_breakpoint *info = counter_arch_bp(bp); 5aae8a53708025 K.Prasad 2010-06-15 124 5aae8a53708025 K.Prasad 2010-06-15 125 return is_kernel_addr(info->address); 5aae8a53708025 K.Prasad 2010-06-15 126 } 5aae8a53708025 K.Prasad 2010-06-15 127 5aae8a53708025 K.Prasad 2010-06-15 128 int arch_bp_generic_fields(int type, int *gen_bp_type) 5aae8a53708025 K.Prasad 2010-06-15 129 { 9422de3e953d0e Michael Neuling 2012-12-20 130 *gen_bp_type = 0; 9422de3e953d0e Michael Neuling 2012-12-20 131 if (type & HW_BRK_TYPE_READ) 9422de3e953d0e Michael Neuling 2012-12-20 132 *gen_bp_type |= HW_BREAKPOINT_R; 9422de3e953d0e Michael Neuling 2012-12-20 133 if (type & HW_BRK_TYPE_WRITE) 9422de3e953d0e Michael Neuling 2012-12-20 134 *gen_bp_type |= HW_BREAKPOINT_W; 9422de3e953d0e Michael Neuling 2012-12-20 135 if (*gen_bp_type == 0) 5aae8a53708025 K.Prasad 2010-06-15 136 return -EINVAL; 5aae8a53708025 K.Prasad 2010-06-15 137 return 0; 5aae8a53708025 K.Prasad 2010-06-15 138 } 5aae8a53708025 K.Prasad 2010-06-15 139 5aae8a53708025 K.Prasad 2010-06-15 140 /* 5aae8a53708025 K.Prasad 2010-06-15 141 * Validate the arch-specific HW Breakpoint register settings 5aae8a53708025 K.Prasad 2010-06-15 142 */ 5aae8a53708025 K.Prasad 2010-06-15 143 int arch_validate_hwbkpt_settings(struct perf_event *bp) 5aae8a53708025 K.Prasad 2010-06-15 144 { 4ae7ebe9522a9e Michael Neuling 2013-01-24 145 int ret = -EINVAL, length_max; 5aae8a53708025 K.Prasad 2010-06-15 146 struct arch_hw_breakpoint *info = counter_arch_bp(bp); 5aae8a53708025 K.Prasad 2010-06-15 147 5aae8a53708025 K.Prasad 2010-06-15 148 if (!bp) 5aae8a53708025 K.Prasad 2010-06-15 149 return ret; 5aae8a53708025 K.Prasad 2010-06-15 150 9422de3e953d0e Michael Neuling 2012-12-20 151 info->type = HW_BRK_TYPE_TRANSLATE; 9422de3e953d0e Michael Neuling 2012-12-20 152 if (bp->attr.bp_type & HW_BREAKPOINT_R) 9422de3e953d0e Michael Neuling 2012-12-20 153 info->type |= HW_BRK_TYPE_READ; 9422de3e953d0e Michael Neuling 2012-12-20 154 if (bp->attr.bp_type & HW_BREAKPOINT_W) 9422de3e953d0e Michael Neuling 2012-12-20 155 info->type |= HW_BRK_TYPE_WRITE; 9422de3e953d0e Michael Neuling 2012-12-20 156 if (info->type == HW_BRK_TYPE_TRANSLATE) 9422de3e953d0e Michael Neuling 2012-12-20 157 /* must set alteast read or write */ 5aae8a53708025 K.Prasad 2010-06-15 158 return ret; 9422de3e953d0e Michael Neuling 2012-12-20 159 if (!(bp->attr.exclude_user)) 9422de3e953d0e Michael Neuling 2012-12-20 160 info->type |= HW_BRK_TYPE_USER; 9422de3e953d0e Michael Neuling 2012-12-20 161 if (!(bp->attr.exclude_kernel)) 9422de3e953d0e Michael Neuling 2012-12-20 162 info->type |= HW_BRK_TYPE_KERNEL; 9422de3e953d0e Michael Neuling 2012-12-20 163 if (!(bp->attr.exclude_hv)) 9422de3e953d0e Michael Neuling 2012-12-20 164 info->type |= HW_BRK_TYPE_HYP; 5aae8a53708025 K.Prasad 2010-06-15 165 info->address = bp->attr.bp_addr; 5aae8a53708025 K.Prasad 2010-06-15 166 info->len = bp->attr.bp_len; 5aae8a53708025 K.Prasad 2010-06-15 167 5aae8a53708025 K.Prasad 2010-06-15 168 /* 5aae8a53708025 K.Prasad 2010-06-15 169 * Since breakpoint length can be a maximum of HW_BREAKPOINT_LEN(8) 5aae8a53708025 K.Prasad 2010-06-15 170 * and breakpoint addresses are aligned to nearest double-word 5aae8a53708025 K.Prasad 2010-06-15 171 * HW_BREAKPOINT_ALIGN by rounding off to the lower address, the 5aae8a53708025 K.Prasad 2010-06-15 172 * 'symbolsize' should satisfy the check below. 5aae8a53708025 K.Prasad 2010-06-15 173 */ 4ae7ebe9522a9e Michael Neuling 2013-01-24 174 length_max = 8; /* DABR */ 4ae7ebe9522a9e Michael Neuling 2013-01-24 175 if (cpu_has_feature(CPU_FTR_DAWR)) { 4ae7ebe9522a9e Michael Neuling 2013-01-24 176 length_max = 512 ; /* 64 doublewords */ 4ae7ebe9522a9e Michael Neuling 2013-01-24 177 /* DAWR region can't cross 512 boundary */ 919c9b8187bc8a Michael Neuling 2018-05-17 178 if ((bp->attr.bp_addr >> 9) != 919c9b8187bc8a Michael Neuling 2018-05-17 179 ((bp->attr.bp_addr + bp->attr.bp_len - 1) >> 9)) 4ae7ebe9522a9e Michael Neuling 2013-01-24 180 return -EINVAL; 4ae7ebe9522a9e Michael Neuling 2013-01-24 181 } 5aae8a53708025 K.Prasad 2010-06-15 182 if (info->len > 4ae7ebe9522a9e Michael Neuling 2013-01-24 183 (length_max - (info->address & HW_BREAKPOINT_ALIGN))) 5aae8a53708025 K.Prasad 2010-06-15 184 return -EINVAL; 5aae8a53708025 K.Prasad 2010-06-15 185 return 0; 5aae8a53708025 K.Prasad 2010-06-15 186 } 5aae8a53708025 K.Prasad 2010-06-15 187 06532a6743d83f K.Prasad 2010-06-15 188 /* 06532a6743d83f K.Prasad 2010-06-15 189 * Restores the breakpoint on the debug registers. 06532a6743d83f K.Prasad 2010-06-15 190 * Invoke this function if it is known that the execution context is 06532a6743d83f K.Prasad 2010-06-15 191 * about to change to cause loss of MSR_SE settings. 06532a6743d83f K.Prasad 2010-06-15 192 */ 06532a6743d83f K.Prasad 2010-06-15 193 void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs) 06532a6743d83f K.Prasad 2010-06-15 194 { 06532a6743d83f K.Prasad 2010-06-15 195 struct arch_hw_breakpoint *info; 06532a6743d83f K.Prasad 2010-06-15 196 06532a6743d83f K.Prasad 2010-06-15 197 if (likely(!tsk->thread.last_hit_ubp)) 06532a6743d83f K.Prasad 2010-06-15 198 return; 06532a6743d83f K.Prasad 2010-06-15 199 06532a6743d83f K.Prasad 2010-06-15 200 info = counter_arch_bp(tsk->thread.last_hit_ubp); 06532a6743d83f K.Prasad 2010-06-15 201 regs->msr &= ~MSR_SE; 21f585073d6347 Paul Gortmaker 2014-04-29 202 __set_breakpoint(info); 06532a6743d83f K.Prasad 2010-06-15 203 tsk->thread.last_hit_ubp = NULL; 06532a6743d83f K.Prasad 2010-06-15 204 } 06532a6743d83f K.Prasad 2010-06-15 205 5aae8a53708025 K.Prasad 2010-06-15 206 /* 5aae8a53708025 K.Prasad 2010-06-15 207 * Handle debug exception notifications. 5aae8a53708025 K.Prasad 2010-06-15 208 */ 03465f899bdac7 Nicholas Piggin 2016-09-16 @209 int hw_breakpoint_handler(struct die_args *args) 5aae8a53708025 K.Prasad 2010-06-15 210 { 5aae8a53708025 K.Prasad 2010-06-15 211 int rc = NOTIFY_STOP; 5aae8a53708025 K.Prasad 2010-06-15 212 struct perf_event *bp; 5aae8a53708025 K.Prasad 2010-06-15 213 struct pt_regs *regs = args->regs; 4ad8622dc54895 Christophe Leroy 2016-11-29 214 #ifndef CONFIG_PPC_8xx 5aae8a53708025 K.Prasad 2010-06-15 215 int stepped = 1; 5aae8a53708025 K.Prasad 2010-06-15 216 unsigned int instr; 4ad8622dc54895 Christophe Leroy 2016-11-29 217 #endif 4ad8622dc54895 Christophe Leroy 2016-11-29 218 struct arch_hw_breakpoint *info; e3e94084adb561 K.Prasad 2010-06-15 219 unsigned long dar = regs->dar; 5aae8a53708025 K.Prasad 2010-06-15 220 5aae8a53708025 K.Prasad 2010-06-15 221 /* Disable breakpoints during exception handling */ 9422de3e953d0e Michael Neuling 2012-12-20 222 hw_breakpoint_disable(); 574cb24899d35e Paul Mackerras 2010-06-23 223 5aae8a53708025 K.Prasad 2010-06-15 224 /* 5aae8a53708025 K.Prasad 2010-06-15 225 * The counter may be concurrently released but that can only 5aae8a53708025 K.Prasad 2010-06-15 226 * occur from a call_rcu() path. We can then safely fetch 5aae8a53708025 K.Prasad 2010-06-15 227 * the breakpoint, use its callback, touch its counter 5aae8a53708025 K.Prasad 2010-06-15 228 * while we are in an rcu_read_lock() path. 5aae8a53708025 K.Prasad 2010-06-15 229 */ 5aae8a53708025 K.Prasad 2010-06-15 230 rcu_read_lock(); 5aae8a53708025 K.Prasad 2010-06-15 231 69111bac42f5ce Christoph Lameter 2014-10-21 232 bp = __this_cpu_read(bp_per_reg); c21a493a2b4465 Ravi Bangoria 2016-11-22 233 if (!bp) { c21a493a2b4465 Ravi Bangoria 2016-11-22 234 rc = NOTIFY_DONE; 5aae8a53708025 K.Prasad 2010-06-15 235 goto out; c21a493a2b4465 Ravi Bangoria 2016-11-22 236 } 5aae8a53708025 K.Prasad 2010-06-15 237 info = counter_arch_bp(bp); 5aae8a53708025 K.Prasad 2010-06-15 238 5aae8a53708025 K.Prasad 2010-06-15 239 /* 5aae8a53708025 K.Prasad 2010-06-15 240 * Return early after invoking user-callback function without restoring 5aae8a53708025 K.Prasad 2010-06-15 241 * DABR if the breakpoint is from ptrace which always operates in 5aae8a53708025 K.Prasad 2010-06-15 242 * one-shot mode. The ptrace-ed process will receive the SIGTRAP signal 5aae8a53708025 K.Prasad 2010-06-15 243 * generated in do_dabr(). 5aae8a53708025 K.Prasad 2010-06-15 244 */ 574cb24899d35e Paul Mackerras 2010-06-23 245 if (bp->overflow_handler == ptrace_triggered) { 5aae8a53708025 K.Prasad 2010-06-15 246 perf_bp_event(bp, regs); 5aae8a53708025 K.Prasad 2010-06-15 247 rc = NOTIFY_DONE; 5aae8a53708025 K.Prasad 2010-06-15 248 goto out; 5aae8a53708025 K.Prasad 2010-06-15 249 } 5aae8a53708025 K.Prasad 2010-06-15 250 e3e94084adb561 K.Prasad 2010-06-15 251 /* e3e94084adb561 K.Prasad 2010-06-15 252 * Verify if dar lies within the address range occupied by the symbol 574cb24899d35e Paul Mackerras 2010-06-23 253 * being watched to filter extraneous exceptions. If it doesn't, 574cb24899d35e Paul Mackerras 2010-06-23 254 * we still need to single-step the instruction, but we don't 574cb24899d35e Paul Mackerras 2010-06-23 255 * generate an event. e3e94084adb561 K.Prasad 2010-06-15 256 */ 540e07c67efe42 Michael Neuling 2013-06-24 257 info->type &= ~HW_BRK_TYPE_EXTRANEOUS_IRQ; 9422de3e953d0e Michael Neuling 2012-12-20 258 if (!((bp->attr.bp_addr <= dar) && 9422de3e953d0e Michael Neuling 2012-12-20 259 (dar - bp->attr.bp_addr < bp->attr.bp_len))) 9422de3e953d0e Michael Neuling 2012-12-20 260 info->type |= HW_BRK_TYPE_EXTRANEOUS_IRQ; e3e94084adb561 K.Prasad 2010-06-15 261
:::::: The code at line 106 was first introduced by commit :::::: 5aae8a53708025d4e718f0d2e7c2f766779ddc71 powerpc, hw_breakpoints: Implement hw_breakpoints for 64-bit server processors
:::::: TO: K.Prasad <prasad@linux.vnet.ibm.com> :::::: CC: Paul Mackerras <paulus@samba.org>
--- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [unhandled content-type:application/gzip] | |