⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msr-on-cpu.c

📁 linux 内核源代码
💻 C
字号:
#include <linux/module.h>#include <linux/preempt.h>#include <linux/smp.h>#include <asm/msr.h>struct msr_info {	u32 msr_no;	u32 l, h;	int err;};static void __rdmsr_on_cpu(void *info){	struct msr_info *rv = info;	rdmsr(rv->msr_no, rv->l, rv->h);}static void __rdmsr_safe_on_cpu(void *info){	struct msr_info *rv = info;	rv->err = rdmsr_safe(rv->msr_no, &rv->l, &rv->h);}static int _rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h, int safe){	int err = 0;	struct msr_info rv;	rv.msr_no = msr_no;	if (safe) {		smp_call_function_single(cpu, __rdmsr_safe_on_cpu, &rv, 0, 1);		err = rv.err;	} else {		smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 0, 1);	}	*l = rv.l;	*h = rv.h;	return err;}static void __wrmsr_on_cpu(void *info){	struct msr_info *rv = info;	wrmsr(rv->msr_no, rv->l, rv->h);}static void __wrmsr_safe_on_cpu(void *info){	struct msr_info *rv = info;	rv->err = wrmsr_safe(rv->msr_no, rv->l, rv->h);}static int _wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h, int safe){	int err = 0;	struct msr_info rv;	rv.msr_no = msr_no;	rv.l = l;	rv.h = h;	if (safe) {		smp_call_function_single(cpu, __wrmsr_safe_on_cpu, &rv, 0, 1);		err = rv.err;	} else {		smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 0, 1);	}	return err;}void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h){	_wrmsr_on_cpu(cpu, msr_no, l, h, 0);}void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h){	_rdmsr_on_cpu(cpu, msr_no, l, h, 0);}/* These "safe" variants are slower and should be used when the target MSR   may not actually exist. */int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h){	return _wrmsr_on_cpu(cpu, msr_no, l, h, 1);}int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h){	return _rdmsr_on_cpu(cpu, msr_no, l, h, 1);}EXPORT_SYMBOL(rdmsr_on_cpu);EXPORT_SYMBOL(wrmsr_on_cpu);EXPORT_SYMBOL(rdmsr_safe_on_cpu);EXPORT_SYMBOL(wrmsr_safe_on_cpu);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -