标志 PF_MEMALLOC 有什么用

Raj*_*lli 2 scheduler linux-device-driver linux-kernel

当我在Linux中的一个设备驱动程序中浏览一些代码时,我发现该标志PF_MEMALLOC正在线程(进程)中设置。我在头文件中找到了这个标志的定义,它说“分配内存”

#define PF_MEMALLOC     0x00000800      /* Allocating memory */
Run Code Online (Sandbox Code Playgroud)

所以,我的疑问是,当在进程/线程之类的代码中设置这个标志时,它到底有什么用途current->flags |= PF_MEMALLOC;

caf*_*caf 7

该标志在内核中使用来指示当前正在使用内存分配路径执行的线程,因此允许递归地分配它需要的任何内存,忽略水印并且不会被迫写出脏页。

这是为了确保,如果尝试释放页面以满足原始分配请求的代码本身必须分配少量内存才能继续,则该代码不会递归地尝试释放页面。

大多数驱动程序不需要此标志。