|
@@ -116,22 +116,28 @@ static inline void __finv_buffer(void *buffer, size_t size)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-/* Invalidate a VA range, then memory fence. */
|
|
|
|
|
|
+/* Invalidate a VA range and wait for it to be complete. */
|
|
static inline void inv_buffer(void *buffer, size_t size)
|
|
static inline void inv_buffer(void *buffer, size_t size)
|
|
{
|
|
{
|
|
__inv_buffer(buffer, size);
|
|
__inv_buffer(buffer, size);
|
|
- mb_incoherent();
|
|
|
|
|
|
+ mb();
|
|
}
|
|
}
|
|
|
|
|
|
-/* Flush a VA range, then memory fence. */
|
|
|
|
-static inline void flush_buffer(void *buffer, size_t size)
|
|
|
|
|
|
+/*
|
|
|
|
+ * Flush a locally-homecached VA range and wait for the evicted
|
|
|
|
+ * cachelines to hit memory.
|
|
|
|
+ */
|
|
|
|
+static inline void flush_buffer_local(void *buffer, size_t size)
|
|
{
|
|
{
|
|
__flush_buffer(buffer, size);
|
|
__flush_buffer(buffer, size);
|
|
mb_incoherent();
|
|
mb_incoherent();
|
|
}
|
|
}
|
|
|
|
|
|
-/* Flush & invalidate a VA range, then memory fence. */
|
|
|
|
-static inline void finv_buffer(void *buffer, size_t size)
|
|
|
|
|
|
+/*
|
|
|
|
+ * Flush and invalidate a locally-homecached VA range and wait for the
|
|
|
|
+ * evicted cachelines to hit memory.
|
|
|
|
+ */
|
|
|
|
+static inline void finv_buffer_local(void *buffer, size_t size)
|
|
{
|
|
{
|
|
__finv_buffer(buffer, size);
|
|
__finv_buffer(buffer, size);
|
|
mb_incoherent();
|
|
mb_incoherent();
|