kmalloc中使用GFP_USER标志是什么?

据我了解GFP_USER是用来为用户空间分配内存的。 这是否意味着分配的页面在内核空间,用户可以访问? 这些页面是否需要在用户空间中映射,或者地址是否可以直接由用户访问。 如果他们需要mmapp那么GFP_USER和GFP_KERNEL有什么区别?

内核资源中可以找到简单的解释:

GFP_KERNEL是内核内部分配的典型代码。 调用者需要ZONE_NORMAL或较低的地区直接访问,但可以直接回收。

GFP_USER用于用户空间分配,也需要由内核或硬件直接访问。 它通常被硬件用于映射到用户空间(例如图形)的硬件仍然必须DMA的缓冲区。 为这些分配强制执行cpuset限制。

 #define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS) #define GFP_USER (__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL) 

从这里 :

__GFP_HARDWALL强制执行cpuset内存分配策略。