drm/nouveau: Spin for a bit in nouveau_fence_wait() before yielding the CPU.
Sleeping doesn't pay off for very short delays in comparison with the minimum granularity of schedule_timeout(). Signed-off-by: Francisco Jerez <currojerez@riseup.net> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -218,6 +218,7 @@ int
|
|||||||
__nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr)
|
__nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr)
|
||||||
{
|
{
|
||||||
unsigned long timeout = jiffies + (3 * DRM_HZ);
|
unsigned long timeout = jiffies + (3 * DRM_HZ);
|
||||||
|
unsigned long sleep_time = jiffies + 1;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
@@ -231,7 +232,7 @@ __nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr)
|
|||||||
|
|
||||||
__set_current_state(intr ? TASK_INTERRUPTIBLE
|
__set_current_state(intr ? TASK_INTERRUPTIBLE
|
||||||
: TASK_UNINTERRUPTIBLE);
|
: TASK_UNINTERRUPTIBLE);
|
||||||
if (lazy)
|
if (lazy && time_after_eq(jiffies, sleep_time))
|
||||||
schedule_timeout(1);
|
schedule_timeout(1);
|
||||||
|
|
||||||
if (intr && signal_pending(current)) {
|
if (intr && signal_pending(current)) {
|
||||||
|
Reference in New Issue
Block a user