From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752965AbeDBQZU (ORCPT ); Mon, 2 Apr 2018 12:25:20 -0400 Received: from mga04.intel.com ([192.55.52.120]:35820 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752609AbeDBQZS (ORCPT ); Mon, 2 Apr 2018 12:25:18 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,396,1517904000"; d="scan'208";a="40114168" From: "Keller, Jacob E" To: Bjorn Helgaas , Tal Gilboa CC: Tariq Toukan , Ariel Elior , Ganesh Goudar , "Kirsher, Jeffrey T" , "everest-linux-l2@cavium.com" , "intel-wired-lan@lists.osuosl.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-pci@vger.kernel.org" Subject: RE: [PATCH v5 05/14] PCI: Add pcie_print_link_status() to log link speed and whether it's limited Thread-Topic: [PATCH v5 05/14] PCI: Add pcie_print_link_status() to log link speed and whether it's limited Thread-Index: AQHTyGrUSS9MhIAeskOrU+NRjtQ9xqPtrVLA Date: Mon, 2 Apr 2018 16:25:17 +0000 Message-ID: <02874ECE860811409154E81DA85FBB5882D49870@ORSMSX115.amr.corp.intel.com> References: <152244269202.135666.3064353823697623332.stgit@bhelgaas-glaptop.roam.corp.google.com> <152244391852.135666.14903825998610307052.stgit@bhelgaas-glaptop.roam.corp.google.com> In-Reply-To: <152244391852.135666.14903825998610307052.stgit@bhelgaas-glaptop.roam.corp.google.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNTU2MWJiYmMtNjA5ZS00NWQ0LTlmZTItNjhmYjcyNGZjYTZjIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IkowWm1ZUkY5UWdWRkFuTXB2SlpJVWpiTUxLMkFETnM3cjE3T0M3SGM3czA9In0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.22.254.139] Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id w32GPQpA019239 > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Friday, March 30, 2018 2:05 PM > To: Tal Gilboa > Cc: Tariq Toukan ; Keller, Jacob E > ; Ariel Elior ; Ganesh > Goudar ; Kirsher, Jeffrey T > ; everest-linux-l2@cavium.com; intel-wired- > lan@lists.osuosl.org; netdev@vger.kernel.org; linux-kernel@vger.kernel.org; > linux-pci@vger.kernel.org > Subject: [PATCH v5 05/14] PCI: Add pcie_print_link_status() to log link speed and > whether it's limited > > From: Tal Gilboa > > Add pcie_print_link_status(). This logs the current settings of the link > (speed, width, and total available bandwidth). > > If the device is capable of more bandwidth but is limited by a slower > upstream link, we include information about the link that limits the > device's performance. > > The user may be able to move the device to a different slot for better > performance. > > This provides a unified method for all PCI devices to report status and > issues, instead of each device reporting in a different way, using > different code. > > Signed-off-by: Tal Gilboa > [bhelgaas: changelog, reword log messages, print device capabilities when > not limited] > Signed-off-by: Bjorn Helgaas > --- > drivers/pci/pci.c | 29 +++++++++++++++++++++++++++++ > include/linux/pci.h | 1 + > 2 files changed, 30 insertions(+) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index e00d56b12747..cec7aed09f6b 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -5283,6 +5283,35 @@ u32 pcie_bandwidth_capable(struct pci_dev *dev, > enum pci_bus_speed *speed, > return *width * PCIE_SPEED2MBS_ENC(*speed); > } > > +/** > + * pcie_print_link_status - Report the PCI device's link speed and width > + * @dev: PCI device to query > + * > + * Report the available bandwidth at the device. If this is less than the > + * device is capable of, report the device's maximum possible bandwidth and > + * the upstream link that limits its performance to less than that. > + */ > +void pcie_print_link_status(struct pci_dev *dev) > +{ > + enum pcie_link_width width, width_cap; > + enum pci_bus_speed speed, speed_cap; > + struct pci_dev *limiting_dev = NULL; > + u32 bw_avail, bw_cap; > + > + bw_cap = pcie_bandwidth_capable(dev, &speed_cap, &width_cap); > + bw_avail = pcie_bandwidth_available(dev, &limiting_dev, &speed, > &width); > + > + if (bw_avail >= bw_cap) > + pci_info(dev, "%d Mb/s available bandwidth (%s x%d link)\n", > + bw_cap, PCIE_SPEED2STR(speed_cap), width_cap); > + else > + pci_info(dev, "%d Mb/s available bandwidth, limited by %s x%d > link at %s (capable of %d Mb/s with %s x%d link)\n", > + bw_avail, PCIE_SPEED2STR(speed), width, > + limiting_dev ? pci_name(limiting_dev) : "", > + bw_cap, PCIE_SPEED2STR(speed_cap), width_cap); > +} Personally, I would make thic last one a pci_warn() to indicate it at a higher log level, but I'm ok with the wording, and if consensus is that this should be at info, I'm ok with that. Thanks, Jake > +EXPORT_SYMBOL(pcie_print_link_status); > + > /** > * pci_select_bars - Make BAR mask from the type of resource > * @dev: the PCI device for which BAR mask is made > diff --git a/include/linux/pci.h b/include/linux/pci.h > index f2bf2b7a66c7..38f7957121ef 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -1086,6 +1086,7 @@ int pcie_get_minimum_link(struct pci_dev *dev, enum > pci_bus_speed *speed, > u32 pcie_bandwidth_available(struct pci_dev *dev, struct pci_dev > **limiting_dev, > enum pci_bus_speed *speed, > enum pcie_link_width *width); > +void pcie_print_link_status(struct pci_dev *dev); > void pcie_flr(struct pci_dev *dev); > int __pci_reset_function_locked(struct pci_dev *dev); > int pci_reset_function(struct pci_dev *dev); From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Return-Path: From: "Keller, Jacob E" To: Bjorn Helgaas , Tal Gilboa CC: Tariq Toukan , Ariel Elior , Ganesh Goudar , "Kirsher, Jeffrey T" , "everest-linux-l2@cavium.com" , "intel-wired-lan@lists.osuosl.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-pci@vger.kernel.org" Subject: RE: [PATCH v5 05/14] PCI: Add pcie_print_link_status() to log link speed and whether it's limited Date: Mon, 2 Apr 2018 16:25:17 +0000 Message-ID: <02874ECE860811409154E81DA85FBB5882D49870@ORSMSX115.amr.corp.intel.com> References: <152244269202.135666.3064353823697623332.stgit@bhelgaas-glaptop.roam.corp.google.com> <152244391852.135666.14903825998610307052.stgit@bhelgaas-glaptop.roam.corp.google.com> In-Reply-To: <152244391852.135666.14903825998610307052.stgit@bhelgaas-glaptop.roam.corp.google.com> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 List-ID: PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBCam9ybiBIZWxnYWFzIFttYWls dG86aGVsZ2Fhc0BrZXJuZWwub3JnXQ0KPiBTZW50OiBGcmlkYXksIE1hcmNoIDMwLCAyMDE4IDI6 MDUgUE0NCj4gVG86IFRhbCBHaWxib2EgPHRhbGdpQG1lbGxhbm94LmNvbT4NCj4gQ2M6IFRhcmlx IFRvdWthbiA8dGFyaXF0QG1lbGxhbm94LmNvbT47IEtlbGxlciwgSmFjb2IgRQ0KPiA8amFjb2Iu ZS5rZWxsZXJAaW50ZWwuY29tPjsgQXJpZWwgRWxpb3IgPGFyaWVsLmVsaW9yQGNhdml1bS5jb20+ OyBHYW5lc2gNCj4gR291ZGFyIDxnYW5lc2hnckBjaGVsc2lvLmNvbT47IEtpcnNoZXIsIEplZmZy ZXkgVA0KPiA8amVmZnJleS50LmtpcnNoZXJAaW50ZWwuY29tPjsgZXZlcmVzdC1saW51eC1sMkBj YXZpdW0uY29tOyBpbnRlbC13aXJlZC0NCj4gbGFuQGxpc3RzLm9zdW9zbC5vcmc7IG5ldGRldkB2 Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7DQo+IGxpbnV4LXBj aUB2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogW1BBVENIIHY1IDA1LzE0XSBQQ0k6IEFkZCBw Y2llX3ByaW50X2xpbmtfc3RhdHVzKCkgdG8gbG9nIGxpbmsgc3BlZWQgYW5kDQo+IHdoZXRoZXIg aXQncyBsaW1pdGVkDQo+IA0KPiBGcm9tOiBUYWwgR2lsYm9hIDx0YWxnaUBtZWxsYW5veC5jb20+ DQo+IA0KPiBBZGQgcGNpZV9wcmludF9saW5rX3N0YXR1cygpLiAgVGhpcyBsb2dzIHRoZSBjdXJy ZW50IHNldHRpbmdzIG9mIHRoZSBsaW5rDQo+IChzcGVlZCwgd2lkdGgsIGFuZCB0b3RhbCBhdmFp bGFibGUgYmFuZHdpZHRoKS4NCj4gDQo+IElmIHRoZSBkZXZpY2UgaXMgY2FwYWJsZSBvZiBtb3Jl IGJhbmR3aWR0aCBidXQgaXMgbGltaXRlZCBieSBhIHNsb3dlcg0KPiB1cHN0cmVhbSBsaW5rLCB3 ZSBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rIHRoYXQgbGltaXRzIHRoZQ0KPiBk ZXZpY2UncyBwZXJmb3JtYW5jZS4NCj4gDQo+IFRoZSB1c2VyIG1heSBiZSBhYmxlIHRvIG1vdmUg dGhlIGRldmljZSB0byBhIGRpZmZlcmVudCBzbG90IGZvciBiZXR0ZXINCj4gcGVyZm9ybWFuY2Uu DQo+IA0KPiBUaGlzIHByb3ZpZGVzIGEgdW5pZmllZCBtZXRob2QgZm9yIGFsbCBQQ0kgZGV2aWNl cyB0byByZXBvcnQgc3RhdHVzIGFuZA0KPiBpc3N1ZXMsIGluc3RlYWQgb2YgZWFjaCBkZXZpY2Ug cmVwb3J0aW5nIGluIGEgZGlmZmVyZW50IHdheSwgdXNpbmcNCj4gZGlmZmVyZW50IGNvZGUuDQo+ IA0KPiBTaWduZWQtb2ZmLWJ5OiBUYWwgR2lsYm9hIDx0YWxnaUBtZWxsYW5veC5jb20+DQo+IFti aGVsZ2FhczogY2hhbmdlbG9nLCByZXdvcmQgbG9nIG1lc3NhZ2VzLCBwcmludCBkZXZpY2UgY2Fw YWJpbGl0aWVzIHdoZW4NCj4gbm90IGxpbWl0ZWRdDQo+IFNpZ25lZC1vZmYtYnk6IEJqb3JuIEhl bGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+DQo+IC0tLQ0KPiAgZHJpdmVycy9wY2kvcGNpLmMg ICB8ICAgMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIGluY2x1ZGUvbGludXgv cGNpLmggfCAgICAxICsNCj4gIDIgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQ0KPiAN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMNCj4g aW5kZXggZTAwZDU2YjEyNzQ3Li5jZWM3YWVkMDlmNmIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMv cGNpL3BjaS5jDQo+ICsrKyBiL2RyaXZlcnMvcGNpL3BjaS5jDQo+IEBAIC01MjgzLDYgKzUyODMs MzUgQEAgdTMyIHBjaWVfYmFuZHdpZHRoX2NhcGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwNCj4g ZW51bSBwY2lfYnVzX3NwZWVkICpzcGVlZCwNCj4gIAlyZXR1cm4gKndpZHRoICogUENJRV9TUEVF RDJNQlNfRU5DKCpzcGVlZCk7DQo+ICB9DQo+IA0KPiArLyoqDQo+ICsgKiBwY2llX3ByaW50X2xp bmtfc3RhdHVzIC0gUmVwb3J0IHRoZSBQQ0kgZGV2aWNlJ3MgbGluayBzcGVlZCBhbmQgd2lkdGgN Cj4gKyAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkNCj4gKyAqDQo+ICsgKiBSZXBvcnQgdGhl IGF2YWlsYWJsZSBiYW5kd2lkdGggYXQgdGhlIGRldmljZS4gIElmIHRoaXMgaXMgbGVzcyB0aGFu IHRoZQ0KPiArICogZGV2aWNlIGlzIGNhcGFibGUgb2YsIHJlcG9ydCB0aGUgZGV2aWNlJ3MgbWF4 aW11bSBwb3NzaWJsZSBiYW5kd2lkdGggYW5kDQo+ICsgKiB0aGUgdXBzdHJlYW0gbGluayB0aGF0 IGxpbWl0cyBpdHMgcGVyZm9ybWFuY2UgdG8gbGVzcyB0aGFuIHRoYXQuDQo+ICsgKi8NCj4gK3Zv aWQgcGNpZV9wcmludF9saW5rX3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0KPiArew0KPiAr CWVudW0gcGNpZV9saW5rX3dpZHRoIHdpZHRoLCB3aWR0aF9jYXA7DQo+ICsJZW51bSBwY2lfYnVz X3NwZWVkIHNwZWVkLCBzcGVlZF9jYXA7DQo+ICsJc3RydWN0IHBjaV9kZXYgKmxpbWl0aW5nX2Rl diA9IE5VTEw7DQo+ICsJdTMyIGJ3X2F2YWlsLCBid19jYXA7DQo+ICsNCj4gKwlid19jYXAgPSBw Y2llX2JhbmR3aWR0aF9jYXBhYmxlKGRldiwgJnNwZWVkX2NhcCwgJndpZHRoX2NhcCk7DQo+ICsJ YndfYXZhaWwgPSBwY2llX2JhbmR3aWR0aF9hdmFpbGFibGUoZGV2LCAmbGltaXRpbmdfZGV2LCAm c3BlZWQsDQo+ICZ3aWR0aCk7DQo+ICsNCj4gKwlpZiAoYndfYXZhaWwgPj0gYndfY2FwKQ0KPiAr CQlwY2lfaW5mbyhkZXYsICIlZCBNYi9zIGF2YWlsYWJsZSBiYW5kd2lkdGggKCVzIHglZCBsaW5r KVxuIiwNCj4gKwkJCSBid19jYXAsIFBDSUVfU1BFRUQyU1RSKHNwZWVkX2NhcCksIHdpZHRoX2Nh cCk7DQo+ICsJZWxzZQ0KPiArCQlwY2lfaW5mbyhkZXYsICIlZCBNYi9zIGF2YWlsYWJsZSBiYW5k d2lkdGgsIGxpbWl0ZWQgYnkgJXMgeCVkDQo+IGxpbmsgYXQgJXMgKGNhcGFibGUgb2YgJWQgTWIv cyB3aXRoICVzIHglZCBsaW5rKVxuIiwNCj4gKwkJCSBid19hdmFpbCwgUENJRV9TUEVFRDJTVFIo c3BlZWQpLCB3aWR0aCwNCj4gKwkJCSBsaW1pdGluZ19kZXYgPyBwY2lfbmFtZShsaW1pdGluZ19k ZXYpIDogIjx1bmtub3duPiIsDQo+ICsJCQkgYndfY2FwLCBQQ0lFX1NQRUVEMlNUUihzcGVlZF9j YXApLCB3aWR0aF9jYXApOw0KPiArfQ0KDQpQZXJzb25hbGx5LCBJIHdvdWxkIG1ha2UgdGhpYyBs YXN0IG9uZSBhIHBjaV93YXJuKCkgdG8gaW5kaWNhdGUgaXQgYXQgYSBoaWdoZXIgbG9nIGxldmVs LCBidXQgSSdtICBvayB3aXRoIHRoZSB3b3JkaW5nLCBhbmQgaWYgY29uc2Vuc3VzIGlzIHRoYXQg dGhpcyBzaG91bGQgYmUgYXQgaW5mbywgSSdtIG9rIHdpdGggdGhhdC4NCg0KVGhhbmtzLA0KSmFr ZQ0KDQo+ICtFWFBPUlRfU1lNQk9MKHBjaWVfcHJpbnRfbGlua19zdGF0dXMpOw0KPiArDQo+ICAv KioNCj4gICAqIHBjaV9zZWxlY3RfYmFycyAtIE1ha2UgQkFSIG1hc2sgZnJvbSB0aGUgdHlwZSBv ZiByZXNvdXJjZQ0KPiAgICogQGRldjogdGhlIFBDSSBkZXZpY2UgZm9yIHdoaWNoIEJBUiBtYXNr IGlzIG1hZGUNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xp bnV4L3BjaS5oDQo+IGluZGV4IGYyYmYyYjdhNjZjNy4uMzhmNzk1NzEyMWVmIDEwMDY0NA0KPiAt LS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgNCj4g QEAgLTEwODYsNiArMTA4Niw3IEBAIGludCBwY2llX2dldF9taW5pbXVtX2xpbmsoc3RydWN0IHBj aV9kZXYgKmRldiwgZW51bQ0KPiBwY2lfYnVzX3NwZWVkICpzcGVlZCwNCj4gIHUzMiBwY2llX2Jh bmR3aWR0aF9hdmFpbGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9kZXYNCj4g KipsaW1pdGluZ19kZXYsDQo+ICAJCQkgICAgIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQsDQo+ ICAJCQkgICAgIGVudW0gcGNpZV9saW5rX3dpZHRoICp3aWR0aCk7DQo+ICt2b2lkIHBjaWVfcHJp bnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7DQo+ICB2b2lkIHBjaWVfZmxyKHN0 cnVjdCBwY2lfZGV2ICpkZXYpOw0KPiAgaW50IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChz dHJ1Y3QgcGNpX2RldiAqZGV2KTsNCj4gIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBj aV9kZXYgKmRldik7DQoNCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keller, Jacob E Date: Mon, 2 Apr 2018 16:25:17 +0000 Subject: [Intel-wired-lan] [PATCH v5 05/14] PCI: Add pcie_print_link_status() to log link speed and whether it's limited In-Reply-To: <152244391852.135666.14903825998610307052.stgit@bhelgaas-glaptop.roam.corp.google.com> References: <152244269202.135666.3064353823697623332.stgit@bhelgaas-glaptop.roam.corp.google.com> <152244391852.135666.14903825998610307052.stgit@bhelgaas-glaptop.roam.corp.google.com> Message-ID: <02874ECE860811409154E81DA85FBB5882D49870@ORSMSX115.amr.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: intel-wired-lan@osuosl.org List-ID: > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > Sent: Friday, March 30, 2018 2:05 PM > To: Tal Gilboa > Cc: Tariq Toukan ; Keller, Jacob E > ; Ariel Elior ; Ganesh > Goudar ; Kirsher, Jeffrey T > ; everest-linux-l2 at cavium.com; intel-wired- > lan at lists.osuosl.org; netdev at vger.kernel.org; linux-kernel at vger.kernel.org; > linux-pci at vger.kernel.org > Subject: [PATCH v5 05/14] PCI: Add pcie_print_link_status() to log link speed and > whether it's limited > > From: Tal Gilboa > > Add pcie_print_link_status(). This logs the current settings of the link > (speed, width, and total available bandwidth). > > If the device is capable of more bandwidth but is limited by a slower > upstream link, we include information about the link that limits the > device's performance. > > The user may be able to move the device to a different slot for better > performance. > > This provides a unified method for all PCI devices to report status and > issues, instead of each device reporting in a different way, using > different code. > > Signed-off-by: Tal Gilboa > [bhelgaas: changelog, reword log messages, print device capabilities when > not limited] > Signed-off-by: Bjorn Helgaas > --- > drivers/pci/pci.c | 29 +++++++++++++++++++++++++++++ > include/linux/pci.h | 1 + > 2 files changed, 30 insertions(+) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index e00d56b12747..cec7aed09f6b 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -5283,6 +5283,35 @@ u32 pcie_bandwidth_capable(struct pci_dev *dev, > enum pci_bus_speed *speed, > return *width * PCIE_SPEED2MBS_ENC(*speed); > } > > +/** > + * pcie_print_link_status - Report the PCI device's link speed and width > + * @dev: PCI device to query > + * > + * Report the available bandwidth at the device. If this is less than the > + * device is capable of, report the device's maximum possible bandwidth and > + * the upstream link that limits its performance to less than that. > + */ > +void pcie_print_link_status(struct pci_dev *dev) > +{ > + enum pcie_link_width width, width_cap; > + enum pci_bus_speed speed, speed_cap; > + struct pci_dev *limiting_dev = NULL; > + u32 bw_avail, bw_cap; > + > + bw_cap = pcie_bandwidth_capable(dev, &speed_cap, &width_cap); > + bw_avail = pcie_bandwidth_available(dev, &limiting_dev, &speed, > &width); > + > + if (bw_avail >= bw_cap) > + pci_info(dev, "%d Mb/s available bandwidth (%s x%d link)\n", > + bw_cap, PCIE_SPEED2STR(speed_cap), width_cap); > + else > + pci_info(dev, "%d Mb/s available bandwidth, limited by %s x%d > link at %s (capable of %d Mb/s with %s x%d link)\n", > + bw_avail, PCIE_SPEED2STR(speed), width, > + limiting_dev ? pci_name(limiting_dev) : "", > + bw_cap, PCIE_SPEED2STR(speed_cap), width_cap); > +} Personally, I would make thic last one a pci_warn() to indicate it at a higher log level, but I'm ok with the wording, and if consensus is that this should be at info, I'm ok with that. Thanks, Jake > +EXPORT_SYMBOL(pcie_print_link_status); > + > /** > * pci_select_bars - Make BAR mask from the type of resource > * @dev: the PCI device for which BAR mask is made > diff --git a/include/linux/pci.h b/include/linux/pci.h > index f2bf2b7a66c7..38f7957121ef 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -1086,6 +1086,7 @@ int pcie_get_minimum_link(struct pci_dev *dev, enum > pci_bus_speed *speed, > u32 pcie_bandwidth_available(struct pci_dev *dev, struct pci_dev > **limiting_dev, > enum pci_bus_speed *speed, > enum pcie_link_width *width); > +void pcie_print_link_status(struct pci_dev *dev); > void pcie_flr(struct pci_dev *dev); > int __pci_reset_function_locked(struct pci_dev *dev); > int pci_reset_function(struct pci_dev *dev);