linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* lis3lv02d i2c access on shutdown
@ 2017-02-18 18:02 James Maki
  2017-02-20 18:41 ` James Maki
  0 siblings, 1 reply; 7+ messages in thread
From: James Maki @ 2017-02-18 18:02 UTC (permalink / raw)
  To: linux-i2c

Hi,

I have an TI am335x that is using a i2c PMIC with pm_power_off  hook 
which locks up on shutdown. The pm_power_off hook gets stuck obtaining 
i2c_lock_adapter(). The holder of the lock is the lis3lv02d 
accelerometer which never releases it.

I do not think there is an issue in lis3lv02d. I think this is a general 
issue with i2c since other drivers have the same design. What I don't 
have is clear understanding of if/when/how i2c_transfer() can be called 
post kernel_power_off(). Is it possible to call i2c_transfer() at this 
point. I have tried calling schedule() and msleep() inside of 
kernel_power_off() after syscore_shutdown(). It looks like interrupts 
are enabled and I can still schedule at this point. So how is it 
possible that lis3lv02d is never able to exit the i2c_transfer()? Is 
there some other lock inside i2c_transfer that it is blocking on?

Is it possible that the process which had the accelerometer open has 
exited while holding the i2c lock. Is it even possible for a device to 
shutdown or file to close while holding a lock in the kernel?

I looked at adding a lis3lv02d_i2c_shutdown, but that was too late in 
the process already and the lis3lv02d was already stuck. Is there a very 
early place during shutdown that I can kick everyone off the i2c bus? 
Obviously this might not be the best general solution, but my concern 
right now is fixing the problem on this particular system first.

-James

^ permalink raw reply	[flat|nested] 7+ messages in thread
* lis3lv02d i2c access on shutdown
@ 2017-02-18 17:43 James Maki
  0 siblings, 0 replies; 7+ messages in thread
From: James Maki @ 2017-02-18 17:43 UTC (permalink / raw)
  To: linux-i2c

Hi,

I have an TI am335x that is using a i2c PMIC with pm_power_off  hook 
which locks up on shutdown. The pm_power_off hook gets stuck obtaining 
i2c_lock_adapter(). The holder of the lock is the lis3lv02d 
accelerometer which never releases it.

I do not think there is an issue in lis3lv02d. I think this is a general 
issue with i2c since other drivers have the same design. What I don't 
have is clear understanding of if/when/how i2c_transfer() can be called 
post kernel_power_off(). Is it possible to call i2c_transfer() at this 
point. I have tried calling schedule() and msleep() inside of 
kernel_power_off() after syscore_shutdown(). It looks like interrupts 
are enabled and I can still schedule at this point. So how is it 
possible that lis3lv02d is never able to exit the i2c_transfer()? Is 
there some other lock inside i2c_transfer that it is blocking on?

Is it possible that the process which had the accelerometer open has 
exited while holding the i2c lock. Is it even possible for a device to 
shutdown or file to close while holding a lock in the kernel?

I looked at adding a lis3lv02d_i2c_shutdown, but that was too late in 
the process already and the lis3lv02d was already stuck. Is there a very 
early place during shutdown that I can kick everyone off the i2c bus? 
Obviously this might not be the best general solution, but my concern 
right now is fixing the problem on this particular system first.

-James

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

end of thread, other threads:[~2017-03-06 18:42 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <647cd755-3554-0719-6811-c64ffae0fc1e@revolayer.com>
2017-03-04 21:35 ` lis3lv02d i2c access on shutdown Éric Piel
2017-03-04 22:32   ` Wolfram Sang
2017-03-06 15:10     ` James Maki
2017-03-06 16:54       ` Wolfram Sang
2017-02-18 18:02 James Maki
2017-02-20 18:41 ` James Maki
  -- strict thread matches above, loose matches on Subject: below --
2017-02-18 17:43 James Maki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).