CC: [email protected] CC: [email protected] BCC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Danilo Krummrich <[email protected]> CC: Dmitry Torokhov <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 06aeb1495c39c86ccfaf1adadc1d2200179f16eb commit: 81b9fd6941ce6fc4b4127cc184e491adb615182e [5483/9128] Input: ps2-gpio - don't send rx data before the stop bit :::::: branch date: 11 hours ago :::::: commit date: 10 days ago config: arm-randconfig-c002-20220223 (https://download.01.org/0day-ci/archive/20220226/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e) 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 # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=81b9fd6941ce6fc4b4127cc184e491adb615182e git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout 81b9fd6941ce6fc4b4127cc184e491adb615182e # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^~~~ drivers/media/i2c/ov7670.c:1522:8: note: Calling 'ov7670_read' ret = ov7670_read(sd, REG_COM1, &com1) + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:565:6: note: Assuming field 'use_smbus' is true if (info->use_smbus) ^~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:565:2: note: Taking true branch if (info->use_smbus) ^ drivers/media/i2c/ov7670.c:566:10: note: Calling 'ov7670_read_smbus' return ov7670_read_smbus(sd, reg, value); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:485:6: note: Assuming 'ret' is < 0 if (ret >= 0) { ^~~~~~~~ drivers/media/i2c/ov7670.c:485:2: note: Taking false branch if (ret >= 0) { ^ drivers/media/i2c/ov7670.c:489:2: note: Returning without writing to '*value' return ret; ^ drivers/media/i2c/ov7670.c:566:10: note: Returning from 'ov7670_read_smbus' return ov7670_read_smbus(sd, reg, value); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:566:3: note: Returning without writing to '*value' return ov7670_read_smbus(sd, reg, value); ^ drivers/media/i2c/ov7670.c:1522:8: note: Returning from 'ov7670_read' ret = ov7670_read(sd, REG_COM1, &com1) + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:1525:6: note: Assuming 'ret' is 0 if (ret) ^~~ drivers/media/i2c/ov7670.c:1525:2: note: Taking false branch if (ret) ^ drivers/media/i2c/ov7670.c:1528:15: note: The left operand of '&' is a garbage value com1 = (com1 & 0xfc) | (value & 0x03); ~~~~ ^ drivers/media/i2c/ov7670.c:1530:17: warning: The left operand of '&' is a garbage value [clang-analyzer-core.UndefinedBinaryOperatorResult] aechh = (aechh & 0xc0) | ((value >> 10) & 0x3f); ^ drivers/media/i2c/ov7670.c:1597:2: note: Control jumps to 'case 10094849:' at line 1617 switch (ctrl->id) { ^ drivers/media/i2c/ov7670.c:1620:7: note: Assuming field 'val' is equal to V4L2_EXPOSURE_MANUAL if (ctrl->val == V4L2_EXPOSURE_MANUAL) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:1620:3: note: Taking true branch if (ctrl->val == V4L2_EXPOSURE_MANUAL) { ^ drivers/media/i2c/ov7670.c:1622:11: note: Calling 'ov7670_s_exp' return ov7670_s_exp(sd, info->exposure->val); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:1520:34: note: 'aechh' declared without an initial value unsigned char com1, com8, aech, aechh; ^~~~~ drivers/media/i2c/ov7670.c:1524:3: note: Calling 'ov7670_read' ov7670_read(sd, REG_AECHH, &aechh); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:565:12: note: Field 'use_smbus' is true if (info->use_smbus) ^ drivers/media/i2c/ov7670.c:565:2: note: Taking true branch if (info->use_smbus) ^ drivers/media/i2c/ov7670.c:566:10: note: Calling 'ov7670_read_smbus' return ov7670_read_smbus(sd, reg, value); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:485:6: note: Assuming 'ret' is < 0 if (ret >= 0) { ^~~~~~~~ drivers/media/i2c/ov7670.c:485:2: note: Taking false branch if (ret >= 0) { ^ drivers/media/i2c/ov7670.c:489:2: note: Returning without writing to '*value' return ret; ^ drivers/media/i2c/ov7670.c:566:10: note: Returning from 'ov7670_read_smbus' return ov7670_read_smbus(sd, reg, value); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:566:3: note: Returning without writing to '*value' return ov7670_read_smbus(sd, reg, value); ^ drivers/media/i2c/ov7670.c:1524:3: note: Returning from 'ov7670_read' ov7670_read(sd, REG_AECHH, &aechh); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov7670.c:1525:6: note: Assuming 'ret' is 0 if (ret) ^~~ drivers/media/i2c/ov7670.c:1525:2: note: Taking false branch if (ret) ^ drivers/media/i2c/ov7670.c:1530:17: note: The left operand of '&' is a garbage value aechh = (aechh & 0xc0) | ((value >> 10) & 0x3f); ~~~~~ ^ Suppressed 2 warnings (1 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. >> drivers/input/serio/ps2-gpio.c:223:4: warning: Value stored to 'rxflags' is >> never read [clang-analyzer-deadcode.DeadStores] rxflags |= SERIO_PARITY; ^ drivers/input/serio/ps2-gpio.c:223:4: note: Value stored to 'rxflags' is never read 2 warnings generated. drivers/hwmon/max31730.c:220:30: warning: The result of the left shift is undefined because the left operand is negative [clang-analyzer-core.UndefinedBinaryOperatorResult] val = DIV_ROUND_CLOSEST(val << 4, 1000) << 4; ^ include/linux/math.h:87:18: note: expanded from macro 'DIV_ROUND_CLOSEST' typeof(x) __x = x; \ ^ drivers/hwmon/max31730.c:192:6: note: Assuming 'type' is equal to hwmon_temp if (type != hwmon_temp) ^~~~~~~~~~~~~~~~~~ drivers/hwmon/max31730.c:192:2: note: Taking false branch if (type != hwmon_temp) ^ drivers/hwmon/max31730.c:195:2: note: Control jumps to 'case hwmon_temp_min:' at line 199 switch (attr) { ^ drivers/hwmon/max31730.c:201:3: note: Execution continues on line 219 break; ^ drivers/hwmon/max31730.c:219:8: note: Assuming '__UNIQUE_ID___x234' is <= '__UNIQUE_ID___y235' val = clamp_val(val, MAX31730_TEMP_MIN, MAX31730_TEMP_MAX); ^ include/linux/minmax.h:137:32: note: expanded from macro 'clamp_val' #define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:124:48: note: expanded from macro 'clamp_t' #define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi) ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:112:27: note: expanded from macro 'max_t' #define max_t(type, x, y) __careful_cmp((type)(x), (type)(y), >) ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/minmax.h:104:48: note: expanded from macro 'min_t' #define min_t(type, x, y) __careful_cmp((type)(x), (type)(y), <) ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ include/linux/minmax.h:38:14: note: expanded from macro '__careful_cmp' __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op)) ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:31:25: note: expanded from macro '__cmp_once' typeof(x) unique_x = (x); \ ^ drivers/hwmon/max31730.c:219:8: note: '?' condition is false val = clamp_val(val, MAX31730_TEMP_MIN, MAX31730_TEMP_MAX); ^ include/linux/minmax.h:137:32: note: expanded from macro 'clamp_val' #define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi) ^ include/linux/minmax.h:124:48: note: expanded from macro 'clamp_t' #define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi) ^ include/linux/minmax.h:112:27: note: expanded from macro 'max_t' #define max_t(type, x, y) __careful_cmp((type)(x), (type)(y), >) ^ include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp' __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op)) ^ include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once' __cmp(unique_x, unique_y, op); }) ^ include/linux/minmax.h:28:26: note: expanded from macro '__cmp' #define __cmp(x, y, op) ((x) op (y) ? (x) : (y)) ^ drivers/hwmon/max31730.c:219:8: note: '__UNIQUE_ID___x236' is < '__UNIQUE_ID___y237' val = clamp_val(val, MAX31730_TEMP_MIN, MAX31730_TEMP_MAX); ^ include/linux/minmax.h:137:32: note: expanded from macro 'clamp_val' #define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:124:36: note: expanded from macro 'clamp_t' #define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:104:27: note: expanded from macro 'min_t' #define min_t(type, x, y) __careful_cmp((type)(x), (type)(y), <) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp' __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once' __cmp(unique_x, unique_y, op); }) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:28:26: note: expanded from macro '__cmp' #define __cmp(x, y, op) ((x) op (y) ? (x) : (y)) ^~~ drivers/hwmon/max31730.c:219:8: note: '?' condition is true val = clamp_val(val, MAX31730_TEMP_MIN, MAX31730_TEMP_MAX); ^ include/linux/minmax.h:137:32: note: expanded from macro 'clamp_val' #define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi) ^ include/linux/minmax.h:124:36: note: expanded from macro 'clamp_t' #define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi) ^ include/linux/minmax.h:104:27: note: expanded from macro 'min_t' #define min_t(type, x, y) __careful_cmp((type)(x), (type)(y), <) ^ include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp' __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op)) vim +/rxflags +223 drivers/input/serio/ps2-gpio.c 9ee0a0558819e6 Danilo Krummrich 2017-08-28 161 9ee0a0558819e6 Danilo Krummrich 2017-08-28 162 static irqreturn_t ps2_gpio_irq_rx(struct ps2_gpio_data *drvdata) 9ee0a0558819e6 Danilo Krummrich 2017-08-28 163 { 9ee0a0558819e6 Danilo Krummrich 2017-08-28 164 unsigned char byte, cnt; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 165 int data; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 166 int rxflags = 0; 2fa9c57af062de Danilo Krummrich 2022-02-15 167 s64 us_delta; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 168 0dde5f82158b26 Danilo Krummrich 2022-02-15 169 byte = drvdata->rx.byte; 0dde5f82158b26 Danilo Krummrich 2022-02-15 170 cnt = drvdata->rx.cnt; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 171 2fa9c57af062de Danilo Krummrich 2022-02-15 172 drvdata->t_irq_now = ktime_get(); 2fa9c57af062de Danilo Krummrich 2022-02-15 173 2fa9c57af062de Danilo Krummrich 2022-02-15 174 /* 2fa9c57af062de Danilo Krummrich 2022-02-15 175 * We need to consider spurious interrupts happening right after 2fa9c57af062de Danilo Krummrich 2022-02-15 176 * a TX xfer finished. 2fa9c57af062de Danilo Krummrich 2022-02-15 177 */ 2fa9c57af062de Danilo Krummrich 2022-02-15 178 us_delta = ktime_us_delta(drvdata->t_irq_now, drvdata->tx.t_xfer_end); 2fa9c57af062de Danilo Krummrich 2022-02-15 179 if (unlikely(us_delta < PS2_IRQ_MIN_INTERVAL_US)) 2fa9c57af062de Danilo Krummrich 2022-02-15 180 goto end; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 181 2fa9c57af062de Danilo Krummrich 2022-02-15 182 us_delta = ktime_us_delta(drvdata->t_irq_now, drvdata->t_irq_last); 2fa9c57af062de Danilo Krummrich 2022-02-15 183 if (us_delta > PS2_IRQ_MAX_INTERVAL_US && cnt) { 9ee0a0558819e6 Danilo Krummrich 2017-08-28 184 dev_err(drvdata->dev, 9ee0a0558819e6 Danilo Krummrich 2017-08-28 185 "RX: timeout, probably we missed an interrupt\n"); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 186 goto err; 2fa9c57af062de Danilo Krummrich 2022-02-15 187 } else if (unlikely(us_delta < PS2_IRQ_MIN_INTERVAL_US)) { 2fa9c57af062de Danilo Krummrich 2022-02-15 188 /* Ignore spurious IRQs. */ 2fa9c57af062de Danilo Krummrich 2022-02-15 189 goto end; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 190 } 2fa9c57af062de Danilo Krummrich 2022-02-15 191 drvdata->t_irq_last = drvdata->t_irq_now; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 192 9ee0a0558819e6 Danilo Krummrich 2017-08-28 193 data = gpiod_get_value(drvdata->gpio_data); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 194 if (unlikely(data < 0)) { 9ee0a0558819e6 Danilo Krummrich 2017-08-28 195 dev_err(drvdata->dev, "RX: failed to get data gpio val: %d\n", 9ee0a0558819e6 Danilo Krummrich 2017-08-28 196 data); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 197 goto err; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 198 } 9ee0a0558819e6 Danilo Krummrich 2017-08-28 199 9ee0a0558819e6 Danilo Krummrich 2017-08-28 200 switch (cnt) { 9ee0a0558819e6 Danilo Krummrich 2017-08-28 201 case PS2_START_BIT: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 202 /* start bit should be low */ 9ee0a0558819e6 Danilo Krummrich 2017-08-28 203 if (unlikely(data)) { 9ee0a0558819e6 Danilo Krummrich 2017-08-28 204 dev_err(drvdata->dev, "RX: start bit should be low\n"); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 205 goto err; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 206 } 9ee0a0558819e6 Danilo Krummrich 2017-08-28 207 break; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 208 case PS2_DATA_BIT0: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 209 case PS2_DATA_BIT1: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 210 case PS2_DATA_BIT2: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 211 case PS2_DATA_BIT3: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 212 case PS2_DATA_BIT4: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 213 case PS2_DATA_BIT5: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 214 case PS2_DATA_BIT6: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 215 case PS2_DATA_BIT7: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 216 /* processing data bits */ 9ee0a0558819e6 Danilo Krummrich 2017-08-28 217 if (data) 9ee0a0558819e6 Danilo Krummrich 2017-08-28 218 byte |= (data << (cnt - 1)); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 219 break; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 220 case PS2_PARITY_BIT: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 221 /* check odd parity */ 9ee0a0558819e6 Danilo Krummrich 2017-08-28 222 if (!((hweight8(byte) & 1) ^ data)) { 9ee0a0558819e6 Danilo Krummrich 2017-08-28 @223 rxflags |= SERIO_PARITY; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 224 dev_warn(drvdata->dev, "RX: parity error\n"); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 225 if (!drvdata->write_enable) 9ee0a0558819e6 Danilo Krummrich 2017-08-28 226 goto err; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 227 } 81b9fd6941ce6f Danilo Krummrich 2022-02-15 228 break; 81b9fd6941ce6f Danilo Krummrich 2022-02-15 229 case PS2_STOP_BIT: 81b9fd6941ce6f Danilo Krummrich 2022-02-15 230 /* stop bit should be high */ 81b9fd6941ce6f Danilo Krummrich 2022-02-15 231 if (unlikely(!data)) { 81b9fd6941ce6f Danilo Krummrich 2022-02-15 232 dev_err(drvdata->dev, "RX: stop bit should be high\n"); 81b9fd6941ce6f Danilo Krummrich 2022-02-15 233 goto err; 81b9fd6941ce6f Danilo Krummrich 2022-02-15 234 } 9ee0a0558819e6 Danilo Krummrich 2017-08-28 235 2fa9c57af062de Danilo Krummrich 2022-02-15 236 /* 2fa9c57af062de Danilo Krummrich 2022-02-15 237 * Do not send spurious ACK's and NACK's when write fn is 9ee0a0558819e6 Danilo Krummrich 2017-08-28 238 * not provided. 9ee0a0558819e6 Danilo Krummrich 2017-08-28 239 */ 9ee0a0558819e6 Danilo Krummrich 2017-08-28 240 if (!drvdata->write_enable) { 9ee0a0558819e6 Danilo Krummrich 2017-08-28 241 if (byte == PS2_DEV_RET_NACK) 9ee0a0558819e6 Danilo Krummrich 2017-08-28 242 goto err; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 243 else if (byte == PS2_DEV_RET_ACK) 9ee0a0558819e6 Danilo Krummrich 2017-08-28 244 break; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 245 } 9ee0a0558819e6 Danilo Krummrich 2017-08-28 246 9ee0a0558819e6 Danilo Krummrich 2017-08-28 247 serio_interrupt(drvdata->serio, byte, rxflags); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 248 dev_dbg(drvdata->dev, "RX: sending byte 0x%x\n", byte); 81b9fd6941ce6f Danilo Krummrich 2022-02-15 249 9ee0a0558819e6 Danilo Krummrich 2017-08-28 250 cnt = byte = 0; 2fa9c57af062de Danilo Krummrich 2022-02-15 251 9ee0a0558819e6 Danilo Krummrich 2017-08-28 252 goto end; /* success */ 9ee0a0558819e6 Danilo Krummrich 2017-08-28 253 default: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 254 dev_err(drvdata->dev, "RX: got out of sync with the device\n"); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 255 goto err; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 256 } 9ee0a0558819e6 Danilo Krummrich 2017-08-28 257 9ee0a0558819e6 Danilo Krummrich 2017-08-28 258 cnt++; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 259 goto end; /* success */ 9ee0a0558819e6 Danilo Krummrich 2017-08-28 260 9ee0a0558819e6 Danilo Krummrich 2017-08-28 261 err: 9ee0a0558819e6 Danilo Krummrich 2017-08-28 262 cnt = byte = 0; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 263 __ps2_gpio_write(drvdata->serio, PS2_CMD_RESEND); 9ee0a0558819e6 Danilo Krummrich 2017-08-28 264 end: 0dde5f82158b26 Danilo Krummrich 2022-02-15 265 drvdata->rx.cnt = cnt; 0dde5f82158b26 Danilo Krummrich 2022-02-15 266 drvdata->rx.byte = byte; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 267 return IRQ_HANDLED; 9ee0a0558819e6 Danilo Krummrich 2017-08-28 268 } 9ee0a0558819e6 Danilo Krummrich 2017-08-28 269 :::::: The code at line 223 was first introduced by commit :::::: 9ee0a0558819e63d189426c953668fe1ce7cb637 Input: PS/2 gpio bit banging driver for serio bus :::::: TO: Danilo Krummrich <[email protected]> :::::: CC: Dmitry Torokhov <[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]
