linuxkpi: Define PMD_SHIFT

For now, only define it for x86 architectures.

The DRM generic code started to use it in Linux 6.11.

Reviewed by:	bz, emaste
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D55734
This commit is contained in:
Jean-Sébastien Pédron
2026-03-04 21:36:20 +01:00
parent 7bf9368080
commit be92ad6b12
@@ -53,6 +53,40 @@ typedef struct page *pgtable_t;
#define _PAGE_PWT (((pteval_t) 1) << _PAGE_BIT_PWT)
#define _PAGE_PCD (((pteval_t) 1) << _PAGE_BIT_PCD)
#define _PAGE_PAT (((pteval_t) 1) << _PAGE_BIT_PAT)
/*
* On Linux, the value of `PMD_SHIFT` is hard-coded to 21. This corresponds to
* the FreeBSD `PDRSHIFT` constant.
*/
#define PMD_SHIFT PDRSHIFT
#elif defined(__aarch64__)
/*
* On Linux, the value of `PMD_SHIFT` is computed from `CONFIG_PGTABLE_LEVELS`.
* The result corresponds to one of the FreeBSD `L*_SHIFT` constants. Here, we
* take the value 21 computed from `CONFIG_PGTABLE_LEVELS = 4`, the default on
* aarch64, which equals to `L2_SHIFT`.
*/
#define PMD_SHIFT L2_SHIFT
#elif defined(__powerpc__)
/*
* On Linux, the value of `PMD_SHIFT` is the addition of `PAGE_SHIFT` and
* `PTE_INDEX_SIZE` (hard-coded to 9). The result corresponds to the FreeBSD
* `L3_PAGE_SIZE_SHIFT` constant.
*/
#define PMD_SHIFT L3_PAGE_SIZE_SHIFT
#elif defined(__riscv)
/*
* On Linux, the value of `PMD_SHIFT` is hard-coded to 21. This corresponds to
* the FreeBSD `L2_SHIFT` constant.
*/
#define PMD_SHIFT L2_SHIFT
#endif
#endif /* _LINUXKPI_ASM_PGTABLE_H_ */