lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Sat, 28 Apr 2018 09:03:54 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Sujeev Dias <sdias@...eaurora.org>
Cc:     kbuild-all@...org, Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Arnd Bergmann <arnd@...db.de>,
        Sujeev Dias <sdias@...eaurora.org>,
        linux-kernel@...r.kernel.org, linux-arm-msm@...r.kernel.org,
        Tony Truong <truong@...eaurora.org>
Subject: Re: [PATCH v1 4/4] mhi_bus: dev: uci: add user space interface driver

Hi Sujeev,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.17-rc2 next-20180426]
[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/Sujeev-Dias/mhi_bus-core-Add-support-for-MHI-host-interface/20180428-065959
config: i386-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   In file included from drivers/bus/mhi/devices/mhi_uci.c:26:0:
   include/linux/mhi.h:658:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
    static inlint int mhi_force_rddm_mode(struct mhi_controller *mhi_cntrl)
                  ^~~
   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/bus/mhi/devices/mhi_uci.c:13:
   drivers/bus/mhi/devices/mhi_uci.c: In function 'mhi_queue_inbound':
>> include/linux/kern_levels.h:5:18: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:73:4: note: in expansion of macro 'pr_err'
       pr_err("[D][%s] " fmt, __func__, ##__VA_ARGS__); \
       ^~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:114:3: note: in expansion of macro 'MSG_VERB'
      MSG_VERB("Allocated buf %d of %d size %ld\n", i, nr_trbs, mtu);
      ^~~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:114:43: note: format string is defined here
      MSG_VERB("Allocated buf %d of %d size %ld\n", i, nr_trbs, mtu);
                                            ~~^
                                            %d
   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/bus/mhi/devices/mhi_uci.c:13:
   drivers/bus/mhi/devices/mhi_uci.c: In function 'mhi_uci_write':
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:73:4: note: in expansion of macro 'pr_err'
       pr_err("[D][%s] " fmt, __func__, ##__VA_ARGS__); \
       ^~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:243:2: note: in expansion of macro 'MSG_VERB'
     MSG_VERB("Enter: to xfer:%lu bytes\n", count);
     ^~~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:243:29: note: format string is defined here
     MSG_VERB("Enter: to xfer:%lu bytes\n", count);
                              ~~^
                              %u
   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/bus/mhi/devices/mhi_uci.c:13:
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:89:4: note: in expansion of macro 'pr_err'
       pr_err("[E][%s] " fmt, __func__, ##__VA_ARGS__); \
       ^~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:266:4: note: in expansion of macro 'MSG_ERR'
       MSG_ERR("Failed to allocate memory %lu\n", xfer_size);
       ^~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:266:41: note: format string is defined here
       MSG_ERR("Failed to allocate memory %lu\n", xfer_size);
                                          ~~^
                                          %u
   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/bus/mhi/devices/mhi_uci.c:13:
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:73:4: note: in expansion of macro 'pr_err'
       pr_err("[D][%s] " fmt, __func__, ##__VA_ARGS__); \
       ^~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:295:2: note: in expansion of macro 'MSG_VERB'
     MSG_VERB("Exit: Number of bytes xferred:%lu\n", bytes_xfered);
     ^~~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:295:44: note: format string is defined here
     MSG_VERB("Exit: Number of bytes xferred:%lu\n", bytes_xfered);
                                             ~~^
                                             %u
   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/bus/mhi/devices/mhi_uci.c:13:
   drivers/bus/mhi/devices/mhi_uci.c: In function 'mhi_uci_read':
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:73:4: note: in expansion of macro 'pr_err'
       pr_err("[D][%s] " fmt, __func__, ##__VA_ARGS__); \
       ^~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:321:2: note: in expansion of macro 'MSG_VERB'
     MSG_VERB("Client provided buf len:%lu\n", count);
     ^~~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:321:38: note: format string is defined here
     MSG_VERB("Client provided buf len:%lu\n", count);
                                       ~~^
                                       %u
   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/bus/mhi/devices/mhi_uci.c:13:
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:73:4: note: in expansion of macro 'pr_err'
       pr_err("[D][%s] " fmt, __func__, ##__VA_ARGS__); \
       ^~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:376:2: note: in expansion of macro 'MSG_VERB'
     MSG_VERB("Copied %lu of %lu bytes\n", to_copy, uci_chan->rx_size);
     ^~~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:376:21: note: format string is defined here
     MSG_VERB("Copied %lu of %lu bytes\n", to_copy, uci_chan->rx_size);
                      ~~^
                      %u
   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/bus/mhi/devices/mhi_uci.c:13:
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:73:4: note: in expansion of macro 'pr_err'
       pr_err("[D][%s] " fmt, __func__, ##__VA_ARGS__); \
       ^~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:376:2: note: in expansion of macro 'MSG_VERB'
     MSG_VERB("Copied %lu of %lu bytes\n", to_copy, uci_chan->rx_size);
     ^~~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:376:28: note: format string is defined here
     MSG_VERB("Copied %lu of %lu bytes\n", to_copy, uci_chan->rx_size);
                             ~~^
                             %u
   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/bus/mhi/devices/mhi_uci.c:13:
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
>> drivers/bus/mhi/devices/mhi_uci.c:73:4: note: in expansion of macro 'pr_err'
       pr_err("[D][%s] " fmt, __func__, ##__VA_ARGS__); \
       ^~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:400:2: note: in expansion of macro 'MSG_VERB'
     MSG_VERB("Returning %lu bytes\n", to_copy);
     ^~~~~~~~
   drivers/bus/mhi/devices/mhi_uci.c:400:24: note: format string is defined here
     MSG_VERB("Returning %lu bytes\n", to_copy);
                         ~~^
                         %u

vim +/pr_err +73 drivers/bus/mhi/devices/mhi_uci.c

    70	
    71	#define MSG_VERB(fmt, ...) do { \
    72			if (msg_lvl <= MHI_MSG_LVL_VERBOSE) \
  > 73				pr_err("[D][%s] " fmt, __func__, ##__VA_ARGS__); \
    74		} while (0)
    75	
    76	#else
    77	
    78	#define MSG_VERB(fmt, ...)
    79	
    80	#endif
    81	
    82	#define MSG_LOG(fmt, ...) do { \
    83			if (msg_lvl <= MHI_MSG_LVL_INFO) \
    84				pr_err("[I][%s] " fmt, __func__, ##__VA_ARGS__); \
    85		} while (0)
    86	
    87	#define MSG_ERR(fmt, ...) do { \
    88			if (msg_lvl <= MHI_MSG_LVL_ERROR) \
  > 89				pr_err("[E][%s] " fmt, __func__, ##__VA_ARGS__); \
    90		} while (0)
    91	
    92	#define MAX_UCI_DEVICES (64)
    93	
    94	static DECLARE_BITMAP(uci_minors, MAX_UCI_DEVICES);
    95	static struct mhi_uci_drv mhi_uci_drv;
    96	
    97	static int mhi_queue_inbound(struct uci_dev *uci_dev)
    98	{
    99		struct mhi_device *mhi_dev = uci_dev->mhi_dev;
   100		int nr_trbs = mhi_get_no_free_descriptors(mhi_dev, DMA_FROM_DEVICE);
   101		size_t mtu = uci_dev->mtu;
   102		void *buf;
   103		struct uci_buf *uci_buf;
   104		int ret = -EIO, i;
   105	
   106		for (i = 0; i < nr_trbs; i++) {
   107			buf = kmalloc(mtu + sizeof(*uci_buf), GFP_KERNEL);
   108			if (!buf)
   109				return -ENOMEM;
   110	
   111			uci_buf = buf + mtu;
   112			uci_buf->data = buf;
   113	
 > 114			MSG_VERB("Allocated buf %d of %d size %ld\n", i, nr_trbs, mtu);
   115	
   116			ret = mhi_queue_transfer(mhi_dev, DMA_FROM_DEVICE, buf, mtu,
   117						 MHI_EOT);
   118			if (ret) {
   119				kfree(buf);
   120				MSG_ERR("Failed to queue buffer %d\n", i);
   121				return ret;
   122			}
   123		}
   124	
   125		return ret;
   126	}
   127	
   128	static long mhi_uci_ioctl(struct file *file,
   129				  unsigned int cmd,
   130				  unsigned long arg)
   131	{
   132		struct uci_dev *uci_dev = file->private_data;
   133		struct mhi_device *mhi_dev = uci_dev->mhi_dev;
   134		long ret = -ERESTARTSYS;
   135	
   136		mutex_lock(&uci_dev->mutex);
   137		if (uci_dev->enabled)
   138			ret = mhi_ioctl(mhi_dev, cmd, arg);
   139		mutex_unlock(&uci_dev->mutex);
   140	
   141		return ret;
   142	}
   143	
   144	static int mhi_uci_release(struct inode *inode, struct file *file)
   145	{
   146		struct uci_dev *uci_dev = file->private_data;
   147	
   148		mutex_lock(&uci_dev->mutex);
   149		uci_dev->ref_count--;
   150		if (!uci_dev->ref_count) {
   151			struct uci_buf *itr, *tmp;
   152			struct uci_chan *uci_chan;
   153	
   154			MSG_LOG("Last client left, closing node\n");
   155	
   156			if (uci_dev->enabled)
   157				mhi_unprepare_from_transfer(uci_dev->mhi_dev);
   158	
   159			/* clean inbound channel */
   160			uci_chan = &uci_dev->dl_chan;
   161			list_for_each_entry_safe(itr, tmp, &uci_chan->pending, node) {
   162				list_del(&itr->node);
   163				kfree(itr->data);
   164			}
   165			if (uci_chan->cur_buf)
   166				kfree(uci_chan->cur_buf->data);
   167	
   168			uci_chan->cur_buf = NULL;
   169	
   170			if (!uci_dev->enabled) {
   171				MSG_LOG("Node is deleted, freeing dev node\n");
   172				mutex_unlock(&uci_dev->mutex);
   173				mutex_destroy(&uci_dev->mutex);
   174				clear_bit(MINOR(uci_dev->devt), uci_minors);
   175				kfree(uci_dev);
   176				return 0;
   177			}
   178		}
   179	
   180		mutex_unlock(&uci_dev->mutex);
   181	
   182		MSG_LOG("exit: ref_count:%d\n", uci_dev->ref_count);
   183	
   184		return 0;
   185	}
   186	
   187	static unsigned int mhi_uci_poll(struct file *file, poll_table *wait)
   188	{
   189		struct uci_dev *uci_dev = file->private_data;
   190		struct mhi_device *mhi_dev = uci_dev->mhi_dev;
   191		struct uci_chan *uci_chan;
   192		unsigned int mask = 0;
   193	
   194		poll_wait(file, &uci_dev->dl_chan.wq, wait);
   195		poll_wait(file, &uci_dev->ul_chan.wq, wait);
   196	
   197		uci_chan = &uci_dev->dl_chan;
   198		spin_lock_bh(&uci_chan->lock);
   199		if (!uci_dev->enabled) {
   200			mask = POLLERR;
   201		} else if (!list_empty(&uci_chan->pending) || uci_chan->cur_buf) {
   202			MSG_VERB("Client can read from node\n");
   203			mask |= POLLIN | POLLRDNORM;
   204		}
   205		spin_unlock_bh(&uci_chan->lock);
   206	
   207		uci_chan = &uci_dev->ul_chan;
   208		spin_lock_bh(&uci_chan->lock);
   209		if (!uci_dev->enabled) {
   210			mask |= POLLERR;
   211		} else if (mhi_get_no_free_descriptors(mhi_dev, DMA_TO_DEVICE) > 0) {
   212			MSG_VERB("Client can write to node\n");
   213			mask |= POLLOUT | POLLWRNORM;
   214		}
   215		spin_unlock_bh(&uci_chan->lock);
   216	
   217		MSG_LOG("Client attempted to poll, returning mask 0x%x\n", mask);
   218	
   219		return mask;
   220	}
   221	
   222	static ssize_t mhi_uci_write(struct file *file,
   223				     const char __user *buf,
   224				     size_t count,
   225				     loff_t *offp)
   226	{
   227		struct uci_dev *uci_dev = file->private_data;
   228		struct mhi_device *mhi_dev = uci_dev->mhi_dev;
   229		struct uci_chan *uci_chan = &uci_dev->ul_chan;
   230		size_t bytes_xfered = 0;
   231		int ret;
   232	
   233		if (!buf || !count)
   234			return -EINVAL;
   235	
   236		/* confirm channel is active */
   237		spin_lock_bh(&uci_chan->lock);
   238		if (!uci_dev->enabled) {
   239			spin_unlock_bh(&uci_chan->lock);
   240			return -ERESTARTSYS;
   241		}
   242	
   243		MSG_VERB("Enter: to xfer:%lu bytes\n", count);
   244	
   245		while (count) {
   246			size_t xfer_size;
   247			void *kbuf;
   248			enum MHI_FLAGS flags;
   249	
   250			spin_unlock_bh(&uci_chan->lock);
   251	
   252			/* wait for free descriptors */
   253			ret = wait_event_interruptible(uci_chan->wq,
   254				(!uci_dev->enabled) ||
   255				mhi_get_no_free_descriptors
   256						       (mhi_dev, DMA_TO_DEVICE) > 0);
   257	
   258			if (ret == -ERESTARTSYS) {
   259				MSG_LOG("Exit signal caught for node\n");
   260				return -ERESTARTSYS;
   261			}
   262	
   263			xfer_size = min_t(size_t, count, uci_dev->mtu);
   264			kbuf = kmalloc(xfer_size, GFP_KERNEL);
   265			if (!kbuf) {
 > 266				MSG_ERR("Failed to allocate memory %lu\n", xfer_size);
   267				return -ENOMEM;
   268			}
   269	
   270			ret = copy_from_user(kbuf, buf, xfer_size);
   271			if (unlikely(ret)) {
   272				kfree(kbuf);
   273				return ret;
   274			}
   275	
   276			spin_lock_bh(&uci_chan->lock);
   277			flags = (count - xfer_size) ? MHI_EOB : MHI_EOT;
   278			if (uci_dev->enabled)
   279				ret = mhi_queue_transfer(mhi_dev, DMA_TO_DEVICE, kbuf,
   280							 xfer_size, flags);
   281			else
   282				ret = -ERESTARTSYS;
   283	
   284			if (ret) {
   285				kfree(kbuf);
   286				goto sys_interrupt;
   287			}
   288	
   289			bytes_xfered += xfer_size;
   290			count -= xfer_size;
   291			buf += xfer_size;
   292		}
   293	
   294		spin_unlock_bh(&uci_chan->lock);
   295		MSG_VERB("Exit: Number of bytes xferred:%lu\n", bytes_xfered);
   296	
   297		return bytes_xfered;
   298	
   299	sys_interrupt:
   300		spin_unlock_bh(&uci_chan->lock);
   301	
   302		return ret;
   303	}
   304	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Download attachment ".config.gz" of type "application/gzip" (62952 bytes)

Powered by blists - more mailing lists