On Thu, Jun 09, 2016 at 12:29:36PM +0100, Chris Wilson wrote: > If we quickly switch from writing through the GTT to a read of the > physical page directly with the CPU (e.g. performing relocations through > the GTT and then running the command parser), we can observe that the > writes are not visible to the CPU. It is not a coherency problem, as > extensive investigations with clflush have demonstrated, but a mere > timing issue - we have to wait for the GTT to complete it's write before > we start our read from the CPU. > > The issue can be illustrated in userspace with: > > gtt = gem_mmap__gtt(fd, handle, 0, OBJECT_SIZE, PROT_READ | PROT_WRITE); > cpu = gem_mmap__cpu(fd, handle, 0, OBJECT_SIZE, PROT_READ | PROT_WRITE); > gem_set_domain(fd, handle, I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT); > > for (i = 0; i < OBJECT_SIZE / 64; i++) { > int x = 16*i + (i%16); > gtt[x] = i; > clflush(&cpu[x], sizeof(cpu[x])); > assert(cpu[x] == i); > } > > Experimenting with that shows that this behaviour is indeed limited to > recent Atom-class hardware. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Note this is associated with Testcase: igt/gem_exec_flush/basic-batch-default-cmd #byt I wrote the testcase based on this bug, but it may not be the only thing that causes that test to fail (since byt has a major issue with coherency). Also note that the gem_mmap_gtt/coherency and gem_mmap_wc/coherency are the userspace demonstrators (and that this only a GTT issue). -Chris -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx