On Mon, Jul 27, 2015 at 05:30:50PM +0300, Vladimir Zapolskiy wrote: > of_find_i2c_adapter_by_node() call requires quite often missing > put_device(), and i2c_put_adapter() releases a device locked by > i2c_get_adapter() only. In general module_put(adapter->owner) and > put_device(dev) are not interchangeable. > > This is a common error reproduction scenario as a result of the > misusage described above (for clearness this is run on iMX6 platform > with HDMI and I2C bus drivers compiled as kernel modules): > > root@mx6q:~# lsmod | grep i2c > i2c_imx 10213 0 > root@mx6q:~# lsmod | grep dw_hdmi_imx > dw_hdmi_imx 3631 0 > dw_hdmi 11846 1 dw_hdmi_imx > imxdrm 8674 3 dw_hdmi_imx,imx_ipuv3_crtc,imx_ldb > drm_kms_helper 113765 5 dw_hdmi,imxdrm,imx_ipuv3_crtc,imx_ldb > root@mx6q:~# rmmod dw_hdmi_imx > root@mx6q:~# lsmod | grep i2c > i2c_imx 10213 -1 > > ^^^^^ > > root@mx6q:~# rmmod i2c_imx > rmmod: ERROR: Module i2c_imx is in use > > To fix existing users of these interfaces and to avoid any further > confusion and misusage in future, add one more interface > of_get_i2c_adapter_by_node(), it is similar to i2c_get_adapter() in > sense that an I2C bus device driver found and locked by user can be > correctly unlocked by i2c_put_adapter(). > > Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@xxxxxxxxxx> Applied to for-next, thanks!
Attachment:
signature.asc
Description: Digital signature