Index: arch/amd64/include/atomic.h
===================================================================
--- arch/amd64/include/atomic.h	(revision c7bb8b05da36424f3a544f20383a616e25ec8633)
+++ arch/amd64/include/atomic.h	(revision 73838ed8e5c99d4b785497a5fa7d0909fded4f9f)
@@ -30,15 +30,20 @@
 #define __amd64_ATOMIC_H__
 
-/*
- * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec.
- * WARNING: the following functions cause the code to be preemption-unsafe !!!
- */
 
-static inline atomic_inc(volatile int *val) {
-	*val++;
+/* Count_t is 32-bits on AMD-64 */
+static inline void atomic_inc(volatile count_t *val) {
+#ifdef __SMP__
+	__asm__ volatile ("lock incl (%0)\n" : : "r" (val));
+#else
+	__asm__ volatile ("incl (%0)\n" : : "r" (val));
+#endif /* __SMP__ */
 }
 
-static inline atomic_dec(volatile int *val) {
-	*val--;
+static inline void atomic_dec(volatile count_t *val) {
+#ifdef __SMP__
+	__asm__ volatile ("lock decl (%0)\n" : : "r" (val));
+#else
+	__asm__ volatile ("decl (%0)\n" : : "r" (val));
+#endif /* __SMP__ */
 }
 
