#include #include #include MODULE_LICENSE("Dual BSD/GPL"); unsigned long long my_rdmsr(unsigned long val) { unsigned long low = 0, high = 0; __asm__ volatile ("rdmsr" : "=a"(low), "=d"(high) : "c"(val)); return ((unsigned long long)high << 32) + low; } void my_wrmsr(unsigned long val, unsigned long low, unsigned long high) { __asm__ volatile ("wrmsr" : : "a"(low), "d"(high), "c"(val)); } static int my_init(void) { my_wrmsr(0x1d9, 0x3, 0x0); printk("<1> Attempt #1 %llx.n", my_rdmsr(0x1d9)); wrmsr(0x1d9, 0x1, 0x0); int low; int high; rdmsr(0x1d9, low, high); printk("<1> Attempt #2 %x, %x.n", low, high); return 0; } static void my_exit(void) { printk("<1> unloadn"); } module_init(my_init); module_exit(my_exit); obj-m := hello.o me@debian:~/code$ sudo make -C /usr/src/linux-headers-3.2.0-4-amd64/ M=`pwd` modules && sudo insmod hello.ko && sudo rmmod hello && sudo dmesg | tail make: Entering directory `/usr/src/linux-headers-3.2.0-4-amd64' Building modules, stage 2. MODPOST 1 modules make: Leaving directory `/usr/src/linux-headers-3.2.0-4-amd64' [ 2231.367819] unload [ 2248.363261] Attempt #1 0. [ 2248.363267] Attempt #2 0, 0. [ 2248.378066] unload [ 2288.395359] Attempt #1 0. [ 2288.395366] Attempt #2 0, 0. [ 2288.409889] unload [ 3021.984748] Attempt #1 0. [ 3021.984760] Attempt #2 0, 0. [ 3022.017626] unload