linux - 如何使用_PAGE_BIT_SOFTW1?

标签 linux linux-kernel x86-64 page-tables

PTE 中有一些位可供程序员使用。 比如linux内核中定义了如下宏

// arch/x86/include/asm/pgtable_types.h
#define _PAGE_BIT_SOFTW1    9   /* available for programmer */
#define _PAGE_BIT_SOFTW2    10  /* " */
#define _PAGE_BIT_SOFTW3    11  /* " */
#define _PAGE_BIT_SOFTW4    58  /* available for programmer */

不过,第9、11、58位似乎被内核中的某些代码使用了。 我禁用了一些配置和宏,如下所示,以便代码不使用这些位。

// arch/x86/include/asm/pgtable_types.h
#define __HAVE_ARCH_PTE_SPECIAL
#undef __HAVE_ARCH_PTE_SPECIAL // This is added by me.

// arch/Kconfig
#config HAVE_ARCH_SOFT_DIRTY
#   bool

禁用它们后,我编译内核并收到内核错误消息。

ld:./arch/x86/kernel/vmlinux.lds:506: syntax error
Makefile:983: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1

我想使用这些位。 如何禁用使用这些位的代码?

最佳答案

内核不使用_PAGE_BIT_SOFTW2

_PAGE_BIT_SOFTW3 用作脏位。您可以使用 CONFIG_MEM_SOFT_DIRTY 禁用代码.

据我所知,没有简单的方法可以阻止内核使用 _PAGE_BIT_SOFTW1_PAGE_BIT_SOFTW4

请注意,同样在 4 级分页中,所有页表条目的第 52-57 位也可供程序员使用。 Linux 似乎没有使用它们。

关于linux - 如何使用_PAGE_BIT_SOFTW1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102068/

相关文章:

c++ - 连接 OpenCV 时对 SGILL 进行编程

linux - 有没有办法检索 kubernetes 容器的临时存储使用详细信息?

linux - 在 Linux 中立即检测新进程的创建

linux - 为什么在使用 cmp 指令时会出现段错误?

android - ffmpeg for android build - 是否完整

Linux - 命名管道 - 丢失数据

android - 获取适用于 Android x86 的 VBox guest 添加

c - 添加 TCP 选项

gcc - 为什么生成的程序集将 edi 移动到堆栈上的变量?

gcc - 在 32 位机器上编译的汇编代码与使用 "gcc -m32"编译的代码不同吗?