Skip to content

Commit

Permalink
arch/tile: don't set the homecache of a PTE unless appropriate
Browse files Browse the repository at this point in the history
We make sure not to try to set the home for an MMIO PTE (on tilegx)
or a PTE that isn't referencing memory managed by Linux.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
  • Loading branch information
Chris Metcalf committed Apr 2, 2012
1 parent 4829273 commit 12400f1
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions arch/tile/mm/pgtable.c
Original file line number Diff line number Diff line change
Expand Up @@ -469,10 +469,18 @@ void __set_pte(pte_t *ptep, pte_t pte)

void set_pte(pte_t *ptep, pte_t pte)
{
struct page *page = pfn_to_page(pte_pfn(pte));

/* Update the home of a PTE if necessary */
pte = pte_set_home(pte, page_home(page));
if (pte_present(pte) &&
(!CHIP_HAS_MMIO() || hv_pte_get_mode(pte) != HV_PTE_MODE_MMIO)) {
/* The PTE actually references physical memory. */
unsigned long pfn = pte_pfn(pte);
if (pfn_valid(pfn)) {
/* Update the home of the PTE from the struct page. */
pte = pte_set_home(pte, page_home(pfn_to_page(pfn)));
} else if (hv_pte_get_mode(pte) == 0) {
/* remap_pfn_range(), etc, must supply PTE mode. */
panic("set_pte(): out-of-range PFN and mode 0\n");
}
}

__set_pte(ptep, pte);
}
Expand Down

0 comments on commit 12400f1

Please sign in to comment.