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 EB1B2C6FA8F for ; Thu, 24 Aug 2023 19:09:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 568D2280063; Thu, 24 Aug 2023 15:09:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 518FE8E0011; Thu, 24 Aug 2023 15:09:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 407CC280063; Thu, 24 Aug 2023 15:09:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 2E1028E0011 for ; Thu, 24 Aug 2023 15:09:56 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 0EB0F14044D for ; Thu, 24 Aug 2023 19:09:55 +0000 (UTC) X-FDA: 81159937950.05.1BE3834 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf03.hostedemail.com (Postfix) with ESMTP id DBC4B2000B for ; Thu, 24 Aug 2023 19:09:50 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="fo/4IZfo"; dmarc=none; spf=none (imf03.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=1692904193; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=bxGSQaQnVA4hIwzA12Yd9pYCiIRpb/YVzNA3UfqZ3hg=; b=yyUiYG2EWSJTZia5me2nar0fr6l2BONuOA4WFnUSej99SAPF+pbeElEsiaqIksQk94M9io TVghv5cqc3jMs5vH5wugB74i9Wr1Ge34OfuPQ3fa7e39NeKM3CENTD5O31X7Z560y4Uo3b NQU90xIrVLRbMeX0zdV6T+GKXQAeG4k= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="fo/4IZfo"; dmarc=none; spf=none (imf03.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=1692904193; a=rsa-sha256; cv=none; b=hXZm5QSZe3hGhcdfD1Ha63SmbrhZJ0CBO8ptvqHyk0gnmaQ2S+D7N2cBjPcvQAOsHTNopr zpd/FgBFM26xb1jN2anFOKfTbDoPHTkCz2mP8qPgc7cAFvLNKAmtqe04IyrShpYVMm2Gdr RB4Tn15zCinPinboDgBsl5roJT/+lSs= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=bxGSQaQnVA4hIwzA12Yd9pYCiIRpb/YVzNA3UfqZ3hg=; b=fo/4IZfo/s2ZjVVoMkNBK+jCmd sohdweDvkbRvFwOkHj2mSpIyPqS2IfLRUW7AOI6cCtxCvLx6JCyVEz8hoZipWan0bnTluISZbggBG 9YMmcSAHimXr1ziKb80KiiEcebgQOQq4XAWYCOCj3U+WDxDdPwHWjQvAFYFXvA5qFtYBrY/Oj2Yvr SoVKpgNAM1D5UaHVQoeqmpGx9OH0zDqqw2BecykHqKRlqkhvJyGGD9TT7VFYHdxcWJxUDVSpBFD5P UMVObnEugNUC2G0LXfmOJeZKZ4HvKYm35oNrJnQfo7dRbQuAPCfx7aFILNqikUdkhxgjAY6wQpzcN W+v7Pt4w==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qZFho-00CaIa-P1; Thu, 24 Aug 2023 19:09:20 +0000 Date: Thu, 24 Aug 2023 20:09:20 +0100 From: Matthew Wilcox To: Jane Chu Cc: Andrew Morton , nvdimm@lists.linux.dev, Dan Williams , Naoya Horiguchi , linux-mm@kvack.org Subject: Re: [PATCH] mm: Convert DAX lock/unlock page to lock/unlock folio Message-ID: References: <20230822231314.349200-1-willy@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspam-User: X-Stat-Signature: f3s9oazh3qgodizd9eqztsjcqfhyrd79 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: DBC4B2000B X-HE-Tag: 1692904190-118408 X-HE-Meta: U2FsdGVkX1+QTttM0hI6ssGFzAttFqDMDXg4ncAk+17ghGggE2UBF9JXfaoxkQy4PsGjHu5Rs8vtehtnv+Ck0vtwaA0Xo5BGid2RA75XuOWx7J9esvowgcAvNR9PsVp/e3Ktv4l/yNxeaKLXYb1tvbFqK7ZhwFHrPA+emXp652NPLw+8w2UrT7A5jM8pDS79SbgGwkrH/6ObQtsBZCHOO5q00NHyYNmHnl7Gd/HmDNVnSAxqbv82/ht/8zhiT0BphP7a9I1hy/ySNNpRxuFzjnjo7iKuwGlKCqNQ+bR2XCJrd0/dTBIHJ68YXgJf/tGx1CMdnlh+BQ5nUmVZdDBR1C554GhKC5BSS/jhGBCTkhc1Td7SgyeDr7NLOXCa+67V22LZLEF3WOWALUkf1bXrPRkei/tyxv34YhFu94lJ0IxBkixE/2U7R/o2nvmZ4HVfPA3e4bjUexjmO2gMHol2B36zf1VaCBX4oseXtCCSdKbaizp2j5vxsUU6ByGMtiXLpcybnJH3+NEjnaop2aVepeDIiVp3JeNOIb5WhsbXb++dAswGTMkLwb6r0OmVaWDOQ1ykhamnRcnG1rJWzSir1fmXXl+VY3LLMFMtR5dyS03EbR2lMGpLyHaVJhc7hyd+ebCgLjsawMY3qJp4ZIuKZulIcHj1WdTdPZ9PYJE2jInPmMg8zFMOaO85nhB/+O3LGVfp1eQoze5C9OaJuz8NkA36wYGxgUUcoyA6NvoqsHsodeTN12UHbZ+8QNm891RZwXwylapd62wQ1Tlbn42aiBECF0YO2Wer73COrPMVCiwB/b6JLPyMUN2hv3IHtRGksTqx+sEhq3k1Azcelwn65LmOa0uvMCcVWsgATf528wfURK5qwwZOAP4waeEMZjawJRDnm2skwGNmyObZonsV1nLBWprgDK2B50+iQH1+lb9ZhdEHeMR9U206/VP/K0OztpP4ny2ptkjuXRS7axd coMlxgHz WbX7OgHWI3owCYJiev8RwXZ+Z48K2E8HLE2VMuEOw7rL6GiB8fPSTbfypxV7xroFEXcmGUCxxZkNDIjB/vTV1b1ze/H7BtEi+LcF5QsidAAMkgQ4U/ZhXqW4nLyqwShcjoKTvehssw2YcojQ= 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: On Thu, Aug 24, 2023 at 11:24:20AM -0700, Jane Chu wrote: > > On 8/22/2023 4:13 PM, Matthew Wilcox (Oracle) wrote: > [..] > > diff --git a/mm/memory-failure.c b/mm/memory-failure.c > > index a6c3af985554..b81d6eb4e6ff 100644 > > --- a/mm/memory-failure.c > > +++ b/mm/memory-failure.c > > @@ -1717,16 +1717,11 @@ static int mf_generic_kill_procs(unsigned long long pfn, int flags, > > struct dev_pagemap *pgmap) > > { > > struct page *page = pfn_to_page(pfn); > > Looks like the above line, that is, the 'page' pointer is no longer needed. So ... It seems to me that currently handling of hwpoison for DAX memory is handled on a per-allocation basis but it should probably be handled on a per-page basis eventually? If so, we'd want to do something like this ... +++ b/mm/memory-failure.c @@ -1755,7 +1755,9 @@ static int mf_generic_kill_procs(unsigned long long pfn, int flags, * Use this flag as an indication that the dax page has been * remapped UC to prevent speculative consumption of poison. */ - SetPageHWPoison(&folio->page); + SetPageHWPoison(page); + if (folio_test_large(folio)) + folio_set_has_hwpoisoned(folio); /* * Unlike System-RAM there is no possibility to swap in a @@ -1766,7 +1768,8 @@ static int mf_generic_kill_procs(unsigned long long pfn, int flags, flags |= MF_ACTION_REQUIRED | MF_MUST_KILL; collect_procs(&folio->page, &to_kill, true); - unmap_and_kill(&to_kill, pfn, folio->mapping, folio->index, flags); + unmap_and_kill(&to_kill, pfn, folio->mapping, + folio->index + folio_page_idx(folio, page), flags); unlock: dax_unlock_folio(folio, cookie); return rc; But this is a change in current behaviour and I didn't want to think through the implications of all of this. Would you like to take on this project? ;-) My vague plan for hwpoison in the memdesc world is that poison is always handled on a per-page basis (by means of setting page->memdesc to a hwpoison data structure). If the allocation contains multiple pages, then we set a flag somewhere like the current has_hwpoisoned flag.