CC: [email protected] CC: Atish Patra <[email protected]> CC: [email protected] TO: Atish Patra <[email protected]>
tree: https://github.com/atishp04/linux isa_framework head: db6ba78ead62e927c2057ba750765b070c8af8a6 commit: 8b657281e959412f7bc7688c26ddebca7ee69b90 [5/8] RISC-V: Implement multi-letter ISA extension probing framework :::::: branch date: 12 hours ago :::::: commit date: 12 hours ago config: riscv-randconfig-m031-20220211 (https://download.01.org/0day-ci/archive/20220211/[email protected]/config) compiler: riscv32-linux-gcc (GCC) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> New smatch warnings: arch/riscv/kernel/cpufeature.c:185 riscv_fill_hwcap() warn: should '1 << (*ext - 97)' be a 64 bit type? Old smatch warnings: arch/riscv/kernel/cpufeature.c:183 riscv_fill_hwcap() error: uninitialized symbol 'ext_long'. vim +185 arch/riscv/kernel/cpufeature.c 6bcff51539ccae5 Anup Patel 2020-04-24 64 3df952ae2ac81fb Jisheng Zhang 2021-05-16 65 void __init riscv_fill_hwcap(void) e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 66 { dd81c8ab819d360 Johan Hovold 2019-01-18 67 struct device_node *node; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 68 const char *isa; d4d5a22e24d477a Tsukasa OI 2021-12-02 69 char print_str[NUM_ALPHA_EXTS + 1]; f4fd878dfb479e6 Tsukasa OI 2021-12-02 70 int i, j; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 71 static unsigned long isa2hwcap[256] = {0}; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 72 e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 73 isa2hwcap['i'] = isa2hwcap['I'] = COMPAT_HWCAP_ISA_I; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 74 isa2hwcap['m'] = isa2hwcap['M'] = COMPAT_HWCAP_ISA_M; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 75 isa2hwcap['a'] = isa2hwcap['A'] = COMPAT_HWCAP_ISA_A; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 76 isa2hwcap['f'] = isa2hwcap['F'] = COMPAT_HWCAP_ISA_F; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 77 isa2hwcap['d'] = isa2hwcap['D'] = COMPAT_HWCAP_ISA_D; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 78 isa2hwcap['c'] = isa2hwcap['C'] = COMPAT_HWCAP_ISA_C; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 79 e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 80 elf_hwcap = 0; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 81 6bcff51539ccae5 Anup Patel 2020-04-24 82 bitmap_zero(riscv_isa, RISCV_ISA_EXT_MAX); 6bcff51539ccae5 Anup Patel 2020-04-24 83 dd81c8ab819d360 Johan Hovold 2019-01-18 84 for_each_of_cpu_node(node) { fbdc6193dc706c8 Atish Patra 2019-02-22 85 unsigned long this_hwcap = 0; 8b657281e959412 Atish Patra 2022-02-08 86 uint64_t this_isa = 0; fbdc6193dc706c8 Atish Patra 2019-02-22 87 fbdc6193dc706c8 Atish Patra 2019-02-22 88 if (riscv_of_processor_hartid(node) < 0) fbdc6193dc706c8 Atish Patra 2019-02-22 89 continue; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 90 e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 91 if (of_property_read_string(node, "riscv,isa", &isa)) { 7265d103902c0bc Johan Hovold 2019-01-18 92 pr_warn("Unable to find \"riscv,isa\" devicetree entry\n"); fbdc6193dc706c8 Atish Patra 2019-02-22 93 continue; e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 94 } e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 95 6bcff51539ccae5 Anup Patel 2020-04-24 96 #if IS_ENABLED(CONFIG_32BIT) 6bcff51539ccae5 Anup Patel 2020-04-24 97 if (!strncmp(isa, "rv32", 4)) f4fd878dfb479e6 Tsukasa OI 2021-12-02 98 isa += 4; 6bcff51539ccae5 Anup Patel 2020-04-24 99 #elif IS_ENABLED(CONFIG_64BIT) 6bcff51539ccae5 Anup Patel 2020-04-24 100 if (!strncmp(isa, "rv64", 4)) f4fd878dfb479e6 Tsukasa OI 2021-12-02 101 isa += 4; 6bcff51539ccae5 Anup Patel 2020-04-24 102 #endif f4fd878dfb479e6 Tsukasa OI 2021-12-02 103 for (; *isa; ++isa) { f4fd878dfb479e6 Tsukasa OI 2021-12-02 104 const char *ext = isa++; cc3c2c529f62560 Tsukasa OI 2021-12-02 105 const char *ext_end = isa; f4fd878dfb479e6 Tsukasa OI 2021-12-02 106 bool ext_long, ext_err = false; f4fd878dfb479e6 Tsukasa OI 2021-12-02 107 f4fd878dfb479e6 Tsukasa OI 2021-12-02 108 switch (*ext) { f4fd878dfb479e6 Tsukasa OI 2021-12-02 109 case 's': f4fd878dfb479e6 Tsukasa OI 2021-12-02 110 case 'x': f4fd878dfb479e6 Tsukasa OI 2021-12-02 111 case 'z': f4fd878dfb479e6 Tsukasa OI 2021-12-02 112 /** f4fd878dfb479e6 Tsukasa OI 2021-12-02 113 * 's' is a special case because: f4fd878dfb479e6 Tsukasa OI 2021-12-02 114 * It can be present in base extension for supervisor f4fd878dfb479e6 Tsukasa OI 2021-12-02 115 * Multi-letter extensions can start with 's' as well for f4fd878dfb479e6 Tsukasa OI 2021-12-02 116 * Supervisor extensions (i.e. sstc, sscofpmf, svinval) f4fd878dfb479e6 Tsukasa OI 2021-12-02 117 */ f4fd878dfb479e6 Tsukasa OI 2021-12-02 118 if (*ext == 's' && ext[-1] != '_') f4fd878dfb479e6 Tsukasa OI 2021-12-02 119 break; f4fd878dfb479e6 Tsukasa OI 2021-12-02 120 ext_long = true; f4fd878dfb479e6 Tsukasa OI 2021-12-02 121 /* Multi-letter extension must be delimited */ f4fd878dfb479e6 Tsukasa OI 2021-12-02 122 for (; *isa && *isa != '_'; ++isa) cc3c2c529f62560 Tsukasa OI 2021-12-02 123 if (unlikely(!islower(*isa) cc3c2c529f62560 Tsukasa OI 2021-12-02 124 && !isdigit(*isa))) f4fd878dfb479e6 Tsukasa OI 2021-12-02 125 ext_err = true; cc3c2c529f62560 Tsukasa OI 2021-12-02 126 /* Parse backwards */ cc3c2c529f62560 Tsukasa OI 2021-12-02 127 ext_end = isa; cc3c2c529f62560 Tsukasa OI 2021-12-02 128 if (unlikely(ext_err)) cc3c2c529f62560 Tsukasa OI 2021-12-02 129 break; cc3c2c529f62560 Tsukasa OI 2021-12-02 130 if (!isdigit(ext_end[-1])) cc3c2c529f62560 Tsukasa OI 2021-12-02 131 break; cc3c2c529f62560 Tsukasa OI 2021-12-02 132 /* Skip the minor version */ cc3c2c529f62560 Tsukasa OI 2021-12-02 133 while (isdigit(*--ext_end)) cc3c2c529f62560 Tsukasa OI 2021-12-02 134 ; cc3c2c529f62560 Tsukasa OI 2021-12-02 135 if (ext_end[0] != 'p' cc3c2c529f62560 Tsukasa OI 2021-12-02 136 || !isdigit(ext_end[-1])) { cc3c2c529f62560 Tsukasa OI 2021-12-02 137 /* Advance it to offset the pre-decrement */ cc3c2c529f62560 Tsukasa OI 2021-12-02 138 ++ext_end; cc3c2c529f62560 Tsukasa OI 2021-12-02 139 break; cc3c2c529f62560 Tsukasa OI 2021-12-02 140 } cc3c2c529f62560 Tsukasa OI 2021-12-02 141 /* Skip the major version */ cc3c2c529f62560 Tsukasa OI 2021-12-02 142 while (isdigit(*--ext_end)) cc3c2c529f62560 Tsukasa OI 2021-12-02 143 ; cc3c2c529f62560 Tsukasa OI 2021-12-02 144 ++ext_end; f4fd878dfb479e6 Tsukasa OI 2021-12-02 145 break; f4fd878dfb479e6 Tsukasa OI 2021-12-02 146 default: f4fd878dfb479e6 Tsukasa OI 2021-12-02 147 ext_long = false; cc3c2c529f62560 Tsukasa OI 2021-12-02 148 if (unlikely(!islower(*ext))) { f4fd878dfb479e6 Tsukasa OI 2021-12-02 149 ext_err = true; f4fd878dfb479e6 Tsukasa OI 2021-12-02 150 break; f4fd878dfb479e6 Tsukasa OI 2021-12-02 151 } f4fd878dfb479e6 Tsukasa OI 2021-12-02 152 /* Find next extension */ f4fd878dfb479e6 Tsukasa OI 2021-12-02 153 if (!isdigit(*isa)) f4fd878dfb479e6 Tsukasa OI 2021-12-02 154 break; cc3c2c529f62560 Tsukasa OI 2021-12-02 155 /* Skip the minor version */ f4fd878dfb479e6 Tsukasa OI 2021-12-02 156 while (isdigit(*++isa)) f4fd878dfb479e6 Tsukasa OI 2021-12-02 157 ; f4fd878dfb479e6 Tsukasa OI 2021-12-02 158 if (*isa != 'p') f4fd878dfb479e6 Tsukasa OI 2021-12-02 159 break; f4fd878dfb479e6 Tsukasa OI 2021-12-02 160 if (!isdigit(*++isa)) { f4fd878dfb479e6 Tsukasa OI 2021-12-02 161 --isa; f4fd878dfb479e6 Tsukasa OI 2021-12-02 162 break; f4fd878dfb479e6 Tsukasa OI 2021-12-02 163 } cc3c2c529f62560 Tsukasa OI 2021-12-02 164 /* Skip the major version */ f4fd878dfb479e6 Tsukasa OI 2021-12-02 165 while (isdigit(*++isa)) f4fd878dfb479e6 Tsukasa OI 2021-12-02 166 ; f4fd878dfb479e6 Tsukasa OI 2021-12-02 167 break; f4fd878dfb479e6 Tsukasa OI 2021-12-02 168 } f4fd878dfb479e6 Tsukasa OI 2021-12-02 169 if (*isa != '_') f4fd878dfb479e6 Tsukasa OI 2021-12-02 170 --isa; cc3c2c529f62560 Tsukasa OI 2021-12-02 171 8b657281e959412 Atish Patra 2022-02-08 172 #define SET_ISA_EXT_MAP(name, bit) \ 8b657281e959412 Atish Patra 2022-02-08 173 do { \ 8b657281e959412 Atish Patra 2022-02-08 174 if ((ext_end - ext == sizeof(name) - 1) && \ 8b657281e959412 Atish Patra 2022-02-08 175 !memcmp(ext, name, sizeof(name) - 1)) { \ 8b657281e959412 Atish Patra 2022-02-08 176 this_isa |= (1UL << bit); \ 8b657281e959412 Atish Patra 2022-02-08 177 pr_info("Found ISA extension %s", name);\ 8b657281e959412 Atish Patra 2022-02-08 178 } \ 8b657281e959412 Atish Patra 2022-02-08 179 } while (false) \ 8b657281e959412 Atish Patra 2022-02-08 180 cc3c2c529f62560 Tsukasa OI 2021-12-02 181 if (unlikely(ext_err)) f4fd878dfb479e6 Tsukasa OI 2021-12-02 182 continue; cc3c2c529f62560 Tsukasa OI 2021-12-02 183 if (!ext_long) { f4fd878dfb479e6 Tsukasa OI 2021-12-02 184 this_hwcap |= isa2hwcap[(unsigned char)(*ext)]; f4fd878dfb479e6 Tsukasa OI 2021-12-02 @185 this_isa |= (1UL << (*ext - 'a')); 6bcff51539ccae5 Anup Patel 2020-04-24 186 } 8b657281e959412 Atish Patra 2022-02-08 187 #undef SET_ISA_EXT_MAP cc3c2c529f62560 Tsukasa OI 2021-12-02 188 } fbdc6193dc706c8 Atish Patra 2019-02-22 189 fbdc6193dc706c8 Atish Patra 2019-02-22 190 /* fbdc6193dc706c8 Atish Patra 2019-02-22 191 * All "okay" hart should have same isa. Set HWCAP based on fbdc6193dc706c8 Atish Patra 2019-02-22 192 * common capabilities of every "okay" hart, in case they don't fbdc6193dc706c8 Atish Patra 2019-02-22 193 * have. fbdc6193dc706c8 Atish Patra 2019-02-22 194 */ fbdc6193dc706c8 Atish Patra 2019-02-22 195 if (elf_hwcap) fbdc6193dc706c8 Atish Patra 2019-02-22 196 elf_hwcap &= this_hwcap; fbdc6193dc706c8 Atish Patra 2019-02-22 197 else fbdc6193dc706c8 Atish Patra 2019-02-22 198 elf_hwcap = this_hwcap; 6bcff51539ccae5 Anup Patel 2020-04-24 199 8b657281e959412 Atish Patra 2022-02-08 200 if (riscv_isa[0]) { 8b657281e959412 Atish Patra 2022-02-08 201 #if IS_ENABLED(CONFIG_32BIT) 8b657281e959412 Atish Patra 2022-02-08 202 riscv_isa[0] &= this_isa & 0xFFFFFFFF; 8b657281e959412 Atish Patra 2022-02-08 203 riscv_isa[1] &= this_isa >> 32; 8b657281e959412 Atish Patra 2022-02-08 204 #else 6bcff51539ccae5 Anup Patel 2020-04-24 205 riscv_isa[0] &= this_isa; 8b657281e959412 Atish Patra 2022-02-08 206 #endif 8b657281e959412 Atish Patra 2022-02-08 207 } else { 8b657281e959412 Atish Patra 2022-02-08 208 #if IS_ENABLED(CONFIG_32BIT) 8b657281e959412 Atish Patra 2022-02-08 209 riscv_isa[0] = this_isa & 0xFFFFFFFF; 8b657281e959412 Atish Patra 2022-02-08 210 riscv_isa[1] = this_isa >> 32; 8b657281e959412 Atish Patra 2022-02-08 211 #else 6bcff51539ccae5 Anup Patel 2020-04-24 212 riscv_isa[0] = this_isa; 8b657281e959412 Atish Patra 2022-02-08 213 #endif 8b657281e959412 Atish Patra 2022-02-08 214 } fbdc6193dc706c8 Atish Patra 2019-02-22 215 } e2c0cdfba7f6992 Palmer Dabbelt 2017-07-10 216 86e581e31078578 Palmer Dabbelt 2018-08-27 217 /* We don't support systems with F but without D, so mask those out 86e581e31078578 Palmer Dabbelt 2018-08-27 218 * here. */ 86e581e31078578 Palmer Dabbelt 2018-08-27 219 if ((elf_hwcap & COMPAT_HWCAP_ISA_F) && !(elf_hwcap & COMPAT_HWCAP_ISA_D)) { 7265d103902c0bc Johan Hovold 2019-01-18 220 pr_info("This kernel does not support systems with F but not D\n"); 86e581e31078578 Palmer Dabbelt 2018-08-27 221 elf_hwcap &= ~COMPAT_HWCAP_ISA_F; 86e581e31078578 Palmer Dabbelt 2018-08-27 222 } 86e581e31078578 Palmer Dabbelt 2018-08-27 223 6bcff51539ccae5 Anup Patel 2020-04-24 224 memset(print_str, 0, sizeof(print_str)); d4d5a22e24d477a Tsukasa OI 2021-12-02 225 for (i = 0, j = 0; i < NUM_ALPHA_EXTS; i++) 6bcff51539ccae5 Anup Patel 2020-04-24 226 if (riscv_isa[0] & BIT_MASK(i)) 6bcff51539ccae5 Anup Patel 2020-04-24 227 print_str[j++] = (char)('a' + i); 6bcff51539ccae5 Anup Patel 2020-04-24 228 pr_info("riscv: ISA extensions %s\n", print_str); 6bcff51539ccae5 Anup Patel 2020-04-24 229 6bcff51539ccae5 Anup Patel 2020-04-24 230 memset(print_str, 0, sizeof(print_str)); d4d5a22e24d477a Tsukasa OI 2021-12-02 231 for (i = 0, j = 0; i < NUM_ALPHA_EXTS; i++) 6bcff51539ccae5 Anup Patel 2020-04-24 232 if (elf_hwcap & BIT_MASK(i)) 6bcff51539ccae5 Anup Patel 2020-04-24 233 print_str[j++] = (char)('a' + i); 6bcff51539ccae5 Anup Patel 2020-04-24 234 pr_info("riscv: ELF capabilities %s\n", print_str); 9411ec60c23d868 Alan Kao 2018-10-09 235 :::::: The code at line 185 was first introduced by commit :::::: f4fd878dfb479e6db102addfdf545a32b76fbecd RISC-V: Minimal parser for "riscv, isa" strings :::::: TO: Tsukasa OI <[email protected]> :::::: CC: Atish Patra <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
