我正在阅读设备驱动程序的源代码。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