i2c-dev mismatch with proprietary nvidia driver

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

 



I'm not sure where to post this bug report on the Linux side, I have already posted it at developer.nvida.com. If there's a more appropriate location, please let me know.

At approximately line 41 of nvidia driver file nv-i2c.c, in function nv_i2c_algo_master_transfer(), there's an if-test for symbol I2C_M_DMA_SAFE. If the symbol is not defined, a call to the function with the bit set fails with error -EINVAL. The file includes "linux/i2c.h", so apparently there are versions of I2c.h in which the flag is undefined.

At approximately line 262 of i2c-dev driver file i2c-dev.c, in function i2cdev_ioctl_wdrw(), this bit is set unconditionally, with the comment "memdup_user allocates with GFP_KERNEL, so DMA is ok ". This behavior is not the result of the userspace caller setting the flag, the driver sets it unconditionally. The result is that calls into i2c-dev using its ioctl() interface, as opposed to the read()/write() interface, always fail with error EINVAL.

Every version of i2c.h that I have defines I2C_M_DMA_SAFE, so the version of the nvidia driver that DKMS builds for me works. However, as the developer of ddcutil (https://github.com/rockowitz/ddcutil, https://www.ddcutil.com) I receive bug reports of failures with the nvidia proprietary driver due to this mismatch, so it is a problem.



I



[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux