Module Name:    src
Committed By:   riastradh
Date:           Wed Jul 24 02:31:40 UTC 2013

Modified Files:
        src/sys/external/bsd/drm2/dist/drm [riastradh-drm2]: drm_irq.c

Log Message:
Convert drm_irq.c to use the drm_wait compatibility API.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.2.5 -r1.1.1.1.2.6 \
    src/sys/external/bsd/drm2/dist/drm/drm_irq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/drm_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_irq.c:1.1.1.1.2.5 src/sys/external/bsd/drm2/dist/drm/drm_irq.c:1.1.1.1.2.6
--- src/sys/external/bsd/drm2/dist/drm/drm_irq.c:1.1.1.1.2.5	Wed Jul 24 02:31:24 2013
+++ src/sys/external/bsd/drm2/dist/drm/drm_irq.c	Wed Jul 24 02:31:40 2013
@@ -279,7 +279,11 @@ int drm_vblank_init(struct drm_device *d
 
 	/* Zero per-crtc vblank stuff */
 	for (i = 0; i < num_crtcs; i++) {
+#ifdef __NetBSD__
+		DRM_INIT_WAITQUEUE(&dev->vbl_queue[i], "drmvblkq");
+#else
 		init_waitqueue_head(&dev->vbl_queue[i]);
+#endif
 		atomic_set(&dev->_vblank_count[i], 0);
 		atomic_set(&dev->vblank_refcount[i], 0);
 	}
@@ -423,7 +427,12 @@ int drm_irq_uninstall(struct drm_device 
 	if (dev->num_crtcs) {
 		spin_lock_irqsave(&dev->vbl_lock, irqflags);
 		for (i = 0; i < dev->num_crtcs; i++) {
+#ifdef __NetBSD__
+			DRM_SPIN_WAKEUP_ONE(&dev->vbl_queue[i],
+			    &dev->vbl_lock);
+#else
 			DRM_WAKEUP(&dev->vbl_queue[i]);
+#endif
 			dev->vblank_enabled[i] = 0;
 			dev->last_vblank[i] =
 				dev->driver->get_vblank_counter(dev, i);
@@ -850,7 +859,11 @@ static void send_vblank_event(struct drm
 
 	list_add_tail(&e->base.link,
 		      &e->base.file_priv->event_list);
+#ifdef __NetBSD__
+	DRM_SPIN_WAKEUP_ONE(&e->base.file_priv->event_wait, &dev->event_lock);
+#else
 	wake_up_interruptible(&e->base.file_priv->event_wait);
+#endif
 	trace_drm_vblank_event_delivered(e->base.pid, e->pipe,
 					 e->event.sequence);
 }
@@ -1030,7 +1043,11 @@ void drm_vblank_off(struct drm_device *d
 
 	spin_lock_irqsave(&dev->vbl_lock, irqflags);
 	vblank_disable_and_save(dev, crtc);
+#ifdef __NetBSD__
+	DRM_SPIN_WAKEUP_ONE(&dev->vbl_queue[crtc], &dev->vbl_lock);
+#else
 	DRM_WAKEUP(&dev->vbl_queue[crtc]);
+#endif
 
 	/* Send any queued vblank events, lest the natives grow disquiet */
 	seq = drm_vblank_count_and_time(dev, crtc, &now);
@@ -1298,10 +1315,18 @@ int drm_wait_vblank(struct drm_device *d
 	DRM_DEBUG("waiting on vblank count %d, crtc %d\n",
 		  vblwait->request.sequence, crtc);
 	dev->last_vblank_wait[crtc] = vblwait->request.sequence;
+#ifdef __NetBSD__
+	DRM_SPIN_TIMED_WAIT_UNTIL(ret, &dev->vbl_queue[crtc], &dev->vbl_lock,
+	    (3 * DRM_HZ),
+	    (((drm_vblank_count(dev, crtc) -
+		    vblwait->request.sequence) <= (1 << 23)) ||
+		!dev->irq_enabled));
+#else
 	DRM_WAIT_ON(ret, dev->vbl_queue[crtc], 3 * DRM_HZ,
 		    (((drm_vblank_count(dev, crtc) -
 		       vblwait->request.sequence) <= (1 << 23)) ||
 		     !dev->irq_enabled));
+#endif
 
 	if (ret != -EINTR) {
 		struct timeval now;
@@ -1417,7 +1442,11 @@ bool drm_handle_vblank(struct drm_device
 			  crtc, (int) diff_ns);
 	}
 
+#ifdef __NetBSD__
+	DRM_SPIN_WAKEUP_ONE(&dev->vbl_queue[crtc], &dev->vbl_lock);
+#else
 	DRM_WAKEUP(&dev->vbl_queue[crtc]);
+#endif
 	drm_handle_vblank_events(dev, crtc);
 
 	spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);

Reply via email to