Hi Oleksandr, I love your patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.14-rc7] [cannot apply to next-20171018] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Oleksandr-Shamray/JTAG-driver-introduction/20171102-045624 config: blackfin-allyesconfig (attached as .config) compiler: bfin-uclinux-gcc (GCC) 6.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 make.cross ARCH=blackfin All errors (new ones prefixed by >>): drivers/jtag/jtag.c: In function 'jtag_ioctl': >> drivers/jtag/jtag.c:130:10: error: too many arguments to function 'jtag->ops->xfer' err = jtag->ops->xfer(jtag, &xfer, xfer_data); ^~~~ At top level: drivers/jtag/jtag.c:42:21: warning: 'jtag_class' defined but not used [-Wunused-variable] static struct class jtag_class = { ^~~~~~~~~~ vim +130 drivers/jtag/jtag.c 46 47 static long jtag_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 48 { 49 struct jtag *jtag = file->private_data; 50 struct jtag_run_test_idle idle; 51 struct jtag_xfer xfer; 52 u8 *xfer_data; 53 u32 data_size; 54 u32 value; 55 int err; 56 57 if (!arg) 58 return -EINVAL; 59 60 switch (cmd) { 61 case JTAG_GIOCFREQ: 62 63 if (jtag->ops->freq_get) 64 err = jtag->ops->freq_get(jtag, &value); 65 else 66 err = -EOPNOTSUPP; 67 if (err) 68 break; 69 70 if (put_user(value, (__u32 *)arg)) 71 err = -EFAULT; 72 break; 73 74 case JTAG_SIOCFREQ: 75 if (get_user(value, (__u32 *)arg)) 76 return -EFAULT; 77 if (value == 0) 78 return -EINVAL; 79 80 if (jtag->ops->freq_set) 81 err = jtag->ops->freq_set(jtag, value); 82 else 83 err = -EOPNOTSUPP; 84 break; 85 86 case JTAG_IOCRUNTEST: 87 if (copy_from_user(&idle, (void *)arg, 88 sizeof(struct jtag_run_test_idle))) 89 return -EFAULT; 90 91 if (idle.mode > JTAG_XFER_SW_MODE) 92 return -EINVAL; 93 94 if (idle.endstate > JTAG_STATE_PAUSEDR) 95 return -EINVAL; 96 97 if (jtag->ops->idle) 98 err = jtag->ops->idle(jtag, &idle); 99 else 100 err = -EOPNOTSUPP; 101 break; 102 103 case JTAG_IOCXFER: 104 if (copy_from_user(&xfer, (void *)arg, 105 sizeof(struct jtag_xfer))) 106 return -EFAULT; 107 108 if (xfer.length >= JTAG_MAX_XFER_DATA_LEN) 109 return -EINVAL; 110 111 if (xfer.mode > JTAG_XFER_SW_MODE) 112 return -EINVAL; 113 114 if (xfer.type > JTAG_SDR_XFER) 115 return -EINVAL; 116 117 if (xfer.direction > JTAG_WRITE_XFER) 118 return -EINVAL; 119 120 if (xfer.endstate > JTAG_STATE_PAUSEDR) 121 return -EINVAL; 122 123 data_size = DIV_ROUND_UP(xfer.length, BITS_PER_BYTE); 124 xfer_data = memdup_user(u64_to_user_ptr(xfer.tdio), data_size); 125 126 if (!xfer_data) 127 return -EFAULT; 128 129 if (jtag->ops->xfer) { > 130 err = jtag->ops->xfer(jtag, &xfer, xfer_data); 131 } else { 132 kfree(xfer_data); 133 return -EOPNOTSUPP; 134 } 135 136 if (err) { 137 return -EFAULT; 138 kfree(xfer_data); 139 } 140 141 err = copy_to_user(u64_to_user_ptr(xfer.tdio), 142 (void *)(xfer_data), data_size); 143 144 if (err) { 145 kfree(xfer_data); 146 return -EFAULT; 147 } 148 149 kfree(xfer_data); 150 if (copy_to_user((void *)arg, &xfer, sizeof(struct jtag_xfer))) 151 return -EFAULT; 152 break; 153 154 case JTAG_GIOCSTATUS: 155 if (jtag->ops->status_get) 156 err = jtag->ops->status_get(jtag, &value); 157 else 158 err = -EOPNOTSUPP; 159 if (err) 160 break; 161 162 err = put_user(value, (__u32 *)arg); 163 if (err) 164 err = -EFAULT; 165 break; 166 167 default: 168 return -EINVAL; 169 } 170 return err; 171 } 172 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip