Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp81926pxj; Thu, 10 Jun 2021 15:29:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzIJgmw2zft3eE1lQSiXexyeRor1Tm6MIH1SNPXzCSZ+UseG0o9ZAvi3qhTi5uThQuOY1sZ X-Received: by 2002:a17:906:4d04:: with SMTP id r4mr675413eju.76.1623364157856; Thu, 10 Jun 2021 15:29:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623364157; cv=none; d=google.com; s=arc-20160816; b=D+7vZLJLueKfhZJvwrkDsFVVSpm42NNrnVbZptQKMgSdL6QM4kLcjVPoHCCxDfoaet NsoOe0xHsptChkEJXdWJGBk/3MlGlrlhY88L2rit+WOwlF74bDpLBIxzvhr+z7w5rCn+ SfqEYCuoOYc2BT4nZrEZrISnaVhtUXUcuDZCS67EHhY733wwAK7xR7A9M0Vh7B5K1p+j GIFTmfBFBQqaesj03w5FbkCZcPfp37UZNMG2lQv2Vmi5GVR+rKhNcDHRpXffxcTzsDeb KCsFfuluzbOJ4M3iKyYE9S/laVrvC+e4rMb6MVeYhOwV6at1TXcb9wfkFsqHVjce6wgD GY1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject:ironport-sdr:ironport-sdr; bh=N9R2tuPRoeBUaNRWYlikfhOoJoyh1PRpRZBdfbQ+pVw=; b=u38unrVag5IDqTZXeAZRkUqalSGPnhXd/dqf8kjSKnPo39NDyeqrSw/kOokQrM5124 pXMnh4OTCjSu9p77L4e0ZksdH81r1pJh1niLB/L12l8jpwq453M9Y6Hec19iqM/XMkzE yL0bs/SUlk5V/JViYevTAXgSeboodZ0zkG+9NQTARtiJ+xeAac5DQSW9I1cMo58d8a0E K8u6CD0lFYKjlxCWpplylJW0+Ih1rfpw+oWon/FVqsUiH+uSd40ih62+JsEcLreEbe6r W34pCkQLKJuP3EQTsETmbjcwD8/hx7ABtk+oLAOTpU0+zU6fCJQoF+J/7eexd7kj+Zij dMKg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f18si2955200ejk.304.2021.06.10.15.28.54; Thu, 10 Jun 2021 15:29:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231207AbhFJW2O (ORCPT + 99 others); Thu, 10 Jun 2021 18:28:14 -0400 Received: from mga07.intel.com ([134.134.136.100]:5272 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231185AbhFJW2M (ORCPT ); Thu, 10 Jun 2021 18:28:12 -0400 IronPort-SDR: z8wtHYHYViDv+lvcFFSFLyGEGiaSdx93fBpmSv3wY1xilNIMUtZM8omKhHu0h6qftEUcr/57BQ iVVeitDuopwQ== X-IronPort-AV: E=McAfee;i="6200,9189,10011"; a="269268003" X-IronPort-AV: E=Sophos;i="5.83,264,1616482800"; d="scan'208";a="269268003" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2021 15:26:14 -0700 IronPort-SDR: YU84HpYpCs1XEnh91CIuloVvU4S+J5aIQIXPoHcnjJYJ92CFytP1DshsGXgqCSyxTh+75+KfYf AZdx+5NLouXw== X-IronPort-AV: E=Sophos;i="5.83,264,1616482800"; d="scan'208";a="402828411" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.25]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2021 15:26:14 -0700 Subject: [PATCH 3/5] libnvdimm: Export nvdimm shutdown helper, nvdimm_delete() From: Dan Williams To: linux-cxl@vger.kernel.org Cc: nvdimm@lists.linux.dev, ben.widawsky@intel.com, alison.schofield@intel.com, vishal.l.verma@intel.com, ira.weiny@intel.com, linux-kernel@vger.kernel.org Date: Thu, 10 Jun 2021 15:26:14 -0700 Message-ID: <162336397425.2462439.17244700627659096367.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <162336395765.2462439.11368504490069925374.stgit@dwillia2-desk3.amr.corp.intel.com> References: <162336395765.2462439.11368504490069925374.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.18-3-g996c MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org CXL is a hotplug bus and arranges for nvdimm devices to be dynamically discovered and removed. The libnvdimm core manages shutdown of nvdimm security operations when the device is unregistered. That functionality is moved to nvdimm_delete() and invoked by the CXL-to-nvdimm glue code. Signed-off-by: Dan Williams --- drivers/nvdimm/bus.c | 19 ++++--------------- drivers/nvdimm/dimm_devs.c | 18 ++++++++++++++++++ include/linux/libnvdimm.h | 1 + 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c index 3a777d0073b7..a11821df83b5 100644 --- a/drivers/nvdimm/bus.c +++ b/drivers/nvdimm/bus.c @@ -396,21 +396,10 @@ static int child_unregister(struct device *dev, void *data) if (dev->class) return 0; - if (is_nvdimm(dev)) { - struct nvdimm *nvdimm = to_nvdimm(dev); - bool dev_put = false; - - /* We are shutting down. Make state frozen artificially. */ - nvdimm_bus_lock(dev); - set_bit(NVDIMM_SECURITY_FROZEN, &nvdimm->sec.flags); - if (test_and_clear_bit(NDD_WORK_PENDING, &nvdimm->flags)) - dev_put = true; - nvdimm_bus_unlock(dev); - cancel_delayed_work_sync(&nvdimm->dwork); - if (dev_put) - put_device(dev); - } - nd_device_unregister(dev, ND_SYNC); + if (is_nvdimm(dev)) + nvdimm_delete(to_nvdimm(dev)); + else + nd_device_unregister(dev, ND_SYNC); return 0; } diff --git a/drivers/nvdimm/dimm_devs.c b/drivers/nvdimm/dimm_devs.c index 9d208570d059..dc7449a40003 100644 --- a/drivers/nvdimm/dimm_devs.c +++ b/drivers/nvdimm/dimm_devs.c @@ -642,6 +642,24 @@ struct nvdimm *__nvdimm_create(struct nvdimm_bus *nvdimm_bus, } EXPORT_SYMBOL_GPL(__nvdimm_create); +void nvdimm_delete(struct nvdimm *nvdimm) +{ + struct device *dev = &nvdimm->dev; + bool dev_put = false; + + /* We are shutting down. Make state frozen artificially. */ + nvdimm_bus_lock(dev); + set_bit(NVDIMM_SECURITY_FROZEN, &nvdimm->sec.flags); + if (test_and_clear_bit(NDD_WORK_PENDING, &nvdimm->flags)) + dev_put = true; + nvdimm_bus_unlock(dev); + cancel_delayed_work_sync(&nvdimm->dwork); + if (dev_put) + put_device(dev); + nd_device_unregister(dev, ND_SYNC); +} +EXPORT_SYMBOL_GPL(nvdimm_delete); + static void shutdown_security_notify(void *data) { struct nvdimm *nvdimm = data; diff --git a/include/linux/libnvdimm.h b/include/linux/libnvdimm.h index 89b69e645ac7..7074aa9af525 100644 --- a/include/linux/libnvdimm.h +++ b/include/linux/libnvdimm.h @@ -278,6 +278,7 @@ static inline struct nvdimm *nvdimm_create(struct nvdimm_bus *nvdimm_bus, return __nvdimm_create(nvdimm_bus, provider_data, groups, flags, cmd_mask, num_flush, flush_wpq, NULL, NULL, NULL); } +void nvdimm_delete(struct nvdimm *nvdimm); const struct nd_cmd_desc *nd_cmd_dimm_desc(int cmd); const struct nd_cmd_desc *nd_cmd_bus_desc(int cmd);