tools/testing/selftests/futex/functional/futex_requeue_pi.c

Source file repositories/reference/linux-study-clean/tools/testing/selftests/futex/functional/futex_requeue_pi.c

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/futex/functional/futex_requeue_pi.c
Extension
.c
Size
10417 bytes
Lines
401
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

struct thread_arg {
	long id;
	struct timespec *timeout;
	int lock;
	int ret;
};
#define THREAD_ARG_INITIALIZER { 0, NULL, 0, 0 }

FIXTURE(args)
{
};

FIXTURE_SETUP(args)
{
};

FIXTURE_TEARDOWN(args)
{
};

FIXTURE_VARIANT(args)
{
	long timeout_ns;
	bool broadcast;
	bool owner;
	bool locked;
};

/*
 * For a given timeout value, this macro creates a test input with all the
 * possible combinations of valid arguments
 */
#define FIXTURE_VARIANT_ADD_TIMEOUT(timeout)		\
							\
FIXTURE_VARIANT_ADD(args, t_##timeout)			\
{							\
	.timeout_ns = timeout,				\
};							\
							\
FIXTURE_VARIANT_ADD(args, t_##timeout##_broadcast)	\
{							\
	.timeout_ns = timeout,				\
	.broadcast = true,				\
};							\
							\
FIXTURE_VARIANT_ADD(args, t_##timeout##_broadcast_locked) \
{							\
	.timeout_ns = timeout,				\
	.broadcast = true,				\
	.locked = true,					\
};							\
							\
FIXTURE_VARIANT_ADD(args, t_##timeout##_broadcast_owner) \
{							\
	.timeout_ns = timeout,				\
	.broadcast = true,				\
	.owner = true,					\
};							\
							\
FIXTURE_VARIANT_ADD(args, t_##timeout##_locked)		\
{							\
	.timeout_ns = timeout,				\
	.locked = true,					\
};							\
							\
FIXTURE_VARIANT_ADD(args, t_##timeout##_owner)		\
{							\
	.timeout_ns = timeout,				\
	.owner = true,					\
};							\

FIXTURE_VARIANT_ADD_TIMEOUT(0);
FIXTURE_VARIANT_ADD_TIMEOUT(5000);
FIXTURE_VARIANT_ADD_TIMEOUT(500000);
FIXTURE_VARIANT_ADD_TIMEOUT(2000000000);

int create_rt_thread(pthread_t *pth, void*(*func)(void *), void *arg,
		     int policy, int prio)
{
	int ret;
	struct sched_param schedp;
	pthread_attr_t attr;

	pthread_attr_init(&attr);
	memset(&schedp, 0, sizeof(schedp));

	ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
	if (ret) {
		ksft_exit_fail_msg("pthread_attr_setinheritsched\n");
		return -1;

Annotation

Implementation Notes