Thread (36 messages) 36 messages, 3 authors, 2012-02-07
STALE5233d

[PATCH 1/7] Add various hugetlb arm high level hooks

From: catalin.marinas@arm.com (Catalin Marinas)
Date: 2012-02-07 11:54:48

On Tue, Feb 07, 2012 at 02:00:25AM +0000, bill4carson wrote:
On 2012?02?07? 01:07, Catalin Marinas wrote:
quoted
On Mon, Jan 30, 2012 at 07:57:12AM +0000, bill4carson at gmail.com wrote:
quoted
+static inline void set_hugepte_section(struct mm_struct *mm, unsigned long addr,
+                                  pte_t *ptep, pte_t pte)
+{
+       pgd_t *pgd;
+       pud_t *pud;
+       pmd_t *pmd;
+
+       int col, row;
+       pte_t **huge_linuxpte =&mm->huge_2m_pte[0];
+
+       row = HUGEPAGE_2M_PTE_ARRAY_ROW(addr);
+       col = HUGEPAGE_2M_PTE_ARRAY_COL(addr);
+
+       /* an valid pte pointer is expected */
+       BUG_ON(huge_linuxpte[row] == 0);
+       BUG_ON(ptep !=&huge_linuxpte[row][col]);
+
+       /* set linux pte first */
+       huge_linuxpte[row][col] = pte;
+
+       /* set hardware pte */
+       pgd = pgd_offset(mm, addr);
+       pud = pud_offset(pgd, addr);
+       pmd = pmd_offset(pud, addr);
+
+       set_hugepte_at(mm, addr, pmd, pte);
+}
I haven't followed the whole structure of your patches but do we need to
walk the page tables here? Isn't the ptep the same as the pmd when
passed to this function (at least it was with my LPAE implementation).
Here, ptep is not the same as pmd, mm layer always manages linux pte.
For normal page, linux pte and hardware pte is just an 2048 bytes offset
away and cpu_v7_set_pte_ext can set both linux/hardware pte easily.

For huge page, linux pte is stored somewhere else,far away from hardware
pte table, in set_hugepte_section, "ptep" is the huge page based linux
pte address, first set linux pte value "pte" in there; and hardware pmd
address could only be derived from "addr" by a page table walk, then
setting hardware pmd value in set_hugepte_at, which
cpu_v7_set_hugepte_ext does the whole job.
OK. I thought we already have some pointer in the Linux pmd for the
actual hardware pmd. Walking the page table isn't expensive in this
case, with only 2 levels. For LPAE we don't even need this since we
don't have a separate Linux pte/pmd.

-- 
Catalin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help