memory barrier functions available for drivers.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25183 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol
2008-04-26 15:18:04 +00:00
parent 67ed230831
commit 807cf76df0
6 changed files with 69 additions and 0 deletions
+2
View File
@@ -154,6 +154,8 @@ extern status_t unregister_kernel_daemon(daemon_hook hook, void *arg);
extern void call_all_cpus(void (*func)(void *, int), void *cookie);
extern void call_all_cpus_sync(void (*func)(void *, int), void *cookie);
extern void memory_read_barrier(void);
extern void memory_write_barrier(void);
/* safe methods to access user memory without having to lock it */
extern status_t user_memcpy(void *to, const void *from, size_t size);
+4
View File
@@ -41,6 +41,10 @@ status_t arch_cpu_user_memset(void *s, char c, size_t count,
void arch_cpu_idle(void);
void arch_cpu_sync_icache(void *address, size_t length);
void arch_cpu_memory_read_barrier(void);
void arch_cpu_memory_write_barrier(void);
#ifdef __cplusplus
}
#endif
+16
View File
@@ -110,6 +110,22 @@ arch_cpu_sync_icache(void *address, size_t len)
}
void
arch_cpu_memory_read_barrier(void)
{
asm volatile ("nop;" : : : "memory");
#warning M68k: check arch_cpu_memory_read_barrier
}
void
arch_cpu_memory_write_barrier(void)
{
asm volatile ("nop;" : : : "memory");
#warning M68k: check arch_cpu_memory_write_barrier
}
void
arch_cpu_invalidate_TLB_range(addr_t start, addr_t end)
{
+17
View File
@@ -82,6 +82,23 @@ arch_cpu_sync_icache(void *address, size_t len)
}
void
arch_cpu_memory_read_barrier(void)
{
#warning PPC: is it model-dependant ?
asm volatile ("lwsync");
}
void
arch_cpu_memory_write_barrier(void)
{
#warning PPC: is it model-dependant ?
asm volatile ("isync");
asm volatile ("eioio");
}
void
arch_cpu_invalidate_TLB_range(addr_t start, addr_t end)
{
+16
View File
@@ -713,3 +713,19 @@ arch_cpu_sync_icache(void *address, size_t length)
// instruction cache is always consistent on x86
}
void
arch_cpu_memory_read_barrier(void)
{
asm volatile ("lock;" : : : "memory");
asm volatile ("addl $0,0(%%esp);" : : : "memory");
}
void
arch_cpu_memory_write_barrier(void)
{
asm volatile ("lock;" : : : "memory");
asm volatile ("addl $0,0(%%esp);" : : : "memory");
}
+14
View File
@@ -681,3 +681,17 @@ call_all_cpus_sync(void (*func)(void *, int), void *cookie)
restore_interrupts(state);
}
void
memory_read_barrier(void)
{
arch_cpu_memory_read_barrier();
}
void
memory_write_barrier(void)
{
arch_cpu_memory_write_barrier();
}