Hi Krzysztof, Thanks for looking at this.
On Friday, 30 January 2026 13:53:02 CET Krzysztof Karas wrote: > Hi Janusz, > > the code looks good, I am wondering if "fake" is appropriate > word for the descriptions below: > in a way the values are correct, but wrongly reported - they > belong to pci x1 bridge of the GPU. Maybe adding a short > sentence that the values reported always belong to pci x1 > instead of the fastest active bridge would complete the message? > What do you think? If the GPU device was a real PCIe endpoint with link bandwith limited to 2.5GT/s, 1x (max_link_speed, max_link_width), as reported, then that would be the actually possible maximum bandwidth of the GPU to CPU link, I believe, not that of the bridge upstream port. Since Intel declares the link bandwidth of the bridge upstream port should be referred to as correctly describing the actual GPU to CPU link bandwidth then my understanding is that the values reported by the GPU should be disregarded as not true (then fake). I'm open to calling those values with another word but fake, as long as that word reflects their non truth status. Thanks, Janusz > > On 2026-01-27 at 10:54:18 +0100, Janusz Krzysztofik wrote: > > Users of Intel discrete graphics adapters are confused with fake > > information on PCIe link bandwidth (speed and size) of their GPU devices > > reported by tools like lspci or lsgpu. That fake information is > > unfortunately provided by hardware, Linux PCI subsystem just exposes it > > untouched to upper layers, including userspace via sysfs, and userspace > > tools just report those fake values. > > > > While we can't do much about the kernel side or general purpose userspace > > tools like lspci, we can try to address the issue with our lsgpu utility. > > > > Correct link bandwidth attributes of a discrete GPU card can be obtained > > from the kernel by looking not at the PCI device of the GPU itself, only > > at a PCIe upstream port of the card's PCI bridge. For integrity with > > content of the sysfs and with output from the other tools, we are not > > going to replace the fake information with that from the bridge upstream > > port, only show that port and its attributes themselves while listing > > devices. > > > > Since the tool uses our udev based igt_device_scan library for identifying > > GPU devices and printing their properties and attributes, modifications > > that we need apply to that library. > > > > As a first step, exclude the fake data from being printed. > > > > v2: Keep dump_props_and_attrs() generic: hand over decision on omitting > > link attributes to the caller, and implementation of the check to a > > helper (Sebastian). > > > > Link: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10753 > > Cc: Sebastian Brzezinka <[email protected]> > > Signed-off-by: Janusz Krzysztofik <[email protected]> > > --- > > lib/igt_device_scan.c | 17 +++++++++++++++-- > > 1 file changed, 15 insertions(+), 2 deletions(-) > > > > diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c > > index abd8ca209e..7ae64375b5 100644 > > --- a/lib/igt_device_scan.c > > +++ b/lib/igt_device_scan.c > > @@ -602,7 +602,15 @@ static inline void _print_key_value(const char *k, const char *v) > > printf("%-32s: %s\n", k, v); > > } > > > > -static void dump_props_and_attrs(const struct igt_device *dev) > > +static bool is_link_attr(const char *name) > > +{ > > + return !strcmp(name, "max_link_speed") || > > + !strcmp(name, "max_link_width") || > > + !strcmp(name, "current_link_speed") || > > + !strcmp(name, "current_link_width"); > > +} > > + > > +static void dump_props_and_attrs(const struct igt_device *dev, bool omit_link) > > { > > struct igt_map_entry *entry; > > > > @@ -613,6 +621,10 @@ static void dump_props_and_attrs(const struct igt_device *dev) > > > > printf("\n[attributes]\n"); > > igt_map_foreach(dev->attrs_map, entry) { > > + /* omit link bandwidth attributes if requested */ > > + if (omit_link && is_link_attr(entry->key)) > > + continue; > > + > > _print_key_value((char *)entry->key, (char *)entry->data); > > } > > printf("\n"); > > @@ -1366,7 +1378,8 @@ igt_devs_print_detail(struct igt_list_head *view, > > _print_key_value("codename", dev->codename); > > } > > > > - dump_props_and_attrs(dev); > > + /* omit fake link bandwidth attributes if a discrete card */ > > + dump_props_and_attrs(dev, dev->dev_type == DEVTYPE_DISCRETE); > > } > > } > > > >
