From patchwork Mon Apr 8 19:42:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13621548 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 080AACD129A for ; Mon, 8 Apr 2024 19:42:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2C1B26B008C; Mon, 8 Apr 2024 15:42:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 272286B0092; Mon, 8 Apr 2024 15:42:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 113476B0093; Mon, 8 Apr 2024 15:42:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id E5CE36B008C for ; Mon, 8 Apr 2024 15:42:47 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id AA6B3A0165 for ; Mon, 8 Apr 2024 19:42:47 +0000 (UTC) X-FDA: 81987387174.15.9981A09 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf09.hostedemail.com (Postfix) with ESMTP id 1C05A140010 for ; Mon, 8 Apr 2024 19:42:45 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=RPl8K5Dj; dmarc=none; spf=none (imf09.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1712605366; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ShShQmCifgcEeWCeVoTkYxbmdXduM14Bv200zxi5ce8=; b=VsGszaIODMAv/duXnpWzbjluFvZAak+XRILegEXPmTshegblmrICUvd4iF6zibWiXG68Zt tkTXuMexQci2W6I6sjFyJk4nNtqCCoMJ/NcplcyJP0729Hd0ZVHCUql3/V6mpAt3qyDvt3 OP5yds2EBOqsYvSeHPtGRbo7+thUW8U= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=RPl8K5Dj; dmarc=none; spf=none (imf09.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1712605366; a=rsa-sha256; cv=none; b=u9603AnaS+F9fagbCprCrY7FmdpY7p/V1z0nK/VwrGjG1dOLE9XNb8TXw+jqBB9X6a+Q5O 3lwNxv2FEK7GKJ27sVECePpAbgc4rxxHGRzAGt5rF8mqs7Ur0PdlMle9+tf2LX3iRntb/s qSFihVTkphq453qVvAfrYTEO+eBcnAo= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=ShShQmCifgcEeWCeVoTkYxbmdXduM14Bv200zxi5ce8=; b=RPl8K5DjbJ4g7Boc0D7wHNuksT +2Emyp+1H72B5PVgLh+OAwYW5mk5iqOyeZThX4oI7UfOTtV/62iJDA1xguglCd14GZICWHyDu3npK Dirv3kZvvKe4Yh2WTU3nlyOXsCjEs9bGnfERjPEVLFZ7FlSxoNUKp2UooORLBGaYhA2wdP8YjX64G s9z/galI+HtR87ACjjUf35CCNKluHrEiyfaOBxErLdN9u0qxyQvXugdp5TQ1B3IQzFbor/2OoCOQj sjXi/EonctGOC6eL3n3ON0Ypci+dGXwDc5egvJmmpgSa93Vk4h7aPlSsNPVqRzEYY082LjAker6sj LisBD6/Q==; Received: from willy by casper.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1rtut1-00000000UqH-0Fay; Mon, 08 Apr 2024 19:42:35 +0000 From: "Matthew Wilcox (Oracle)" To: Miaohe Lin Cc: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org Subject: [PATCH v2 05/11] mm/memory-failure: Convert shake_page() to shake_folio() Date: Mon, 8 Apr 2024 20:42:23 +0100 Message-ID: <20240408194232.118537-6-willy@infradead.org> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408194232.118537-1-willy@infradead.org> References: <20240408194232.118537-1-willy@infradead.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 1C05A140010 X-Stat-Signature: kzt6fnurhhd8dbhjmiqn977qm81t5mw9 X-HE-Tag: 1712605365-996083 X-HE-Meta: U2FsdGVkX18x/aii5PXjI17S/rH7WvV/B06xe09EEqIKGtXxoLw66C1gjrWvG8RB1tCBrvK/Z8X+DRdvGK+Jp71s0EqFRIjO0G8dSWfY9sj0bBK6W0lsn2Fz6OMvnCEh8+EelL5qcj6NrNIUEg32U40dTduZPDj1pzCSt62tTmVz1dt3vLT69/u1anrvMjc/JLMsM57zUQKXU8D6mxS10w46nu9pXBmJfNbBzw7lMxGW8GsUeN3+XMu8Kd9ezsJ6sxNRAhUSXKQQvE/bprglfW5TK5UdqUy/98z1tDebqZGicSNwtV+CLYuEQ7w5spaNu6aQ3dvNwkxOFaKKUohiTWLhdJ05xwwKLXtdWoP8mtBG5QFlnYZV9NzbrDeOuAmsYqC8RfU98yxi2nViaexs8UyY819oDeWeNC6hGdHeUfNziXK91xnhitsXSveQ4Yi686cXFOB+pUbo+DJrAHYWG3blRwnrYa4m8i6iQm2AFnwzoFPtNBLBaMU1lZQNfiPc7mAn+ezU7eRHvRDblW/evGIULngry8hrSpxhvsdltl9MvCKeDtZM0axZrCYIoPzem+XLNPALltl6VO/gYDSHAGz3gcHCj88GAK/yoP+p2N7dH1wydSxAO4+Nuy5GIjB7vKvyYheCcBpx0jKwAraRHVeqd70FqLLLg85lqlh8WVHe0isvRcnhAj7bXVl7Md4J85xPQAQjH0FQcYSASu2anPMwZPug7mepSpAp9969kBFcEWYRQXgjLdKLQLaI7ocWf5hlt4uLR7+LxHz1GcW69beo3/4GfBSbq0p55GxzXpjISjz1j1yuAWXYMoST+Za19KKn6tpyCzM3m/PqGwD3lvbb6aMgIZ58woFDLKDqkfX31yTbrtZDLfWp+XxdjnSEOP+sPHpOfzV6zP3+3/nsI/sypFoOAls2CUR5gNTvEGKw3Klh5jerT03FjGw2QN7trqm0SMatOYtUMPB9vBU Wfxlv9EH DDJmxQFyPkNVONb1e3g89Bb+B3I38oGiFkUV0r7KdCANQoiFtn+zASB/r7Ezv7sHGMtpddv136nopZ1ZzXYBviypKZ2jYT/F9xsLktag6RqLZO/UFKdWQHLRrtBFNdjbnSCEMOEXm+CkAfc83Xcwz91DDavOiI8LdK+LwP6fYMhJXaXhcrzjTym8zKEAzJ1DGjcoX5Q0zA7je7G4+7uaV20XmvDJoAV3VocsR 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: List-Subscribe: List-Unsubscribe: Removes two calls to compound_head(). Move the prototype to internal.h; we definitely don't want code outside mm using it. Signed-off-by: Matthew Wilcox (Oracle) --- include/linux/mm.h | 1 - mm/hwpoison-inject.c | 11 ++++++----- mm/internal.h | 1 + mm/memory-failure.c | 15 ++++++++++----- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index b9173e230804..19a67f45907b 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4011,7 +4011,6 @@ int mf_dax_kill_procs(struct address_space *mapping, pgoff_t index, extern int memory_failure(unsigned long pfn, int flags); extern void memory_failure_queue_kick(int cpu); extern int unpoison_memory(unsigned long pfn); -extern void shake_page(struct page *p); extern atomic_long_t num_poisoned_pages __read_mostly; extern int soft_offline_page(unsigned long pfn, int flags); #ifdef CONFIG_MEMORY_FAILURE diff --git a/mm/hwpoison-inject.c b/mm/hwpoison-inject.c index d0548e382b6b..c9d653f51e45 100644 --- a/mm/hwpoison-inject.c +++ b/mm/hwpoison-inject.c @@ -15,7 +15,7 @@ static int hwpoison_inject(void *data, u64 val) { unsigned long pfn = val; struct page *p; - struct page *hpage; + struct folio *folio; int err; if (!capable(CAP_SYS_ADMIN)) @@ -25,16 +25,17 @@ static int hwpoison_inject(void *data, u64 val) return -ENXIO; p = pfn_to_page(pfn); - hpage = compound_head(p); + folio = page_folio(p); if (!hwpoison_filter_enable) goto inject; - shake_page(hpage); + shake_folio(folio); /* * This implies unable to support non-LRU pages except free page. */ - if (!PageLRU(hpage) && !PageHuge(p) && !is_free_buddy_page(p)) + if (!folio_test_lru(folio) && !folio_test_hugetlb(folio) && + !is_free_buddy_page(p)) return 0; /* @@ -42,7 +43,7 @@ static int hwpoison_inject(void *data, u64 val) * the targeted owner (or on a free page). * memory_failure() will redo the check reliably inside page lock. */ - err = hwpoison_filter(hpage); + err = hwpoison_filter(&folio->page); if (err) return 0; diff --git a/mm/internal.h b/mm/internal.h index 57c1055d5568..14cdc9ccb582 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1010,6 +1010,7 @@ static inline int find_next_best_node(int node, nodemask_t *used_node_mask) /* * mm/memory-failure.c */ +void shake_folio(struct folio *folio); extern int hwpoison_filter(struct page *p); extern u32 hwpoison_filter_dev_major; diff --git a/mm/memory-failure.c b/mm/memory-failure.c index f94d85075ec1..2e64e132bba1 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -357,20 +357,25 @@ static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags) * Unknown page type encountered. Try to check whether it can turn PageLRU by * lru_add_drain_all. */ -void shake_page(struct page *p) +void shake_folio(struct folio *folio) { - if (PageHuge(p)) + if (folio_test_hugetlb(folio)) return; /* * TODO: Could shrink slab caches here if a lightweight range-based * shrinker will be available. */ - if (PageSlab(p)) + if (folio_test_slab(folio)) return; lru_add_drain_all(); } -EXPORT_SYMBOL_GPL(shake_page); +EXPORT_SYMBOL_GPL(shake_folio); + +static void shake_page(struct page *page) +{ + shake_folio(page_folio(page)); +} static unsigned long dev_pagemap_mapping_shift(struct vm_area_struct *vma, unsigned long address) @@ -1623,7 +1628,7 @@ static bool hwpoison_user_mappings(struct page *p, unsigned long pfn, * shake_page() again to ensure that it's flushed. */ if (mlocked) - shake_page(hpage); + shake_folio(folio); /* * Now that the dirty bit has been propagated to the