gpu: nvgpu: Fix invalid GPFIFO entries
authorAlex Waterman <alexw@nvidia.com>
Wed, 3 Jun 2015 20:41:04 +0000 (13:41 -0700)
committerTerje Bergstrom <tbergstrom@nvidia.com>
Thu, 4 Jun 2015 17:41:44 +0000 (10:41 -0700)
commit4cc4f1c594d2952a6b417243da6467296822d340
tree9c512fa7acf5870cbc2513a9c67d7823f76e5636
parent58a38311a166d128f78c5b2916b699c2a0236753
gpu: nvgpu: Fix invalid GPFIFO entries

With the addition of the buddy allocator often times push buffers are
allocated by the kernel in high GVA memory regions. These addresses,
when written into a GPFIFO entry, have bits set in entry1 of the GPFIFO
command.

As a result, if no length is set, then these address bits will be
interpreted as opcodes by the GPU. The bug fixed by this patch was
caused by a wait_cmd being inserted into the GPFIFO with an address
of a pushbuffer above 4GB and a zero length. This occured becasue
the code that creates the wait_cmd was able to return what appeared
to be a valid priv_cmd_entry even though there was nothing in that
command.

This bug does not appear before the buddy allocator because the FFF
allocator always starts allocating from low addresses. As such when a
channel's GPFIFO is allocated it gets an address below 32bits. The,
because no higher address bits are set, entry1 of the GPFIFO is simply
0 and the GPU trets the command as a no-op.

Change-Id: I9c1e600c368b55626e99f6f712f1821148bbb76d
Signed-off-by: Alex Waterman <alexw@nvidia.com>
Reviewed-on: http://git-master/r/752079
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c