Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/loongarch/vdso/vgetcpu.c
52025 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Fast user context implementation of getcpu()
4
*/
5
6
#include <asm/vdso.h>
7
8
static __always_inline int read_cpu_id(void)
9
{
10
int cpu_id;
11
12
#ifdef CONFIG_64BIT
13
__asm__ __volatile__(
14
" rdtime.d $zero, %0\n"
15
: "=r" (cpu_id)
16
:
17
: "memory");
18
#else
19
__asm__ __volatile__(
20
" rdtimel.w $zero, %0\n"
21
: "=r" (cpu_id)
22
:
23
: "memory");
24
#endif
25
26
return cpu_id;
27
}
28
29
extern
30
int __vdso_getcpu(unsigned int *cpu, unsigned int *node, void *unused);
31
int __vdso_getcpu(unsigned int *cpu, unsigned int *node, void *unused)
32
{
33
int cpu_id;
34
35
cpu_id = read_cpu_id();
36
37
if (cpu)
38
*cpu = cpu_id;
39
40
if (node)
41
*node = vdso_u_arch_data.pdata[cpu_id].node;
42
43
return 0;
44
}
45
46