Module Name:    src
Committed By:   riastradh
Date:           Mon Aug 27 07:43:38 UTC 2018

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp:
            nouveau_nvkm_engine_disp_dport.c nouveau_nvkm_engine_disp_outpdp.c
            outpdp.h

Log Message:
Convert nouveau dp output train waitqueue.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dport.c
 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_outpdp.c
 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/outpdp.h

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/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dport.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dport.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dport.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dport.c:1.2	Mon Aug 27 04:58:31 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dport.c	Mon Aug 27 07:43:38 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_engine_disp_dport.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_engine_disp_dport.c,v 1.3 2018/08/27 07:43:38 riastradh Exp $	*/
 
 /*
  * Copyright 2013 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_dport.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_dport.c,v 1.3 2018/08/27 07:43:38 riastradh Exp $");
 
 #include "dport.h"
 #include "outpdp.h"
@@ -407,7 +407,14 @@ nvkm_dp_train(struct work_struct *w)
 
 	/* signal completion and enable link interrupt handling */
 	OUTP_DBG(&outp->base, "training complete");
+#ifdef __NetBSD__
+	spin_lock(&outp->lt.lock);
+	atomic_set(&outp->lt.done, 1);
+	DRM_SPIN_WAKEUP_ONE(&outp->lt.wait, &outp->lt.lock);
+	spin_unlock(&outp->lt.lock);
+#else
 	atomic_set(&outp->lt.done, 1);
 	wake_up(&outp->lt.wait);
+#endif
 	nvkm_notify_get(&outp->irq);
 }
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_outpdp.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_outpdp.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_outpdp.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_outpdp.c:1.2	Mon Aug 27 04:58:31 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_outpdp.c	Mon Aug 27 07:43:38 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_engine_disp_outpdp.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_engine_disp_outpdp.c,v 1.3 2018/08/27 07:43:38 riastradh Exp $	*/
 
 /*
  * Copyright 2014 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_outpdp.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_outpdp.c,v 1.3 2018/08/27 07:43:38 riastradh Exp $");
 
 #include "outpdp.h"
 #include "conn.h"
@@ -100,10 +100,22 @@ done:
 	}
 
 	if (wait) {
+#ifdef __NetBSD__
+		spin_lock(&outp->lt.lock);
+		DRM_SPIN_TIMED_WAIT_UNTIL(ret, &outp->lt.wait, &outp->lt.lock,
+		    msecs_to_jiffies(2000),
+		    atomic_read(&outp->lt.done));
+		spin_unlock(&outp->lt.lock);
+		if (ret == 0)	/* timeout */
+			ret = -ETIMEDOUT;
+		else if (ret > 0) /* success */
+			ret = 0;
+#else
 		if (!wait_event_timeout(outp->lt.wait,
 					atomic_read(&outp->lt.done),
 					msecs_to_jiffies(2000)))
 			ret = -ETIMEDOUT;
+#endif
 	}
 
 	return ret;
@@ -201,6 +213,10 @@ nvkm_output_dp_dtor(struct nvkm_output *
 	struct nvkm_output_dp *outp = nvkm_output_dp(base);
 	nvkm_notify_fini(&outp->hpd);
 	nvkm_notify_fini(&outp->irq);
+#ifndef __NetBSD__
+	spin_lock_destroy(&outp->lt.lock);
+	DRM_DESTROY_WAITQUEUE(&outp->lt.wait);
+#endif
 	return outp;
 }
 
@@ -245,7 +261,12 @@ nvkm_output_dp_ctor(const struct nvkm_ou
 
 	/* link training */
 	INIT_WORK(&outp->lt.work, nvkm_dp_train);
+#ifdef __NetBSD__
+	DRM_INIT_WAITQUEUE(&outp->lt.wait, "nvoutpdp");
+	spin_lock_init(&outp->lt.lock);
+#else
 	init_waitqueue_head(&outp->lt.wait);
+#endif
 	atomic_set(&outp->lt.done, 0);
 
 	/* link maintenance */
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/outpdp.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/outpdp.h:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/outpdp.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/outpdp.h:1.2	Mon Aug 27 04:58:31 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/outpdp.h	Mon Aug 27 07:43:38 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: outpdp.h,v 1.2 2018/08/27 04:58:31 riastradh Exp $	*/
+/*	$NetBSD: outpdp.h,v 1.3 2018/08/27 07:43:38 riastradh Exp $	*/
 
 #ifndef __NVKM_DISP_OUTP_DP_H__
 #define __NVKM_DISP_OUTP_DP_H__
@@ -33,7 +33,12 @@ struct nvkm_output_dp {
 
 	struct {
 		struct work_struct work;
+#ifdef __NetBSD__
+		drm_waitqueue_t wait;
+		spinlock_t lock;
+#else
 		wait_queue_head_t wait;
+#endif
 		atomic_t done;
 	} lt;
 };

Reply via email to