Subversion Repositories Kolibri OS

Rev

Rev 6084 | Rev 6103 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6084 Rev 6088
Line 1008... Line 1008...
1008
	struct drm_device *dev = ring->dev;
1008
	struct drm_device *dev = ring->dev;
1009
	struct drm_i915_private *dev_priv = dev->dev_private;
1009
	struct drm_i915_private *dev_priv = dev->dev_private;
1010
	const bool irq_test_in_progress =
1010
	const bool irq_test_in_progress =
1011
		ACCESS_ONCE(dev_priv->gpu_error.test_irq_rings) & intel_ring_flag(ring);
1011
		ACCESS_ONCE(dev_priv->gpu_error.test_irq_rings) & intel_ring_flag(ring);
1012
	int state = interruptible ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE;
1012
	int state = interruptible ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE;
1013
	DEFINE_WAIT(wait);
1013
	wait_queue_t wait;
1014
	unsigned long timeout_expire;
1014
	unsigned long timeout_expire;
1015
	s64 before, now;
1015
	s64 before, now;
1016
 
-
 
1017
    wait_queue_t __wait;
-
 
1018
	int ret;
1016
	int ret;
Line 1019... Line 1017...
1019
 
1017
 
Line 1020... Line 1018...
1020
	WARN(!intel_irqs_enabled(dev_priv), "IRQs disabled");
1018
	WARN(!intel_irqs_enabled(dev_priv), "IRQs disabled");
Line 1051... Line 1049...
1051
	if (!irq_test_in_progress && WARN_ON(!ring->irq_get(ring))) {
1049
	if (!irq_test_in_progress && WARN_ON(!ring->irq_get(ring))) {
1052
		ret = -ENODEV;
1050
		ret = -ENODEV;
1053
		goto out;
1051
		goto out;
1054
	}
1052
	}
Line 1055... Line 1053...
1055
 
1053
 
1056
    INIT_LIST_HEAD(&__wait.task_list);
1054
	INIT_LIST_HEAD(&wait.task_list);
1057
    __wait.evnt = CreateEvent(NULL, MANUAL_DESTROY);
-
 
Line 1058... Line 1055...
1058
 
1055
	wait.evnt = CreateEvent(NULL, MANUAL_DESTROY);
1059
 
1056
 
Line 1060... Line 1057...
1060
	for (;;) {
1057
	for (;;) {
Line 1080... Line 1077...
1080
			ret = -ETIME;
1077
			ret = -ETIME;
1081
			break;
1078
			break;
1082
		}
1079
		}
Line 1083... Line 1080...
1083
 
1080
 
1084
        spin_lock_irqsave(&ring->irq_queue.lock, flags);
1081
        spin_lock_irqsave(&ring->irq_queue.lock, flags);
1085
        if (list_empty(&__wait.task_list))
1082
        if (list_empty(&wait.task_list))
1086
            __add_wait_queue(&ring->irq_queue, &__wait);
1083
            __add_wait_queue(&ring->irq_queue, &wait);
Line 1087... Line 1084...
1087
        spin_unlock_irqrestore(&ring->irq_queue.lock, flags);
1084
        spin_unlock_irqrestore(&ring->irq_queue.lock, flags);
Line 1088... Line 1085...
1088
 
1085
 
1089
        WaitEventTimeout(__wait.evnt, 1);
1086
            WaitEventTimeout(wait.evnt, 1);
1090
 
1087
 
1091
        if (!list_empty(&__wait.task_list)) {
1088
        if (!list_empty(&wait.task_list)) {
1092
            spin_lock_irqsave(&ring->irq_queue.lock, flags);
1089
            spin_lock_irqsave(&ring->irq_queue.lock, flags);
1093
            list_del_init(&__wait.task_list);
-
 
Line 1094... Line 1090...
1094
            spin_unlock_irqrestore(&ring->irq_queue.lock, flags);
1090
            list_del_init(&wait.task_list);
Line 1095... Line 1091...
1095
        }
1091
            spin_unlock_irqrestore(&ring->irq_queue.lock, flags);
1096
    };
1092
        }
Line 1097... Line 1093...
1097
 
1093
 
-
 
1094
	};
1098
    DestroyEvent(__wait.evnt);
1095
 
1099
 
1096
	if (!irq_test_in_progress)
1100
	if (!irq_test_in_progress)
1097
		ring->irq_put(ring);
Line 1101... Line 1098...
1101
		ring->irq_put(ring);
1098