From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DCBF9C43217 for ; Wed, 18 May 2022 07:49:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7835A6B007E; Wed, 18 May 2022 03:49:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 70BC66B0080; Wed, 18 May 2022 03:49:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5FB836B0081; Wed, 18 May 2022 03:49:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 53F556B007E for ; Wed, 18 May 2022 03:49:44 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 250FE202A3 for ; Wed, 18 May 2022 07:49:44 +0000 (UTC) X-FDA: 79478089488.14.A3E593F Received: from alexa-out-sd-01.qualcomm.com (alexa-out-sd-01.qualcomm.com [199.106.114.38]) by imf30.hostedemail.com (Postfix) with ESMTP id D487A800D1 for ; Wed, 18 May 2022 07:49:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1652860183; x=1684396183; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=lSIe3VyW9rMeUh0m88iIR7bL+fGEX4/7scgZGDYUqTo=; b=k6fMjsab5Crp0fVAMw0q0j4767oMuON9sTVdPzaGfuR3wSyuU0uoBP5j Ivx7BruK/eQmolFLtIiPacb1hs+mEeJenJM2RHj3zM5UKob8nVm3Z3QF1 yASYviFFmBjebDRrvvl8w4NmIXKfi/vltKFhAGnBTY3522XxDB8unFXuV U=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) by alexa-out-sd-01.qualcomm.com with ESMTP; 18 May 2022 00:49:42 -0700 X-QCInternal: smtphost Received: from unknown (HELO nasanex01a.na.qualcomm.com) ([10.52.223.231]) by ironmsg01-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 00:49:42 -0700 Received: from blr-ubuntu-185.qualcomm.com (10.80.80.8) by nasanex01a.na.qualcomm.com (10.52.223.231) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Wed, 18 May 2022 00:49:33 -0700 From: Vivek Kumar To: , , , , , , , , , , , , , CC: , , , , , , , , , , , , , , Vivek Kumar , Prasanna Kumar Subject: [RFC 5/6] Hibernate: Add check for pte_valid in saveable page Date: Wed, 18 May 2022 13:18:40 +0530 Message-ID: <1652860121-24092-6-git-send-email-quic_vivekuma@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1652860121-24092-1-git-send-email-quic_vivekuma@quicinc.com> References: <1652860121-24092-1-git-send-email-quic_vivekuma@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nasanex01a.na.qualcomm.com (10.52.223.231) X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: D487A800D1 Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=quicinc.com header.s=qcdkim header.b=k6fMjsab; spf=pass (imf30.hostedemail.com: domain of quic_vivekuma@quicinc.com designates 199.106.114.38 as permitted sender) smtp.mailfrom=quic_vivekuma@quicinc.com; dmarc=pass (policy=none) header.from=quicinc.com X-Rspam-User: X-Stat-Signature: 5dq3gcxdcaj3fdokubhi4mqzgwfwxjp8 X-HE-Tag: 1652860159-167115 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Add check for pte_valid in saveable page after being checked for the rest. This is required as PTE is removed for pages allocated with dma_alloc_coherent with DMA_ATTR_NO_KERNEL_MAPPING flag set. This patch makes sure that these pages are not considered for snapshot. Signed-off-by: Vivek Kumar Signed-off-by: Prasanna Kumar --- kernel/power/snapshot.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index 2a40675..a6ad2a5 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c @@ -1308,6 +1308,41 @@ static inline void *saveable_highmem_page(struct zone *z, unsigned long p) } #endif /* CONFIG_HIGHMEM */ +static bool kernel_pte_present(struct page *page) +{ + pgd_t *pgdp; + p4d_t *p4dp; + pud_t *pudp, pud; + pmd_t *pmdp, pmd; + pte_t *ptep; + unsigned long addr = (unsigned long)page_address(page); + + pgdp = pgd_offset_k(addr); + if (pgd_none(READ_ONCE(*pgdp))) + return false; + + p4dp = p4d_offset(pgdp, addr); + if (p4d_none(READ_ONCE(*p4dp))) + return false; + + pudp = pud_offset(p4dp, addr); + pud = READ_ONCE(*pudp); + if (pud_none(pud)) + return false; + if (pud_sect(pud)) + return true; + + pmdp = pmd_offset(pudp, addr); + pmd = READ_ONCE(*pmdp); + if (pmd_none(pmd)) + return false; + if (pmd_sect(pmd)) + return true; + + ptep = pte_offset_kernel(pmdp, addr); + return pte_valid(READ_ONCE(*ptep)); +} + /** * saveable_page - Check if the given page is saveable. * @@ -1341,6 +1376,14 @@ static struct page *saveable_page(struct zone *zone, unsigned long pfn) && (!kernel_page_present(page) || pfn_is_nosave(pfn))) return NULL; + /* + * Even if page is not reserved and if it's not present in kernel PTE; + * don't snapshot it ! This happens to the pages allocated using + * __dma_alloc_coherent with DMA_ATTR_NO_KERNEL_MAPPING flag set. + */ + if (!kernel_pte_present(page)) + return NULL; + if (page_is_guard(page)) return NULL; -- 2.7.4