我正在为我的NAND设备使用fsl_elbc_nand [1]驱动程序。这是连接到LocalBus控制器(eLBC)的NAND IC,它是SoC的一部分。我还有以太网MAC(ASIX)连接到同一个ELBC总线。 nand驱动程序的工作原理如下:
问题是,在wait_event_timeout()期间(最多可能需要0.5秒),ASIX 无法与eLBC通话。但它有三种方式:
我可以禁用特定的irq,解决第一种情况。我可以通过start_xmit返回NETDEV_TX_BUSY,所以我将解决第二种情况。但我找不到任何解决第三种情况的方法。我试过螺旋锁,互斥锁,但我已经知道,睡觉时禁止使用自旋锁。
有没有办法实现正确的锁定?也许我应该将wait_event_timeout()替换为其他东西?
[1] http://lxr.free-electrons.com/source/drivers/mtd/nand/fsl_elbc_nand.c?v=3.10