Refactor "do write back only MAP_SHARED pages"
* free_process_memory_range() always passes memobj to ihk_mc_pt_free_range() * clear_range_*() don't flush page in fileobj with MF_PRIVATE flag Fujitsu: POSTK_DEBUG_TEMP_FIX_87 Change-Id: I8d46d029b3fc51ca6f0e59d748a2fe93e324a374
This commit is contained in:
committed by
Dominique Martinet
parent
fb24dcea2e
commit
9cfc373538
@ -2174,8 +2174,9 @@ static int clear_range_l1(void *args0, pte_t *ptep, uint64_t base,
|
||||
(old & PTE_DIRTY), args->memobj,
|
||||
args->memobj ? args->memobj->flags : -1);
|
||||
}
|
||||
if (page && page_is_in_memobj(page) && ptl1_dirty(&old) &&
|
||||
(args->memobj) && !(args->memobj->flags & MF_ZEROFILL)) {
|
||||
if (page && page_is_in_memobj(page) &&
|
||||
ptl1_dirty(&old) && args->memobj &&
|
||||
!(args->memobj->flags & (MF_ZEROFILL | MF_PRIVATE))) {
|
||||
memobj_flush_page(args->memobj, phys, PTL1_SIZE);
|
||||
}
|
||||
|
||||
@ -2284,8 +2285,9 @@ static int clear_range_middle(void *args0, pte_t *ptep, uint64_t base,
|
||||
page = phys_to_page(phys);
|
||||
}
|
||||
|
||||
if (page && page_is_in_memobj(page) && ptl_dirty(&old, level) &&
|
||||
!(args->memobj->flags & MF_ZEROFILL)) {
|
||||
if (page && page_is_in_memobj(page) &&
|
||||
ptl_dirty(&old, level) && args->memobj &&
|
||||
!(args->memobj->flags & (MF_ZEROFILL | MF_PRIVATE))) {
|
||||
memobj_flush_page(args->memobj, phys, tbl.pgsize);
|
||||
}
|
||||
|
||||
|
||||
@ -1499,8 +1499,10 @@ static int clear_range_l1(void *args0, pte_t *ptep, uint64_t base,
|
||||
if (page) {
|
||||
dkprintf("%s: page=%p,is_in_memobj=%d,(old & PFL1_DIRTY)=%lx,memobj=%p,args->memobj->flags=%x\n", __FUNCTION__, page, page_is_in_memobj(page), (old & PFL1_DIRTY), args->memobj, args->memobj ? args->memobj->flags : -1);
|
||||
}
|
||||
if (page && page_is_in_memobj(page) && pte_is_dirty(&old, PTL1_SIZE) &&
|
||||
args->memobj && !(args->memobj->flags & MF_ZEROFILL)) {
|
||||
|
||||
if (page && page_is_in_memobj(page) &&
|
||||
pte_is_dirty(&old, PTL1_SIZE) && args->memobj &&
|
||||
!(args->memobj->flags & (MF_ZEROFILL | MF_PRIVATE))) {
|
||||
memobj_flush_page(args->memobj, phys, PTL1_SIZE);
|
||||
}
|
||||
|
||||
@ -1566,7 +1568,9 @@ static int clear_range_l2(void *args0, pte_t *ptep, uint64_t base,
|
||||
page = phys_to_page(phys);
|
||||
}
|
||||
|
||||
if (page && page_is_in_memobj(page) && pte_is_dirty(&old, PTL2_SIZE)) {
|
||||
if (page && page_is_in_memobj(page) &&
|
||||
pte_is_dirty(&old, PTL2_SIZE) && args->memobj &&
|
||||
!(args->memobj->flags & (MF_ZEROFILL | MF_PRIVATE))) {
|
||||
memobj_flush_page(args->memobj, phys, PTL2_SIZE);
|
||||
}
|
||||
|
||||
@ -1647,7 +1651,9 @@ static int clear_range_l3(void *args0, pte_t *ptep, uint64_t base,
|
||||
page = phys_to_page(phys);
|
||||
}
|
||||
|
||||
if (page && page_is_in_memobj(page) && pte_is_dirty(&old, PTL3_SIZE)) {
|
||||
if (page && page_is_in_memobj(page) &&
|
||||
pte_is_dirty(&old, PTL3_SIZE) && args->memobj &&
|
||||
!(args->memobj->flags & (MF_ZEROFILL | MF_PRIVATE))) {
|
||||
memobj_flush_page(args->memobj, phys, PTL3_SIZE);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user