* [PATCH i-g-t v3 1/6] lib/igt_device_scan: Don't print fake link bandwidth attributes
2026-01-28 16:08 [PATCH i-g-t v3 0/6] lsgpu: Report upstream port link bandwidth Janusz Krzysztofik
@ 2026-01-28 16:08 ` Janusz Krzysztofik
2026-02-02 8:45 ` Krzysztof Karas
2026-01-28 16:09 ` [PATCH i-g-t v3 2/6] lib/igt_device_scan: Split out reusable part of update_or_add_parent Janusz Krzysztofik
` (6 subsequent siblings)
7 siblings, 1 reply; 14+ messages in thread
From: Janusz Krzysztofik @ 2026-01-28 16:08 UTC (permalink / raw)
To: igt-dev
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka, Janusz Krzysztofik
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 <sebastian.brzezinka@intel.com>
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
---
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);
}
}
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH i-g-t v3 1/6] lib/igt_device_scan: Don't print fake link bandwidth attributes
2026-01-28 16:08 ` [PATCH i-g-t v3 1/6] lib/igt_device_scan: Don't print fake link bandwidth attributes Janusz Krzysztofik
@ 2026-02-02 8:45 ` Krzysztof Karas
0 siblings, 0 replies; 14+ messages in thread
From: Krzysztof Karas @ 2026-02-02 8:45 UTC (permalink / raw)
To: Janusz Krzysztofik
Cc: igt-dev, intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti,
Krzysztof Niemiec, Sebastian Brzezinka
Hi Janusz,
> 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 <sebastian.brzezinka@intel.com>
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> ---
I mistakenly commented on your v2, so I'll repeat it here:
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
--
Best Regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH i-g-t v3 2/6] lib/igt_device_scan: Split out reusable part of update_or_add_parent
2026-01-28 16:08 [PATCH i-g-t v3 0/6] lsgpu: Report upstream port link bandwidth Janusz Krzysztofik
2026-01-28 16:08 ` [PATCH i-g-t v3 1/6] lib/igt_device_scan: Don't print fake link bandwidth attributes Janusz Krzysztofik
@ 2026-01-28 16:09 ` Janusz Krzysztofik
2026-01-28 16:09 ` [PATCH i-g-t v3 3/6] lib/igt_device_scan: Include PCIe bridge upstream port if available Janusz Krzysztofik
` (5 subsequent siblings)
7 siblings, 0 replies; 14+ messages in thread
From: Janusz Krzysztofik @ 2026-01-28 16:09 UTC (permalink / raw)
To: igt-dev
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka, Janusz Krzysztofik
Users of Intel discrete graphics adapters are confused with fake
information on PCIe link bandwidth (speed and size) of their GPU devices
reported by sysfs and userspace tools, including our lsgpu utility. In
order for the lsgpu to show correct link bandwidth information, we need to
identify an upstream port of a PCIe bridge that sits on the GPU card and
get that information from that port.
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.
Refactor the library so a part of it can be reused for processing the
bridge port.
There are no functional changes introduced with this patch.
Link: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10753
Reviewed-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
---
lib/igt_device_scan.c | 68 ++++++++++++++++++++++++++-----------------
1 file changed, 41 insertions(+), 27 deletions(-)
diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
index 7ae64375b5..6a907a4ebb 100644
--- a/lib/igt_device_scan.c
+++ b/lib/igt_device_scan.c
@@ -914,32 +914,20 @@ static struct igt_device *igt_device_from_syspath(const char *syspath)
}
#define RETRIES_GET_PARENT 5
-/* For each drm igt_device add or update its parent igt_device to the array.
- * As card/render drm devices mostly have same parent (vkms is an exception)
- * link to it and update corresponding drm_card / drm_render fields.
- */
-static void update_or_add_parent(struct udev *udev,
- struct udev_device *dev,
- struct igt_device *idev,
- bool limit_attrs)
+
+static struct igt_device *find_or_add_igt_device(struct udev *udev,
+ struct udev_device *dev,
+ bool limit_attrs)
{
- struct udev_device *parent_dev;
- struct igt_device *parent_idev;
- const char *subsystem, *syspath, *devname;
int retries = RETRIES_GET_PARENT;
+ const char *subsystem, *syspath;
+ struct igt_device *idev;
- /*
- * Get parent for drm node. It caches parent in udev device
- * and will be destroyed along with the node.
- */
- parent_dev = udev_device_get_parent(dev);
- igt_assert(parent_dev);
-
- subsystem = udev_device_get_subsystem(parent_dev);
- syspath = udev_device_get_syspath(parent_dev);
+ subsystem = udev_device_get_subsystem(dev);
+ syspath = udev_device_get_syspath(dev);
- parent_idev = igt_device_find(subsystem, syspath);
- while (!parent_idev && retries--) {
+ idev = igt_device_find(subsystem, syspath);
+ while (!idev && retries--) {
/*
* Don't care about previous parent_dev, it is tracked
* by the child node. There's very rare race when driver module
@@ -951,15 +939,41 @@ static void update_or_add_parent(struct udev *udev,
* only udev_device_new*() will scan sys directory and
* return fresh udev device.
*/
- parent_dev = udev_device_new_from_syspath(udev, syspath);
- parent_idev = igt_device_new_from_udev(parent_dev, limit_attrs);
- udev_device_unref(parent_dev);
+ dev = udev_device_new_from_syspath(udev, syspath);
+ idev = igt_device_new_from_udev(dev, limit_attrs);
+ udev_device_unref(dev);
- if (parent_idev)
- igt_list_add_tail(&parent_idev->link, &igt_devs.all);
+ if (idev)
+ igt_list_add_tail(&idev->link, &igt_devs.all);
else
usleep(100000); /* arbitrary, 100ms should be enough */
}
+
+ return idev;
+}
+
+/*
+ * For each drm igt_device add or update its parent igt_device to the array.
+ * As card/render drm devices mostly have same parent (vkms is an exception)
+ * link to it and update corresponding drm_card / drm_render fields.
+ */
+static void update_or_add_parent(struct udev *udev,
+ struct udev_device *dev,
+ struct igt_device *idev,
+ bool limit_attrs)
+{
+ struct udev_device *parent_dev;
+ struct igt_device *parent_idev;
+ const char *devname;
+
+ /*
+ * Get parent for drm node. It caches parent in udev device
+ * and will be destroyed along with the node.
+ */
+ parent_dev = udev_device_get_parent(dev);
+ igt_assert(parent_dev);
+
+ parent_idev = find_or_add_igt_device(udev, parent_dev, limit_attrs);
igt_assert(parent_idev);
devname = udev_device_get_devnode(dev);
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH i-g-t v3 3/6] lib/igt_device_scan: Include PCIe bridge upstream port if available
2026-01-28 16:08 [PATCH i-g-t v3 0/6] lsgpu: Report upstream port link bandwidth Janusz Krzysztofik
2026-01-28 16:08 ` [PATCH i-g-t v3 1/6] lib/igt_device_scan: Don't print fake link bandwidth attributes Janusz Krzysztofik
2026-01-28 16:09 ` [PATCH i-g-t v3 2/6] lib/igt_device_scan: Split out reusable part of update_or_add_parent Janusz Krzysztofik
@ 2026-01-28 16:09 ` Janusz Krzysztofik
2026-02-02 11:08 ` Krzysztof Karas
2026-01-28 16:09 ` [PATCH i-g-t v3 4/6] lib/igt_device_scan: List PCIe bridge ports after their children Janusz Krzysztofik
` (4 subsequent siblings)
7 siblings, 1 reply; 14+ messages in thread
From: Janusz Krzysztofik @ 2026-01-28 16:09 UTC (permalink / raw)
To: igt-dev
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka, Janusz Krzysztofik
Users of Intel discrete graphics adapters are confused with fake
information on PCIe link bandwidth (speed and size) of their GPU devices
reported by sysfs and userspace tools, including our lsgpu utility. In
order for the lsgpu to show correct link bandwidth information, we need to
identify an upstream port of a PCIe bridge that sits on the GPU card and
get that information from that port.
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.
When scanning for DRM devices and their PCI parents, the lsgpu utility
requests collection of all their attributes. When running in this mode,
also try to collect information about upstream ports of PCIe bridges of
discrete GPU devices. Once collected, the lsgpu utility will show that
information automatically while listing the devices.
While IGT tests are using libpciaccess library for processing PCI devices,
that library requires careful handling in order to avoid collisions among
multiple call sites potentially using it. That protection is implemented
in igt_device with help of IGT exit handlers. That requires linking with
full igt_core library code, while the lsgpu tool now depends neither on
igt_device nor on igt_core. To keep that independence, implement the new
code around libpci. With that approach, refactoring of IGT use of either
libpciaccess or igt_device_scan is avoided. As an additional benefit,
there is no need to re-implement some functionality, already provided by
libpci function pci_find_cap(), which has no equivalent in libpciaccess.
v3: Fix incorrect use of ffs(),
- fix bridge link attribute printing suppressed with DEVTYPE_DISCRETE,
- in commit description, elaborate more on reasons for using libpci.
v2: Drop unclear GET_REG_MASK macro (Sebastian),
- reuse no longer needed variable containing PCI_HEADER_TYPE for storing
PCI_EXP_FLAGS_TYPE,
- maintain a single instance of struct pci_access throughout processing
of the whole udev device list (Sebastian).
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10753
Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
---
lib/igt_device_scan.c | 83 +++++++++++++++++++++++++++++++++++++++++--
lib/meson.build | 2 ++
meson.build | 1 +
3 files changed, 83 insertions(+), 3 deletions(-)
diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
index 6a907a4ebb..bd88e61b10 100644
--- a/lib/igt_device_scan.c
+++ b/lib/igt_device_scan.c
@@ -36,6 +36,7 @@
#ifdef __linux__
#include <linux/limits.h>
#endif
+#include <pci/pci.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
@@ -913,6 +914,26 @@ static struct igt_device *igt_device_from_syspath(const char *syspath)
return NULL;
}
+static bool is_pcie_upstream_bridge(struct pci_dev *dev)
+{
+ struct pci_cap *pcie;
+ uint8_t type;
+
+ type = pci_read_byte(dev, PCI_HEADER_TYPE) & 0x7f;
+ if (type != PCI_HEADER_TYPE_BRIDGE)
+ return false;
+
+ pcie = pci_find_cap(dev, PCI_CAP_ID_EXP, PCI_CAP_NORMAL);
+ if (!pcie)
+ return false;
+
+ type = pci_read_word(dev, pcie->addr + PCI_EXP_FLAGS);
+ type &= PCI_EXP_FLAGS_TYPE;
+ type >>= ffs(PCI_EXP_FLAGS_TYPE) - 1;
+
+ return type == PCI_EXP_TYPE_UPSTREAM;
+}
+
#define RETRIES_GET_PARENT 5
static struct igt_device *find_or_add_igt_device(struct udev *udev,
@@ -952,18 +973,52 @@ static struct igt_device *find_or_add_igt_device(struct udev *udev,
return idev;
}
+static struct udev_device *get_pcie_upstream_bridge(struct udev *udev,
+ struct udev_device *dev,
+ struct pci_access *pacc)
+{
+ igt_assert(pacc);
+
+ for (dev = udev_device_get_parent(dev); dev; dev = udev_device_get_parent(dev)) {
+ struct pci_filter filter;
+ struct pci_dev *pci_dev;
+ const char *slot;
+
+ slot = udev_device_get_property_value(dev, "PCI_SLOT_NAME");
+ if (igt_debug_on(!slot))
+ continue;
+
+ pci_filter_init(pacc, &filter);
+ if (igt_debug_on(pci_filter_parse_slot(&filter, (char *)slot)))
+ continue;
+
+ pci_dev = pci_get_dev(pacc, filter.domain, filter.bus, filter.slot, filter.func);
+ if (igt_debug_on(!pci_dev))
+ continue;
+
+ if (is_pcie_upstream_bridge(pci_dev))
+ break;
+ }
+
+ return dev;
+}
+
/*
* For each drm igt_device add or update its parent igt_device to the array.
* As card/render drm devices mostly have same parent (vkms is an exception)
* link to it and update corresponding drm_card / drm_render fields.
+ *
+ * If collecting all attributes and the parent is a discrete GPU then also
+ * add or update its bridge's upstream port.
*/
static void update_or_add_parent(struct udev *udev,
struct udev_device *dev,
struct igt_device *idev,
+ struct pci_access *pacc,
bool limit_attrs)
{
- struct udev_device *parent_dev;
- struct igt_device *parent_idev;
+ struct igt_device *parent_idev, *bridge_idev;
+ struct udev_device *parent_dev, *bridge_dev;
const char *devname;
/*
@@ -983,6 +1038,19 @@ static void update_or_add_parent(struct udev *udev,
parent_idev->drm_render = strdup(devname);
idev->parent = parent_idev;
+
+ if (!pacc || parent_idev->dev_type != DEVTYPE_DISCRETE)
+ return;
+
+ bridge_dev = get_pcie_upstream_bridge(udev, parent_dev, pacc);
+ if (!bridge_dev)
+ return;
+
+ bridge_idev = find_or_add_igt_device(udev, bridge_dev, limit_attrs);
+ igt_assert(bridge_idev);
+
+ /* override DEVTYPE_INTEGRATED so link attributes won't be omitted */
+ bridge_idev->dev_type = DEVTYPE_ALL;
}
static struct igt_device *duplicate_device(struct igt_device *dev) {
@@ -1072,6 +1140,7 @@ static void scan_drm_devices(bool limit_attrs)
struct udev *udev;
struct udev_enumerate *enumerate;
struct udev_list_entry *devices, *dev_list_entry;
+ struct pci_access *pacc = NULL;
struct igt_device *dev;
int ret;
@@ -1095,6 +1164,12 @@ static void scan_drm_devices(bool limit_attrs)
if (!devices)
return;
+ /* prepare for upstream bridge port scan if called from lsgpu */
+ if (!limit_attrs) {
+ pacc = pci_alloc();
+ pci_init(pacc);
+ }
+
udev_list_entry_foreach(dev_list_entry, devices) {
const char *path;
struct udev_device *udev_dev;
@@ -1104,10 +1179,12 @@ static void scan_drm_devices(bool limit_attrs)
udev_dev = udev_device_new_from_syspath(udev, path);
idev = igt_device_new_from_udev(udev_dev, limit_attrs);
igt_list_add_tail(&idev->link, &igt_devs.all);
- update_or_add_parent(udev, udev_dev, idev, limit_attrs);
+ update_or_add_parent(udev, udev_dev, idev, pacc, limit_attrs);
udev_device_unref(udev_dev);
}
+ if (pacc)
+ pci_cleanup(pacc);
udev_enumerate_unref(enumerate);
udev_unref(udev);
diff --git a/lib/meson.build b/lib/meson.build
index 1a569ba52a..d10e1405ac 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -139,6 +139,7 @@ lib_deps = [
libdrm,
libdw,
libkmod,
+ libpci,
libudev,
math,
pciaccess,
@@ -332,6 +333,7 @@ lib_igt_perf = declare_dependency(link_with : lib_igt_perf_build,
scan_dep = [
glib,
+ libpci,
libudev,
]
diff --git a/meson.build b/meson.build
index 4b2496c016..57849648a3 100644
--- a/meson.build
+++ b/meson.build
@@ -162,6 +162,7 @@ endif
build_info += 'Valgrind annotations: @0@'.format(valgrind.found())
cairo = dependency('cairo', version : '>1.12.0', required : true)
+libpci = dependency('libpci', required : true)
libudev = dependency('libudev', required : true)
glib = dependency('glib-2.0', required : true)
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH i-g-t v3 3/6] lib/igt_device_scan: Include PCIe bridge upstream port if available
2026-01-28 16:09 ` [PATCH i-g-t v3 3/6] lib/igt_device_scan: Include PCIe bridge upstream port if available Janusz Krzysztofik
@ 2026-02-02 11:08 ` Krzysztof Karas
0 siblings, 0 replies; 14+ messages in thread
From: Krzysztof Karas @ 2026-02-02 11:08 UTC (permalink / raw)
To: Janusz Krzysztofik
Cc: igt-dev, intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti,
Krzysztof Niemiec, Sebastian Brzezinka
Hi Janusz,
[...]
> +static bool is_pcie_upstream_bridge(struct pci_dev *dev)
> +{
> + struct pci_cap *pcie;
> + uint8_t type;
> +
> + type = pci_read_byte(dev, PCI_HEADER_TYPE) & 0x7f;
0x7f is a magic value here. It took some time to find out why
you apply that mask here, so it might be good to add a short
comment that this is supposed to remove multi-function device
property from the whole value.
Rest of the code looks good to me:
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
--
Best Regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH i-g-t v3 4/6] lib/igt_device_scan: List PCIe bridge ports after their children
2026-01-28 16:08 [PATCH i-g-t v3 0/6] lsgpu: Report upstream port link bandwidth Janusz Krzysztofik
` (2 preceding siblings ...)
2026-01-28 16:09 ` [PATCH i-g-t v3 3/6] lib/igt_device_scan: Include PCIe bridge upstream port if available Janusz Krzysztofik
@ 2026-01-28 16:09 ` Janusz Krzysztofik
2026-01-28 16:09 ` [PATCH i-g-t v3 5/6] lib/igt_device_scan: Omit AER statistics data from attributes Janusz Krzysztofik
` (3 subsequent siblings)
7 siblings, 0 replies; 14+ messages in thread
From: Janusz Krzysztofik @ 2026-01-28 16:09 UTC (permalink / raw)
To: igt-dev
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka, Janusz Krzysztofik
Current device sorting algorithm positions PCIe bridge upstream ports
between DRM and PCI devices of their GPU children. Listing those two not
interleaved with bridge ports, and the ports following their PCI GPU
devices, seems more clear. Go for it.
Reviewed-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
---
lib/igt_device_scan.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
index bd88e61b10..32f3a3b977 100644
--- a/lib/igt_device_scan.c
+++ b/lib/igt_device_scan.c
@@ -23,6 +23,7 @@
*/
#include "drmtest.h"
+#include "igt_aux.h"
#include "igt_core.h"
#include "igt_device_scan.h"
#include "igt_list.h"
@@ -1064,6 +1065,7 @@ static struct igt_device *duplicate_device(struct igt_device *dev) {
static int devs_compare(const void *a, const void *b)
{
struct igt_device *dev1, *dev2;
+ unsigned int len1, len2;
int ret;
dev1 = *(struct igt_device **) a;
@@ -1072,6 +1074,12 @@ static int devs_compare(const void *a, const void *b)
if (ret)
return ret;
+ len1 = strlen(dev1->syspath);
+ len2 = strlen(dev2->syspath);
+
+ if (len1 != len2 && !strncmp(dev1->syspath, dev2->syspath, min(len1, len2)))
+ return len2 - len1;
+
return strcmp(dev1->syspath, dev2->syspath);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH i-g-t v3 5/6] lib/igt_device_scan: Omit AER statistics data from attributes
2026-01-28 16:08 [PATCH i-g-t v3 0/6] lsgpu: Report upstream port link bandwidth Janusz Krzysztofik
` (3 preceding siblings ...)
2026-01-28 16:09 ` [PATCH i-g-t v3 4/6] lib/igt_device_scan: List PCIe bridge ports after their children Janusz Krzysztofik
@ 2026-01-28 16:09 ` Janusz Krzysztofik
2026-01-28 16:09 ` [PATCH i-g-t v3 6/6] lib/igt_device_scan: Print GPU upstream port parent/child relations Janusz Krzysztofik
` (2 subsequent siblings)
7 siblings, 0 replies; 14+ messages in thread
From: Janusz Krzysztofik @ 2026-01-28 16:09 UTC (permalink / raw)
To: igt-dev
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka, Janusz Krzysztofik
Among attributes of a PCIe bridge upstream port of a discrete graphics
card, there are three AER statistics attributes: aer_dev_correctable,
aer_dev_nonfatal and aer_dev_fatal. Each consists of a number of key-
value pairs, while the library now expects only single value attributes.
That affects formatting of lsgpu -p output. In order to print that data
correctly in a human readable form, extra formatting effort would be
needed. However, users of lsgpu, the only call site of that printing
function of the igt_device_scan library, are not necessarily interested in
that data. Just drop those attributes from the printout.
v2: Hand over detection of AER attributes to a helper.
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
---
lib/igt_device_scan.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
index 32f3a3b977..f4d2eb6568 100644
--- a/lib/igt_device_scan.c
+++ b/lib/igt_device_scan.c
@@ -612,6 +612,13 @@ static bool is_link_attr(const char *name)
!strcmp(name, "current_link_width");
}
+static bool is_aer_attr(const char *name)
+{
+ return !strcmp(name, "aer_dev_correctable") ||
+ !strcmp(name, "aer_dev_nonfatal") ||
+ !strcmp(name, "aer_dev_fatal");
+}
+
static void dump_props_and_attrs(const struct igt_device *dev, bool omit_link)
{
struct igt_map_entry *entry;
@@ -627,6 +634,10 @@ static void dump_props_and_attrs(const struct igt_device *dev, bool omit_link)
if (omit_link && is_link_attr(entry->key))
continue;
+ /* omit multi-line AER statistics data */
+ if (is_aer_attr(entry->key))
+ continue;
+
_print_key_value((char *)entry->key, (char *)entry->data);
}
printf("\n");
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH i-g-t v3 6/6] lib/igt_device_scan: Print GPU upstream port parent/child relations
2026-01-28 16:08 [PATCH i-g-t v3 0/6] lsgpu: Report upstream port link bandwidth Janusz Krzysztofik
` (4 preceding siblings ...)
2026-01-28 16:09 ` [PATCH i-g-t v3 5/6] lib/igt_device_scan: Omit AER statistics data from attributes Janusz Krzysztofik
@ 2026-01-28 16:09 ` Janusz Krzysztofik
2026-01-29 11:49 ` Sebastian Brzezinka
2026-01-28 18:42 ` ✗ i915.CI.BAT: failure for lsgpu: Report upstream port link bandwidth (rev6) Patchwork
2026-01-28 18:46 ` ✓ Xe.CI.BAT: success " Patchwork
7 siblings, 1 reply; 14+ messages in thread
From: Janusz Krzysztofik @ 2026-01-28 16:09 UTC (permalink / raw)
To: igt-dev
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka, Janusz Krzysztofik
In a short listing, lsgpu prints a sysfs path of a PCI GPU parent as a
local attribute of a DRM device. However, if that's a discrete GPU and
its associated PCIe upstream bridge port has been identified, no
information on that bridge is listed among the GPU attributes. Follow the
pattern used with DRM devices and also show a PCI slot of the bridge port
as a local attribute of the discrete GPU device.
Moreover, in both short and detailed listings, local attributes intended
for providing device names of GPU associated DRM devices and the GPU
codename are also printed as attributes of related PCIe upstream bridge
port, however, the DRM device names are shown as (null), and the codename
attribute provides raw vendor:device codes of the bridge itself. Replace
those with PCI slot and codename of the GPU device.
v2: Allocate memory to local attributes of a bridge for safety (Sebastian),
- merge with a formerly separate patch "lib/igt_device_scan: Don't print
bridge not applicable attributes" (Sebastian),
- no need for DEVTYPE_BRIDGE, just skip attributes if NULL.
Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
---
lib/igt_device_scan.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
index f4d2eb6568..96bf0e359d 100644
--- a/lib/igt_device_scan.c
+++ b/lib/igt_device_scan.c
@@ -249,6 +249,8 @@ struct igt_device {
char *codename; /* For grouping by codename */
enum dev_type dev_type; /* For grouping by integrated/discrete */
+ char *pci_gpu; /* Filled for upstream bridge ports */
+
struct igt_list_head link;
};
@@ -1063,6 +1065,9 @@ static void update_or_add_parent(struct udev *udev,
/* override DEVTYPE_INTEGRATED so link attributes won't be omitted */
bridge_idev->dev_type = DEVTYPE_ALL;
+ bridge_idev->pci_gpu = strdup(parent_idev->pci_slot_name);
+ bridge_idev->codename = strdup(parent_idev->codename);
+ parent_idev->parent = bridge_idev;
}
static struct igt_device *duplicate_device(struct igt_device *dev) {
@@ -1234,6 +1239,7 @@ static void igt_device_free(struct igt_device *dev)
free(dev->device);
free(dev->driver);
free(dev->pci_slot_name);
+ free(dev->pci_gpu);
igt_map_destroy(dev->attrs_map, free_key_value);
igt_map_destroy(dev->props_map, free_key_value);
}
@@ -1330,7 +1336,11 @@ igt_devs_print_simple(struct igt_list_head *view,
if (is_pci_subsystem(dev)) {
_pr_simple("vendor", dev->vendor);
_pr_simple("device", dev->device);
+ if (dev->pci_gpu)
+ _pr_simple("GPU device", dev->pci_gpu);
_pr_simple("codename", dev->codename);
+ if (dev->parent && dev->parent->pci_slot_name)
+ _pr_simple("upstream port", dev->parent->pci_slot_name);
}
}
printf("\n");
@@ -1483,8 +1493,12 @@ igt_devs_print_detail(struct igt_list_head *view,
printf("========== %s:%s ==========\n",
dev->subsystem, dev->syspath);
if (!is_drm_subsystem(dev)) {
- _print_key_value("card device", dev->drm_card);
- _print_key_value("render device", dev->drm_render);
+ if (dev->drm_card)
+ _print_key_value("card device", dev->drm_card);
+ if (dev->drm_render)
+ _print_key_value("render device", dev->drm_render);
+ if (dev->pci_gpu)
+ _print_key_value("GPU device", dev->pci_gpu);
_print_key_value("codename", dev->codename);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH i-g-t v3 6/6] lib/igt_device_scan: Print GPU upstream port parent/child relations
2026-01-28 16:09 ` [PATCH i-g-t v3 6/6] lib/igt_device_scan: Print GPU upstream port parent/child relations Janusz Krzysztofik
@ 2026-01-29 11:49 ` Sebastian Brzezinka
2026-01-30 11:09 ` Janusz Krzysztofik
2026-02-02 17:21 ` Janusz Krzysztofik
0 siblings, 2 replies; 14+ messages in thread
From: Sebastian Brzezinka @ 2026-01-29 11:49 UTC (permalink / raw)
To: Janusz Krzysztofik, igt-dev
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka
Hi Janusz,
On Wed Jan 28, 2026 at 5:09 PM CET, Janusz Krzysztofik wrote:
> In a short listing, lsgpu prints a sysfs path of a PCI GPU parent as a
> local attribute of a DRM device. However, if that's a discrete GPU and
> its associated PCIe upstream bridge port has been identified, no
> information on that bridge is listed among the GPU attributes. Follow the
> pattern used with DRM devices and also show a PCI slot of the bridge port
> as a local attribute of the discrete GPU device.
>
> Moreover, in both short and detailed listings, local attributes intended
> for providing device names of GPU associated DRM devices and the GPU
> codename are also printed as attributes of related PCIe upstream bridge
> port, however, the DRM device names are shown as (null), and the codename
> attribute provides raw vendor:device codes of the bridge itself. Replace
> those with PCI slot and codename of the GPU device.
>
> v2: Allocate memory to local attributes of a bridge for safety (Sebastian),
> - merge with a formerly separate patch "lib/igt_device_scan: Don't print
> bridge not applicable attributes" (Sebastian),
> - no need for DEVTYPE_BRIDGE, just skip attributes if NULL.
>
> Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> ---
> lib/igt_device_scan.c | 18 ++++++++++++++++--
> 1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
> index f4d2eb6568..96bf0e359d 100644
> --- a/lib/igt_device_scan.c
> +++ b/lib/igt_device_scan.c
> @@ -249,6 +249,8 @@ struct igt_device {
> char *codename; /* For grouping by codename */
> enum dev_type dev_type; /* For grouping by integrated/discrete */
>
> + char *pci_gpu; /* Filled for upstream bridge ports */
> +
> struct igt_list_head link;
> };
>
> @@ -1063,6 +1065,9 @@ static void update_or_add_parent(struct udev *udev,
>
> /* override DEVTYPE_INTEGRATED so link attributes won't be omitted */
> bridge_idev->dev_type = DEVTYPE_ALL;
> + bridge_idev->pci_gpu = strdup(parent_idev->pci_slot_name);
> + bridge_idev->codename = strdup(parent_idev->codename);
Releasing memory here is safer, but we must ensure
igt_device_new_from_udev hasn't already filled the codename otherwise,
the original pointer will be lost.
I’m thinking about how to refactor these functions to make them
cleaner. They’re a bit cluttered right now since the 'find' and
'update' logic are merged together. This might be outside the scope
of your current patches, but the memory management is becoming quite
confusing. Unfortunately, there isn't an easy way to move this logic
into igt_device_new_from_udev right now.
> + parent_idev->parent = bridge_idev;
> }
>
> static struct igt_device *duplicate_device(struct igt_device *dev) {
> @@ -1234,6 +1239,7 @@ static void igt_device_free(struct igt_device *dev)
> free(dev->device);
> free(dev->driver);
> free(dev->pci_slot_name);
> + free(dev->pci_gpu);
It could be unalocated memory.
--
Best regards,
Sebastian
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH i-g-t v3 6/6] lib/igt_device_scan: Print GPU upstream port parent/child relations
2026-01-29 11:49 ` Sebastian Brzezinka
@ 2026-01-30 11:09 ` Janusz Krzysztofik
2026-02-02 17:21 ` Janusz Krzysztofik
1 sibling, 0 replies; 14+ messages in thread
From: Janusz Krzysztofik @ 2026-01-30 11:09 UTC (permalink / raw)
To: igt-dev, Sebastian Brzezinka
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka
On Thursday, 29 January 2026 12:49:39 CET Sebastian Brzezinka wrote:
> Hi Janusz,
>
> On Wed Jan 28, 2026 at 5:09 PM CET, Janusz Krzysztofik wrote:
> > In a short listing, lsgpu prints a sysfs path of a PCI GPU parent as a
> > local attribute of a DRM device. However, if that's a discrete GPU and
> > its associated PCIe upstream bridge port has been identified, no
> > information on that bridge is listed among the GPU attributes. Follow the
> > pattern used with DRM devices and also show a PCI slot of the bridge port
> > as a local attribute of the discrete GPU device.
> >
> > Moreover, in both short and detailed listings, local attributes intended
> > for providing device names of GPU associated DRM devices and the GPU
> > codename are also printed as attributes of related PCIe upstream bridge
> > port, however, the DRM device names are shown as (null), and the codename
> > attribute provides raw vendor:device codes of the bridge itself. Replace
> > those with PCI slot and codename of the GPU device.
> >
> > v2: Allocate memory to local attributes of a bridge for safety
(Sebastian),
> > - merge with a formerly separate patch "lib/igt_device_scan: Don't print
> > bridge not applicable attributes" (Sebastian),
> > - no need for DEVTYPE_BRIDGE, just skip attributes if NULL.
> >
> > Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
> > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> > ---
> > lib/igt_device_scan.c | 18 ++++++++++++++++--
> > 1 file changed, 16 insertions(+), 2 deletions(-)
> >
> > diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
> > index f4d2eb6568..96bf0e359d 100644
> > --- a/lib/igt_device_scan.c
> > +++ b/lib/igt_device_scan.c
> > @@ -249,6 +249,8 @@ struct igt_device {
> > char *codename; /* For grouping by codename */
> > enum dev_type dev_type; /* For grouping by integrated/discrete */
> >
> > + char *pci_gpu; /* Filled for upstream bridge ports */
> > +
> > struct igt_list_head link;
> > };
> >
> > @@ -1063,6 +1065,9 @@ static void update_or_add_parent(struct udev *udev,
> >
> > /* override DEVTYPE_INTEGRATED so link attributes won't be omitted
*/
> > bridge_idev->dev_type = DEVTYPE_ALL;
> > + bridge_idev->pci_gpu = strdup(parent_idev->pci_slot_name);
> > + bridge_idev->codename = strdup(parent_idev->codename);
> Releasing memory here is safer, but we must ensure
> igt_device_new_from_udev hasn't already filled the codename otherwise,
> the original pointer will be lost.
Indeed, it comes already populated, then I should release the old string
before overwriting.
>
> I’m thinking about how to refactor these functions to make them
> cleaner. They’re a bit cluttered right now since the 'find' and
> 'update' logic are merged together. This might be outside the scope
> of your current patches, but the memory management is becoming quite
> confusing. Unfortunately, there isn't an easy way to move this logic
> into igt_device_new_from_udev right now.
>
> > + parent_idev->parent = bridge_idev;
> > }
> >
> > static struct igt_device *duplicate_device(struct igt_device *dev) {
> > @@ -1234,6 +1239,7 @@ static void igt_device_free(struct igt_device *dev)
> > free(dev->device);
> > free(dev->driver);
> > free(dev->pci_slot_name);
> > + free(dev->pci_gpu);
> It could be unalocated memory.
Since igt_device_new() allocates memory with calloc(), it may be NULL, and
free(NULL) is safe, I believe.
Thanks,
Janusz
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH i-g-t v3 6/6] lib/igt_device_scan: Print GPU upstream port parent/child relations
2026-01-29 11:49 ` Sebastian Brzezinka
2026-01-30 11:09 ` Janusz Krzysztofik
@ 2026-02-02 17:21 ` Janusz Krzysztofik
1 sibling, 0 replies; 14+ messages in thread
From: Janusz Krzysztofik @ 2026-02-02 17:21 UTC (permalink / raw)
To: igt-dev, Sebastian Brzezinka
Cc: intel-gfx, intel-xe, Kamil Konieczny, Andi Shyti, Krzysztof Karas,
Krzysztof Niemiec, Sebastian Brzezinka
On Thursday, 29 January 2026 12:49:39 CET Sebastian Brzezinka wrote:
> Hi Janusz,
>
> On Wed Jan 28, 2026 at 5:09 PM CET, Janusz Krzysztofik wrote:
> > In a short listing, lsgpu prints a sysfs path of a PCI GPU parent as a
> > local attribute of a DRM device. However, if that's a discrete GPU and
> > its associated PCIe upstream bridge port has been identified, no
> > information on that bridge is listed among the GPU attributes. Follow the
> > pattern used with DRM devices and also show a PCI slot of the bridge port
> > as a local attribute of the discrete GPU device.
> >
> > Moreover, in both short and detailed listings, local attributes intended
> > for providing device names of GPU associated DRM devices and the GPU
> > codename are also printed as attributes of related PCIe upstream bridge
> > port, however, the DRM device names are shown as (null), and the codename
> > attribute provides raw vendor:device codes of the bridge itself. Replace
> > those with PCI slot and codename of the GPU device.
> >
> > v2: Allocate memory to local attributes of a bridge for safety (Sebastian),
> > - merge with a formerly separate patch "lib/igt_device_scan: Don't print
> > bridge not applicable attributes" (Sebastian),
> > - no need for DEVTYPE_BRIDGE, just skip attributes if NULL.
> >
> > Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
> > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> > ---
> > lib/igt_device_scan.c | 18 ++++++++++++++++--
> > 1 file changed, 16 insertions(+), 2 deletions(-)
> >
> > diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
> > index f4d2eb6568..96bf0e359d 100644
> > --- a/lib/igt_device_scan.c
> > +++ b/lib/igt_device_scan.c
> > @@ -249,6 +249,8 @@ struct igt_device {
> > char *codename; /* For grouping by codename */
> > enum dev_type dev_type; /* For grouping by integrated/discrete */
> >
> > + char *pci_gpu; /* Filled for upstream bridge ports */
> > +
> > struct igt_list_head link;
> > };
> >
> > @@ -1063,6 +1065,9 @@ static void update_or_add_parent(struct udev *udev,
> >
> > /* override DEVTYPE_INTEGRATED so link attributes won't be omitted */
> > bridge_idev->dev_type = DEVTYPE_ALL;
> > + bridge_idev->pci_gpu = strdup(parent_idev->pci_slot_name);
> > + bridge_idev->codename = strdup(parent_idev->codename);
> Releasing memory here is safer, but we must ensure
> igt_device_new_from_udev hasn't already filled the codename otherwise,
> the original pointer will be lost.
>
> I’m thinking about how to refactor these functions to make them
> cleaner. They’re a bit cluttered right now since the 'find' and
> 'update' logic are merged together. This might be outside the scope
> of your current patches, but the memory management is becoming quite
> confusing. Unfortunately, there isn't an easy way to move this logic
> into igt_device_new_from_udev right now.
I've had another look at it. We could pass a flag that says that's a bridge,
not a GPU, but that's not sufficient. It could be used for selecting correct
dev_type for the bridge, but if we also wanted igt_device_new_from_udev() to
populated codename with a copy of that of the GPU then also that data would
have to be passed. OTOH, update_or_add_parent() never fully relied on
igt_device_new_from_udev() populating all attributes of a GPU parent and
handled some, e.g. drm_dev and drm_render, locally, then I think we can take
a similar approach to a bridge sub-parent. As I stated before, the only non-
trivial case is the already populated codename, but I'll fix its handling.
Thanks,
Janusz
>
> > + parent_idev->parent = bridge_idev;
> > }
> >
> > static struct igt_device *duplicate_device(struct igt_device *dev) {
> > @@ -1234,6 +1239,7 @@ static void igt_device_free(struct igt_device *dev)
> > free(dev->device);
> > free(dev->driver);
> > free(dev->pci_slot_name);
> > + free(dev->pci_gpu);
> It could be unalocated memory.
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* ✗ i915.CI.BAT: failure for lsgpu: Report upstream port link bandwidth (rev6)
2026-01-28 16:08 [PATCH i-g-t v3 0/6] lsgpu: Report upstream port link bandwidth Janusz Krzysztofik
` (5 preceding siblings ...)
2026-01-28 16:09 ` [PATCH i-g-t v3 6/6] lib/igt_device_scan: Print GPU upstream port parent/child relations Janusz Krzysztofik
@ 2026-01-28 18:42 ` Patchwork
2026-01-28 18:46 ` ✓ Xe.CI.BAT: success " Patchwork
7 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2026-01-28 18:42 UTC (permalink / raw)
To: Janusz Krzysztofik; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 6095 bytes --]
== Series Details ==
Series: lsgpu: Report upstream port link bandwidth (rev6)
URL : https://patchwork.freedesktop.org/series/160415/
State : failure
== Summary ==
CI Bug Log - changes from IGT_8723 -> IGTPW_14440
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with IGTPW_14440 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in IGTPW_14440, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/index.html
Participating hosts (42 -> 41)
------------------------------
Additional (1): bat-adls-6
Missing (2): bat-dg2-13 fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_14440:
### IGT changes ###
#### Possible regressions ####
* igt@i915_pm_rpm@module-reload:
- bat-adlp-6: [PASS][1] -> [DMESG-WARN][2] +78 other tests dmesg-warn
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8723/bat-adlp-6/igt@i915_pm_rpm@module-reload.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adlp-6/igt@i915_pm_rpm@module-reload.html
Known issues
------------
Here are the changes found in IGTPW_14440 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_lmem_swapping@parallel-random-engines:
- bat-adls-6: NOTRUN -> [SKIP][3] ([i915#4613]) +3 other tests skip
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@gem_lmem_swapping@parallel-random-engines.html
* igt@gem_tiled_pread_basic:
- bat-adls-6: NOTRUN -> [SKIP][4] ([i915#3282])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@gem_tiled_pread_basic.html
* igt@intel_hwmon@hwmon-read:
- bat-adls-6: NOTRUN -> [SKIP][5] ([i915#7707]) +1 other test skip
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@intel_hwmon@hwmon-read.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- bat-adls-6: NOTRUN -> [SKIP][6] ([i915#4103]) +1 other test skip
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_dsc@dsc-basic:
- bat-adls-6: NOTRUN -> [SKIP][7] ([i915#3555] / [i915#3840])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@kms_dsc@dsc-basic.html
* igt@kms_force_connector_basic@force-load-detect:
- bat-adls-6: NOTRUN -> [SKIP][8]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@kms_force_connector_basic@force-load-detect.html
* igt@kms_pm_backlight@basic-brightness:
- bat-adls-6: NOTRUN -> [SKIP][9] ([i915#5354])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_psr@psr-primary-mmap-gtt:
- bat-adls-6: NOTRUN -> [SKIP][10] ([i915#1072] / [i915#9732]) +3 other tests skip
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@kms_psr@psr-primary-mmap-gtt.html
* igt@kms_setmode@basic-clone-single-crtc:
- bat-adls-6: NOTRUN -> [SKIP][11] ([i915#3555])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@kms_setmode@basic-clone-single-crtc.html
* igt@prime_vgem@basic-fence-read:
- bat-adls-6: NOTRUN -> [SKIP][12] ([i915#3291]) +2 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-adls-6/igt@prime_vgem@basic-fence-read.html
#### Possible fixes ####
* igt@i915_selftest@live:
- bat-mtlp-8: [DMESG-FAIL][13] ([i915#12061]) -> [PASS][14] +1 other test pass
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8723/bat-mtlp-8/igt@i915_selftest@live.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-mtlp-8/igt@i915_selftest@live.html
- bat-dg2-8: [DMESG-FAIL][15] ([i915#12061]) -> [PASS][16] +1 other test pass
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8723/bat-dg2-8/igt@i915_selftest@live.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-dg2-8/igt@i915_selftest@live.html
* igt@i915_selftest@live@workarounds:
- bat-arls-6: [DMESG-FAIL][17] ([i915#12061]) -> [PASS][18] +1 other test pass
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8723/bat-arls-6/igt@i915_selftest@live@workarounds.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/bat-arls-6/igt@i915_selftest@live@workarounds.html
[i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
[i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
[i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
[i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_8723 -> IGTPW_14440
CI-20190529: 20190529
CI_DRM_17900: 8059f097e25f736bb3da09af6a9b283079abfd4f @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_14440: 3a46da4179dca0edd50aafb6fdb47dfc0fd8e993 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8723: 8723
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14440/index.html
[-- Attachment #2: Type: text/html, Size: 7266 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread* ✓ Xe.CI.BAT: success for lsgpu: Report upstream port link bandwidth (rev6)
2026-01-28 16:08 [PATCH i-g-t v3 0/6] lsgpu: Report upstream port link bandwidth Janusz Krzysztofik
` (6 preceding siblings ...)
2026-01-28 18:42 ` ✗ i915.CI.BAT: failure for lsgpu: Report upstream port link bandwidth (rev6) Patchwork
@ 2026-01-28 18:46 ` Patchwork
7 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2026-01-28 18:46 UTC (permalink / raw)
To: Janusz Krzysztofik; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 862 bytes --]
== Series Details ==
Series: lsgpu: Report upstream port link bandwidth (rev6)
URL : https://patchwork.freedesktop.org/series/160415/
State : success
== Summary ==
CI Bug Log - changes from XEIGT_8723_BAT -> XEIGTPW_14440_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (12 -> 11)
------------------------------
Missing (1): bat-bmg-3
Changes
-------
No changes found
Build changes
-------------
* IGT: IGT_8723 -> IGTPW_14440
IGTPW_14440: 3a46da4179dca0edd50aafb6fdb47dfc0fd8e993 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8723: 8723
xe-4465-8059f097e25f736bb3da09af6a9b283079abfd4f: 8059f097e25f736bb3da09af6a9b283079abfd4f
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14440/index.html
[-- Attachment #2: Type: text/html, Size: 1407 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread