在linux驱动程序中与tasklet下半部分共享数据

时间:2017-10-13 09:39:18

标签: linux-kernel linux-device-driver

我正在编写一个处理数据包时间戳的linux phy驱动程序。下半部分是计算时间戳并将此信息发送到内核网络堆栈然后发送到用户空间的过程。下半部分需要来自tasklet调用者所具有的skb(包)的一些信息。我很难将这个skb传递给takslet。 tasklet处理函数不接受unsigned long以外的任何输入。我被困在这里。以下是您理解的代码段 -

    static void tx_ts_task(unsigned long val)
    {
      struct phyts *phyts = container_of(&val, struct phyts, int_flags);
      //skb_copy(skb);  ///want to access skb in this tasklet but I am unable to do this.
      .
      .
     }

    int tx_timestamp(struct phyts *phyts, struct sk_buff *skb, int len)
    {
      .
      .
       tasklet_schedule(&tx_ts_tasklet);

     }

感谢您的输入。感谢

1 个答案:

答案 0 :(得分:0)

Tasklet函数接收data中指定的相同DECLARE_TASKLET/tasklet_init参数。通常这是一个指向某个(大)驱动程序结构的指针。

基本上,你不能直接在ISRtasklet之间传递运行时数据,而应该使用某种共享变量(可能是上面提到的结构)并进行适当的锁定。 / p>