簡體   English   中英

__get_vm_area_node 中的 BUG_ON 是什么原因?

[英]What's the reason for BUG_ON in __get_vm_area_node?

為什么在__get_vm_area_node有這個斷言?

static struct vm_struct *__get_vm_area_node(...)
{
    // ...
    BUG_ON(in_interrupt())
    // ...
} 

我認為引入該行的提交很好地解釋了它:

如果__vmalloc被調用來分配內存GFP_ATOMIC在原子上下文中,調用的結果鏈__get_vm_area_node分配內存vm_structGFP_KERNEL ,導致“從無效的上下文睡覺”的警告。 通過將GFP標記沿所以該補丁修復它__get_vm_area_node分配內存vm_struct使用相同的標志。

@@ -160,13 +160,15 @@ int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages)
    return err;
 }
 
-struct vm_struct *__get_vm_area_node(unsigned long size, unsigned long flags,
-               unsigned long start, unsigned long end, int node)
+static struct vm_struct *__get_vm_area_node(unsigned long size, unsigned long flags,
+                       unsigned long start, unsigned long end,
+                       int node, gfp_t gfp_mask)
 {
    struct vm_struct **p, *tmp, *area;
    unsigned long align = 1;
    unsigned long addr;
 
+   BUG_ON(in_interrupt());
    if (flags & VM_IOREMAP) {
        int bit = fls(size);

簡而言之,該函數中的以下代碼可以 sleep ,並且在中斷上下文中不允許sleep 添加BUG_ON是為了防止此類問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM