Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1929815pxj; Wed, 19 May 2021 18:03:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzcNRPA4N9tHurynTEggDpEE5Xr3CQ5f79qV8wPuImsBO2zPMdVDRfKy1RPGwHG8hnlkM3X X-Received: by 2002:a05:6e02:4a6:: with SMTP id e6mr2330266ils.254.1621472625215; Wed, 19 May 2021 18:03:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621472625; cv=none; d=google.com; s=arc-20160816; b=gCqf5NCVueM9JpO3ezg9E+g+NmSvTkZOGVpQ31tklWdFOQmstSCNFb8Vq5PI3sFJuA NoCCN1KV6B2ZyPHyiTso5+j3xUFWWEoerntD2KVLWYBmnis6Rym5zchUT7q+J/1MsXQ6 aEB9KAkniLykPhYqAGnKOSwYm9X7jEBWGbgIpbtLMA0gyp5g5xyYB07qbo3h1UkOYrIA ISzng0rhAfZtb03s9+b8TCQhivFuinHBKrM3gIlkb/s01VxyMRvQ6QPM1shPZaqRJmAO NBI5QLiJSvWL4D81Fu/s/QCqik6m0GSZfj41mmh3cBZ4NQVbABvVSvS/JetzJNDfprEV lOwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=PV93lQCglOhbMGVMfJuGtexcibz93Be8FcNhBRCyYy0=; b=J/ngMp9/aNup7txBiq9qwh5L6jw9XOZ5kGq8Kg8v2OC7sP5DSxmV/LzTCX8f8PKQRM nQumgpQ80FBOHyAtZnwJXxYW9IbMNENUGJiilXknvXFpdZKJYYcMezgf6wQl0KyPVX62 3Oev5y8adBTBqx9AsAvVLgrE7VvooOF7WteXJi5Dfl4d/NZunDvHJqgjKK+ZTvVVI6Sm KkX8q5x1ka0iaYG8yRl10Nf+D2pkSJwJfx58FDAzM5cZynUwqda5qwjgNgSkNnUENlhj 3n2NXMh7fH9IlaqARZ/pK4MMTHgIOcibjJUp087NMav7VOWpf00JQnceo4uekZBLJXxE QsOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=0fuJ485G; 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 n11si1286112ilk.101.2021.05.19.18.03.31; Wed, 19 May 2021 18:03:45 -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; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=0fuJ485G; 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 S229498AbhETBCX (ORCPT + 99 others); Wed, 19 May 2021 21:02:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229525AbhETBCX (ORCPT ); Wed, 19 May 2021 21:02:23 -0400 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BB998C061574 for ; Wed, 19 May 2021 18:01:02 -0700 (PDT) Received: by mail-ej1-x62e.google.com with SMTP id c20so22640123ejm.3 for ; Wed, 19 May 2021 18:01:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=PV93lQCglOhbMGVMfJuGtexcibz93Be8FcNhBRCyYy0=; b=0fuJ485GdotQotosDlB7w8ZsyIW7lXvt6u5gXJL0+f4VdHJTL/zW0IZBFksc3Rd/OE lO/rDEXFXwGylfro3ffeLx9mrxQGY2Zxa/ba3yz7+TFIfpXk5fmtclz7uWzIN0C/jXOr WcnV612JXZOHC9kkbcSN42WyS5XLrTp/yTLIvDObuB80PeKq3znZ0ufQKg+FCvvh9ETv gFUHJ1G3ZOzeKXD0lqu1wH+C6zdfQw1LR/z7H6NnrQrIWl72kUsSlwpvbdrQwUQu9+Cp HCFpOJpmjfXsm6Yd2Nvjq3e1ftsk1gpClygpra1G7XRqTssvN04/h9idzkTsdSKqHk3B mtLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=PV93lQCglOhbMGVMfJuGtexcibz93Be8FcNhBRCyYy0=; b=QKBuhvoZHPyu639dq+vcQgfd8LjKtn4Oo37IgbpoQ/uVqKxWv2r+lIj87se+feLI45 bqeLJNPvhBGq1BvWnaADeF9NvH+JBoWXHIdVaEYMqBfulEH3Bq5Bo5Egr+sjjJ0Lo+Vs Bqa+shPYDkellzfdWlrmssMAMmiCbBfAfovb/zXLo+BO5pbWhtYfF6ai8BCFAFsbWxQv 7g+mjz+ndRxcQMhBKB4Dl48AVlfnQCzWyMuWX+GhvUKVgm66GGV3U6G3ld/1ut/mkALL MlLuZlSsXEs3vLDa/RLa2xcjjh0lFCS2lvLDB1xCvULsH9PHgWL/NMjV7c4QEVAdrULd g7Cg== X-Gm-Message-State: AOAM530Rh7eNNuRRtRDlVgrfNoH29vnnBMjV9SFxymr+YynuEqeevdy4 CXB9V8XK24PPffUgNjo6ph5n0A/lF8jHXT0PF0fi6A== X-Received: by 2002:a17:906:e210:: with SMTP id gf16mr2003631ejb.472.1621472461276; Wed, 19 May 2021 18:01:01 -0700 (PDT) MIME-Version: 1.0 References: <20210506223654.1310516-1-ira.weiny@intel.com> <20210506223654.1310516-3-ira.weiny@intel.com> In-Reply-To: <20210506223654.1310516-3-ira.weiny@intel.com> From: Dan Williams Date: Wed, 19 May 2021 18:00:51 -0700 Message-ID: Subject: Re: [PATCH 2/4] cxl/mem: Reserve all device regions at once To: "Weiny, Ira" Cc: Ben Widawsky , Alison Schofield , Vishal Verma , Jonathan Cameron , linux-cxl@vger.kernel.org, Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 6, 2021 at 3:37 PM wrote: > > From: Ira Weiny > > In order to remap individual register sets each bar region must be > reserved prior to mapping. Because the details of individual register > sets are contained within the BARs themselves, the bar must be mapped 2 > times, once to extract this information and a second time for each > register set. > > Rather than attempt to reserve each BAR individually and track if that > bar has been reserved. Open code pcim_iomap_regions() by first > reserving all memory regions on the device and then mapping the bars > individually as needed. > > Signed-off-by: Ira Weiny > --- > drivers/cxl/pci.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/drivers/cxl/pci.c b/drivers/cxl/pci.c > index 191603b4e10b..40016709b310 100644 > --- a/drivers/cxl/pci.c > +++ b/drivers/cxl/pci.c > @@ -926,9 +926,9 @@ static void __iomem *cxl_mem_map_regblock(struct cxl_mem *cxlm, u32 reg_lo, u32 > { > struct pci_dev *pdev = cxlm->pdev; > struct device *dev = &pdev->dev; > + void __iomem *rc; > u64 offset; > u8 bar; > - int rc; > > offset = ((u64)reg_hi << 32) | (reg_lo & CXL_REGLOC_ADDR_MASK); > bar = FIELD_GET(CXL_REGLOC_BIR_MASK, reg_lo); > @@ -940,13 +940,14 @@ static void __iomem *cxl_mem_map_regblock(struct cxl_mem *cxlm, u32 reg_lo, u32 > return (void __iomem *)ERR_PTR(-ENXIO); > } > > - rc = pcim_iomap_regions(pdev, BIT(bar), pci_name(pdev)); > - if (rc) { > + rc = pcim_iomap(pdev, bar, 0); It is odd that the temporary region pinning uses non-pcim, but the temporary mapping using pcim. > + if (!rc) { > dev_err(dev, "failed to map registers\n"); > - return (void __iomem *)ERR_PTR(rc); > + return (void __iomem *)ERR_PTR(-ENOMEM); I think since this support is a bug/compatibility fix it should probably be rebased to current cxl.git#next. If you still end up needing to return an __iomem ERR_PTR() then use IOMEM_ERR_PTR. > } > > - dev_dbg(dev, "Mapped CXL Memory Device resource\n"); > + dev_dbg(dev, "Mapped CXL Memory Device resource bar %u @ 0x%llx\n", s/0x%llx/%#llx/ > + bar, offset); > > return pcim_iomap_table(pdev)[bar] + offset; > } > @@ -999,6 +1000,9 @@ static int cxl_mem_setup_regs(struct cxl_mem *cxlm) > return -ENXIO; > } > > + if (pci_request_mem_regions(pdev, pci_name(pdev))) This tells me this patch is too fine grained and can't stand alone because it is missing the corresponding call to pci_release_mem_regions(). Ideally this would be kept in the same scope as the temporary io mapping. > + return -ENODEV; > + > /* Get the size of the Register Locator DVSEC */ > pci_read_config_dword(pdev, regloc + PCI_DVSEC_HEADER1, ®loc_size); > regloc_size = FIELD_GET(PCI_DVSEC_HEADER1_LENGTH_MASK, regloc_size); > -- > 2.28.0.rc0.12.gb6a658bd00c9 >