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 2F274C47DB3 for ; Wed, 31 Jan 2024 21:40:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7526B6B007D; Wed, 31 Jan 2024 16:40:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 702876B0081; Wed, 31 Jan 2024 16:40:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5CA766B0085; Wed, 31 Jan 2024 16:40:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 4CB476B007D for ; Wed, 31 Jan 2024 16:40:02 -0500 (EST) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id AF6D31C1037 for ; Wed, 31 Jan 2024 21:40:01 +0000 (UTC) X-FDA: 81740924202.26.32980CC Received: from smtpout.efficios.com (smtpout.efficios.com [167.114.26.122]) by imf29.hostedemail.com (Postfix) with ESMTP id CFE5E12002A for ; Wed, 31 Jan 2024 21:39:58 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=efficios.com header.s=smtpout1 header.b="fOC//W4u"; spf=pass (imf29.hostedemail.com: domain of mathieu.desnoyers@efficios.com designates 167.114.26.122 as permitted sender) smtp.mailfrom=mathieu.desnoyers@efficios.com; dmarc=pass (policy=none) header.from=efficios.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706737199; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jH5ltorO19gdIzaeVZlF+kHFM8VAXcL8PuYCh6jRXh4=; b=7+acGKEIwUnYGRVAJNXqXxsKQg21EpXVXz9TnFUrz6gzOHnxBy0MVI3hnycX1NnGC7D2uG rUcqtZjCLTA28H779ygsQgtBy5w+5ndohW4YeL2BBgcm3Ulz420Ae0mbUfO+rYCDE3Ycyo oUmTQcMYSTGU2pjza+hMO5934G9Bzaw= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=efficios.com header.s=smtpout1 header.b="fOC//W4u"; spf=pass (imf29.hostedemail.com: domain of mathieu.desnoyers@efficios.com designates 167.114.26.122 as permitted sender) smtp.mailfrom=mathieu.desnoyers@efficios.com; dmarc=pass (policy=none) header.from=efficios.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706737199; a=rsa-sha256; cv=none; b=gHrNWjN7ytaS96oZ885auGrDiA0Q9mwIvlfOfTgL0mCXNG9HVfAS62T+0rbf7iikeSII2j J5V7aeBl9l+1Pk54i+N/yxRLWl+fh9+mxu6wbxzWIFi8BXbT2PGrFJKsClC9vLlbPIKKYy vXHQ5VruwukrTO0YCLp64ysJ0hP9QsQ= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=efficios.com; s=smtpout1; t=1706737197; bh=mE6IlMP08TpBgXOVDJUm71vva4w7+fEDZV65jtPKtXc=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=fOC//W4u0F5vbdt+tU+rP15v/l0o/+CnIg+Ydp5bcNwGYw9ud2JP/HNwuD+X2eYWY AXE0QkkFuowfQF/N5KDNWKA1OtehwKwu++g42TntpSKmR0HWSQ8OE00hj0DK1lZL18 0noEqFv4pzYCqQ+J9lGKMSW8o44r71joP5nDgCjEpRokBxY0mzIcRAvO9I+M5X6Nje 0/WsjNt0cTRRaf74shtLNuDJXD/6td2e/pOr42o6HxQ8MWLaI1gQRslqQNLtk7faOo 2+zPZgyGqKquMsySa1E3H6j3vwxgx0Tn5FOmPizhrqqkpYnf8Hg+OKkQ2KbcVBQ7P1 HUgiw7TX/NJTg== Received: from [172.16.0.134] (192-222-143-198.qc.cable.ebox.net [192.222.143.198]) by smtpout.efficios.com (Postfix) with ESMTPSA id 4TQFn93W8xzX1V; Wed, 31 Jan 2024 16:39:57 -0500 (EST) Message-ID: <0a38176b-c453-4be0-be83-f3e1bb897973@efficios.com> Date: Wed, 31 Jan 2024 16:39:57 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v3 2/4] dax: Check for data cache aliasing at runtime To: Dan Williams , Arnd Bergmann , Dave Chinner Cc: linux-kernel@vger.kernel.org, Andrew Morton , Linus Torvalds , linux-mm@kvack.org, linux-arch@vger.kernel.org, Vishal Verma , Dave Jiang , Matthew Wilcox , Russell King , nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@lists.linux.dev References: <20240131162533.247710-1-mathieu.desnoyers@efficios.com> <20240131162533.247710-3-mathieu.desnoyers@efficios.com> <65bab567665f3_37ad2943c@dwillia2-xfh.jf.intel.com.notmuch> Content-Language: en-US From: Mathieu Desnoyers In-Reply-To: <65bab567665f3_37ad2943c@dwillia2-xfh.jf.intel.com.notmuch> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: CFE5E12002A X-Rspam-User: X-Stat-Signature: nsmarj5io3x47az9wek3ui59so86fyuj X-Rspamd-Server: rspam01 X-HE-Tag: 1706737198-256682 X-HE-Meta: U2FsdGVkX1/XCFQNtIY3VhJcA0PDJcGbFmSyrU9uXWxf4QOS2CGQ4FxQMog5zhgFoNS80Zsdno+6fuP5JetVHaR+drziZcareEbbHE7ZKyaEayMBhDBfgy3JL5WUA18LtO5k3KwZkQ4BhdiXzFXz5poDoTcf1k5lJQeWjt6tlsdimGJ4cEBoZyM9U0xFx8lMRYVkCEE9t5BOGUju0dX5wTMX9IPfxvtgc1dyQQuXxxmzt+pWVDcgjk178bT4Ro87oCyxDkNMY9tLlOHVSIX6ObPgSYYwosaqr26tTg3DxqnTc+H4H52ITqV4WHdCAJjlcphkvPW1uR61yIpRAlBT9uBFSA9vZuPBwcUs1tJaHewyRb/2IalHlmMPQgM8348lmDBs7+bVCXHFpNhAS3DfP1oti5nhrHsGolnNL5eZ1DKf+nI8rG6tOmnzyj4CevFdyZT+P9wm66ZxcxbwpeOdnJFnJSsUbUBi7iaNanzwrCgWHMxCi3pQpkA4QkUaL2QPlxOj7rByaLVa9sETIQKmfMzhSLHXZfe+A2K4xc6w/0ipE9TYPnBRVHyel27SXx4o5faL67x0yO/e1lP/AMQMZFgUWl1sZVbh6rpYOv3Vp8QYijxDRdl0AwjcrGHb4WZwymHJwhQ9nx1F2FX6josGCVDVGNQPR/Ryy6QyG8d0fkh1mLgOO+ksoCjkfZybP54krvK8/7nlCQTK6HAFvzv2vmWd8PCLkLXfc6fP85wjdMtDiaNXpV/ree1yFJ7EFHWqsZGD1pmYCDVicp5coPpYYGhoWg9dRBILQV31Z0DKOVrN4kBF/Yf6NUH3ZPqCFyDb8v9bTT0Cu2FR9uUz/v135dHInP4FuhUutbQIMYeCQAvwYiS7tL8ZQSbwtNgQWSgtB0XDfRDd/wykyB7a7jKqCgbljRERm707vA+Hmj/JOh3sBIWrENK4pnzFt3g85HpxohbLG0sgu+qUKurtFg6 j9bgm6C3 UIPc5WAZ5T/zqMeD9FldsWbKrJQ4d3bEW8pLNgDfNJAgTpsajx0NvY0zbPLDFkTFUyfXJiYos25InCSgvzt3A9ZSVEc3hdlAzfCSsxixuKzM/VWHE/d370VrgZFikbfKmVAdhUC6aZAEOL5OvASaccAhwwz6mOVl0B2TlMeYbOMdQAuOOyAbRbO+oGQs6ACEH/Z9vr8O1YE7l6NDn7Ap3ACL4BHjUH2BBkKeSI+4+yi7drNFsucM7qYZ1nU3HWJ4mX4lJgc33miTP4RXOBss93IevRudct5NaJvhcbdJj9ngiRpKok39ZqmQahEvdsYrKU6SC58RBPKdwtU866whjhqoP+lsHkXQf9Pxoykax+eUq82YEVVclepIzq2Lb2fTUFu5NwswEUC9Ds3A8lO/e+n8z771VsPYDgxM8Mw1ZOx2TnwX+N+TLltpx0ifFeOMRBITmFpy/CBIgRR4bwB/SwVcdsHBxnTTJk/hfStgiEwGMBKzu46gQKN9Bf42IQvmpx1TX+t2aPPkqTn3Jzdkqx63RHkU78zeuAF0a5rzmU4/VzCPmNAAdK5hYPTkc+OaqPNn7ZvR2fE8IvDoC/OmVODtL/OzCXlD9ngcPyLGlLM155HCrVs9AlesOBQ== 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: On 2024-01-31 16:02, Dan Williams wrote: > Mathieu Desnoyers wrote: >> Replace the following fs/Kconfig:FS_DAX dependency: >> >> depends on !(ARM || MIPS || SPARC) >> >> By a runtime check within alloc_dax(). >> >> This is done in preparation for its use by each filesystem supporting >> the "dax" mount option to validate whether DAX is indeed supported. >> >> This is done in preparation for using cpu_dcache_is_aliasing() in a >> following change which will properly support architectures which detect >> data cache aliasing at runtime. >> >> Fixes: d92576f1167c ("dax: does not work correctly with virtual aliasing caches") >> Signed-off-by: Mathieu Desnoyers >> Cc: Andrew Morton >> Cc: Linus Torvalds >> Cc: linux-mm@kvack.org >> Cc: linux-arch@vger.kernel.org >> Cc: Dan Williams >> Cc: Vishal Verma >> Cc: Dave Jiang >> Cc: Matthew Wilcox >> Cc: Arnd Bergmann >> Cc: Russell King >> Cc: nvdimm@lists.linux.dev >> Cc: linux-cxl@vger.kernel.org >> Cc: linux-fsdevel@vger.kernel.org >> Cc: dm-devel@lists.linux.dev >> --- >> drivers/dax/super.c | 6 ++++++ >> fs/Kconfig | 1 - >> 2 files changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/dax/super.c b/drivers/dax/super.c >> index 0da9232ea175..e9f397b8a5a3 100644 >> --- a/drivers/dax/super.c >> +++ b/drivers/dax/super.c >> @@ -445,6 +445,12 @@ struct dax_device *alloc_dax(void *private, const struct dax_operations *ops) >> dev_t devt; >> int minor; >> >> + /* Unavailable on architectures with virtually aliased data caches. */ >> + if (IS_ENABLED(CONFIG_ARM) || >> + IS_ENABLED(CONFIG_MIPS) || >> + IS_ENABLED(CONFIG_SPARC)) >> + return NULL; > > This function returns ERR_PTR(), not NULL on failure. Except that it returns NULL in the CONFIG_DAX=n case as you noticed below. > > ...and I notice this mistake is also made in include/linux/dax.h in the > CONFIG_DAX=n case. That function also mentions: > > static inline struct dax_device *alloc_dax(void *private, > const struct dax_operations *ops) > { > /* > * Callers should check IS_ENABLED(CONFIG_DAX) to know if this > * NULL is an error or expected. > */ > return NULL; > } > > ...and none of the callers validate the result, but now runtime > validation is necessary. I.e. it is not enough to check > IS_ENABLED(CONFIG_DAX) it also needs to check cpu_dcache_is_aliasing(). If the callers select DAX in their Kconfig, then they don't have to explicitly check for IS_ENABLED(CONFIG_DAX). Things change for the introduced runtime check though. > > With that, there are a few more fixup places needed, pmem_attach_disk(), > dcssblk_add_store(), and virtio_fs_setup_dax(). Which approach should we take then ? Should we: A) Keep returning NULL from alloc_dax() for both cpu_dcache_is_aliasing() and CONFIG_DAX=n, and use IS_ERR_OR_NULL() in the caller. If we do this, then the callers need to somehow translate this NULL into a negative error value, or B) Replace this NULL return value in both cases by a ERR_PTR() (which error value should we return ?). I would favor approach B) which appears more robust and introduces fewer changes. If we go for that approach do we still need to change the callers ? Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. https://www.efficios.com