Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp39780pxj; Wed, 16 Jun 2021 19:41:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzQ91VNQTOXPLx1KjiJ/YlCe02sV+wxnjYkzbCFOmSUYGv2EiXyMlIuBlPTcrPfT8iNc8HG X-Received: by 2002:a05:6402:510f:: with SMTP id m15mr3424456edd.283.1623897681534; Wed, 16 Jun 2021 19:41:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623897681; cv=none; d=google.com; s=arc-20160816; b=Cuq4rxyoQSfc1xVoNLnc0ogTrWSAF1ZyIrJMk4mzOVxFY8+Q9OzH8WOjAGKXPHX0lm 6pHE56I9QNE6on9M4G3dqF6iSo4Ojxe9PNC2thw9HkYW2cu7udxrUn3vmEz6fJQPXJZL dvAn1kvSVYEnncc19P3Mcz5OJ8Rx1YHC0pNMMIA39mW7EvJlgCnHx3PGfT5VRDmuaavt 2ODoB9TL+7ZGCSW/ZOahFL3+aXeKyq/xXJsOy187gOk4mMrDUF3CKZvJNgaRewlhrFke mmGAOPYSarKoIDsB5NARTqUfD9udZFSTUdH+mZDJ5N+YWxteV/c8ih54B4oVSxQk3ecJ OlXw== 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=xUKGZQ5t19Qy+tZDlwlkuIB63RRAOakgC6Mx9D2w6yU=; b=YNW/VcohC1JPW5SV37WVJbizncQTFF8CcSuL5IJ30O4olxbWR1joOu1LZDPO8x795x A8zkFF8/CuhyCYbCINSRJt7fPedfYBl5D/5kwerHsy3BT9Z7oVpJH3P7r26OoxCjl826 PNPT9U2Jq81xI8f+xWLUNlx/E25WPrT9Of5mOPCTFigKmAjNMQvVhJCzo/K1S/MPBQtX NMSk0wg2rI14a4qmnTQv4C1dVEkS5/eZdlzo41kgfEXQXKljlIdaDpy0KEeSi9soqmoA dHgDP9u6BSiHjKZzSUHcpPjAZWEVBPV7eFT6a5fj2KVOqJOuE1W1d5xzmOjMUDYALg8C svhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=q37usVIc; 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 20si4134346edw.376.2021.06.16.19.40.59; Wed, 16 Jun 2021 19:41:21 -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=q37usVIc; 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 S232406AbhFPXxJ (ORCPT + 99 others); Wed, 16 Jun 2021 19:53:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234812AbhFPXxI (ORCPT ); Wed, 16 Jun 2021 19:53:08 -0400 Received: from mail-pg1-x531.google.com (mail-pg1-x531.google.com [IPv6:2607:f8b0:4864:20::531]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00C36C061760 for ; Wed, 16 Jun 2021 16:51:01 -0700 (PDT) Received: by mail-pg1-x531.google.com with SMTP id q15so3381050pgg.12 for ; Wed, 16 Jun 2021 16:51:01 -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=xUKGZQ5t19Qy+tZDlwlkuIB63RRAOakgC6Mx9D2w6yU=; b=q37usVIc65VDGwEYlRnvalUQ1PX/52xHdou3EfQNrLSNVY5LxGD2YD2rNo2aqsl7ty TmD6AKPabKUwDuzOGBf9uyTXl+8bS92hZPy5+JjqJF+2Is+IoCxFrzAUY4WPXlTKcmrd 7tX3yxsVY3aHgNaOTr70DJnRnftZbDKNuPs4ikEh6xBwgQ/i3PD/OWh/8JmDDO+LjO93 z5qbn9HO2XmyA6auqlUvnOgKCkgGjSrD2zD7TYimFUjVQJB7m0Or183iGpn1Ij1tfGRg lXnl9kEHl0SED2Rxp92YuXXXVNn+/yuw6t5U2qjp5a05m0Ac79ECm+mJqhUc7EEhFK7R VsZw== 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=xUKGZQ5t19Qy+tZDlwlkuIB63RRAOakgC6Mx9D2w6yU=; b=AsSZGuWbUts0ZurOlWG6hEzycJT2nKwI8ljzAp1QP105m8K8OkjGhV8e4AKiyDOcOJ d5TNRPkN0zLJ0R99INKy9XTygdmvYY+fvdT8ba92MgLsdzsrN2EICUf2EHToAtRKRMRU hpxCK3gve9iOGl/r7ZRb+wZeit4/y7ZD7F33s5Ekc6/bOkb+G/tQ6gafZ/EDXHPYyqUR Y6SeY7+A/M4h9q5BQHSbaQtu083b2/RUNIEcftJuZFi4sXRtavJpnE8wKbey/fxaX1Xp yeXUAxz+QDa7ztnFX7/uyyVPTVIbWHWadoWWlXWfe2MgCUeQP4qMLbTKsnxi7g4FylXN d2JQ== X-Gm-Message-State: AOAM531rmWLtyDrmreNsjF8gR9xYQXGZhQRRNyYFgfxatC3GLNoe+3iu vlYTuNndKWBIr/MteHqZECwHcFoM2Frc7j2skl40tw== X-Received: by 2002:a63:4653:: with SMTP id v19mr2163346pgk.240.1623887461396; Wed, 16 Jun 2021 16:51:01 -0700 (PDT) MIME-Version: 1.0 References: <20210616171340.00005295@Huawei.com> <20210616231610.GB25185@alison-desk.jf.intel.com> In-Reply-To: <20210616231610.GB25185@alison-desk.jf.intel.com> From: Dan Williams Date: Wed, 16 Jun 2021 16:50:50 -0700 Message-ID: Subject: Re: [PATCH v2 1/2] cxl/acpi: Add the Host Bridge base address to CXL port objects To: Alison Schofield Cc: Jonathan Cameron , Ben Widawsky , Ira Weiny , Vishal Verma , linux-cxl@vger.kernel.org, Linux Kernel Mailing List , Linux ACPI Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jun 16, 2021 at 4:20 PM Alison Schofield wrote: > > > Thanks for the review Jonathan - > > On Wed, Jun 16, 2021 at 05:13:40PM +0100, Jonathan Cameron wrote: > > On Tue, 15 Jun 2021 17:20:38 -0700 > > Alison Schofield wrote: > > > > > The base address for the Host Bridge port component registers is located > > > in the CXL Host Bridge Structure (CHBS) of the ACPI CXL Early Discovery > > > Table (CEDT). Retrieve the CHBS for each Host Bridge (ACPI0016 device) > > > and include that base address in the port object. > > > > > > Co-developed-by: Vishal Verma > > > Signed-off-by: Vishal Verma > > > Signed-off-by: Alison Schofield > > > > Hi Alison, > > > > A few small suggestions from me. > > > > > --- > > > drivers/cxl/acpi.c | 105 ++++++++++++++++++++++++++++++++++++++++++--- > > > 1 file changed, 99 insertions(+), 6 deletions(-) > > > > > > diff --git a/drivers/cxl/acpi.c b/drivers/cxl/acpi.c > > > index be357eea552c..b6d9cd45428c 100644 > > > --- a/drivers/cxl/acpi.c > > > +++ b/drivers/cxl/acpi.c > > > @@ -8,6 +8,61 @@ > > > #include > > > #include "cxl.h" > > > > > > +static struct acpi_table_header *cedt_table; > > > + > > > +static struct acpi_cedt_chbs *cxl_acpi_match_chbs(struct device *dev, u32 uid) > > > +{ > > > + struct acpi_cedt_chbs *chbs, *chbs_match = NULL; > > > + acpi_size len, cur = 0; > > > + void *cedt_base; > > > + int rc = 0; > > > + > > > + len = cedt_table->length - sizeof(*cedt_table); > > > + cedt_base = cedt_table + 1; > > > + > > > + while (cur < len) { > > > + struct acpi_cedt_header *c = cedt_base + cur; > > > + > > > + if (c->type != ACPI_CEDT_TYPE_CHBS) { > > > + cur += c->length; > > > + continue; > > > + } > > > + > > > + chbs = cedt_base + cur; > > > + > > > + if (chbs->header.length < sizeof(*chbs)) { > > > + dev_err(dev, "Invalid CHBS header length: %u\n", > > > + chbs->header.length); > > > + rc = -EINVAL; > > > > As below, direct return would be more obvious to my eyes. > > > > Well....I decided to warn & continue on this case. See the updated flow > in v3. > > > > + break; > > > + } > > > + > > > + if (chbs->uid == uid && !chbs_match) { > > > + chbs_match = chbs; > > > + cur += c->length; > > > + continue; > > > + } > > > + > > > + if (chbs->uid == uid && chbs_match) { > > > + dev_err(dev, "Duplicate CHBS UIDs %u\n", uid); > > > > Do we actually care, or should we just drop out on first match? > > I don't think think there is any obligation to catch broken tables. > > > > Agree on the obligation part, but if things go wrong, this would be > nice to know. I left it in as a dev warn once. If you think that's > too strong - let me know. I do think the driver should care about duplicate UID, but only if "version, base, or length" mismatch. If the BIOS gives us ambiguous answers about where the registers are located, the user should be warned that the driver might be picking the "wrong" one by accident. If they are identical, the BIOS is being repetitive, but no real harm that the driver would care about. A dev_warn_once() sounds good as the first duplicate should be sufficient to say something fishy is afoot, but it's not an error. The warn_once will also re-trigger when / if the module is reloaded.