arch/x86/mm/pageattr.c

来源:互联网 发布:云计算的运用 编辑:程序博客网 时间:2024/06/03 13:09

arch/x86/include/asm/pgtable_types.h
This header defines page attributes such as

#define _PAGE_PRESENT   (_AT(pteval_t, 1) << _PAGE_BIT_PRESENT)#define _PAGE_RW    (_AT(pteval_t, 1) << _PAGE_BIT_RW)#define _PAGE_USER  (_AT(pteval_t, 1) << _PAGE_BIT_USER)#define _PAGE_PWT   (_AT(pteval_t, 1) << _PAGE_BIT_PWT)#define _PAGE_PCD   (_AT(pteval_t, 1) << _PAGE_BIT_PCD)#define _PAGE_ACCESSED  (_AT(pteval_t, 1) << _PAGE_BIT_ACCESSED)#define _PAGE_DIRTY (_AT(pteval_t, 1) << _PAGE_BIT_DIRTY)#define _PAGE_PSE   (_AT(pteval_t, 1) << _PAGE_BIT_PSE)#define _PAGE_GLOBAL    (_AT(pteval_t, 1) << _PAGE_BIT_GLOBAL)#define _PAGE_SOFTW1    (_AT(pteval_t, 1) << _PAGE_BIT_SOFTW1)#define _PAGE_SOFTW2    (_AT(pteval_t, 1) << _PAGE_BIT_SOFTW2)#define _PAGE_PAT   (_AT(pteval_t, 1) << _PAGE_BIT_PAT)#define _PAGE_PAT_LARGE (_AT(pteval_t, 1) << _PAGE_BIT_PAT_LARGE)#define _PAGE_SPECIAL   (_AT(pteval_t, 1) << _PAGE_BIT_SPECIAL)#define _PAGE_CPA_TEST  (_AT(pteval_t, 1) << _PAGE_BIT_CPA_TEST)*/#define pgprot_val(x)   ((x).pgprot)#define __pgprot(x) ((pgprot_t) { (x) } )

__change_page_attr(struct cpa_data *cpa, int primary)

struct cpa_data {    unsigned long   *vaddr;    pgd_t       *pgd;    pgprot_t    mask_set;    pgprot_t    mask_clr;    unsigned long   numpages;    int     flags;    unsigned long   pfn;    unsigned    force_split : 1;    int     curpage;    struct page **pages;};
  • Use cpa for information passing
  • Use address to find out corresponding PTE, &= mask_clr, |=mask_set, besides pfn should be added back

CPA Bitmap

#define CPA_FLUSHTLB 1
#define CPA_ARRAY 2
#define CPA_PAGES_ARRAY 4

static inline int change_page_attr_set(unsigned long *addr, int numpages,                       pgprot_t mask, int array){    return change_page_attr_set_clr(addr, numpages, mask, __pgprot(0), 0,        (array ? CPA_ARRAY : 0), NULL);}static inline int cpa_set_pages_array(struct page **pages, int numpages,                       pgprot_t mask){    return change_page_attr_set_clr(NULL, numpages, mask, __pgprot(0), 0,        CPA_PAGES_ARRAY, pages);}
原创粉丝点击