i965: Mark BOs as external when we export their handle
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 18 Nov 2017 00:52:09 +0000 (16:52 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 18 Nov 2017 01:16:44 +0000 (17:16 -0800)
commit0a6a137eb27129e17298cfe9dd620205588ee4f6
tree2f3ebd7c15dada9cad49e1e15ad658e641f81345
parent344252a27f8d875572bbe65641a825af8e73845d
i965: Mark BOs as external when we export their handle

Almost all of our BO export paths were already properly marked the BO as
external and added it to the handle table.  Most export use-cases go
through a prime fd or flink where we have a brw_bo export helper that
does the right thing.  The one missing one happens when you call
queryImage and ask for __DRI_IMAGE_ATTRIB_HANDLE.  We just grabbed the
gem handle out of the BO (because it's really easy to do that) and
handed it off to the client; what could go wrong?  As it turns out, this
path is used by basically every compositor that wants to turn around and
call drmModeAddFB2 on it so it can hand it off to display.  The result,
as of 4b1e70cc57d7ff5f465544644b2180dee1490cee, is that we no longer set
MOCS_PTE on those surfaces and the kernel's attempts to disable caching
fail and we scanout gets corruption.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103759
Fixes: 4b1e70cc57d7ff5f465544644b2180dee1490cee
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: mesa-stable@lists.freedesktop.org
src/mesa/drivers/dri/i965/brw_bufmgr.c
src/mesa/drivers/dri/i965/brw_bufmgr.h
src/mesa/drivers/dri/i965/intel_screen.c