Messages in this thread | | | From | KOSAKI Motohiro <> | Date | Sun, 23 Mar 2014 14:50:28 -0700 | Subject | Re: [PATCH 2/5] vrange: Add purged page detection on setting memory non-volatile |
| |
On Sun, Mar 23, 2014 at 1:26 PM, John Stultz <john.stultz@linaro.org> wrote: > On Sun, Mar 23, 2014 at 10:50 AM, KOSAKI Motohiro > <kosaki.motohiro@gmail.com> wrote: >>> +/** >>> + * vrange_check_purged_pte - Checks ptes for purged pages >>> + * >>> + * Iterates over the ptes in the pmd checking if they have >>> + * purged swap entries. >>> + * >>> + * Sets the vrange_walker.pages_purged to 1 if any were purged. >>> + */ >>> +static int vrange_check_purged_pte(pmd_t *pmd, unsigned long addr, >>> + unsigned long end, struct mm_walk *walk) >>> +{ >>> + struct vrange_walker *vw = walk->private; >>> + pte_t *pte; >>> + spinlock_t *ptl; >>> + >>> + if (pmd_trans_huge(*pmd)) >>> + return 0; >>> + if (pmd_trans_unstable(pmd)) >>> + return 0; >>> + >>> + pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl); >>> + for (; addr != end; pte++, addr += PAGE_SIZE) { >>> + if (!pte_present(*pte)) { >>> + swp_entry_t vrange_entry = pte_to_swp_entry(*pte); >>> + >>> + if (unlikely(is_vpurged_entry(vrange_entry))) { >>> + vw->page_was_purged = 1; >>> + break; >> >> This function only detect there is vpurge entry or not. But >> VRANGE_NONVOLATILE should remove all vpurge entries. >> Otherwise, non-volatiled range still makes SIGBUS. > > So in the following patch (3/5), we only SIGBUS if the swap entry > is_vpurged_entry() && the vma is still marked volatile, so this > shouldn't be an issue.
When VOLATILE -> NON-VOLATILE -> VOLATILE transition happen, the page immediately marked "was purged"?
I don't understand why vma check help.
| |