Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp16993040ybl; Wed, 1 Jan 2020 19:08:34 -0800 (PST) X-Google-Smtp-Source: APXvYqwOnLPY+gDrd9SZMZkSrOkWDM5OhcqLuTgc5Fo6v8nRUdEmty0GOi3UsBBSeduBEQHxSXf8 X-Received: by 2002:a05:6830:1bd5:: with SMTP id v21mr95038188ota.154.1577934514238; Wed, 01 Jan 2020 19:08:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577934514; cv=none; d=google.com; s=arc-20160816; b=er1cyEWYGTwoI8mvZ1FHpbjaS9FY3+XyQUPPF6i0e7JqgksUMBtUm3WRzmaCmYN0GO XYCPcK4mHGX3HwkIYnaiyFtS8BWdy3qNZ7OVbx26sYwM16wbKqQSKb6hj6iwrCIx6uX6 p9u+1xOEKRteznWKW7XYAGuukz+gmgHQvNjs33a8BBHnWkPm4TJzF62FLKrekWM1L0PJ BG3qrm/9FEcmknvIpqyNH87nwKntzHlI4A+Fcb2G2XaRVSa9AJRvlxj4fo+3cZmkHE/h UPgBNkCG1BErzBJK0YblY07a8F84JmdvRpoxYzEY1yKC5l1wi0S0IBMW3w2wWI9pxr8l 2C9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=blXlvjW+HoxldMmgWvtJtaQlmpr9CP/j1SHkC2vJwlQ=; b=Itkm5pne+zq0nDqVgmgETh/XeLjGXF8xKmE7EecC03swVADIWWfe2OeTkk+TeSOwOR of4gDjcOCdOoOoMUk4fX66LqlLXhBAALCHaptZJHgW0TqXDD5EXtFaYPqMArukQvZtk1 fJ0j3SsLJHOduByZFuHSxjphdhiKP3/yMHiEEbu+i+m6/cJvnESPHKkygZicP6iQ2VQo ZGFBeHiUFuA/p2cexh8s6j3ZgL7XjoBayQcIAXOie8owe4mOCBiShowss53WOCo0NDxf 4eDXfaiJoD4sS7nY8J5ogrNXY9iIhIr5pTV8dfVhUNqayTyk/bNyAndDRyOIUAUA/RSB hjog== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 65si24478996oif.14.2020.01.01.19.08.21; Wed, 01 Jan 2020 19:08:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727597AbgABDEZ (ORCPT + 99 others); Wed, 1 Jan 2020 22:04:25 -0500 Received: from mga14.intel.com ([192.55.52.115]:54253 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727526AbgABDEZ (ORCPT ); Wed, 1 Jan 2020 22:04:25 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Jan 2020 19:04:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,385,1571727600"; d="scan'208";a="252112736" Received: from richard.sh.intel.com (HELO localhost) ([10.239.159.54]) by fmsmga002.fm.intel.com with ESMTP; 01 Jan 2020 19:04:23 -0800 From: Wei Yang To: akpm@linux-foundation.org, kirill.shutemov@linux.intel.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, richard.weiyang@gmail.com, Wei Yang Subject: [RFC PATCH] mm/rmap.c: finer hwpoison granularity for PTE-mapped THP Date: Thu, 2 Jan 2020 11:04:21 +0800 Message-Id: <20200102030421.30799-1-richardw.yang@linux.intel.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently we behave differently between PMD-mapped THP and PTE-mapped THP on memory_failure. User detected difference: For PTE-mapped THP, the whole 2M range will trigger MCE after memory_failure(), while only 4K range for PMD-mapped THP will. Direct reason: All the 512 PTE entry will be marked as hwpoison entry for a PTE-mapped THP while only one PTE will be marked for a PMD-mapped THP. Root reason: The root cause is PTE-mapped page doesn't need to split pmd which skip the SPLIT_FREEZE process. This makes try_to_unmap_one() do its job when the THP is not splited. And since page is HWPOISON, all the entries in THP is marked as hwpoison entry. While for the PMD-mapped THP, SPLIT_FREEZE will save migration entry to pte and this skip try_to_unmap_one() before THP splited. And then only the affected 4k page is marked as hwpoison entry. This patch tries to provide a finer granularity for PTE-mapped THP by only mark the affected subpage as hwpoison entry when THP is not split. Signed-off-by: Wei Yang --- This complicates the picture a little, while I don't find a better way to improve. Also I may miss some case or not handle this properly. Look forward your comments. --- mm/rmap.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/rmap.c b/mm/rmap.c index b3e381919835..90229917dd64 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -1554,10 +1554,11 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma, set_huge_swap_pte_at(mm, address, pvmw.pte, pteval, vma_mmu_pagesize(vma)); - } else { + } else if (!PageAnon(page) || page == subpage) { dec_mm_counter(mm, mm_counter(page)); set_pte_at(mm, address, pvmw.pte, pteval); - } + } else + goto freeze; } else if (pte_unused(pteval) && !userfaultfd_armed(vma)) { /* @@ -1579,6 +1580,7 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma, swp_entry_t entry; pte_t swp_pte; +freeze: if (arch_unmap_one(mm, vma, address, pteval) < 0) { set_pte_at(mm, address, pvmw.pte, pteval); ret = false; -- 2.17.1