[IA64] pte_xchg added

pte_xchg added to atomically exchange pte.

Signed-off-by: Tristan Gingold <tristan.gingold@bull.net>
This commit is contained in:
awilliam@xenbuild.aw committed 2006-05-17 16:31:46 -06:00
1 parent 911e3e203f
commit b752ccb8d2
2 files changed
+17 -3

No files matched your search

+5 -3
View File
@@ -746,6 +746,7 @@ __assign_new_domain_page(struct domain *d, unsigned long mpaddr, pte_t* pte)
set_pte(pte, pfn_pte(maddr >> PAGE_SHIFT,
__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX)));
mb ();
//XXX CONFIG_XEN_IA64_DOM0_VP
// TODO racy
set_gpfn_from_mfn(page_to_mfn(p), mpaddr >> PAGE_SHIFT);
@@ -803,6 +804,7 @@ __assign_domain_page(struct domain *d,
set_pte(pte,
pfn_pte(physaddr >> PAGE_SHIFT,
__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX)));
mb ();
} else
printk("%s: mpaddr %lx already mapped!\n", __func__, mpaddr);
}
@@ -1123,13 +1125,13 @@ assign_domain_page_replace(struct domain *d, unsigned long mpaddr,
struct mm_struct *mm = &d->arch.mm;
pte_t* pte;
pte_t old_pte;
pte_t npte;
pte = lookup_alloc_domain_pte(d, mpaddr);
// update pte
old_pte = ptep_get_and_clear(mm, mpaddr, pte);
set_pte(pte, pfn_pte(mfn,
__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX)));
npte = pfn_pte(mfn, __pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX));
old_pte = ptep_xchg(mm, mpaddr, pte, npte);
if (!pte_none(old_pte)) {
unsigned long old_mfn;
struct page_info* old_page;
@@ -397,6 +397,18 @@ ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
#endif
}
static inline pte_t
ptep_xchg(struct mm_struct *mm, unsigned long addr, pte_t *ptep, pte_t npte)
{
#ifdef CONFIG_SMP
return __pte(xchg((long *) ptep, pte_val(npte)));
#else
pte_t pte = *ptep;
set_pte (ptep, npte);
return pte;
#endif
}
#ifndef XEN
static inline void
ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.