Linux kernel 试图清除_PAGE_PRESENT位时遇到内核死机

Linux kernel 试图清除_PAGE_PRESENT位时遇到内核死机,linux-kernel,Linux Kernel,作为一名内核编程新手,我正试图用内核代码弄脏我的双手。我正在尝试清除PAGE_PRESENT位的pte页表条目 因此,我做以下几点 temp_pte = pte_clear_flags(pte, _PAGE_PRESENT); set_pte(ptep, temp_pte); 但是我遇到了内核崩溃。跟踪位于以下链接中 这些是我从日志中发现的几条鱼线: 6月6日16:43:44联想笔记本电脑内核:[131.834145]错误:无法处理fffa6120上的内核分页请求 6月6日1

作为一名内核编程新手,我正试图用内核代码弄脏我的双手。我正在尝试清除PAGE_PRESENT位的pte页表条目

因此,我做以下几点

    temp_pte = pte_clear_flags(pte, _PAGE_PRESENT);
    set_pte(ptep, temp_pte);
但是我遇到了内核崩溃。跟踪位于以下链接中

这些是我从日志中发现的几条鱼线:

6月6日16:43:44联想笔记本电脑内核:[131.834145]错误:无法处理fffa6120上的内核分页请求

6月6日16:43:44联想笔记本电脑内核:[131.835065]IP:[]本机\u集\u pte+0x3/0x10

6月6日16:43:44联想笔记本电脑内核:[131.835598]*pde=018c7067*pte=00000000

20060/基板产品名称 6月6日16:43:44联想笔记本电脑内核:[131.842637]EIP:0060:[]EFLAGS:00010282 CPU:1

6月6日16:43:44联想笔记本电脑内核:[131.843372]EIP位于本机\u集\u pte+0x3/0x10

我查看了下面的堆栈溢出链接,因为日志几乎没有什么相似之处,但仍然无法理解为什么会发生这种情况

是不是在打电话给set_pte之前我需要带一些锁?我查看了这个函数在不同地方的使用情况,并尝试以相同的方式使用它。为什么会发生内核分页请求,因为如果您查看set_pte函数内部,我没有发现任何分配发生在那里,但是正在调用mmu ops


任何指点或帮助都会很好,因为我被困在这个问题上。谢谢

发布您的代码。问题一定出在你的模块上了!下面是代码,如果对set_pte进行了注释,则一切正常。我认为这个错误可能是由于以下原因之一:锁、使用了错误的函数集或者在设置pte之前没有清除pte。我操纵代码来检查这些,但仍然是相同的内核恐慌,不确定出了什么问题。在设置pte pte_clearmm、地址、ptep之前,我尝试使用pte_clear//设置PTEP,临时pte;此外,由于函数有选择,例如set_pte和set_pte_at等,我不确定是否使用了错误的集合。这是我的错。问题的发生是因为任务的mm上应该有一个写锁。服用后,恐慌消除了。