Re: [patch v10 1/4] drivers: jtag: Add JTAG core driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux