]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/jdb/ia32/jdb-ia32-amd64.cpp
update
[l4.git] / kernel / fiasco / src / jdb / ia32 / jdb-ia32-amd64.cpp
index 39dbcc87471faf96f08e8ff5b534b41a5c0de7a0..3eb134c87f54b3dda77c9da15a77dadc7016620c 100644 (file)
@@ -203,15 +203,26 @@ Jdb::connected()
 }
 
 PROTECTED static inline
+template< typename T >
 void
-Jdb::monitor_address(unsigned current_cpu, void *addr)
+Jdb::set_monitored_address(T *dest, T val)
 {
-  if (Cpu::cpus.cpu(current_cpu).has_monitor_mwait())
+  *dest = val;
+}
+
+PROTECTED static inline
+template< typename T >
+T
+Jdb::monitor_address(unsigned current_cpu, T *addr)
+{
+  if (!*addr && Cpu::cpus.cpu(current_cpu).has_monitor_mwait())
     {
       asm volatile ("monitor \n" : : "a"(addr), "c"(0), "d"(0) );
       Mword irq_sup = Cpu::cpus.cpu(current_cpu).has_monitor_mwait_irq() ? 1 : 0;
       asm volatile ("mwait   \n" : : "a"(0x00), "c"(irq_sup) );
     }
+
+  return *addr;
 }