On Thu, Jul 25, 2019 at 10:58:12PM +0100, Russell King - ARM Linux admin wrote: > On Thu, Jul 25, 2019 at 02:42:22PM -0700, Matthew Wilcox wrote: > > On Thu, Jul 25, 2019 at 10:38:58PM +0100, Russell King - ARM Linux admin > > wrote: > > > On Thu, Jul 25, 2019 at 07:39:21AM -0700, Matthew Wilcox wrote: > > > > But 'page' isn't necessarily PMD-aligned. I don't think we can rely on > > > > architectures doing the right thing if asked to make a PMD for a > > > > randomly > > > > aligned page. > > > > > > > > How about finding the physical address of something like kernel_init(), > > > > and using the corresponding pte/pmd/pud/p4d/pgd that encompasses that > > > > address? It's also better to pass in the pfn/page rather than using > > > > global > > > > variables to communicate to the test functions. > > > > > > There are architectures (32-bit ARM) where the kernel is mapped using > > > section mappings, and we don't expect the Linux page table walking to > > > work for section mappings. > > > > This test doesn't go so far as to insert the PTE/PMD/PUD/... into the > > page tables. It merely needs an appropriately aligned PFN to create a > > PTE/PMD/PUD/... from. > > Well, in any case, > > c085ac68 t kernel_init > > so I'm not sure that would be an improvement.
I said "the corresponding pte/pmd/pud/p4d/pgd that encompasses that address" So for a PTE, you'd use PFN 0xc085a000, for a PMD, you'd use PFN 0xc0000000 and for a PGD, you'd use PFN 0 (assuming 9 bits per level of table).