From patchwork Mon Feb 6 01:03:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Williams X-Patchwork-Id: 13129231 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 165BDC636CD for ; Mon, 6 Feb 2023 01:03:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A7A246B007D; Sun, 5 Feb 2023 20:03:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A2A746B007E; Sun, 5 Feb 2023 20:03:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8CBA36B0080; Sun, 5 Feb 2023 20:03:06 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 7E96C6B007D for ; Sun, 5 Feb 2023 20:03:06 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 4A5121207B5 for ; Mon, 6 Feb 2023 01:03:06 +0000 (UTC) X-FDA: 80435067972.06.CA675F2 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by imf16.hostedemail.com (Postfix) with ESMTP id 2D8EA180006 for ; Mon, 6 Feb 2023 01:03:03 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Y3OfPSwr; spf=pass (imf16.hostedemail.com: domain of dan.j.williams@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=dan.j.williams@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675645384; 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=N9GYVMVjWRUDVkd7PeIA4dsq7aLV5XQKEqWsb7dne8Y=; b=XI7Ah3Pt7Kd/Q3x2ip5sbEkZUrIcQ3Ud2ai3XZPqlHcKDfQ6M61nJ5QzmfzR/HjV2R8Jn8 9goJsAekiP1Bh18CzIx8roXyCVFBh8bsVwjudEkKpkrGZwnsJGeoRrvqq0/P7IoACHP3km t8JMAnnbD6SawCH6kdFNjmAOhVb4mZQ= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Y3OfPSwr; spf=pass (imf16.hostedemail.com: domain of dan.j.williams@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=dan.j.williams@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675645384; a=rsa-sha256; cv=none; b=JjVg4R3nUyZQL/OoEb8sZ19tcF4IpRA2OPlVNL3pL0PUE8iLqhP+FBdUS/x3Iuku/aOfvf ShrjuFT1LKBudUEUeI0kDyzfF8P21L31xFSeGsxZY6UGq0RaT6fnTl9feKc0hOjcqcQnJ2 VUjktbjTTny04nTnAVmjMYlGcEThOrI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675645384; x=1707181384; h=subject:from:to:cc:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=gxV5boq5z7i+vQyYxApsVbkxX+I+JHzPNbJoiDtgews=; b=Y3OfPSwr83yDD55RMdg4AXe7mkDrdYz3NkJ2BvLg01lVednVIZyMt616 O8Fn+wtlw/ccYV7B06kz9ROxoygljbnm7S9dYjenLyX0QW0GF1Md4rdXj PsWW727MEx3zr0h7yO6zlVV7RPi4gsE66ygCuCr7TH0Awp47WbDrqifqU YunMWoSOLNofEevrOVpM/HKO2TfCOdCAvq/Up2+vqbaHGtK0KitB+LpP3 U1NN2dHhU2kEua/p5LLEyGgw4DovbkbdOlDQZ7bpYTmjdvbiO+21HGMSp 2w/1JbKUeW6z7UU14fD0eTiy4ABI6aztsXaag3KDNuT7zB4FtdWlBN08R w==; X-IronPort-AV: E=McAfee;i="6500,9779,10612"; a="312763181" X-IronPort-AV: E=Sophos;i="5.97,276,1669104000"; d="scan'208";a="312763181" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Feb 2023 17:03:02 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10612"; a="616291294" X-IronPort-AV: E=Sophos;i="5.97,276,1669104000"; d="scan'208";a="616291294" Received: from mkrysak-mobl.amr.corp.intel.com (HELO dwillia2-xfh.jf.intel.com) ([10.212.255.187]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Feb 2023 17:03:02 -0800 Subject: [PATCH 06/18] cxl/region: Refactor attach_target() for autodiscovery From: Dan Williams To: linux-cxl@vger.kernel.org Cc: dave.hansen@linux.intel.com, linux-mm@kvack.org, linux-acpi@vger.kernel.org Date: Sun, 05 Feb 2023 17:03:02 -0800 Message-ID: <167564538227.847146.16305045998592488364.stgit@dwillia2-xfh.jf.intel.com> In-Reply-To: <167564534874.847146.5222419648551436750.stgit@dwillia2-xfh.jf.intel.com> References: <167564534874.847146.5222419648551436750.stgit@dwillia2-xfh.jf.intel.com> User-Agent: StGit/0.18-3-g996c MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: zrdawy4hifgwz7sg7u5nbbe7qh4x5pcn X-Rspamd-Queue-Id: 2D8EA180006 X-HE-Tag: 1675645383-877410 X-HE-Meta: U2FsdGVkX19aS5d/Z/Frk2JI4WlM5Xmdy28gbe6Nwu/F4MYxhnHinSxWrzKKiLx2b7sKZQ1YCd813AfeBj7dxlnzGLU2NXKmQQ+QbEjAON4OPp2Glrz7ANhsygwTngmCTdJxELVMwPP81hd9Oo1E3ZOVAhFLUOQ2y4Wxv4zLV3lLZI5WIqkaVlT98MCxutE6dnjwIjKzQTGjMvKnzXngm+4uYR29pQs6nIU7o1+RK0L0Feh93x0gPe+94LVGzXkMdlLpV++Vxid+8jTir12YyRgDYIrTJ5Ot3/2KHTa5Dg+dLTPk9A+JbyxFnW0HEHwe/pbIDLVEMGeR2onvZW0MwUkM3kZEYrqMEFxjebQe1rpEJQynyZMkNuho/yzIPNK+k4AUxOrtEJ3sm+vGLQ/dqmcHuicW31FHlfd6oKKrJh/yDxafShaeplTjt4scUYbUqMCa0GjCBLnHKPzunV+/xYU9bL8Jm7LdTwu7L8DZCiNjXEGdlI2ACwKkz6PXebDCC9wquHyYnh0ALY7oA5oSryePR70Lt4mTKDFWm1c4mUsobx6eTatry2v8mAWrfVdNnigWjXLBLU7EI+t9pOdnI0xGuKhtrHJWPTHtAYph9SV5RDARjYKdDunQJ8LD0cgJ9kudSrFUlf1lAdHAh5gouRQYsYT7+CN/6NrLRr9ktDJwEk2Oy3XtJB5s66vDktYdRxUm6SOGJWf0Kz7f3s429vOULxdviA5aTJvrvxxydLWQImTPj07JeI3LQDyVmZuaqSJw9xCv56SLVKz3s7EJ/BYvORkKjdL/dOyR7K7RIOmimfzWeZ3e1BAoF6fmBblEK5qRGY6zKtinE+VNIO/u2dwS7uF33TNPecRb8OG6dQlWUX4bngbav4g9Za0/HctEkUrF4bFJI0Sl9c0D0evQKloeziBYoIMN2TbHAb+tPj1WYbUIxYKQRiPTihPAeH+Sw3/8I+OteKDGmOpzZIq JBg3s1v5 NkAcb3UDHDVkvwGv6gF5X+2Z7WHhidarXjO35baYT6IOwmhnKFoSMmyoid0oJW9NPXZJBBwRbo+fSZeVitt9omJPxNvmqa04rj5FhJ2ugmiE1VZaC7Zfgdmd3XyNQZjqVv9vOtIJo9slVyehIdTxM4mTkVZbmudi/AW/UaWyD6XonVXXlI8xzfLVVlTcCyiYlPqWqclzuD04Ui2k6NsRO4olm2scq4XnbB7xPNVdwvBudyyw= 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: Region autodiscovery is the process of kernel creating 'struct cxl_region' object to represent active CXL memory ranges it finds already active in hardware when the driver loads. Typically this happens when platform firmware establishes CXL memory regions and then publishes them in the memory map. However, this can also happen in the case of kexec-reboot after the kernel has created regions. In the autodiscovery case the region creation process starts with a known endpoint decoder. Refactor attach_target() into a helper that is suitable to be called from either sysfs, for runtime region creation, or from cxl_port_probe() after it has enumerated all endpoint decoders. The cxl_port_probe() context is an async device-core probing context, so it is not appropriate to allow SIGTERM to interrupt the assembly process. Refactor attach_target() to take @cxled and @state as arguments where @state indicates whether waiting from the region rwsem is interruptible or not. No behavior change is intended. Signed-off-by: Dan Williams Reviewed-by: Jonathan Cameron Reviewed-by: Ira Weiny Reviewed-by: Dave Jiang Reviewed-by: Vishal Verma --- drivers/cxl/core/region.c | 47 +++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index 8dea49c021b8..97eafdd75675 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -1418,31 +1418,25 @@ void cxl_decoder_kill_region(struct cxl_endpoint_decoder *cxled) up_write(&cxl_region_rwsem); } -static int attach_target(struct cxl_region *cxlr, const char *decoder, int pos) +static int attach_target(struct cxl_region *cxlr, + struct cxl_endpoint_decoder *cxled, int pos, + unsigned int state) { - struct device *dev; - int rc; - - dev = bus_find_device_by_name(&cxl_bus_type, NULL, decoder); - if (!dev) - return -ENODEV; - - if (!is_endpoint_decoder(dev)) { - put_device(dev); - return -EINVAL; - } + int rc = 0; - rc = down_write_killable(&cxl_region_rwsem); + if (state == TASK_INTERRUPTIBLE) + rc = down_write_killable(&cxl_region_rwsem); + else + down_write(&cxl_region_rwsem); if (rc) - goto out; + return rc; + down_read(&cxl_dpa_rwsem); - rc = cxl_region_attach(cxlr, to_cxl_endpoint_decoder(dev), pos); + rc = cxl_region_attach(cxlr, cxled, pos); if (rc == 0) set_bit(CXL_REGION_F_INCOHERENT, &cxlr->flags); up_read(&cxl_dpa_rwsem); up_write(&cxl_region_rwsem); -out: - put_device(dev); return rc; } @@ -1480,8 +1474,23 @@ static size_t store_targetN(struct cxl_region *cxlr, const char *buf, int pos, if (sysfs_streq(buf, "\n")) rc = detach_target(cxlr, pos); - else - rc = attach_target(cxlr, buf, pos); + else { + struct device *dev; + + dev = bus_find_device_by_name(&cxl_bus_type, NULL, buf); + if (!dev) + return -ENODEV; + + if (!is_endpoint_decoder(dev)) { + rc = -EINVAL; + goto out; + } + + rc = attach_target(cxlr, to_cxl_endpoint_decoder(dev), pos, + TASK_INTERRUPTIBLE); +out: + put_device(dev); + } if (rc < 0) return rc;