anv: Add a clfush_range helper function
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 12 Feb 2016 19:00:08 +0000 (11:00 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 12 Feb 2016 19:00:08 +0000 (11:00 -0800)
src/vulkan/anv_private.h

index 6da714ad8b269dd03299bacfaf87517f4bb4cb8d..22df64c58250d0681e7643fe1bda4e98c4bcf84c 100644 (file)
@@ -418,14 +418,11 @@ struct anv_state_stream {
 #define CACHELINE_SIZE 64
 #define CACHELINE_MASK 63
 
-static void inline
-anv_state_clflush(struct anv_state state)
+static inline void
+anv_clflush_range(void *start, size_t size)
 {
-   /* state.map may not be cacheline aligned, so round down the start pointer
-    * to a cacheline boundary so we flush all pages that contain the state.
-    */
-   void *end = state.map + state.alloc_size;
-   void *p = (void *) (((uintptr_t) state.map) & ~CACHELINE_MASK);
+   void *p = (void *) (((uintptr_t) start) & ~CACHELINE_MASK);
+   void *end = start + size;
 
    __builtin_ia32_mfence();
    while (p < end) {
@@ -434,6 +431,12 @@ anv_state_clflush(struct anv_state state)
    }
 }
 
+static void inline
+anv_state_clflush(struct anv_state state)
+{
+   anv_clflush_range(state.map, state.alloc_size);
+}
+
 void anv_block_pool_init(struct anv_block_pool *pool,
                          struct anv_device *device, uint32_t block_size);
 void anv_block_pool_finish(struct anv_block_pool *pool);