[PATCH] tools/gputop: Fix zero output when stdout is not a terminal

Vidya Srinivas
2026-04-07T13:44:53Z

When gputop output is redirected to a file or run via adb shell
(e.g., on Android), update_console_size() calls ioctl(0, TIOCGWINSZ)
on stdin which may not be a terminal. If stdin is a pipe or
redirected, the ioctl returns -1 and con_w/con_h remain at their
initial value of -1.

This causes the main display loop to immediately break since
lines >= con_h evaluates to true (0 >= -1), resulting in zero
output being produced.

Fix this by initializing con_w and con_h to default values of
80 and 50 respectively, so that when ioctl fails the display
loop still produces output with sensible dimensions.

v2: Try stdout, stdin, and stderr for terminal size before falling
back to defaults (Soham Purkait)

v3: Initialize defaults in main() instead of adding fallback logic
in update_console_size() (Soham Purkait)

Signed-off-by: Vidya Srinivas <vidya.srinivas@intel.com>
Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>
Signed-off-by: Vidya Srinivas <vidya.srinivas@intel.com>
---
tools/gputop.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/gputop.c b/tools/gputop.c
index 9b2e8cb6f..0ed5af456 100644
--- a/tools/gputop.c
+++ b/tools/gputop.c
@@ -609,7 +609,7 @@ int main(int argc, char **argv)
unsigned int period_us;
struct igt_profiled_device *profiled_devices = NULL;
struct igt_drm_clients *clients = NULL;
- int con_w = -1, con_h = -1;
+ int con_w = 80, con_h = 50;
int ret;
long n;

--
2.45.2