Make management of current->state correct (accidentally made incorrect when
authorRik Faith <faith@alephnull.com>
Tue, 19 Sep 2000 19:24:28 +0000 (19:24 +0000)
committerRik Faith <faith@alephnull.com>
Tue, 19 Sep 2000 19:24:28 +0000 (19:24 +0000)
    fixing the trispd bug).

linux/mga_dma.c

index ae1d3e1..64de17c 100644 (file)
@@ -224,13 +224,13 @@ drm_buf_t *mga_freelist_get(drm_device_t *dev)
                       dev_priv->last_prim_age);
                set_bit(MGA_IN_GETBUF, &dev_priv->dispatch_status);
                add_wait_queue(&dev_priv->buf_queue, &entry);
+               current->state = TASK_INTERRUPTIBLE;
                for (;;) {
                        mga_dma_schedule(dev, 0);
                        if(!test_bit(MGA_IN_GETBUF,
                                     &dev_priv->dispatch_status))
                                break;
                        atomic_inc(&dev->total_sleeps);
-                       current->state = TASK_INTERRUPTIBLE;
                        schedule();
                        if (signal_pending(current)) {
                                ++return_null;
@@ -239,6 +239,7 @@ drm_buf_t *mga_freelist_get(drm_device_t *dev)
                                break;
                        }
                }
+               current->state = TASK_RUNNING;
                remove_wait_queue(&dev_priv->buf_queue, &entry);
                if (return_null) return NULL;
        }