add attribute converted flag

Change-Id: I215e42fa87752d16b8c9744b02d063098cba0af7
This commit is contained in:
toida@cn-r05-10
2018-09-07 09:45:12 +09:00
committed by Masamichi Takagi
parent ddde519263
commit 98aa633856
2 changed files with 11 additions and 5 deletions

View File

@@ -312,6 +312,8 @@ enum ihk_mc_pt_attribute {
PTATTR_FOR_USER = UL(1) << (PHYS_MASK_SHIFT - 1), PTATTR_FOR_USER = UL(1) << (PHYS_MASK_SHIFT - 1),
/* WriteCombine */ /* WriteCombine */
PTATTR_WRITE_COMBINED = PTE_ATTRINDX(2), PTATTR_WRITE_COMBINED = PTE_ATTRINDX(2),
/* converted flag */
ARCH_PTATTR_FLIPPED = PTE_PROT_NONE,
}; };
extern enum ihk_mc_pt_attribute attr_mask; extern enum ihk_mc_pt_attribute attr_mask;

View File

@@ -917,6 +917,7 @@ enum ihk_mc_pt_attribute attr_mask =
| PTATTR_FILEOFF | PTATTR_FILEOFF
| PTATTR_LARGEPAGE | PTATTR_LARGEPAGE
| PTATTR_NO_EXECUTE | PTATTR_NO_EXECUTE
| ARCH_PTATTR_FLIPPED
; ;
#define ATTR_MASK attr_mask #define ATTR_MASK attr_mask
@@ -967,14 +968,17 @@ static unsigned long attr_to_lattr_not_flip(enum ihk_mc_pt_attribute attr, int l
return 0; return 0;
} }
static unsigned long attr_to_l4attr(enum ihk_mc_pt_attribute attr){ return attr_to_l4attr_not_flip(attr ^ attr_flip_bits); }
static unsigned long attr_to_l3attr(enum ihk_mc_pt_attribute attr){ return attr_to_l3attr_not_flip(attr ^ attr_flip_bits); }
static unsigned long attr_to_l2attr(enum ihk_mc_pt_attribute attr){ return attr_to_l2attr_not_flip(attr ^ attr_flip_bits); }
static unsigned long attr_to_l1attr(enum ihk_mc_pt_attribute attr){ return attr_to_l1attr_not_flip(attr ^ attr_flip_bits); }
static unsigned long attr_to_lattr(enum ihk_mc_pt_attribute attr, int level) static unsigned long attr_to_lattr(enum ihk_mc_pt_attribute attr, int level)
{ {
return attr_to_lattr_not_flip(attr ^ attr_flip_bits, level); if (!(attr & ARCH_PTATTR_FLIPPED)) {
attr = (attr ^ attr_flip_bits) | ARCH_PTATTR_FLIPPED;
}
return attr_to_lattr_not_flip(attr, level);
} }
static unsigned long attr_to_l4attr(enum ihk_mc_pt_attribute attr){ return attr_to_lattr(attr, 4); }
static unsigned long attr_to_l3attr(enum ihk_mc_pt_attribute attr){ return attr_to_lattr(attr, 3); }
static unsigned long attr_to_l2attr(enum ihk_mc_pt_attribute attr){ return attr_to_lattr(attr, 2); }
static unsigned long attr_to_l1attr(enum ihk_mc_pt_attribute attr){ return attr_to_lattr(attr, 1); }
static int __set_pt_page(struct page_table *pt, void *virt, unsigned long phys, static int __set_pt_page(struct page_table *pt, void *virt, unsigned long phys,
enum ihk_mc_pt_attribute attr) enum ihk_mc_pt_attribute attr)