guanss2014 发表于 2014-02-14 10:57

中断处理函数 进程休眠

本人菜鸟一枚,写驱动有许多问题,请大家指教
   我在写hsi驱动的中断时,在read函数中调用wait_event_interrupbile()函数,当前进程就会挂起。这时候触发中断,进入中断处理函数,想在中断处理函数中wake_up唤醒当前进程,但是wake_up中的参数不会传递,代码如下:

static ssize_t hsc_read(struct *file, char __user *buf, size_t len, loff_t *ppos __maybe_unused)
{
    struct hsc_channel *channel = file->private_data;
    struct hsi_msg *msg;
    ssize_t ret;
    ... ...
    ret = wait_event_interruptible(channel->rx_wait, !list_empty(&channel->free_msgs_list));
    ... ...
    msg = hsc_get_first_msg(channel->free_msgs_list);
   ... ...

   copy_to_user((void __user *)buf, sg_virt(msg->sgt.sgl), len);
   ... ...

}
中断处理函数:

static irqreturn_t hsi_imx_isr(int irq, void *dev_id)
{
    struct hsi_imx_data *hsi_imx = dev_id;
    .... ....

    wake_up(&channel->rx_wait);

    return IRQ_HANDLED;

}

其中wake_up函数的参数正式wait_event_interruptible中的第一个参数,但是中断处理函数位于hsi_imx.c文件中,read函数位于hsi_char.c中,那么关于这个参数channel怎么才能传递?
页: [1]
查看完整版本: 中断处理函数 进程休眠