set_c0_status() 函数在哪里定义?
Where is the set_c0_status() function defined?
代码在:
https://github.com/intel/linux-intel-4.9/blob/master/arch/mips/cavium-octeon/octeon-irq.c
使用函数或宏set_c0_status()
在哪里定义的?
如果它内置于 GCC MIPS 编译器中,那么它记录在哪里?
set_c0_status
函数在 mipsregs.h
中定义并由以下宏层次结构扩展:
https://github.com/torvalds/linux/blob/master/arch/mips/include/asm/mipsregs.h
/*
* Manipulate bits in a register.
*/
#define __BUILD_SET_COMMON(name) \
static inline unsigned int \
set_##name(unsigned int set) \
{ \
unsigned int res, new; \
\
res = read_##name(); \
new = res | set; \
write_##name(new); \
\
return res; \
} \
...
/*
* Manipulate bits in a c0 register.
*/
#define __BUILD_SET_C0(name) __BUILD_SET_COMMON(c0_##name)
__BUILD_SET_C0(status)
我在 arch/mips/kvm/kvm_mips.c
中找到了这个
static
void kvm_mips_set_c0_status (void)
{
uint32_t status = read_c0_status();
if (cpu_has_fpu)
status |= (ST0_CU1);
if (cpu_has_dsp)
status |= (ST0_MX);
write_c0_status(status);
__asm volatile ("ehb");
}
并且 write_c0_status 是在 mipsregs.h ( https://elixir.bootlin.com/linux/latest/source/arch/mips/include/asm/mipsregs.h#L1639 ) 中定义的,所以我想你应该在那里寻找答案。
代码在:
https://github.com/intel/linux-intel-4.9/blob/master/arch/mips/cavium-octeon/octeon-irq.c
使用函数或宏set_c0_status()
在哪里定义的?
如果它内置于 GCC MIPS 编译器中,那么它记录在哪里?
set_c0_status
函数在 mipsregs.h
中定义并由以下宏层次结构扩展:
https://github.com/torvalds/linux/blob/master/arch/mips/include/asm/mipsregs.h
/*
* Manipulate bits in a register.
*/
#define __BUILD_SET_COMMON(name) \
static inline unsigned int \
set_##name(unsigned int set) \
{ \
unsigned int res, new; \
\
res = read_##name(); \
new = res | set; \
write_##name(new); \
\
return res; \
} \
...
/*
* Manipulate bits in a c0 register.
*/
#define __BUILD_SET_C0(name) __BUILD_SET_COMMON(c0_##name)
__BUILD_SET_C0(status)
我在 arch/mips/kvm/kvm_mips.c
中找到了这个static
void kvm_mips_set_c0_status (void)
{
uint32_t status = read_c0_status();
if (cpu_has_fpu)
status |= (ST0_CU1);
if (cpu_has_dsp)
status |= (ST0_MX);
write_c0_status(status);
__asm volatile ("ehb");
}
并且 write_c0_status 是在 mipsregs.h ( https://elixir.bootlin.com/linux/latest/source/arch/mips/include/asm/mipsregs.h#L1639 ) 中定义的,所以我想你应该在那里寻找答案。