From patchwork Thu Dec 14 07:37:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Verma, Vishal L" X-Patchwork-Id: 13492510 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 1C3F7C4167D for ; Thu, 14 Dec 2023 07:38:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 32E9D8D00A1; Thu, 14 Dec 2023 02:38:21 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2B6D18D009C; Thu, 14 Dec 2023 02:38:21 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 10ADC8D00A1; Thu, 14 Dec 2023 02:38:21 -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 ED5678D009C for ; Thu, 14 Dec 2023 02:38:20 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id BBB1AC0BE2 for ; Thu, 14 Dec 2023 07:38:20 +0000 (UTC) X-FDA: 81564620760.19.B39562D Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by imf13.hostedemail.com (Postfix) with ESMTP id 8F6332000D for ; Thu, 14 Dec 2023 07:38:18 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=FjsXBDTB; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf13.hostedemail.com: domain of vishal.l.verma@intel.com designates 192.55.52.43 as permitted sender) smtp.mailfrom=vishal.l.verma@intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702539498; 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=iZ2C1C0RLSlpkRpvJ4e2k5gM3EbrzqAt/DPxuK5hvD4=; b=RDjfjOdGtiQ09xafdYXYcwRkA11YSHfBF72webTEIJxG58RB++JrT//T2l8HdFW0Z3AGq3 qYs34XsPuoxayxiVaodRKMDZZtqsToD6cddTKvYVnMjmDoX23B+cLkZ0AHVpfhk6NRVMez BU6+Y/9JnCGSuOITN+MWJ7xU07tWeC0= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=FjsXBDTB; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf13.hostedemail.com: domain of vishal.l.verma@intel.com designates 192.55.52.43 as permitted sender) smtp.mailfrom=vishal.l.verma@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702539498; a=rsa-sha256; cv=none; b=Z48vhdNHKyXdudAjwDyhxkWf0zH2wukKK2FaeDsxlrKyJsFSl5QBH+slmx2cdFo9rVPknx 9tg45ZHacs+dupLe7Q+VSM+fDrmoNCPs/9w4oUlh1JbFn8MyAmaoRFw4+4jz7wX1cPyRcg QjxxiqraARMjw5ttJLf0onUnX0sFsZM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702539498; x=1734075498; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=jYMqTdWolji6J2rYKSsSVwH7OXLij+oakPFuQznWwJY=; b=FjsXBDTBFLYZIHtD2tdahDN+ctzcZftAkBPbO6YC9HsN9n4BZJQf8z+i RRQJakWk2OkRESG2mBDRbLw01Ntk4MV4j7CU7rcNIX452rAxBWyROeDmB pd7Fd2pQnR3sfPN879mLXOBavp0lzzdVFJoBoxRc506P8fFlF7FQ08lIm NSKDCXcUZslpcg0Fhm6mgEUU28PtYyDDsZiwh6Vnt/oXptpNmyna505rJ BYhq3qROLmRoOvx1glJp/cEWExHv2MMA4EuxX0tJ/saOvSFALNvctSlKE tclMvgQiOqU1RwsfMs2yWnJ4CzkzJUVc9VK49YM7dlD0ormRlmbOxyGjS Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10923"; a="481275543" X-IronPort-AV: E=Sophos;i="6.04,274,1695711600"; d="scan'208";a="481275543" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Dec 2023 23:38:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10923"; a="723972075" X-IronPort-AV: E=Sophos;i="6.04,274,1695711600"; d="scan'208";a="723972075" Received: from llblake-mobl1.amr.corp.intel.com (HELO [192.168.1.200]) ([10.213.191.124]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Dec 2023 23:38:14 -0800 From: Vishal Verma Date: Thu, 14 Dec 2023 00:37:57 -0700 Subject: [PATCH v5 4/4] dax: add a sysfs knob to control memmap_on_memory behavior MIME-Version: 1.0 Message-Id: <20231214-vv-dax_abi-v5-4-3f7b006960b4@intel.com> References: <20231214-vv-dax_abi-v5-0-3f7b006960b4@intel.com> In-Reply-To: <20231214-vv-dax_abi-v5-0-3f7b006960b4@intel.com> To: Dan Williams , Vishal Verma , Dave Jiang , Andrew Morton , Oscar Salvador Cc: linux-kernel@vger.kernel.org, nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org, David Hildenbrand , Dave Hansen , Huang Ying , Greg Kroah-Hartman , linux-mm@kvack.org, Li Zhijian , Jonathan Cameron X-Mailer: b4 0.13-dev-433a8 X-Developer-Signature: v=1; a=openpgp-sha256; l=3902; i=vishal.l.verma@intel.com; h=from:subject:message-id; bh=jYMqTdWolji6J2rYKSsSVwH7OXLij+oakPFuQznWwJY=; b=owGbwMvMwCXGf25diOft7jLG02pJDKlVGx4xGLwMeT8h+dTH8ILmoEoW649mq5eJfrI008iZd dHkQLRRRykLgxgXg6yYIsvfPR8Zj8ltz+cJTHCEmcPKBDaEi1MAJhKYxsgw/8ehpzXc1V8u7tt1 7WqTeHdgvEtK+ZM+7val85Qn6ao7MjLsucZTNdV7da/OS+73H804o1XEmnZ7n/p5accFhRezdDU 4AA== X-Developer-Key: i=vishal.l.verma@intel.com; a=openpgp; fpr=F8682BE134C67A12332A2ED07AFA61BEA3B84DFF X-Rspamd-Queue-Id: 8F6332000D X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: p5kfg99szg4fnykt8tx5ntnowwpb8wdz X-HE-Tag: 1702539498-303859 X-HE-Meta: U2FsdGVkX18XgG06UX2mh3doeDRwN53zvM4/acWwDoPpzf3olwZpvcQxny5AnB5FndKdVaM16QNQHgGGpkYPuJnpMWWwsSQid00asJQBujz/ekdVPyN6E83rTHtIX8ej9tNMhMPcAsU1SmzDhK10l8vikudUP8xicrNI0t3tI8BRl7EdfH4w0QqSEz/urYNkX4unxXux02G/hPlsi3YYKH8T5yh6THZE4gR3EbGmQoEOG6V1SRatmwjGfzWX5G8a5j62XYX1S6E0YvdIIyixSj/eAhbq99j/IhyHeKo7IR2CiPkkG5j5vlTgdUNC2cTY3I6x1TyQdAOgef+gwbYwf8jLGsoMNF1lvyY2VMEnB+QsVGYHh5c7ktH+OFSc9b5ZwBv+5quWdyQ8+y3/QoWUAvbwbCUKGU1rfP952DuwKbkK5SKXRerTeSCrN2cEf+E1CssJ7Zz18afkINukBJd7DzQwNWWK7bj6QluqfIs61k7MoElxMJ4EknoeOzgElfK81ZXEIMvEfQ3RWoDrbBYL69ofxfdpEp/Amb6CBZfd7zC9xYAz5hedUvrtMKfMjigXAhsNSuk1J3wy/kjh6S1qxSWJovIwdJu0X/ZrYFmvKPp36FQKo51UidwY2sXA0fbyclT4CdR5SRL9Qrp+YVm4PPfTb4japryAQHBtj/b1DE9QZagtc3pDwkEXecD2BoZLGFGbtuAuIwfD38kgOYOPtRwvhTkMjB3kypIR712KTQqpwvmkoQBZD/uUPyRopPuCZ8FE8GLqx/Cuim/9N1wg9gaVim6UfC49iXxQr24gG4iFPMVxZmB/iEjz6s7Dc34pcUl59QI/NCcwLGqpSwcst/KfL5DTWEN9riCYmu5IHgQ5Tf7LQS2wRgqd144yzFmhBhN1WSdd2fuV5dKKNFWf974p/L3+vE9nwMrNC5vKwlIpXs0IgQy+ZaEVSm+bNrhBV/Nq96UNHXEccqDXsB/ DeRZHsAS lISJVeOljpROy0OXs3q5r01Oj0jlxscB3R6zByZ73VVFZI0YfFaDd+ftrQmq2ZrrdW3IHntyU3B9W2heennncGWaJGrLltPgJWLHhW0RC58p8d2QQEiIrLD1Cak84i6McZmxqhp+x6Q3Gb3aaR8aNMoeilmcyo6QryGnxD8Pt7tX8ED6P4pxEZRoQLa7neO9dXdLzJC4hu4gdFj/7RuUxv2bl31it6wMVkAvVvy8rDnXw5AMpO/y6BjNkRANbxAPzRTRsWipJctHJmm4mVYKS1mwh0XVmhlvXQFnQsxTc5b16o/bTQuXAC9Cz9g== 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: Add a sysfs knob for dax devices to control the memmap_on_memory setting if the dax device were to be hotplugged as system memory. The default memmap_on_memory setting for dax devices originating via pmem or hmem is set to 'false' - i.e. no memmap_on_memory semantics, to preserve legacy behavior. For dax devices via CXL, the default is on. The sysfs control allows the administrator to override the above defaults if needed. Cc: David Hildenbrand Cc: Dan Williams Cc: Dave Jiang Cc: Dave Hansen Cc: Huang Ying Tested-by: Li Zhijian Reviewed-by: Jonathan Cameron Reviewed-by: David Hildenbrand Signed-off-by: Vishal Verma --- drivers/dax/bus.c | 38 +++++++++++++++++++++++++++++++++ Documentation/ABI/testing/sysfs-bus-dax | 17 +++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c index 6226de131d17..f4d3beec507c 100644 --- a/drivers/dax/bus.c +++ b/drivers/dax/bus.c @@ -1245,6 +1245,43 @@ static ssize_t numa_node_show(struct device *dev, } static DEVICE_ATTR_RO(numa_node); +static ssize_t memmap_on_memory_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct dev_dax *dev_dax = to_dev_dax(dev); + + return sprintf(buf, "%d\n", dev_dax->memmap_on_memory); +} + +static ssize_t memmap_on_memory_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct dev_dax *dev_dax = to_dev_dax(dev); + struct dax_device_driver *dax_drv; + ssize_t rc; + bool val; + + rc = kstrtobool(buf, &val); + if (rc) + return rc; + + if (val == true && !mhp_supports_memmap_on_memory()) { + dev_dbg(dev, "memmap_on_memory is not available\n"); + return -EOPNOTSUPP; + } + + guard(device)(dev); + dax_drv = to_dax_drv(dev->driver); + if (dax_drv && dev_dax->memmap_on_memory != val && + dax_drv->type == DAXDRV_KMEM_TYPE) + return -EBUSY; + dev_dax->memmap_on_memory = val; + + return len; +} +static DEVICE_ATTR_RW(memmap_on_memory); + static umode_t dev_dax_visible(struct kobject *kobj, struct attribute *a, int n) { struct device *dev = container_of(kobj, struct device, kobj); @@ -1271,6 +1308,7 @@ static struct attribute *dev_dax_attributes[] = { &dev_attr_align.attr, &dev_attr_resource.attr, &dev_attr_numa_node.attr, + &dev_attr_memmap_on_memory.attr, NULL, }; diff --git a/Documentation/ABI/testing/sysfs-bus-dax b/Documentation/ABI/testing/sysfs-bus-dax index 6359f7bc9bf4..40d9965733b2 100644 --- a/Documentation/ABI/testing/sysfs-bus-dax +++ b/Documentation/ABI/testing/sysfs-bus-dax @@ -134,3 +134,20 @@ KernelVersion: v5.1 Contact: nvdimm@lists.linux.dev Description: (RO) The id attribute indicates the region id of a dax region. + +What: /sys/bus/dax/devices/daxX.Y/memmap_on_memory +Date: October, 2023 +KernelVersion: v6.8 +Contact: nvdimm@lists.linux.dev +Description: + (RW) Control the memmap_on_memory setting if the dax device + were to be hotplugged as system memory. This determines whether + the 'altmap' for the hotplugged memory will be placed on the + device being hotplugged (memmap_on_memory=1) or if it will be + placed on regular memory (memmap_on_memory=0). This attribute + must be set before the device is handed over to the 'kmem' + driver (i.e. hotplugged into system-ram). Additionally, this + depends on CONFIG_MHP_MEMMAP_ON_MEMORY, and a globally enabled + memmap_on_memory parameter for memory_hotplug. This is + typically set on the kernel command line - + memory_hotplug.memmap_on_memory set to 'true' or 'force'."