public inbox for linux-i2c@vger.kernel.org
 help / color / mirror / Atom feed
* [wsa:renesas/topic/i2c-core-dma-rfc-v4 6/6] drivers//i2c/i2c-dev.c:284:23: error: 'I2C_M_SAFE_DMA' undeclared
@ 2017-08-16 20:45 kbuild test robot
  2017-08-16 21:05 ` Wolfram Sang
  0 siblings, 1 reply; 2+ messages in thread
From: kbuild test robot @ 2017-08-16 20:45 UTC (permalink / raw)
  To: Wolfram Sang; +Cc: kbuild-all, linux-i2c

[-- Attachment #1: Type: text/plain, Size: 4211 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git renesas/topic/i2c-core-dma-rfc-v4
head:   e5923c5b3755a942ffc365b4a47baac43533c7e3
commit: e5923c5b3755a942ffc365b4a47baac43533c7e3 [6/6] i2c: dev: mark RDWR buffers as DMA_SAFE
config: x86_64-randconfig-x016-201733 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        git checkout e5923c5b3755a942ffc365b4a47baac43533c7e3
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers//i2c/i2c-dev.c: In function 'i2cdev_ioctl_rdwr':
>> drivers//i2c/i2c-dev.c:284:23: error: 'I2C_M_SAFE_DMA' undeclared (first use in this function)
      rdwr_pa[i].flags |= I2C_M_SAFE_DMA;
                          ^~~~~~~~~~~~~~
   drivers//i2c/i2c-dev.c:284:23: note: each undeclared identifier is reported only once for each function it appears in

vim +/I2C_M_SAFE_DMA +284 drivers//i2c/i2c-dev.c

   239	
   240	static noinline int i2cdev_ioctl_rdwr(struct i2c_client *client,
   241			unsigned long arg)
   242	{
   243		struct i2c_rdwr_ioctl_data rdwr_arg;
   244		struct i2c_msg *rdwr_pa;
   245		u8 __user **data_ptrs;
   246		int i, res;
   247	
   248		if (copy_from_user(&rdwr_arg,
   249				   (struct i2c_rdwr_ioctl_data __user *)arg,
   250				   sizeof(rdwr_arg)))
   251			return -EFAULT;
   252	
   253		/* Put an arbitrary limit on the number of messages that can
   254		 * be sent at once */
   255		if (rdwr_arg.nmsgs > I2C_RDWR_IOCTL_MAX_MSGS)
   256			return -EINVAL;
   257	
   258		rdwr_pa = memdup_user(rdwr_arg.msgs,
   259				      rdwr_arg.nmsgs * sizeof(struct i2c_msg));
   260		if (IS_ERR(rdwr_pa))
   261			return PTR_ERR(rdwr_pa);
   262	
   263		data_ptrs = kmalloc(rdwr_arg.nmsgs * sizeof(u8 __user *), GFP_KERNEL);
   264		if (data_ptrs == NULL) {
   265			kfree(rdwr_pa);
   266			return -ENOMEM;
   267		}
   268	
   269		res = 0;
   270		for (i = 0; i < rdwr_arg.nmsgs; i++) {
   271			/* Limit the size of the message to a sane amount */
   272			if (rdwr_pa[i].len > 8192) {
   273				res = -EINVAL;
   274				break;
   275			}
   276	
   277			data_ptrs[i] = (u8 __user *)rdwr_pa[i].buf;
   278			rdwr_pa[i].buf = memdup_user(data_ptrs[i], rdwr_pa[i].len);
   279			if (IS_ERR(rdwr_pa[i].buf)) {
   280				res = PTR_ERR(rdwr_pa[i].buf);
   281				break;
   282			}
   283			/* memdup_user allocates with GFP_KERNEL, so DMA is ok */
 > 284			rdwr_pa[i].flags |= I2C_M_SAFE_DMA;
   285	
   286			/*
   287			 * If the message length is received from the slave (similar
   288			 * to SMBus block read), we must ensure that the buffer will
   289			 * be large enough to cope with a message length of
   290			 * I2C_SMBUS_BLOCK_MAX as this is the maximum underlying bus
   291			 * drivers allow. The first byte in the buffer must be
   292			 * pre-filled with the number of extra bytes, which must be
   293			 * at least one to hold the message length, but can be
   294			 * greater (for example to account for a checksum byte at
   295			 * the end of the message.)
   296			 */
   297			if (rdwr_pa[i].flags & I2C_M_RECV_LEN) {
   298				if (!(rdwr_pa[i].flags & I2C_M_RD) ||
   299				    rdwr_pa[i].buf[0] < 1 ||
   300				    rdwr_pa[i].len < rdwr_pa[i].buf[0] +
   301						     I2C_SMBUS_BLOCK_MAX) {
   302					res = -EINVAL;
   303					break;
   304				}
   305	
   306				rdwr_pa[i].len = rdwr_pa[i].buf[0];
   307			}
   308		}
   309		if (res < 0) {
   310			int j;
   311			for (j = 0; j < i; ++j)
   312				kfree(rdwr_pa[j].buf);
   313			kfree(data_ptrs);
   314			kfree(rdwr_pa);
   315			return res;
   316		}
   317	
   318		res = i2c_transfer(client->adapter, rdwr_pa, rdwr_arg.nmsgs);
   319		while (i-- > 0) {
   320			if (res >= 0 && (rdwr_pa[i].flags & I2C_M_RD)) {
   321				if (copy_to_user(data_ptrs[i], rdwr_pa[i].buf,
   322						 rdwr_pa[i].len))
   323					res = -EFAULT;
   324			}
   325			kfree(rdwr_pa[i].buf);
   326		}
   327		kfree(data_ptrs);
   328		kfree(rdwr_pa);
   329		return res;
   330	}
   331	

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30516 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [wsa:renesas/topic/i2c-core-dma-rfc-v4 6/6] drivers//i2c/i2c-dev.c:284:23: error: 'I2C_M_SAFE_DMA' undeclared
  2017-08-16 20:45 [wsa:renesas/topic/i2c-core-dma-rfc-v4 6/6] drivers//i2c/i2c-dev.c:284:23: error: 'I2C_M_SAFE_DMA' undeclared kbuild test robot
@ 2017-08-16 21:05 ` Wolfram Sang
  0 siblings, 0 replies; 2+ messages in thread
From: Wolfram Sang @ 2017-08-16 21:05 UTC (permalink / raw)
  To: kbuild test robot; +Cc: Wolfram Sang, kbuild-all, linux-i2c

[-- Attachment #1: Type: text/plain, Size: 265 bytes --]

Hi,

can buildbot be configured in a way that only for "i2c/for-*" branches
the build errors are reported to official mailing list? Any differently
prefixed branches are experimental and do not need attention from
official mailing lists IMHO.

Thanks,

   Wolfram


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-08-16 21:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-16 20:45 [wsa:renesas/topic/i2c-core-dma-rfc-v4 6/6] drivers//i2c/i2c-dev.c:284:23: error: 'I2C_M_SAFE_DMA' undeclared kbuild test robot
2017-08-16 21:05 ` Wolfram Sang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox