From mboxrd@z Thu Jan 1 00:00:00 1970 From: Guenter Roeck Subject: Re: lm75_remove: LM75 Device remove using sysfs delete_device Date: Tue, 12 Jun 2012 21:23:43 -0700 Message-ID: <20120613042343.GA11771@ericsson.com> References: <20120610173640.3b21759c@endymion.delvare> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-i2c-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Sasikanth babu Cc: Jean Delvare , "lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org" , "linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" List-Id: linux-i2c@vger.kernel.org On Tue, Jun 12, 2012 at 11:51:51PM -0400, Sasikanth babu wrote: > > On Sun, Jun 10, 2012 at 9:06 PM, Jean Delvare wrote: > > (Note: Frodo is out of the lm-sensors project for years, no need to Cc > him.) > > On Sun, 10 Jun 2012 07:41:03 -0700, Sasikanth babu wrote: > > when I'm trying to delete lm75 device using sysfs delete_device > attribute > > (echo 0x4e >/sys/bus/i2c/devices/i2c-3/delete_device) > > It hangs at lm75_remove function. I started the device using sysfs > > attribute new_device. > > > > > > Kernel verion : 2.6.34.12 > > I can't reproduce this with kernel 3.4.2. > > Did you try reproducing this with a more recent kernel? 2.6.34 is > getting old. > > Is there anything you can think of which makes your system special? I2C > bus multiplexing ? Some unusual kernel option maybe? > > > Yes, I have PCA9545 Mux device. LM75 device was connected to PCA9545 Mux > devices (Mux device > is connected to SMBUS). At first I unloaded PCA954x module, It hanged at > lm75_remove. Later I had > to tried remove the lm75 device using sysfs, again it hanged at same > location. Both PCA Mux device and > lm75 devvice instantiated using sysfs new_device. > > > > "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. > > i2cinit D ffffffff814a04e0 0 2064 2059 0x00000004 > > ffff880271928a70 0000000000000086 0000000000000096 ffff880273215b48 > > ffff8802ffffffff ffff880477306a70 0000000000010140 ffff880273215fd8 > > 0000000000010140 ffff880271928a70 ffff880273215fd8 ffff880273215fd8 > > Call Trace: > > [] ? default_wake_function+0x0/0x20 > > [] ? __rt_mutex_slowlock+0x4f/0x110 > > [] ? rt_mutex_slowlock+0x93/0x190 > > [] ? i2c_smbus_xfer+0x49/0x110 > > [] ? dev_sysfs_ops+0x0/0x10 > > [] ? i2c_smbus_write_byte_data+0x30/0x40 > > This looks odd, sysfs_remove_group() doesn't call > i2c_smbus_write_byte_data(), and i2c_smbus_write_byte_data() doesn't > touch dev_sysfs_ops... So this stack trace is approximate. > > > [] ? sysfs_remove_group+0x59/0x100 > > [] ? lm75_remove+0x4d/0x80 > > [] ? i2c_device_remove+0xa9/0xc0 > > [] ? __device_release_driver+0x56/0xc0 > > [] ? device_release_driver+0x25/0x40 > > [] ? bus_remove_device+0x91/0xc0 > > [] ? device_del+0x118/0x190 > > [] ? device_unregister+0x9/0x20 > > [] ? i2c_sysfs_delete_device+0x17c/0x200 > > [] ? sysfs_write_file+0x1c6/0x260 > > [] ? vfs_write+0x103/0x200 > > [] ? sys_write+0x4e/0x90 > > [] ? page_fault+0x24/0x30 > > [] ? system_call_done+0x0/0x5 > Jean, in 2.6.34, i2c_sysfs_delete_device calls i2c_lock_adapter, then i2c_unregister_device. This in turn calls lm75_remove which through i2c_smbus_xfer tries to acquire the lock again. The current code is different - i2c_sysfs_delete_device no longer calls i2c_lock_adapter. Commit ID is dafc50d141c27959dbd3a1cfe9857a86d23402a7, which specifically mentions deadlock issues with multiplexed busses. Guenter