최근 Linux에서 "sched.h"헤더 파일의 "sched_getcpu()"기능을 사용하고 있습니다."sched_getcpu()"코드는 어디에서 찾을 수 있습니까
그러나이 함수의 소스 코드를 어디에서 찾을 수 있을까요?
감사합니다.
최근 Linux에서 "sched.h"헤더 파일의 "sched_getcpu()"기능을 사용하고 있습니다."sched_getcpu()"코드는 어디에서 찾을 수 있습니까
그러나이 함수의 소스 코드를 어디에서 찾을 수 있을까요?
감사합니다.
Linux에서 sched_getcpu()
함수는 sys_getcpu()
시스템 호출에 대한 glibc 래퍼이며 아키텍처에 따라 다릅니다. x86_64의 아키텍처에 대한
__getcpu()
(트리 4.x의)로
arch/x86/include/asm/vgtod.h
에서 정의됩니다
이
notrace long
__vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused)
{
unsigned int p;
p = __getcpu();
if (cpu)
*cpu = p & VGETCPU_CPU_MASK;
if (node)
*node = p >> 12;
return 0;
}
(vDSO를 참조하십시오
#ifdef CONFIG_X86_64
#define VGETCPU_CPU_MASK 0xfff
static inline unsigned int __getcpu(void)
{
unsigned int p;
/*
* Load per CPU data from GDT. LSL is faster than RDTSCP and
* works on all CPUs. This is volatile so that it orders
* correctly wrt barrier() and to keep gcc from cleverly
* hoisting it out of the calling function.
*/
asm volatile ("lsl %1,%0" : "=r" (p) : "r" (__PER_CPU_SEG));
return p;
}
#endif /* CONFIG_X86_64 */
는 arch/entry/vdso/vgetcpu.c
에 선언 __vdso_getcpu()
에 의해 호출이 함수 인 접두어가 무엇인지에 대한 자세한 내용은 vdso
을 참조하십시오.
EDIT 1
static inline struct thread_info *current_thread_info(void)
{
return (struct thread_info *)
(current_stack_pointer & ~(THREAD_SIZE - 1));
}
이 함수가 사용된다
는 그것은 arch/arm/include/asm/thread_info.h
파일에서 발견 될 수있는 ARM 코드 위치
(ARM 코드의 위치를 회답) 파일 arch/arm/include/asm/smp.h
에 정의 된 raw_smp_processor_id()
에 의해
SYSCALL_DEFINE3(getcpu, unsigned __user *, cpup, unsigned __user *, nodep, struct getcpu_cache __user *, unused)
{
int err = 0;
int cpu = raw_smp_processor_id();
if (cpup)
err |= put_user(cpu, cpup);
if (nodep)
err |= put_user(cpu_to_node(cpu), nodep);
return err ? -EFAULT : 0;
}
그리고이
getcpu
시스템 호출로 불리는 파일kernel/sys.c
에 선언했다. 사실 저는 ARM 아치에서 작업하고 있습니다. 방금 arch/arm64 폴더를 검색했고 sys_getcpu가 포함 된 'unistd32.h'라는 파일 만 얻었습니다. 그러나 x86 예제와 같은 세부 사항은 아직 없습니다. ARM의이 기능이 어디 있는지 알고 있습니까? 답장을 보내 주셔서 감사 드리며 훌륭한 주말을 보내시기 바랍니다. –@ S.Wan 이제 완전하고 정확합니다. 자세한 내용이 필요한 경우 알려주십시오. – pah
그것은 나를 위해 매우 상세한 답변입니다. 그러나 getcpu에 관한 또 다른 관련 질문이 있습니다. 이제 sched_getcpu와 같은 함수를 배포하고 싶지만 시스템 호출을 사용하거나 'sched.h'와 같은 헤더 파일을 포함하고 싶지 않습니다.이를 수행하는 방법은 무엇입니까? 나는 x86에 대해 'CPUID'라는 명령어가 있지만 ARM 부분에는 익숙하지 않다는 것을 알았어, 고마워! –