+ -
当前位置:首页 → 问答吧 → 求助:关于中断中使用I2C 报错

求助:关于中断中使用I2C 报错

时间:2010-09-06

来源:互联网

本帖最后由 ntqumeng 于 2010-09-06 14:56 编辑

在定时期内使用i2c读取数值的时候执行到互斥锁加锁mutex_trylock会崩溃是什么原因?
菜鸟求助~

内核版本号是Linux-2.6.32

报错信息如下
  1. WARNING: at kernel/mutex.c:436 mutex_trylock+0x68/0x138()
  2. Modules linked in: minix ipv6
  3. Backtrace:
  4. [<c002a7d0>] (dump_backtrace+0x0/0x114) from [<c02abdb0>] (dump_stack+0x18/0x1c)
  5. r7:00000000 r6:c02ad064 r5:c0329953 r4:000001b4
  6. [<c02abd98>] (dump_stack+0x0/0x1c) from [<c003c1a8>] (warn_slowpath_common+0x50)
  7. [<c003c158>] (warn_slowpath_common+0x0/0x68) from [<c003c1d8>] (warn_slowpath_n)
  8. r7:c304e830 r6:00000000 r5:00000000 r4:c304e848
  9. [<c003c1c0>] (warn_slowpath_null+0x0/0x1c) from [<c02ad064>] (mutex_trylock+0x6)
  10. [<c02acffc>] (mutex_trylock+0x0/0x138) from [<c01e2af4>] (i2c_transfer+0x6c/0xf)
  11. r7:c304e830 r6:00000000 r5:00000000 r4:c304e830
  12. [<c01e2a88>] (i2c_transfer+0x0/0xfc) from [<c01e2f64>] (i2c_smbus_xfer+0x3e0/0x)
  13. [<c01e2b84>] (i2c_smbus_xfer+0x0/0x524) from [<c01e33a4>] (i2c_smbus_read_byte_)
  14. [<c01e3368>] (i2c_smbus_read_byte_data+0x0/0x4c) from [<c01e62d0>] (pca9555_get)
  15. [<c01e6298>] (pca9555_getval+0x0/0x48) from [<c01730e4>] (irda_timer_handler+0x)
  16. r5:c039c660 r4:00000102
  17. [<c01730c4>] (irda_timer_handler+0x0/0x38) from [<c00467dc>] (run_timer_softirq)
  18. [<c0046620>] (run_timer_softirq+0x0/0x280) from [<c0041984>] (__do_softirq+0x98)
  19. [<c00418ec>] (__do_softirq+0x0/0x12c) from [<c0041a68>] (irq_exit+0x50/0xa8)
  20. [<c0041a18>] (irq_exit+0x0/0xa8) from [<c0026074>] (asm_do_IRQ+0x74/0x8c)
  21. [<c0026000>] (asm_do_IRQ+0x0/0x8c) from [<c0026cd4>] (__irq_usr+0x54/0xa0)
  22. Exception stack(0xc3579fb0 to 0xc3579ff8)
  23. 9fa0:                                     00000000 be910cb4 00000001 be910cb4
  24. 9fc0: 00015c94 00000000 00009e60 00000000 00000000 00000000 40025000 be910cc4
  25. 9fe0: 00000000 be910cb0 00009f84 00009f84 00000010 ffffffff
  26. r5:fec48000 r4:ffffffff
  27. ---[ end trace 14993aec56274977 ]---
  28. BUG: scheduling while atomic: irda/2074/0x00000103
  29. Modules linked in: minix ipv6

  30. Pid: 2074, comm:                 irda
  31. CPU: 0    Tainted: G        W   (2.6.32-rc2-davinci1 #215)
  32. PC is at 0x9f84
  33. LR is at 0x9f84
  34. pc : [<00009f84>]    lr : [<00009f84>]    psr: 00000010
  35. sp : be910cb0  ip : 00000000  fp : be910cc4
  36. r10: 40025000  r9 : 00000000  r8 : 00000000
  37. r7 : 00000000  r6 : 00009e60  r5 : 00000000  r4 : 00015c94
  38. r3 : be910cb4  r2 : 00000001  r1 : be910cb4  r0 : 00000000
  39. Flags: nzcv  IRQs on  FIQs on  Mode USER_32  ISA ARM  Segment user
  40. Control: 0005317f  Table: 83d3c000  DAC: 00000015
  41. [<c0027e60>] (show_regs+0x0/0x50) from [<c0034c68>] (__schedule_bug+0x4c/0x60)
  42. r5:c039c660 r4:c3579fb0
  43. [<c0034c1c>] (__schedule_bug+0x0/0x60) from [<c02ac0ac>] (schedule+0x84/0x380)
  44. r5:c039c660 r4:00003c32
  45. [<c02ac028>] (schedule+0x0/0x380) from [<c02acba0>] (schedule_timeout+0x1e0/0x2)
  46. [<c02ac9c0>] (schedule_timeout+0x0/0x220) from [<c02ac83c>] (wait_for_common+0x)
  47. r7:00000064 r6:c304e808 r5:c3ee63c0 r4:c3579d48
  48. [<c02ac748>] (wait_for_common+0x0/0x1bc) from [<c02ac93c>] (wait_for_completion)
  49. [<c02ac928>] (wait_for_completion_interruptible_timeout+0x0/0x18) from [<c01e57)
  50. [<c01e5548>] (i2c_davinci_xfer+0x0/0x2fc) from [<c01e2b2c>] (i2c_transfer+0xa4/)
  51. [<c01e2a88>] (i2c_transfer+0x0/0xfc) from [<c01e2f64>] (i2c_smbus_xfer+0x3e0/0x)
  52. [<c01e2b84>] (i2c_smbus_xfer+0x0/0x524) from [<c01e33a4>] (i2c_smbus_read_byte_)
  53. [<c01e3368>] (i2c_smbus_read_byte_data+0x0/0x4c) from [<c01e62d0>] (pca9555_get)
  54. [<c01e6298>] (pca9555_getval+0x0/0x48) from [<c01730e4>] (irda_timer_handler+0x)
  55. r5:c039c660 r4:00000102
  56. [<c01730c4>] (irda_timer_handler+0x0/0x38) from [<c00467dc>] (run_timer_softirq)
  57. [<c0046620>] (run_timer_softirq+0x0/0x280) from [<c0041984>] (__do_softirq+0x98)
  58. [<c00418ec>] (__do_softirq+0x0/0x12c) from [<c0041a68>] (irq_exit+0x50/0xa8)
  59. [<c0041a18>] (irq_exit+0x0/0xa8) from [<c0026074>] (asm_do_IRQ+0x74/0x8c)
  60. [<c0026000>] (asm_do_IRQ+0x0/0x8c) from [<c0026cd4>] (__irq_usr+0x54/0xa0)
  61. Exception stack(0xc3579fb0 to 0xc3579ff8)
  62. 9fa0:                                     00000000 be910cb4 00000001 be910cb4
  63. 9fc0: 00015c94 00000000 00009e60 00000000 00000000 00000000 40025000 be910cc4
  64. 9fe0: 00000000 be910cb0 00009f84 00009f84 00000010 ffffffff
  65. r5:fec48000 r4:ffffffff
  66. BUG: scheduling while atomic: irda/2074/0x00000103
  67. Modules linked in: minix ipv6

  68. Pid: 2074, comm:                 irda
  69. CPU: 0    Tainted: G        W   (2.6.32-rc2-davinci1 #215)
  70. PC is at 0x9f84
  71. LR is at 0x9f84
  72. pc : [<00009f84>]    lr : [<00009f84>]    psr: 00000010
  73. sp : be910cb0  ip : 00000000  fp : be910cc4
  74. r10: 40025000  r9 : 00000000  r8 : 00000000
  75. r7 : 00000000  r6 : 00009e60  r5 : 00000000  r4 : 00015c94
  76. r3 : be910cb4  r2 : 00000001  r1 : be910cb4  r0 : 00000000
  77. Flags: nzcv  IRQs on  FIQs on  Mode USER_32  ISA ARM  Segment user
  78. Control: 0005317f  Table: 83d3c000  DAC: 00000015
  79. [<c0027e60>] (show_regs+0x0/0x50) from [<c0034c68>] (__schedule_bug+0x4c/0x60)
  80. r5:c039c660 r4:c3579fb0
  81. [<c0034c1c>] (__schedule_bug+0x0/0x60) from [<c02ac0ac>] (schedule+0x84/0x380)
  82. r5:c039c660 r4:00003c47
  83. [<c02ac028>] (schedule+0x0/0x380) from [<c02acba0>] (schedule_timeout+0x1e0/0x2)
  84. [<c02ac9c0>] (schedule_timeout+0x0/0x220) from [<c02ac83c>] (wait_for_common+0x)
  85. r7:00000064 r6:c304e808 r5:c3ee63c0 r4:c3579d48
  86. [<c02ac748>] (wait_for_common+0x0/0x1bc) from [<c02ac93c>] (wait_for_completion)
  87. [<c02ac928>] (wait_for_completion_interruptible_timeout+0x0/0x18) from [<c01e57)
  88. [<c01e5548>] (i2c_davinci_xfer+0x0/0x2fc) from [<c01e2b2c>] (i2c_transfer+0xa4/)
  89. [<c01e2a88>] (i2c_transfer+0x0/0xfc) from [<c01e2f64>] (i2c_smbus_xfer+0x3e0/0x)
  90. [<c01e2b84>] (i2c_smbus_xfer+0x0/0x524) from [<c01e33a4>] (i2c_smbus_read_byte_)
  91. [<c01e3368>] (i2c_smbus_read_byte_data+0x0/0x4c) from [<c01e62d0>] (pca9555_get)
  92. [<c01e6298>] (pca9555_getval+0x0/0x48) from [<c01730e4>] (irda_timer_handler+0x)
  93. r5:c039c660 r4:00000102
  94. [<c01730c4>] (irda_timer_handler+0x0/0x38) from [<c00467dc>] (run_timer_softirq)
  95. [<c0046620>] (run_timer_softirq+0x0/0x280) from [<c0041984>] (__do_softirq+0x98)
  96. [<c00418ec>] (__do_softirq+0x0/0x12c) from [<c0041a68>] (irq_exit+0x50/0xa8)
  97. [<c0041a18>] (irq_exit+0x0/0xa8) from [<c0026074>] (asm_do_IRQ+0x74/0x8c)
  98. [<c0026000>] (asm_do_IRQ+0x0/0x8c) from [<c0026cd4>] (__irq_usr+0x54/0xa0)
  99. Exception stack(0xc3579fb0 to 0xc3579ff8)
  100. 9fa0:                                     00000000 be910cb4 00000001 be910cb4
  101. 9fc0: 00015c94 00000000 00009e60 00000000 00000000 00000000 40025000 be910cc4
  102. 9fe0: 00000000 be910cb0 00009f84 00009f84 00000010 ffffffff
  103. r5:fec48000 r4:ffffffff
复制代码

作者: ntqumeng   发布时间: 2010-09-06

中断中不能使用mutex_lock,因为mutex_lock会主动schedule。

作者: ShadowStar   发布时间: 2010-09-06

回复 ShadowStar


    那是不是不能在中断里用i2c?

作者: ntqumeng   发布时间: 2010-09-06

中断中不能使用一切会自行schedule的函数/处理。

我没有阅读过i2c这部分,不过mutex_lock是肯定不可以的。

作者: ShadowStar   发布时间: 2010-09-06

热门下载

更多