Helper to backtrace a user context
[akaros.git] / kern / arch / riscv / arch.h
index de468d6..77dbf9e 100644 (file)
 /* Arch Constants */
 #define ARCH_CL_SIZE 64
 
-#ifdef __riscv64
-# define KERN64
-#endif
-
 void print_cpuinfo(void);
-void show_mapping(uintptr_t start, size_t size);
+void show_mapping(pgdir_t pgdir, uintptr_t start, size_t size);
 void backtrace(void);
 
 static __inline void breakpoint(void)
@@ -112,8 +108,9 @@ static __inline void disable_irqsave(int8_t* state)
 
 static __inline void cpu_relax(void)
 {
-       for(int i = 0; i < 100; i++)
-               asm ("nop");
+       // compute and use 0/0, which stalls Rocket for dozens of cycles
+       long scratch;
+       asm volatile ("div %0, zero, zero; move %0, %0" : "=r"(scratch));
 }
 
 static __inline void clflush(uintptr_t* addr)
@@ -145,6 +142,11 @@ static __inline int core_id(void)
        return get_os_coreid(hw_core_id());
 }
 
+static __inline int core_id_early(void)
+{
+       return core_id();
+}
+
 static __inline void cache_flush(void)
 {
 }
@@ -157,4 +159,12 @@ static __inline void reboot(void)
 
 extern void cpu_halt(void);
 
+static inline void prefetch(void *addr)
+{
+}
+
+static inline void prefetchw(void *addr)
+{
+}
+
 #endif /* !ROS_INC_ARCH_H */