This commit is contained in:
iap10@freefall.cl.cam.ac.uk committed 2005-08-13 21:55:11 +00:00
commit cb9d509d6a
4 files changed
+54 -5

No files matched your search

@@ -41,8 +41,7 @@ static void *__kmap_atomic(struct page *page, enum km_type type, pgprot_t prot)
if (!pte_none(*(kmap_pte-idx)))
BUG();
#endif
set_pte(kmap_pte-idx, mk_pte(page, prot));
__flush_tlb_one(vaddr);
set_pte_at_sync(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot));
return (void*) vaddr;
}
@@ -14,7 +14,28 @@
* hook is made available.
*/
#define set_pte(pteptr, pteval) (*(pteptr) = pteval)
#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
inline static void set_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t val )
{
if ( ((mm != current->mm) && (mm != &init_mm)) ||
HYPERVISOR_update_va_mapping( (addr), (val), 0 ) )
{
set_pte(ptep, val);
}
}
inline static void set_pte_at_sync(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t val )
{
if ( ((mm != current->mm) && (mm != &init_mm)) ||
HYPERVISOR_update_va_mapping( (addr), (val), UVMF_INVLPG ) )
{
set_pte(ptep, val);
xen_invlpg(addr);
}
}
#define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
#ifndef CONFIG_XEN_SHADOW_MODE
@@ -68,7 +68,27 @@ static inline void set_pte(pte_t *ptep, pte_t pte)
xen_l1_entry_update((pteptr), (pteval))
# define set_pte_atomic(pteptr,pteval) set_pte(pteptr,pteval)
#endif
#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
inline static void set_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t val )
{
if ( ((mm != current->mm) && (mm != &init_mm)) ||
HYPERVISOR_update_va_mapping( (addr), (val), 0 ) )
{
set_pte(ptep, val);
}
}
inline static void set_pte_at_sync(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t val )
{
if ( ((mm != current->mm) && (mm != &init_mm)) ||
HYPERVISOR_update_va_mapping( (addr), (val), UVMF_INVLPG ) )
{
set_pte(ptep, val);
xen_invlpg(addr);
}
}
#ifdef CONFIG_XEN_SHADOW_MODE
# define set_pmd(pmdptr,pmdval) \
@@ -265,7 +265,16 @@ static inline unsigned long pud_bad(pud_t pud)
val &= ~(_PAGE_USER | _PAGE_DIRTY);
return val & ~(_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED);
}
#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
inline static void set_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t val )
{
if ( ((mm != current->mm) && (mm != &init_mm)) ||
HYPERVISOR_update_va_mapping( (addr), (val), 0 ) )
{
set_pte(ptep, val);
}
}
#define pte_none(x) (!(x).pte)
#define pte_present(x) ((x).pte & (_PAGE_PRESENT | _PAGE_PROTNONE))
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.