我正在閱讀設備驅動程序的源代碼。kmalloc許多結構,我應該一次kmalloc全部或分別
它試圖用kmalloc 16 struct foo
spin_lock_bh(&sq->lock);
for (i=0; i<16; i++) {
msg = kmalloc(sizeof(*msg), GFP_ATOMIC);
if (!msg)
break;
msg->next = sq->msg_first;
sq->msg_first = msg;
sq->nr_msgs++;
}
spin_unlock_bh(&sq->lock);
所以,這將是更好kmalloc(sizeof(*msg) * 16, GFP_ATOMIC)
?爲什麼?
這是來自工作設備驅動程序的真實源代碼嗎?在鎖上執行鎖定,然後在不同的'spinlock_t'變量'sq-> avmi_lock'上解鎖。這看起來不正確。 – Aleksey
'會更好嗎......' - 這是非常依賴你的需求。實際上,你正在爲消息選擇一個*類型的容器*:** list **(爲每個元素分配,每個元素需要包含到下一個元素的鏈接)或** array **/** vector **(single分配給所有元素,任何元素都可以通過整數索引來訪問)。 – Tsyvarev