[LTP] [PATCH v2 16/31] testcases: sysfs: Add sys_wakeup01

Petr Vorel pvorel@suse.cz
Thu Aug 20 21:12:23 CEST 2026


Hi Cyril,

> A test for /sys/class/wakeup/*/* files.

> +++ b/testcases/kernel/sysfs/class/wakeup/sys_wakeup01.c
> @@ -0,0 +1,118 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
> + */
> +
> +/*\
> + * Sanity checks for the wakeup source statistics exported under
> + * /sys/class/wakeup/wakeupN/.
> + *
> + * For every wakeup source the test verifies that:
> + *
> + * - name is a non-empty string
> + * - active_count, active_time_ms, event_count, expire_count, last_change_ms,
> + *   max_time_ms, prevent_suspend_time_ms, total_time_ms and wakeup_count are
> + *   all non-negative
> + * - active_time_ms <= total_time_ms (currently active time is part of the
> + *   accumulated total)
> + * - max_time_ms <= total_time_ms (the longest single event cannot exceed the
> + *   accumulated total)
> + *
> + * The test skips with TCONF when no wakeup source is present.
> + */
> +
> +#include <string.h>
> +#include <limits.h>
> +#include <dirent.h>
> +#include "tst_test.h"
> +#include "tst_sysfs_assert.h"
> +
> +#define WAKEUP "/sys/class/wakeup"
FYI some archs does not have wake up support therefore it does not have
/sys/class/wakeup directory, e.g. s390x.
...
> +static void do_test(void)
> +{
> +	DIR *d;
> +	struct dirent *ent;
> +	int found = 0;
> +
> +	d = SAFE_OPENDIR(WAKEUP);
Therefore this fails:
sys_wakeup01.c:100: TBROK: opendir(/sys/class/wakeup) failed: ENOENT (2)

I believe we need CONFIG_PM_SLEEP=y kconfig check.

drivers/base/power/wakeup_stats.c creates that directory in __init
wakeup_sources_sysfs_init(), and that source is guarded by CONFIG_PM_SLEEP=y,
which depends on CONFIG_SUSPEND=y.

> +
> +	while ((ent = SAFE_READDIR(d))) {
> +		if (strncmp(ent->d_name, "wakeup", 6))
> +			continue;
> +
> +		found = 1;
> +		check_wakeup(ent->d_name);
> +	}
> +
> +	SAFE_CLOSEDIR(d);
> +
> +	if (!found)
> +		tst_res(TCONF, "No wakeup source found");

This TCONF is also valid, but too late.

There are similar failures in other tests, I guess I'll post you CI links.

Kind regards,
Petr

> +}
> +
> +static struct tst_test test = {
> +	.test_all = do_test,
> +};


More information about the ltp mailing list