2017-10-13 80 views
0

我正在寫一個處理數據包時間戳的linux phy驅動程序。下半部分是計算時間戳並將此信息發送到內核網絡堆棧然後發送到用戶空間的過程。下半部分需要來自tasklet調用者擁有的skb(包)的一些信息。我很難將這個skb傳遞給takslet。 tasklet處理函數不會接受除unsigned long以外的任何輸入。我被困在這裏。以下是您瞭解的代碼片段 -在Linux驅動程序中與tasklet下半部分共享數據

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); 

    } 

欣賞您的輸入。謝謝

+0

無符號長整型在Linux中等於void *。 – 0andriy

回答

0

Tasklet函數收到DECLARE_TASKLET/tasklet_init中指定的相同data參數。通常這是一個指向某個(大)驅動程序結構的指針。

因此基本上,您不能直接在ISRtasklet之間傳遞運行時數據,並且應該使用某種共享變量(可能是上述結構)並進行適當的鎖定。