When we flag a bo as being externally modified, we set a special flag on
its request pointer. This forces us to inspect whether the bo is busy
before accessing it the next, and if it is idle, we must be careful that
we then do not dereference the special request.
Fixes regression from
commit 9115406b65
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date: Thu Oct 30 19:21:02 2014 +0000
sna: Retire all requests when a bo is found to be not busy
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
As we now override a few hooks when we mark the GPU as wedged, we also
need to preserve those overrides during initialisation. Fixes DBG_NO_HW.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
In order to reduce the number of breadcrumbs the kernel must emit to
track our batches, reuse the last query until it has retired.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
The GC struct was changed in
commit 73e2383b7350723256894c5076d0c731aec5cd1f
Author: Adam Jackson <ajax@redhat.com>
Date: Fri Jun 20 13:31:20 2014 -0400
dix: Always store GC client clip as a region (v2)
update to match.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85581
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
When computing the edge distance, we subtract on 32-bit quantity from
another. This requires 33-bits to store the full result so promote the
subtraction to 64-bits (rather than the result of that subtraction as
done currently).
Reported-by: Jiri Slaby <jirislaby@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=70461#c76
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
As well as actually updating the value in the batch for the relocation
address, we need to tell the kernel in case it has to update the
address.
Another regression from
commit b4872f74c0
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date: Tue Oct 21 10:38:22 2014 +0100
sna: Avoid pwriting large batches
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85389
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
sna_accel.c: In function 'sna_pixmap_undo_cow':
sna_accel.c:1933:11: warning: 'create' may be used uninitialized in this function [-Wuninitialized]
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
With the unified register file (from gen6+), we no longer need to copy
the sample results into the final write message.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
GT3 requires some reserved space in the URB allocation and so we must
reduce the amount we allocate to our vertices.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=81583
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Fixes regression from
commit b4872f74c0
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date: Tue Oct 21 10:38:22 2014 +0100
sna: Avoid pwriting large batches
NB: Remember to check your tree before pushing a simple bug fix.
Signed-off-by: root <root@huronriver.alporthouse.com>
When using the fake triple buffer implementation with recent enough Xorg
to support both real triple buffering and PRIME, we have to disable use
of SwapLimit as that freezes the client when we are instead faking the
triple buffer. (We have to use the fake support on those Xservers to
workaround crashes inside the Xserver.)
Reported-by: Paulo Dias <paulo.miguel.dias@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85144#c12
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Clemens Eisserer noticed that glyphs would randomly disapper whilst
being rendered on his Sandybridge, a sign that the GPU is not flushing
its internal state on pipeline changes. As a precaution, adopt the
Ivybridge flush semantics (whilst preserving the required Sandybridge
workarounds).
Reported-and-tested-by: Clemens Eisserer <linuxhippy@gmail.com>
Reported-and-tested-by: Ilia Mirkin <imirkin@alum.mit.edu>
References: https://bugs.freedesktop.org/show_bug.cgi?id=85158
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
When swapping over the names, we also need to swap the pitches exposed
through the protocol as well.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Even if we cannot render using the GPU, we should still be able to
request that the outputs be flipped. So try, and only if that fails,
resort to writing directly into the scanout.
References: https://bugs.freedesktop.org/show_bug.cgi?id=85058
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
If we fail to flip onto a new per-CRTC bo, first try a normal modeset.
This catches instances where the pitch changes for example.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
If we find the GPU is wedged, replace some of the lowlevel render
operations with CPU equivalents to simplify some fallbacks that still
need to operate on GPU bo (such as copying DRI buffers).
References: https://bugs.freedesktop.org/show_bug.cgi?id=85058
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
If we fail an execbuffer, we disable outputs and try again. (In case we
have severe fragmentation issues and need to rearrange the scanouts in
GTT.) Afterwards we re-enable the outputs, but this causes us to flush
the pending rendering and so recurse into the execbuffer. Prevent this
with a slight hack during enabling of outputs.
References: https://bugs.freedesktop.org/show_bug.cgi?id=85058
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
As libudev only pulls off events one by one and we may need to process
several for a MST topology change, keep polling until complete.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Jan spotted that we open the bl_power file using O_RDONLY and then attempt
to write the new power state into it. This fails...
Reported-by: Jan Steffens
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Beware the barbarians at the gate, who invade and steal your ScrnInfoPtr
and its Entity from underneath you. In some configurations, we lose
access to the struct intel_device stored on the Entity after
initialisation, causing havoc. Workaround this by storing the
intel_device that we open in our driverPrivate.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
From the last commit c481254c17,
we need to pass along the private pointer as the flip data as we no
longer pass it down from the caller.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
When using ZaphodHeads, we share the /dev/dri/card0 fd between both
screens. So when we read an event back from the fd, it could be for
either head and we cannot assume that our private pointer is valid for
the data passed along with the event. Instead, we need to retreive that
pointer from the event.
Fixes regression from
commit 8369166349 [2.99.912]
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date: Wed Jun 4 08:29:51 2014 +0100
sna/dri2: Enable immediate buffer exchanges
although the design bug is actually older.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84744#c15
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
If the ddx is configured without udev support, we do not receive
notifications when the MST topology is changed. This leads us to query
the kernel for bad connectors, and so we end up reporting an unknown
connection status for them, which the user and client often find
confusing. However, we can not simply act upon the detection failure as
we are too deep inside the callback chain and cannot change the arrays of
known connectors whilst iterating over them. A neat compromise is to
hook into the rrGetInfo call chain and poll for MST changes before we
report back the current configuration.
References: https://bugs.freedesktop.org/show_bug.cgi?id=84718
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
The variable changed meaning, but the assert did not. Fix that up.
Reported-by: Matti Hämäläinen <ccr@tnsp.org>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
If we attempt to share an unused Pixmap, we first create an ordinary GPU
bo when migrating onto the GPU. Add a flag here to cause the migration
to create a Pixmap suitable for PRIME instead.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
We need to sample at the mid-point of each subrow rather than at the
top and preserve the full precision of the edge gradients.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
If we are using a CRTC source pixmap, it is possible that it is on the
CPU with a GPU bo and so requires flushing prior to the copy.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Odd as it may seem, but we can end up attempting to copy from a source
CRTC pixmap that is not on the GPU. Here we need to use the heavyweight
path to handle its composition normally.
Reported-by: Christoph Haag <haagch@frickel.club>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84653
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
In a couple of cases we can re-enable CRTC. After doing so we should
recompute the minimum vblank interval.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
If the Xorg does not support the ReuseNotify callback, and we use
double-bufferred pageflips, we set the stale flag on the backbuffer but
never clear it. This results in, for example, a compositor with Xorg-1.15
and Prime active from updating the framebuffer.
Reported-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>