mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

It has been decided to remove the support IMMUTABLE futex. perf bench was one of the eary users for testing purposes. Now that the API is removed before it could be used in an official release, remove the bits from perf, too. Remove Remove support for IMMUTABLE futex. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20250710110011.384614-7-bigeasy@linutronix.de
63 lines
1.7 KiB
C
63 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include <err.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <sys/prctl.h>
|
|
|
|
#include "futex.h"
|
|
|
|
#ifndef PR_FUTEX_HASH
|
|
#define PR_FUTEX_HASH 78
|
|
# define PR_FUTEX_HASH_SET_SLOTS 1
|
|
# define PR_FUTEX_HASH_GET_SLOTS 2
|
|
#endif // PR_FUTEX_HASH
|
|
|
|
void futex_set_nbuckets_param(struct bench_futex_parameters *params)
|
|
{
|
|
int ret;
|
|
|
|
if (params->nbuckets < 0)
|
|
return;
|
|
|
|
ret = prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_SET_SLOTS, params->nbuckets, 0);
|
|
if (ret) {
|
|
printf("Requesting %d hash buckets failed: %d/%m\n",
|
|
params->nbuckets, ret);
|
|
err(EXIT_FAILURE, "prctl(PR_FUTEX_HASH)");
|
|
}
|
|
}
|
|
|
|
void futex_print_nbuckets(struct bench_futex_parameters *params)
|
|
{
|
|
char *futex_hash_mode;
|
|
int ret;
|
|
|
|
ret = prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_GET_SLOTS);
|
|
if (params->nbuckets >= 0) {
|
|
if (ret != params->nbuckets) {
|
|
if (ret < 0) {
|
|
printf("Can't query number of buckets: %m\n");
|
|
err(EXIT_FAILURE, "prctl(PR_FUTEX_HASH)");
|
|
}
|
|
printf("Requested number of hash buckets does not currently used.\n");
|
|
printf("Requested: %d in usage: %d\n", params->nbuckets, ret);
|
|
err(EXIT_FAILURE, "prctl(PR_FUTEX_HASH)");
|
|
}
|
|
if (params->nbuckets == 0)
|
|
ret = asprintf(&futex_hash_mode, "Futex hashing: global hash");
|
|
else
|
|
ret = asprintf(&futex_hash_mode, "Futex hashing: %d hash buckets",
|
|
params->nbuckets);
|
|
} else {
|
|
if (ret <= 0) {
|
|
ret = asprintf(&futex_hash_mode, "Futex hashing: global hash");
|
|
} else {
|
|
ret = asprintf(&futex_hash_mode, "Futex hashing: auto resized to %d buckets",
|
|
ret);
|
|
}
|
|
}
|
|
if (ret < 0)
|
|
err(EXIT_FAILURE, "ENOMEM, futex_hash_mode");
|
|
printf("%s\n", futex_hash_mode);
|
|
free(futex_hash_mode);
|
|
}
|