arm linux page initialization
Oscar Salvador <[email protected]> Thu, 13 Oct 2016 13:09:08 +0200 (CEST)
| Newsgroups | gmane.linux.ports.arm.general |
|---|---|
| Message-ID | <alpine.DEB.2.11.1610131308190.23667@oscar> |
Hi all, I have a question regarding page initialization on arm32 without LPAE support enabled. I was trying to find the right pte of a kernel linear address (f.i 0xc05518bc) by walking the page tables starting with the pgd taken from TTBR1. I was using the functions: pgd_offset_k pud_offset pmd_offset pte_offset_kernel Since pte_offset_kernel should lead me to virtual address of the Linux PTE version, I thougt I should be able to check the L_PTE_* bits. But actually I realized that the pte given from pte_offset_kernel didn't have such flags. By looking at the code from arch/arm/mm/mmu.c, I could see that, actually (talking about a system with 1GB ram), during map_lowmem function, memory (virtual) from 0xC0000000 to 0xef800000 is being put in sections of 1MB and marked as a "PMD_TYPE_SECT | PMD_SECT_AP_WRITE", then it does a flush_pmd_entry. So that means that the first level table for these addresses are pointing directly to a Section, instead to point to a second level tables, right? If that's true, I guess this memory don't have PTE's (at least I didn't see that at boot time). Given that, without pte's available for this range of memory, we shoudln't be able to check for L_PTE_* flags here. Then, why do we have all these L_PTE_* flags? Are not they being used to check for instance if the kernel code is writeable or not (I think you can configure that). I hope I could explain my question in a clear way. Thank you very much