- 論壇徽章:
- 0
|
本帖最后由 wzw200 于 2015-02-03 21:04 編輯
也就是中斷返回后。如何保證原先執(zhí)行的軟中斷 還在本來執(zhí)行的cpu上執(zhí)行。也就是說我對中斷“誰觸發(fā)誰執(zhí)行”的特性產(chǎn)生了疑問
我先回這個問題,不知道我說的對不對,
do_softirq 這個函數(shù)是所有CPU都可以調(diào)用的
你再向下跟代碼就會發(fā)現(xiàn)tasklet_hi_action之類的函數(shù)里面都用了每CPU變量
用tasklet_schedule函數(shù)都加到每CPU變量里面了
中斷返回后,別的CPU也只是執(zhí)行自己 每CPU變量的 BH,多CPU的就不是一個變量,你想想,會沖突嗎,
不知道你明白了沒有
open_softirq(NET_TX_SOFTIRQ, net_tx_action);
open_softirq(NET_RX_SOFTIRQ, net_rx_action);
open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq);
open_softirq(int nr, void (*action)(struct softirq_action *))
open_softirq(TASKLET_SOFTIRQ, tasklet_action);
open_softirq(HI_SOFTIRQ, tasklet_hi_action);
open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
深入Linux設(shè)備驅(qū)動程序內(nèi)核機制.pdf 這本書的
第6章 tasklet,你看明白了,就知道了
http://
www.
cnblogs.com/hustcat/archive/2009/08/15/1546601.html
YY哥的中斷三編,你可以看看
因為軟中斷變量是 per cpu的32位數(shù) 這個不是每CPU變量
softirq_vec 不是每CPU變量
raise_softirq_irqoff-》__raise_softirq_irqoff(nr)-》or_softirq_pending-再向下跟,pending是每CPU變量
tasklet_hi_action的鏈表是每CPU變量
do_softirq
{
查看自己的每CPU變量pending
tasklet_hi_action
開始用每CPU變量
} |
|