mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
anv: Pull all clflushing into a clflush_range helper
All this cache line address calculation stuff is tricky. Let's not duplicate it more places than we have to. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
16b187c8bb
commit
f408971deb
2 changed files with 13 additions and 20 deletions
|
|
@ -1486,18 +1486,11 @@ clflush_mapped_ranges(struct anv_device *device,
|
|||
{
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
ANV_FROM_HANDLE(anv_device_memory, mem, ranges[i].memory);
|
||||
void *p = mem->map + (ranges[i].offset & ~CACHELINE_MASK);
|
||||
void *end;
|
||||
if (ranges[i].offset >= mem->map_size)
|
||||
continue;
|
||||
|
||||
if (ranges[i].offset + ranges[i].size > mem->map_size)
|
||||
end = mem->map + mem->map_size;
|
||||
else
|
||||
end = mem->map + ranges[i].offset + ranges[i].size;
|
||||
|
||||
while (p < end) {
|
||||
__builtin_ia32_clflush(p);
|
||||
p += CACHELINE_SIZE;
|
||||
}
|
||||
anv_clflush_range(mem->map + ranges[i].offset,
|
||||
MIN2(ranges[i].size, mem->map_size - ranges[i].offset));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -436,28 +436,28 @@ struct anv_state_stream {
|
|||
#define CACHELINE_MASK 63
|
||||
|
||||
static inline void
|
||||
anv_flush_range(void *start, size_t size)
|
||||
anv_clflush_range(void *start, size_t size)
|
||||
{
|
||||
void *p = (void *) (((uintptr_t) start) & ~CACHELINE_MASK);
|
||||
void *end = start + size;
|
||||
|
||||
__builtin_ia32_mfence();
|
||||
while (p < end) {
|
||||
__builtin_ia32_clflush(p);
|
||||
p += CACHELINE_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
anv_flush_range(void *start, size_t size)
|
||||
{
|
||||
__builtin_ia32_mfence();
|
||||
anv_clflush_range(start, size);
|
||||
}
|
||||
|
||||
static inline void
|
||||
anv_invalidate_range(void *start, size_t size)
|
||||
{
|
||||
void *p = (void *) (((uintptr_t) start) & ~CACHELINE_MASK);
|
||||
void *end = start + size;
|
||||
|
||||
while (p < end) {
|
||||
__builtin_ia32_clflush(p);
|
||||
p += CACHELINE_SIZE;
|
||||
}
|
||||
anv_clflush_range(start, size);
|
||||
__builtin_ia32_mfence();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue