Index: arch/ia32/include/asm.h
===================================================================
--- arch/ia32/include/asm.h	(revision ed0dd65c9dbd967fb298a751aace9d7aed3c3569)
+++ arch/ia32/include/asm.h	(revision 47d78c6b7e84f7a6010baa23b8d356f10ea71f3f)
@@ -30,5 +30,4 @@
 #define __ia32_ASM_H__
 
-#include <cpu.h>
 #include <arch/types.h>
 #include <typedefs.h>
@@ -59,6 +58,9 @@
 extern void cpu_sleep(void);
 
-extern void write_dr0(__u32 v);
-extern inline __u32 read_dr0(void);
+static inline void write_dr0(__u32 v);
+static inline __u32 read_dr0(void);
+
+inline void write_dr0(__u32 v) { __asm__ volatile ("movl %0,%%dr0\n" : : "r" (v)); }
+inline __u32 read_dr0(void) { __u32 v; __asm__ volatile ("movl %%dr0,%0" : "=r" (v)); return v; }
 
 #endif
Index: arch/ia32/include/cpu.h
===================================================================
--- arch/ia32/include/cpu.h	(revision ed0dd65c9dbd967fb298a751aace9d7aed3c3569)
+++ arch/ia32/include/cpu.h	(revision 47d78c6b7e84f7a6010baa23b8d356f10ea71f3f)
@@ -33,4 +33,5 @@
 #include <typedefs.h>
 #include <arch/pm.h>
+#include <arch/asm.h>
 
 #ifdef __SMP__
