[PATCH v9 5/6] riscv: Add ifunc helper method to hwprobe.h
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Wed Dec 6 17:39:25 GMT 2023
On 30/11/23 15:32, Evan Green wrote:
> Add a little helper method so it's easier to fetch a single value from
> the hwprobe function when used within an ifunc selector.
>
> Signed-off-by: Evan Green <evan@rivosinc.com>
>
> ---
>
> Changes in v9:
> - Use __inline rather than inline so c89 compiles (build-many-glibcs)
>
> Changes in v7:
> - Introduced static inline helper (Richard)
>
> sysdeps/unix/sysv/linux/riscv/sys/hwprobe.h | 25 +++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/sysdeps/unix/sysv/linux/riscv/sys/hwprobe.h b/sysdeps/unix/sysv/linux/riscv/sys/hwprobe.h
> index fd3be5a411..ee7eed3960 100644
> --- a/sysdeps/unix/sysv/linux/riscv/sys/hwprobe.h
> +++ b/sysdeps/unix/sysv/linux/riscv/sys/hwprobe.h
> @@ -22,6 +22,7 @@
>
> #include <features.h>
> #include <stddef.h>
> +#include <errno.h>
> #ifdef __has_include
> # if __has_include (<asm/hwprobe.h>)
> # include <asm/hwprobe.h>
> @@ -79,4 +80,28 @@ typedef int (*__riscv_hwprobe_t) (struct riscv_hwprobe *__pairs, size_t __pair_c
>
> __END_DECLS
>
> +/* Helper function usable from ifunc selectors that probes a single key. */
> +static __inline int
> +__riscv_hwprobe_one(__riscv_hwprobe_t hwprobe_func,
> + signed long long int key,
> + unsigned long long int *value)
> +{
> + struct riscv_hwprobe pair;
> + int rc;
> +
> + if (!hwprobe_func)
> + return ENOSYS;
The convention is no implicit checks:
if (hwprobe_func == NULL)
return ENOSYS;
> +
> + pair.key = key;
> + rc = hwprobe_func(&pair, 1, 0, NULL, 0);
Missing space after function name.
> + if (rc)
> + return rc;
Same as before for function that return 'int':
if (rc != 0)
return rc;
> +
> + if (pair.key < 0)
> + return ENOENT;
> +
> + *value = pair.value;
> + return 0;
> +}
> +
> #endif /* sys/hwprobe.h */
More information about the Libc-alpha
mailing list