Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp842638imm; Tue, 5 Jun 2018 05:28:02 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJsUlLNMJIlxSOdnwUL+k21WZf/OKm3jo9qOLOipfP92HSNK7XLu/ZdtFgvR8Pv+HBHYMNk X-Received: by 2002:a17:902:7406:: with SMTP id g6-v6mr25694650pll.90.1528201682036; Tue, 05 Jun 2018 05:28:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528201682; cv=none; d=google.com; s=arc-20160816; b=XnAhlRKUo/vi0v1TNUlwtjUDRBiwUsMoVej8hV8lcdQyN5fbr+AuMxofRRtvCLfByk 7r3tmTAhC16LbBArAuBBRDwMZLOPiCzzGU+AVUmFTOGBf1cNwohAXp8Tt8qNSnZl/R3J MV5asrFvSC5ohZ1Y23V8HvCCxe1QhOyIwNe+BZf5QfxAF8YoYYaMth0DfLfxVzXjebbW 47XUNxpMBCMuv+kUXbgrmwYDnne0I+4X0+P2Ma5yeynKDu782kA2kaegiNaq2p5RFBAw jXvpeTDnMfEJTsqu+IRrR5bm8qSLZ21ReNWq/UVQyqPmzKZpV9sczaUk1CErfUf732ae vkMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=r8qzHqCNMPZwqQt0PujG3UIfvRafwr76ioBevjqOZYU=; b=ujQVvb7cg23giWSUWItvEdBxJGrMPb0MP1uzzXG6VAg6v9AmnzZYbSJGnrdcH+3Yug HVERgeH3gM934xysviDNuBYxruSa9+tvp+Jb4K1dZZbCRaXfQtG4RpZCRXalvQJOrx+k fLQNrcF/vnaBfBcWmMdnbj9FdTBcg8EEQPLHSiXKWPsz/l3TDe1rS6cjoxvZvxZkgmZF YLQ5q7e0alMibCEW/iEUa0BvwyVgYrHw/k7gT5isJ5MTHu8NCZzYTJ7XoPSlLVYxP0VE YhFklXEvYqLBd7b3qVMB739olUApZ7phBZWq3bnIcsa+CG9d0VMSbCH0aDMG2grDQxD0 i6Mw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=N5ZxS0wo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bj6-v6si6006261plb.562.2018.06.05.05.27.47; Tue, 05 Jun 2018 05:28:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=N5ZxS0wo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751900AbeFEM1R (ORCPT + 99 others); Tue, 5 Jun 2018 08:27:17 -0400 Received: from mail-qt0-f193.google.com ([209.85.216.193]:43407 "EHLO mail-qt0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751718AbeFEM1P (ORCPT ); Tue, 5 Jun 2018 08:27:15 -0400 Received: by mail-qt0-f193.google.com with SMTP id y89-v6so2100762qtd.10; Tue, 05 Jun 2018 05:27:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=r8qzHqCNMPZwqQt0PujG3UIfvRafwr76ioBevjqOZYU=; b=N5ZxS0woud2Sj7J5k6IvHw/EiVdXrBu8Hsf14uFpa1vUu8H5vDOkJ2jWWjMj2/mQit m/ZOjklhsEVAjmR9vE0iqHhHV1K2ElL2sG6ohFgXT7v0kIYoNLTM2b5iCfB4rrm4OvIg 5GxRJ4VT2I7ZSXExZ6rTm4npB3/TFfUve15WbaK523CdSae5NXetFbWPsvM+QqnCk7MO UtLT232C5nFiVnDNV/jCdLNd585+sFicHu1WRP2k/EQSD1xSlMUglv+swN9Ab03/cUQf 5CfBj2poE4+FZ28eDvoS92MVkW0M1jBpDzq2OGQYQzU+VaHiGgLKZKLer46nOyl3b0b4 c5tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=r8qzHqCNMPZwqQt0PujG3UIfvRafwr76ioBevjqOZYU=; b=kASeqoM2wcqa062VS6GRG/VYR8kDgwr4XI8JCXD2J0/RSWpfgQkiigooxE6x68z+em 3v03+IzePscm28pgbyOvJ/A0THq8jP8VjwnjWqdCjxZdy6XyuiQBXn2n5s2o8orJaJ82 6w7+p9XqvZSoPcZI+3GwIEzm/HokFJr6B33uO/FPibYHYnDh8jEziW8uDBlbYP79saEp GER0wJ/4z2wLtIeURl2q/Ps4+7VN3fj8Q3Vs07ZWZCW1XAJoxwN3ogGHdqSK83tPcZ6g C/1azuwSeH9YXkaq8aHANgLIz55M3BVjQsZvBdUcoxHzsBNfF0etd4BidtYxKbIvDq8w T3+A== X-Gm-Message-State: APt69E31EeSvagS27mcJwrRDCsNVQXEZgpifI3JYrCbUEg+3LIKC3Rf9 if4rXf9pFG7fUmI0MxtK5fYZXJtsm6jfEE3q9uc= X-Received: by 2002:ac8:190c:: with SMTP id t12-v6mr25381849qtj.278.1528201634925; Tue, 05 Jun 2018 05:27:14 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a0c:98f9:0:0:0:0:0 with HTTP; Tue, 5 Jun 2018 05:27:14 -0700 (PDT) In-Reply-To: <20180604155523.14906-1-mr.nuke.me@gmail.com> References: <20180604155523.14906-1-mr.nuke.me@gmail.com> From: Andy Shevchenko Date: Tue, 5 Jun 2018 15:27:14 +0300 Message-ID: Subject: Re: [PATCH v3] PCI: Check for PCIe downtraining conditions To: Alexandru Gagniuc Cc: Bjorn Helgaas , alex_gagniuc@dellteam.com, austin_bolen@dell.com, shyam_iyer@dell.com, Keith Busch , linux-pci@vger.kernel.org, Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 4, 2018 at 6:55 PM, Alexandru Gagniuc wrote: > PCIe downtraining happens when both the device and PCIe port are > capable of a larger bus width or higher speed than negotiated. > Downtraining might be indicative of other problems in the system, and > identifying this from userspace is neither intuitive, nor straigh > forward. > > The easiest way to detect this is with pcie_print_link_status(), > since the bottleneck is usually the link that is downtrained. It's not > a perfect solution, but it works extremely well in most cases. Have you seen any of my comments? For your convenience repeating below. > > Signed-off-by: Alexandru Gagniuc > --- > > Changes since v2: > - Check dev->is_virtfn flag > > Changes since v1: > - Use pcie_print_link_status() instead of reimplementing logic > > drivers/pci/probe.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > index ac91b6fd0bcd..a88ec8c25dd5 100644 > --- a/drivers/pci/probe.c > +++ b/drivers/pci/probe.c > @@ -2146,6 +2146,25 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn) > return dev; > } > > +static void pcie_check_upstream_link(struct pci_dev *dev) > +{ > + This is redundant blank line. > + if (!pci_is_pcie(dev)) > + return; > + > + /* Look from the device up to avoid downstream ports with no devices. */ > + if ((pci_pcie_type(dev) != PCI_EXP_TYPE_ENDPOINT) && > + (pci_pcie_type(dev) != PCI_EXP_TYPE_LEG_END) && > + (pci_pcie_type(dev) != PCI_EXP_TYPE_UPSTREAM)) > + return; I looked briefly at the use of these calls and perhaps it might make sense to introduce pci_is_pcie_type(dev, type) which unifies pci_is_pcie() + pci_pcie_type(). > + > + /* Multi-function PCIe share the same link/status. */ > + if ((PCI_FUNC(dev->devfn) != 0) || dev->is_virtfn) The one pair of parens is not needed. > + return; > + > + pcie_print_link_status(dev); > +} > + > static void pci_init_capabilities(struct pci_dev *dev) > { > /* Enhanced Allocation */ > @@ -2181,6 +2200,9 @@ static void pci_init_capabilities(struct pci_dev *dev) > /* Advanced Error Reporting */ > pci_aer_init(dev); > > + /* Check link and detect downtrain errors */ > + pcie_check_upstream_link(dev); > + > if (pci_probe_reset_function(dev) == 0) > dev->reset_fn = 1; > } > -- > 2.14.4 > -- With Best Regards, Andy Shevchenko