From patchwork Tue Dec 12 19:08:30 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: 177519 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7941937vqy; Tue, 12 Dec 2023 11:09:03 -0800 (PST) X-Google-Smtp-Source: AGHT+IEBsEcL6gqysxHPmn9qjfD965EgQEC/adej0PJzUmldeeUp5t2gtaDaZYZIQ4XTzOEVJxsY X-Received: by 2002:a05:6a21:998e:b0:190:24f9:d579 with SMTP id ve14-20020a056a21998e00b0019024f9d579mr9858457pzb.1.1702408142959; Tue, 12 Dec 2023 11:09:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702408142; cv=none; d=google.com; s=arc-20160816; b=0zd0YOHQDZx/MTvitBjq8ZW5nMcwtlIItGwAXj0ISMF+jKukr86Mpas89swY2pIt60 r+9WghklpsTVieo9NgKQYT0iAY4N8j9t48ZggwDtiD/Luhm6OPgZERlWhvwwlIQmDqSs Bs1zAXAGEKaoINLJooblLfC3f7wpW5oehaI9lLFAC4MgMP5IZ5gvueU0h+SRb+743zQK GpAipfIVaa/1ty7yJZKGva96sKgbkOpWHIjT/g/vxKHQHTkzJqzJuND38Psfbkbaps7r nrr6movDyXlX04PO52HS8vi8/nvmzFwGg1TOrbkGCos+oepDx7l/J2jCtP80aQitNScS W+Qg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=hWtfM1F1vel+w8mwo45vU58LTBi++96l4z4DbzmF57Q=; fh=GgBvxuBhJUAphvLqUR82MPz4KFso3xGppFPrlIaSLj8=; b=sNTgfQEIHjtqYzkdHeGcFvnhe791e5uw2x7YfZiCtT6eQ19mpaIpbF3HHl3vwfntsa QnBYavp/k/ifGhErDaWmxauADmbU63QUdw4qHR22F79S5u3++dd/r9aW50Ev1bm/qwUp ZK/VfBBuwZXcy8UECZN9KA3a0aZqXrQV/yVLX5w/Bn4AekZY1NHNmIFKeXEcYuK/X2dp tRhviSUEdu8ziOs4OuxzgvNv+j3ttbIyPzV91XHAY+1/RUVl3HMAIfZcSfqA7BwMt0yr 97QPles9n2yilld6q1ODv4m1KGUabdVrHa5Zl0xcpyJbcNGD18m5vjELS5aVWG+EWOXo 3lFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=XUwpJqQV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id f14-20020a63100e000000b005c660a37af2si8419876pgl.255.2023.12.12.11.08.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 11:09:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=XUwpJqQV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 98D1B80A9179; Tue, 12 Dec 2023 11:08:55 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376866AbjLLTIn (ORCPT + 99 others); Tue, 12 Dec 2023 14:08:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232609AbjLLTIm (ORCPT ); Tue, 12 Dec 2023 14:08:42 -0500 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4163791; Tue, 12 Dec 2023 11:08:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702408129; x=1733944129; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=j9znkpM/52KvUGuun0RJffYF/wG7fdqoc+th2+hzW9E=; b=XUwpJqQVSc2fSHpXJ0fCAYWWf3agy3NELLQxoLTjQjrxr6waed5FrgnZ Ml79SWkG3vgfv39y9bg8g4bp8J6YpgwGPtbLi4iMmbb5pE37HvRFUJFuH aEJcws0aJFCrKTYMMIt51psKWzQn0RtvXArAIyTtoKOc17YMiGsc4JGRp dv2WuPSK5P+GdYfcXO5lt59DFoqNBA72ElvIVvPtp3bVoHmKUzUUqd09M z+0rpkUTrD3vcZwWfAEAcIpYIgBMw8NB6nVJ+T522rMuPf8aF4x7t2k/z Yfh1yLuXC4gvPrH1ayJzhxGOAkz0rcu2Mv/gpKCfy8gCEbpPoBk0yf+WD A==; X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="13550590" X-IronPort-AV: E=Sophos;i="6.04,271,1695711600"; d="scan'208";a="13550590" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2023 11:08:47 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="844017858" X-IronPort-AV: E=Sophos;i="6.04,271,1695711600"; d="scan'208";a="844017858" Received: from cmperez2-mobl2.amr.corp.intel.com (HELO [192.168.1.200]) ([10.212.66.25]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2023 11:08:46 -0800 From: Vishal Verma Date: Tue, 12 Dec 2023 12:08:30 -0700 Subject: [PATCH v4 1/3] Documentatiion/ABI: Add ABI documentation for sys-bus-dax MIME-Version: 1.0 Message-Id: <20231212-vv-dax_abi-v4-1-1351758f0c92@intel.com> References: <20231212-vv-dax_abi-v4-0-1351758f0c92@intel.com> In-Reply-To: <20231212-vv-dax_abi-v4-0-1351758f0c92@intel.com> To: Dan Williams , Vishal Verma , Dave Jiang Cc: linux-kernel@vger.kernel.org, nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org, David Hildenbrand , Dave Hansen , Huang Ying X-Mailer: b4 0.13-dev-433a8 X-Developer-Signature: v=1; a=openpgp-sha256; l=6438; i=vishal.l.verma@intel.com; h=from:subject:message-id; bh=j9znkpM/52KvUGuun0RJffYF/wG7fdqoc+th2+hzW9E=; b=owGbwMvMwCXGf25diOft7jLG02pJDKkV6/c++sH4JHK37SyXiZ/7HR3mC534f+l0kHObiG/pe qUI2+NXOkpZGMS4GGTFFFn+7vnIeExuez5PYIIjzBxWJpAhDFycAjCRi3UM/9NOc/pObtnVeiTc W/ecyKX5vVmLHsiH6qS/3FESNuHUxBCG/w4WfWKJP3pcmPjWPFT6OZXPWXbKg5eLc45cZap9FhA pyw0A X-Developer-Key: i=vishal.l.verma@intel.com; a=openpgp; fpr=F8682BE134C67A12332A2ED07AFA61BEA3B84DFF X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 12 Dec 2023 11:08:55 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785104321208491008 X-GMAIL-MSGID: 1785104321208491008 Add the missing sysfs ABI documentation for the device DAX subsystem. Various ABI attributes under this have been present since v5.1, and more have been added over time. In preparation for adding a new attribute, add this file with the historical details. Cc: Dan Williams Signed-off-by: Vishal Verma --- Documentation/ABI/testing/sysfs-bus-dax | 151 ++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-dax b/Documentation/ABI/testing/sysfs-bus-dax new file mode 100644 index 000000000000..a61a7b186017 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-bus-dax @@ -0,0 +1,151 @@ +What: /sys/bus/dax/devices/daxX.Y/align +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RW) Provides a way to specify an alignment for a dax device. + Values allowed are constrained by the physical address ranges + that back the dax device, and also by arch requirements. + +What: /sys/bus/dax/devices/daxX.Y/mapping +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (WO) Provides a way to allocate a mapping range under a dax + device. Specified in the format -. + +What: /sys/bus/dax/devices/daxX.Y/mapping[0..N]/start +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RO) A dax device may have multiple constituent discontiguous + address ranges. These are represented by the different + 'mappingX' subdirectories. The 'start' attribute indicates the + start physical address for the given range. + +What: /sys/bus/dax/devices/daxX.Y/mapping[0..N]/end +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RO) A dax device may have multiple constituent discontiguous + address ranges. These are represented by the different + 'mappingX' subdirectories. The 'end' attribute indicates the + end physical address for the given range. + +What: /sys/bus/dax/devices/daxX.Y/mapping[0..N]/page_offset +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RO) A dax device may have multiple constituent discontiguous + address ranges. These are represented by the different + 'mappingX' subdirectories. The 'page_offset' attribute indicates the + offset of the current range in the dax device. + +What: /sys/bus/dax/devices/daxX.Y/resource +Date: June, 2019 +KernelVersion: v5.3 +Contact: nvdimm@lists.linux.dev +Description: + (RO) The resource attribute indicates the starting physical + address of a dax device. In case of a device with multiple + constituent ranges, it indicates the starting address of the + first range. + +What: /sys/bus/dax/devices/daxX.Y/size +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RW) The size attribute indicates the total size of a dax + device. For creating subdivided dax devices, or for resizing + an existing device, the new size can be written to this as + part of the reconfiguration process. + +What: /sys/bus/dax/devices/daxX.Y/numa_node +Date: November, 2019 +KernelVersion: v5.5 +Contact: nvdimm@lists.linux.dev +Description: + (RO) If NUMA is enabled and the platform has affinitized the + backing device for this dax device, emit the CPU node + affinity for this device. + +What: /sys/bus/dax/devices/daxX.Y/target_node +Date: February, 2019 +KernelVersion: v5.1 +Contact: nvdimm@lists.linux.dev +Description: + (RO) The target-node attribute is the Linux numa-node that a + device-dax instance may create when it is online. Prior to + being online the device's 'numa_node' property reflects the + closest online cpu node which is the typical expectation of a + device 'numa_node'. Once it is online it becomes its own + distinct numa node. + +What: $(readlink -f /sys/bus/dax/devices/daxX.Y)/../dax_region/available_size +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RO) The available_size attribute tracks available dax region + capacity. This only applies to volatile hmem devices, not pmem + devices, since pmem devices are defined by nvdimm namespace + boundaries. + +What: $(readlink -f /sys/bus/dax/devices/daxX.Y)/../dax_region/size +Date: July, 2017 +KernelVersion: v5.1 +Contact: nvdimm@lists.linux.dev +Description: + (RO) The size attribute indicates the size of a given dax region + in bytes. + +What: $(readlink -f /sys/bus/dax/devices/daxX.Y)/../dax_region/align +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RO) The align attribute indicates alignment of the dax region. + Changes on align may not always be valid, when say certain + mappings were created with 2M and then we switch to 1G. This + validates all ranges against the new value being attempted, post + resizing. + +What: $(readlink -f /sys/bus/dax/devices/daxX.Y)/../dax_region/seed +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RO) The seed device is a concept for dynamic dax regions to be + able to split the region amongst multiple sub-instances. The + seed device, similar to libnvdimm seed devices, is a device + that starts with zero capacity allocated and unbound to a + driver. + +What: $(readlink -f /sys/bus/dax/devices/daxX.Y)/../dax_region/create +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (RW) The create interface to the dax region provides a way to + create a new unconfigured dax device under the given region, which + can then be configured (with a size etc.) and then probed. + +What: $(readlink -f /sys/bus/dax/devices/daxX.Y)/../dax_region/delete +Date: October, 2020 +KernelVersion: v5.10 +Contact: nvdimm@lists.linux.dev +Description: + (WO) The delete interface for a dax region provides for deletion + of any 0-sized and idle dax devices. + +What: $(readlink -f /sys/bus/dax/devices/daxX.Y)/../dax_region/id +Date: July, 2017 +KernelVersion: v5.1 +Contact: nvdimm@lists.linux.dev +Description: + (RO) The id attribute indicates the region id of a dax region. From patchwork Tue Dec 12 19:08:31 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: 177518 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7941910vqy; Tue, 12 Dec 2023 11:09:00 -0800 (PST) X-Google-Smtp-Source: AGHT+IEqnk3iQVeTC5qXsN2aNEwafZPScooUcyMOKqGCfNWjknmTTXVAio/MSfX6B08y1c7iLm5l X-Received: by 2002:a17:903:2585:b0:1d0:6ffd:cea5 with SMTP id jb5-20020a170903258500b001d06ffdcea5mr3453784plb.94.1702408140064; Tue, 12 Dec 2023 11:09:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702408140; cv=none; d=google.com; s=arc-20160816; b=ryuRvNRbukRf8+eRpI7Wi/1fRGCUNrdy6pCloPNkr2admZpkDOBg9WDrbHGFsSI/UF wQtzOKZS179UuPGYPPitALwRNfN0DHzIFyKJlZuQfM/L8uuI2viS/TfXnESludhOG4+v lJRo8WSty5MFOW+tnJLp0EYBWzvBs3k2h/2/bgNqHvBicMQljGeLajSiNIdpFzXVv14u aV6kUnDzB3FEGvnHZxdeJM1LVHffu+aV9eR3kR9kaRxlKLARRJWyAd3yhHBPr6mrFSxX r0uFB4MDc6XCMeuHxCHpsCK1F8vRyFLTFNk5rwvuWmwaImW12Xts5oBylm7/smRAz2kP W3Cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=zTs4DkKQ9li4pEYgG6Xg9hlT6Otnp8dWYcZG4u3B3X4=; fh=FQ4E/SNuCiiHRf+Px+qtQ7Dk+P7RajOnzWg0q+BEgRM=; b=jnqi87j4KXGgiidDVuNF+xCF3EzdHMx5J3Uu7LVfJVSScrWll80tICtANR6IZPCIfG 9cawDHJ7wHjCXfKTRGjICgu4jPEaLcuL8AGlt3R9srGxgoKl7YRGEu2CqqYK5pSnJibs iDFAIVhC0RUrYcx8qxi9dmKzX1St4JUMOjQFpbAWp/8+FqUTzSpRQzSSpU6PI/Kn5r80 TLqiBsyYrVkV0Wc6yfauMwLxgoN4pNxiF/YPzaRlCeQ4YV6yXeWLqNAREsTVfvmA/U28 dfBHUSX0zwiWiqLODMe4YEhf5sRHw5qi6kmEBGVhkOSrjrX7mopweq2iIQxvLDQ13p47 WGWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=RdRAwMj8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id i3-20020a170902c94300b001cffce3a2e2si8373564pla.426.2023.12.12.11.08.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 11:09:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=RdRAwMj8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 90E818047794; Tue, 12 Dec 2023 11:08:56 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376751AbjLLTIq (ORCPT + 99 others); Tue, 12 Dec 2023 14:08:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41802 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233067AbjLLTIm (ORCPT ); Tue, 12 Dec 2023 14:08:42 -0500 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7FBEEBD; Tue, 12 Dec 2023 11:08:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702408129; x=1733944129; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=zYL68s17Ug9RUUMduHTMgqPyJT0UZnz1m+I7vUoJDyM=; b=RdRAwMj8PqSJO+wa1peRxSSDRkOYgFVdXPtTk/VWIelNq06Qydd+R6Tz NQKNU6zrFoQ2N28eCSTB29tNS0WPn3XNT9BIeJB6+AlhzGOOiTTaTqLHH 2Cgn8VVd4j+oK6X9oavPpFRm6ZpS2U5kYJ2lWWLBOcCSgrXUyY4wdIro2 /LRDMZv7A8XPj5P+pLO8GMfQBRhftNGX0HyYsLSRAfv23kwxf6RVGvFsm /+ht+YVdrWWVA5C/6zM9NEwtHX51RaXDo8jx9PZiof+cZOf9KztvHWfQ5 hHBpKWIROP0IbUXvxH5swWCg+Q61VpQwvnI29zcpidMIKIRw5VgBn9xE4 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="13550594" X-IronPort-AV: E=Sophos;i="6.04,271,1695711600"; d="scan'208";a="13550594" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2023 11:08:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="844017861" X-IronPort-AV: E=Sophos;i="6.04,271,1695711600"; d="scan'208";a="844017861" Received: from cmperez2-mobl2.amr.corp.intel.com (HELO [192.168.1.200]) ([10.212.66.25]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2023 11:08:46 -0800 From: Vishal Verma Date: Tue, 12 Dec 2023 12:08:31 -0700 Subject: [PATCH v4 2/3] dax/bus: Introduce guard(device) for device_{lock,unlock} flows MIME-Version: 1.0 Message-Id: <20231212-vv-dax_abi-v4-2-1351758f0c92@intel.com> References: <20231212-vv-dax_abi-v4-0-1351758f0c92@intel.com> In-Reply-To: <20231212-vv-dax_abi-v4-0-1351758f0c92@intel.com> To: Dan Williams , Vishal Verma , Dave Jiang Cc: linux-kernel@vger.kernel.org, nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org, David Hildenbrand , Dave Hansen , Huang Ying , Joao Martins X-Mailer: b4 0.13-dev-433a8 X-Developer-Signature: v=1; a=openpgp-sha256; l=6772; i=vishal.l.verma@intel.com; h=from:subject:message-id; bh=zYL68s17Ug9RUUMduHTMgqPyJT0UZnz1m+I7vUoJDyM=; b=owGbwMvMwCXGf25diOft7jLG02pJDKkV6/eaxBQWhvSfm7/rjF+CpubEQxa3FHT1g45I+RXON 0i+++VKRykLgxgXg6yYIsvfPR8Zj8ltz+cJTHCEmcPKBDKEgYtTACbyTZyR4c7DK18Pe/HM8gh3 fuIheEm77Cp7lJSx7ouLa+fJTbhRYM3IsPxk3tINju8qjq+63c7Ke00hjNUze9XSsO4VerY8Lne bOQE= X-Developer-Key: i=vishal.l.verma@intel.com; a=openpgp; fpr=F8682BE134C67A12332A2ED07AFA61BEA3B84DFF X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 12 Dec 2023 11:08:56 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785104317959434987 X-GMAIL-MSGID: 1785104317959434987 Introduce a guard(device) macro to lock a 'struct device', and unlock it automatically when going out of scope using Scope Based Resource Management semantics. A lot of the sysfs attribute writes in drivers/dax/bus.c benefit from a cleanup using these, so change these where applicable. Cc: Joao Martins Suggested-by: Dan Williams Signed-off-by: Vishal Verma Reviewed-by: Ira Weiny --- include/linux/device.h | 2 + drivers/dax/bus.c | 109 +++++++++++++++++++------------------------------ 2 files changed, 44 insertions(+), 67 deletions(-) diff --git a/include/linux/device.h b/include/linux/device.h index d7a72a8749ea..a83efd9ae949 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -1131,6 +1131,8 @@ void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode); void device_set_of_node_from_dev(struct device *dev, const struct device *dev2); void device_set_node(struct device *dev, struct fwnode_handle *fwnode); +DEFINE_GUARD(device, struct device *, device_lock(_T), device_unlock(_T)) + static inline int dev_num_vf(struct device *dev) { if (dev->bus && dev->bus->num_vf) diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c index 1ff1ab5fa105..ce1356ac6dc2 100644 --- a/drivers/dax/bus.c +++ b/drivers/dax/bus.c @@ -296,9 +296,8 @@ static ssize_t available_size_show(struct device *dev, struct dax_region *dax_region = dev_get_drvdata(dev); unsigned long long size; - device_lock(dev); + guard(device)(dev); size = dax_region_avail_size(dax_region); - device_unlock(dev); return sprintf(buf, "%llu\n", size); } @@ -314,10 +313,9 @@ static ssize_t seed_show(struct device *dev, if (is_static(dax_region)) return -EINVAL; - device_lock(dev); + guard(device)(dev); seed = dax_region->seed; rc = sprintf(buf, "%s\n", seed ? dev_name(seed) : ""); - device_unlock(dev); return rc; } @@ -333,10 +331,9 @@ static ssize_t create_show(struct device *dev, if (is_static(dax_region)) return -EINVAL; - device_lock(dev); + guard(device)(dev); youngest = dax_region->youngest; rc = sprintf(buf, "%s\n", youngest ? dev_name(youngest) : ""); - device_unlock(dev); return rc; } @@ -345,7 +342,14 @@ static ssize_t create_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { struct dax_region *dax_region = dev_get_drvdata(dev); + struct dev_dax_data data = { + .dax_region = dax_region, + .size = 0, + .id = -1, + .memmap_on_memory = false, + }; unsigned long long avail; + struct dev_dax *dev_dax; ssize_t rc; int val; @@ -358,38 +362,26 @@ static ssize_t create_store(struct device *dev, struct device_attribute *attr, if (val != 1) return -EINVAL; - device_lock(dev); + guard(device)(dev); avail = dax_region_avail_size(dax_region); if (avail == 0) - rc = -ENOSPC; - else { - struct dev_dax_data data = { - .dax_region = dax_region, - .size = 0, - .id = -1, - .memmap_on_memory = false, - }; - struct dev_dax *dev_dax = devm_create_dev_dax(&data); + return -ENOSPC; - if (IS_ERR(dev_dax)) - rc = PTR_ERR(dev_dax); - else { - /* - * In support of crafting multiple new devices - * simultaneously multiple seeds can be created, - * but only the first one that has not been - * successfully bound is tracked as the region - * seed. - */ - if (!dax_region->seed) - dax_region->seed = &dev_dax->dev; - dax_region->youngest = &dev_dax->dev; - rc = len; - } - } - device_unlock(dev); + dev_dax = devm_create_dev_dax(&data); + if (IS_ERR(dev_dax)) + return PTR_ERR(dev_dax); - return rc; + /* + * In support of crafting multiple new devices + * simultaneously multiple seeds can be created, + * but only the first one that has not been + * successfully bound is tracked as the region + * seed. + */ + if (!dax_region->seed) + dax_region->seed = &dev_dax->dev; + dax_region->youngest = &dev_dax->dev; + return len; } static DEVICE_ATTR_RW(create); @@ -481,12 +473,9 @@ static int __free_dev_dax_id(struct dev_dax *dev_dax) static int free_dev_dax_id(struct dev_dax *dev_dax) { struct device *dev = &dev_dax->dev; - int rc; - device_lock(dev); - rc = __free_dev_dax_id(dev_dax); - device_unlock(dev); - return rc; + guard(device)(dev); + return __free_dev_dax_id(dev_dax); } static int alloc_dev_dax_id(struct dev_dax *dev_dax) @@ -908,9 +897,8 @@ static ssize_t size_show(struct device *dev, struct dev_dax *dev_dax = to_dev_dax(dev); unsigned long long size; - device_lock(dev); + guard(device)(dev); size = dev_dax_size(dev_dax); - device_unlock(dev); return sprintf(buf, "%llu\n", size); } @@ -1080,15 +1068,12 @@ static ssize_t size_store(struct device *dev, struct device_attribute *attr, return -EINVAL; } - device_lock(dax_region->dev); - if (!dax_region->dev->driver) { - device_unlock(dax_region->dev); + guard(device)(dax_region->dev); + if (!dax_region->dev->driver) return -ENXIO; - } - device_lock(dev); + + guard(device)(dev); rc = dev_dax_resize(dax_region, dev_dax, val); - device_unlock(dev); - device_unlock(dax_region->dev); return rc == 0 ? len : rc; } @@ -1138,18 +1123,14 @@ static ssize_t mapping_store(struct device *dev, struct device_attribute *attr, return rc; rc = -ENXIO; - device_lock(dax_region->dev); - if (!dax_region->dev->driver) { - device_unlock(dax_region->dev); + guard(device)(dax_region->dev); + if (!dax_region->dev->driver) return rc; - } - device_lock(dev); + guard(device)(dev); to_alloc = range_len(&r); if (alloc_is_aligned(dev_dax, to_alloc)) rc = alloc_dev_dax_range(dev_dax, r.start, to_alloc); - device_unlock(dev); - device_unlock(dax_region->dev); return rc == 0 ? len : rc; } @@ -1196,26 +1177,20 @@ static ssize_t align_store(struct device *dev, struct device_attribute *attr, if (!dax_align_valid(val)) return -EINVAL; - device_lock(dax_region->dev); - if (!dax_region->dev->driver) { - device_unlock(dax_region->dev); + guard(device)(dax_region->dev); + if (!dax_region->dev->driver) return -ENXIO; - } - device_lock(dev); - if (dev->driver) { - rc = -EBUSY; - goto out_unlock; - } + guard(device)(dev); + if (dev->driver) + return -EBUSY; align_save = dev_dax->align; dev_dax->align = val; rc = dev_dax_validate_align(dev_dax); if (rc) dev_dax->align = align_save; -out_unlock: - device_unlock(dev); - device_unlock(dax_region->dev); + return rc == 0 ? len : rc; } static DEVICE_ATTR_RW(align); From patchwork Tue Dec 12 19:08:32 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: 177520 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7941985vqy; Tue, 12 Dec 2023 11:09:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IGOB9u1z7j6YBdSU7gCI5XglB21ooEqW18vnD98UPwTTM0hdPXc+zKWHc6PU9zhd36bdf4j X-Received: by 2002:a17:90b:5109:b0:28a:3110:93a9 with SMTP id sc9-20020a17090b510900b0028a311093a9mr3165777pjb.86.1702408147765; Tue, 12 Dec 2023 11:09:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702408147; cv=none; d=google.com; s=arc-20160816; b=IO39cxEWSckMf+nqNdqyLY6shKPX2I2mB8lbfwwUmka2fQ6CkcNF1nNXDribK7BB0d dnaZwjZHiJr6En0HC9iyMbzU3kYwX4UCAdJ6kD4ttl1G6OHhUHytHve9/qZGsomP/8UF reGKIkH8UkE9P5s3CmYGfbP9i4pq8/ZSAlYvW7qN4ImhCzk97M4n+MMSLXX5uLrYVIQA 6f45aCpHBaQTjEAgAeuz4cgBe0sacspC9SVK2ozfi9A2l8vfxG3M/neB9kzPQn2foJqP sb02O/vhkh/LlXACwtoVP7ICpKMkoETZXMhTLQiLXtreZFUBB3y5MS/UzBhp60oZ0mN5 EKqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=qb7p8a/3GN0G3c1Mkeg5S49SU1dG8JcUd/4X8XHY+6I=; fh=JpvfM3e+aJyUWlVhWivfe3Bpai8TmGDwtLUms+5GK1w=; b=mZQm+zZEMN+Gvwo5A6y69TMQ+sZLUTi3JGJFcJvyuSJ+R06hXpcwb848Y4V3NnV28t idOoa4FtlERWRUQXDe0AYFkw803e5leNqsKrs/EpkaqQC7SF9Ngkrb8MxMB5GdYSG4+H LCkEjs2yj4AdFAqDe4xPNg5/KH57jeNkt1Z1AAzXL1IniAdWwD0EuezmZjHDXNZcdsmg cNwhMeromVU1j7XEPvyihZrNFjsVyHABy2YfKdngemt8QXD1mREcA8Qh8sA6+4N4nl1v 82Gcf3pAT3xxL3N7w+4MuEYcJrNp4V0dEPhcYTxPzqGGbZbT/ACeOSqQFN0qHCMi005J OOPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bSRoxJvm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id ch9-20020a17090af40900b002886d6c7ea2si8226982pjb.177.2023.12.12.11.09.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 11:09:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bSRoxJvm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id E031680E3429; Tue, 12 Dec 2023 11:09:01 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376733AbjLLTIs (ORCPT + 99 others); Tue, 12 Dec 2023 14:08:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41842 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376776AbjLLTIn (ORCPT ); Tue, 12 Dec 2023 14:08:43 -0500 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 99763DB; Tue, 12 Dec 2023 11:08:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702408130; x=1733944130; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=vTibnNia0m6NhSJs+iWLq3VahLdeYpQQkT1+4mwIgB4=; b=bSRoxJvmp0ln6eGrvMnjx8ic2mK10FffCg1AoPih5jsrzMmuiAlP+BU9 ffmCLyZ78JGFSCs94RPuZSea8W7mx31d3UXC1ea97fOfY1Q9iS6HB/2t/ NT4UHMp5SgYIQfZMcjuahVh7eFxTmuoIUKhVlA2/Pe2Ih4JXspG15pdw6 vzRhU8ABksDIaw9gVHbbnyv1vfXgX7Tz32DEEKHKpfQEaw5q6ZywTDtXz Znk0p+UJClb+0rfla7GP4mb0X/ixrHc31zNnkgIibjfucKSVRt9UOZY5h nBiwNuFgIfnnYx094NYqPz69v7D7mPH+e/QLGoEliOfCjLSoXUp430oAF Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="13550598" X-IronPort-AV: E=Sophos;i="6.04,271,1695711600"; d="scan'208";a="13550598" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2023 11:08:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="844017864" X-IronPort-AV: E=Sophos;i="6.04,271,1695711600"; d="scan'208";a="844017864" Received: from cmperez2-mobl2.amr.corp.intel.com (HELO [192.168.1.200]) ([10.212.66.25]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2023 11:08:47 -0800 From: Vishal Verma Date: Tue, 12 Dec 2023 12:08:32 -0700 Subject: [PATCH v4 3/3] dax: add a sysfs knob to control memmap_on_memory behavior MIME-Version: 1.0 Message-Id: <20231212-vv-dax_abi-v4-3-1351758f0c92@intel.com> References: <20231212-vv-dax_abi-v4-0-1351758f0c92@intel.com> In-Reply-To: <20231212-vv-dax_abi-v4-0-1351758f0c92@intel.com> To: Dan Williams , Vishal Verma , Dave Jiang Cc: linux-kernel@vger.kernel.org, nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org, David Hildenbrand , Dave Hansen , Huang Ying , Li Zhijian , Jonathan Cameron X-Mailer: b4 0.13-dev-433a8 X-Developer-Signature: v=1; a=openpgp-sha256; l=3733; i=vishal.l.verma@intel.com; h=from:subject:message-id; bh=vTibnNia0m6NhSJs+iWLq3VahLdeYpQQkT1+4mwIgB4=; b=owGbwMvMwCXGf25diOft7jLG02pJDKkV6/eGzgvpDIjI2VB4MUV8v1HGFaXvqUqPjRxU7QQCG y6fvfmyo5SFQYyLQVZMkeXvno+Mx+S25/MEJjjCzGFlAhnCwMUpABNx2cvwz1j+5PvunqhiqR3P mjfIVipLnm6YtOpDe4iNsoWtxoPzLIwMlx02Ru3YvTtjqfq+sg6NPF3butUeWav+XPN8E+q7c6I 3KwA= X-Developer-Key: i=vishal.l.verma@intel.com; a=openpgp; fpr=F8682BE134C67A12332A2ED07AFA61BEA3B84DFF X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Tue, 12 Dec 2023 11:09:02 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785104325935681812 X-GMAIL-MSGID: 1785104325935681812 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 | 32 ++++++++++++++++++++++++++++++++ Documentation/ABI/testing/sysfs-bus-dax | 17 +++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c index ce1356ac6dc2..423adee6f802 100644 --- a/drivers/dax/bus.c +++ b/drivers/dax/bus.c @@ -1245,6 +1245,37 @@ 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 dax_device_driver *dax_drv = to_dax_drv(dev->driver); + struct dev_dax *dev_dax = to_dev_dax(dev); + ssize_t rc; + bool val; + + rc = kstrtobool(buf, &val); + if (rc) + return rc; + + guard(device)(dev); + if (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 +1302,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 a61a7b186017..b1fd8bf8a7de 100644 --- a/Documentation/ABI/testing/sysfs-bus-dax +++ b/Documentation/ABI/testing/sysfs-bus-dax @@ -149,3 +149,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'."