是否可以在没有锁定的情况下睡在关键部分?

时间:2016-09-06 12:56:26

标签: drivers spinlock

我正在为我的NAND设备使用fsl_elbc_nand [1]驱动程序。这是连接到LocalBus控制器(eLBC)的NAND IC,它是SoC的一部分。我还有以太网MAC(ASIX)连接到同一个ELBC总线。 nand驱动程序的工作原理如下:

  1. 通过MMIO设置操作
  2. wait_event_timeout来自elbc的中断,通知操作(读/写/其他)已完成
  3. 处理结果
  4. 问题是,在wait_event_timeout()期间(最多可能需要0.5秒),ASIX 无法与eLBC通话。但它有三种方式:

    1. 中断,当传入帧
    2. 来自softirq的start_xmit用于传出帧
    3. 来自ethtool ioctl的
    4. mdio(即每秒链接状态)
    5. 我可以禁用特定的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

0 个答案:

没有答案