Received: by 2002:a05:7208:820a:b0:81:e143:7c29 with SMTP id q10csp583802rbf; Wed, 10 Apr 2024 13:34:00 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWi+bJ+kJptWXhkSyujHG0kNsHTHQFQsUQ9RzYFDVFClwgImvrunL545m8VNFYx5sWgWu0Bgy+gINoQo3qpCXnJ77iKJd2tNM2+S/8vBA== X-Google-Smtp-Source: AGHT+IFT92Zm9Fn3aW3ACQXo2sVEbBE+sBTjdyskPU3BZ3ci+0glZuqVWqP5vAGzgh/Jm2DcBfd0 X-Received: by 2002:a50:a69a:0:b0:56e:63d3:cb3e with SMTP id e26-20020a50a69a000000b0056e63d3cb3emr2302435edc.41.1712781240348; Wed, 10 Apr 2024 13:34:00 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712781240; cv=pass; d=google.com; s=arc-20160816; b=Sz7vTuvQLYLb2WPkpVIixOICMiG9usuWXurIohC6BzXOCUHeH2hyw9FjAOKjqkQe3/ 1kfMoEIFyUqjq2NOvyfTIzJivi0aBFqH/W8qpL3UQbrdgLOdS6M+mTIkp3kzPTvLP/Pc S9gqlp683nWb1t5DFl3N/wCyU/zP9AhjvU36WdIFvq7Pm+NPGiP9A7HhSiBGqScpnuo2 ckeh5ruTaCYwxOBDhUqFWvkA73ZUlda5jsvS4+1581hipDSR0MXB6+zEzhainFGYGR88 3HOG0R+/fLiFOFo9cdmiDJG/xSa1CQulYClei8o0NiUQP7yMdpg1x7RpyU4YnmoBYDQM VVnw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:message-id:subject:cc :to:from:date:dkim-signature; bh=hg7P6etGM7tKOxdLL/kZlBNBlImDsXtvmTtDcyeVwU8=; fh=gVOaIIhWuDDe/ygQbN3vypMcOYr5FOCRyM6FilwIiLY=; b=viBUqkqIxEAHwU8X/LOHR/YMIGRA6Wjw5u22+gWVIQlv61NbakvjOtMRunMqFzeqqK xbwYuch1k7Ft41DoC4awXY+OGzpWqJIv2E0Okr1iCe+bby26DHmMCiqQ+dVnf3erFQAc B0cZM5djWEtHZ8vfegAUENLDc2AosDY8bpIYxT1Fp6F4PRSLWJmr7P7iNMUJmMwQ7pi4 g2eFAwaG6C+PbTYE+89B5uD5lsFWkNXFXd88ZsHrKEbUcci3UWnhfI0Ize/rGXBDHey0 dyzkn+scGU4y9pR0HVp1x+CYFVxYIg+QE30aQOTYsB7sdD9dedSeODr9Sr2IE5cVet97 V4wg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=cNFSn+G2; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-139319-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-139319-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id s5-20020a056402520500b00568a5d05e5csi6054edd.299.2024.04.10.13.34.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Apr 2024 13:34:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-139319-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=cNFSn+G2; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-139319-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-139319-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 7BE901F27DE9 for ; Wed, 10 Apr 2024 20:33:21 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 26D11181CEA; Wed, 10 Apr 2024 20:33:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="cNFSn+G2" Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 618876110; Wed, 10 Apr 2024 20:33:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.15 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712781192; cv=none; b=BEmkxsU71+a+axIe+8fYkEK0nyvOp25u0Lp/DFBNkz9hKDVw3pGQ0mVoB3JYewTKn3NHTRAqewnRrXC9mWZ1Mtza8iTUx4y2q4w3M0TvW0gpIk20M44NN9Fu5JoTNIuLVUsuYIzS38QuFAzscqNfXSCDNegltFzeF/LPoe5BYgw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712781192; c=relaxed/simple; bh=szcvBm58CmYgHwxREZtOC2xNrrznZ2iKhAcgS1jq92k=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=qcSbOcIObP53MKjlVOAVvZQtSy4ZnO6n9Vl8ohesrmmsRDWALdxHDcWZUO+IJu5HQLzlH7VUmlms71d5ARftb43C8i/HYlIcxafT3Yt88+oAeW8JEaMhS4YTV6HnLi7dDFN0k+ebFKvI5kngIF8Sri5gdswLUYMoe806qtkJIWM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=cNFSn+G2; arc=none smtp.client-ip=192.198.163.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1712781190; x=1744317190; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=szcvBm58CmYgHwxREZtOC2xNrrznZ2iKhAcgS1jq92k=; b=cNFSn+G29Aef3J2WV0av+He7XiZdYQbW/KfOtJinQJhw89l/6ehhzzBY tLIbA+0J8byX2R+8LSh307LH3mR2EjFtPI/H6269Txl1RtQBwZdGXkuRz iBmxOgbST7hgwbXkmDfhz/PeD7NFPYJeIIqKuJs8cw+Jmi8CrygHcw/Pa oF0k9XZ97Pj0PgDc5yHmsqWbE66fNnBj25D8ePvC5b4gpGiIWff5iry3p 7rlfS75OvN0HPL8Cn8R8IefvV1YpzxoQwRnyGIg+6s+5NR55el0b0GTGW czNC9ToytEMD4VdEf3zfLMQV9+B98GQKJn9OcdxP25T41JM1b2+h1GFEf Q==; X-CSE-ConnectionGUID: d6jr2godQVGLYtetIbvStA== X-CSE-MsgGUID: hYkVxLTLQ9WMFVdH3v2fKA== X-IronPort-AV: E=McAfee;i="6600,9927,11039"; a="8344983" X-IronPort-AV: E=Sophos;i="6.07,191,1708416000"; d="scan'208";a="8344983" Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2024 13:33:09 -0700 X-CSE-ConnectionGUID: E6kjO7a/RLK4AbXo5UyOXA== X-CSE-MsgGUID: 69/XIloPQcmBhOsygt9vjw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,191,1708416000"; d="scan'208";a="20647702" Received: from aschofie-mobl2.amr.corp.intel.com (HELO aschofie-mobl2) ([10.255.230.146]) by fmviesa010-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2024 13:33:09 -0700 Date: Wed, 10 Apr 2024 13:33:07 -0700 From: Alison Schofield To: ira.weiny@intel.com Cc: Dave Jiang , Fan Ni , Jonathan Cameron , Navneet Singh , Dan Williams , Davidlohr Bueso , Vishal Verma , linux-btrfs@vger.kernel.org, linux-cxl@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 06/26] cxl/port: Add Dynamic Capacity mode support to endpoint decoders Message-ID: References: <20240324-dcd-type2-upstream-v1-0-b7b00d623625@intel.com> <20240324-dcd-type2-upstream-v1-6-b7b00d623625@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240324-dcd-type2-upstream-v1-6-b7b00d623625@intel.com> On Sun, Mar 24, 2024 at 04:18:09PM -0700, Ira Weiny wrote: > From: Navneet Singh > > Endpoint decoders which are used to map Dynamic Capacity must be > configured to point to the correct Dynamic Capacity (DC) Region. The > decoder mode currently represents the partition the decoder points to > such as ram or pmem. > > Expand the mode to include DC regions [partitions]. > > Signed-off-by: Navneet Singh > Co-developed-by: Ira Weiny > Signed-off-by: Ira Weiny > > --- > Changes for v1: > [iweiny: eliminate added gotos] > [iweiny: Mark DC support for 6.10 kernel] > --- > Documentation/ABI/testing/sysfs-bus-cxl | 21 +++++++++++---------- > drivers/cxl/core/hdm.c | 19 +++++++++++++++++++ > drivers/cxl/core/port.c | 16 ++++++++++++++++ > 3 files changed, 46 insertions(+), 10 deletions(-) > > diff --git a/Documentation/ABI/testing/sysfs-bus-cxl b/Documentation/ABI/testing/sysfs-bus-cxl > index fff2581b8033..8b3efaf6563c 100644 > --- a/Documentation/ABI/testing/sysfs-bus-cxl > +++ b/Documentation/ABI/testing/sysfs-bus-cxl > @@ -316,23 +316,24 @@ Description: > > > What: /sys/bus/cxl/devices/decoderX.Y/mode > -Date: May, 2022 > -KernelVersion: v6.0 > +Date: May, 2022, June 2024 > +KernelVersion: v6.0, v6.10 (dcY) > Contact: linux-cxl@vger.kernel.org > Description: > (RW) When a CXL decoder is of devtype "cxl_decoder_endpoint" it > translates from a host physical address range, to a device local > address range. Device-local address ranges are further split > - into a 'ram' (volatile memory) range and 'pmem' (persistent > - memory) range. The 'mode' attribute emits one of 'ram', 'pmem', > - 'mixed', or 'none'. The 'mixed' indication is for error cases > - when a decoder straddles the volatile/persistent partition > - boundary, and 'none' indicates the decoder is not actively > - decoding, or no DPA allocation policy has been set. > + into a 'ram' (volatile memory) range, 'pmem' (persistent > + memory) range, or Dynamic Capacity (DC) range. The 'mode' > + attribute emits one of 'ram', 'pmem', 'dcY', 'mixed', or > + 'none'. The 'mixed' indication is for error cases when a > + decoder straddles the volatile/persistent partition boundary, > + and 'none' indicates the decoder is not actively decoding, or > + no DPA allocation policy has been set. > > 'mode' can be written, when the decoder is in the 'disabled' > - state, with either 'ram' or 'pmem' to set the boundaries for the > - next allocation. > + state, with 'ram', 'pmem', or 'dcY' to set the boundaries for > + the next allocation. > > > What: /sys/bus/cxl/devices/decoderX.Y/dpa_resource > diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c > index 66b8419fd0c3..e22b6f4f7145 100644 > --- a/drivers/cxl/core/hdm.c > +++ b/drivers/cxl/core/hdm.c > @@ -255,6 +255,14 @@ static void devm_cxl_dpa_release(struct cxl_endpoint_decoder *cxled) > __cxl_dpa_release(cxled); > } > > +static int dc_mode_to_region_index(enum cxl_decoder_mode mode) > +{ > + if (mode < CXL_DECODER_DC0 || CXL_DECODER_DC7 < mode) > + return -EINVAL; > + > + return mode - CXL_DECODER_DC0; > +} Curious why this works? > + > static int __cxl_dpa_reserve(struct cxl_endpoint_decoder *cxled, > resource_size_t base, resource_size_t len, > resource_size_t skipped) > @@ -411,6 +419,7 @@ int cxl_dpa_set_mode(struct cxl_endpoint_decoder *cxled, > struct cxl_memdev *cxlmd = cxled_to_memdev(cxled); > struct cxl_dev_state *cxlds = cxlmd->cxlds; > struct device *dev = &cxled->cxld.dev; > + int rc; > > guard(rwsem_write)(&cxl_dpa_rwsem); > if (cxled->cxld.flags & CXL_DECODER_F_ENABLE) > @@ -433,6 +442,16 @@ int cxl_dpa_set_mode(struct cxl_endpoint_decoder *cxled, > return -ENXIO; > } > break; > + case CXL_DECODER_DC0 ... CXL_DECODER_DC7: > + rc = dc_mode_to_region_index(mode); > + if (rc < 0) > + return rc; > + > + if (resource_size(&cxlds->dc_res[rc]) == 0) { > + dev_dbg(dev, "no available dynamic capacity\n"); > + return -ENXIO; > + } return rc breaks the pattern in this function. Feels like 'rc' can be named 'index' since we index into dc_res[]. Explicitly show the return -EINVAL here as other cases do. like: index = dc_mode_to_region_index(mode); if (index < 0) return -EINVAL; and then: dc_mode_to_region_index() can just return -1 or still return -EINVAL. > + break; > default: > dev_dbg(dev, "unsupported mode: %d\n", mode); > return -EINVAL; > diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c > index e59d9d37aa65..80c0651794eb 100644 > --- a/drivers/cxl/core/port.c > +++ b/drivers/cxl/core/port.c > @@ -208,6 +208,22 @@ static ssize_t mode_store(struct device *dev, struct device_attribute *attr, > mode = CXL_DECODER_PMEM; > else if (sysfs_streq(buf, "ram")) > mode = CXL_DECODER_RAM; > + else if (sysfs_streq(buf, "dc0")) > + mode = CXL_DECODER_DC0; > + else if (sysfs_streq(buf, "dc1")) > + mode = CXL_DECODER_DC1; > + else if (sysfs_streq(buf, "dc2")) > + mode = CXL_DECODER_DC2; > + else if (sysfs_streq(buf, "dc3")) > + mode = CXL_DECODER_DC3; > + else if (sysfs_streq(buf, "dc4")) > + mode = CXL_DECODER_DC4; > + else if (sysfs_streq(buf, "dc5")) > + mode = CXL_DECODER_DC5; > + else if (sysfs_streq(buf, "dc6")) > + mode = CXL_DECODER_DC6; > + else if (sysfs_streq(buf, "dc7")) > + mode = CXL_DECODER_DC7; > else > return -EINVAL; > > > -- > 2.44.0 >