Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/external/bsd/drm2/dist/drm/nouveau Convert nouveau clk t...
details: https://anonhg.NetBSD.org/src/rev/d062bba256b9
branches: trunk
changeset: 992760:d062bba256b9
user: riastradh <riastradh%NetBSD.org@localhost>
date: Mon Aug 27 07:43:06 2018 +0000
description:
Convert nouveau clk to condition variables.
Not totally sure that the activity in nvkm_pstate_work that must
happen atomically with wakeup is kosher under a spin lock, but we'll
see.
diffstat:
sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/subdev/clk.h | 7 +-
sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/clk/nouveau_nvkm_subdev_clk_base.c | 37 ++++++++-
2 files changed, 39 insertions(+), 5 deletions(-)
diffs (112 lines):
diff -r bad8f6303794 -r d062bba256b9 sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/subdev/clk.h
--- a/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/subdev/clk.h Mon Aug 27 07:42:55 2018 +0000
+++ b/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/subdev/clk.h Mon Aug 27 07:43:06 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: clk.h,v 1.2 2018/08/27 04:58:30 riastradh Exp $ */
+/* $NetBSD: clk.h,v 1.3 2018/08/27 07:43:06 riastradh Exp $ */
#ifndef __NVKM_CLK_H__
#define __NVKM_CLK_H__
@@ -83,7 +83,12 @@
int state_nr;
struct work_struct work;
+#ifdef __NetBSD__
+ drm_waitqueue_t wait;
+ spinlock_t lock;
+#else
wait_queue_head_t wait;
+#endif
atomic_t waiting;
struct nvkm_notify pwrsrc_ntfy;
diff -r bad8f6303794 -r d062bba256b9 sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/clk/nouveau_nvkm_subdev_clk_base.c
--- a/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/clk/nouveau_nvkm_subdev_clk_base.c Mon Aug 27 07:42:55 2018 +0000
+++ b/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/clk/nouveau_nvkm_subdev_clk_base.c Mon Aug 27 07:43:06 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: nouveau_nvkm_subdev_clk_base.c,v 1.2 2018/08/27 04:58:33 riastradh Exp $ */
+/* $NetBSD: nouveau_nvkm_subdev_clk_base.c,v 1.3 2018/08/27 07:43:06 riastradh Exp $ */
/*
* Copyright 2013 Red Hat Inc.
@@ -24,7 +24,7 @@
* Authors: Ben Skeggs
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_clk_base.c,v 1.2 2018/08/27 04:58:33 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_clk_base.c,v 1.3 2018/08/27 07:43:06 riastradh Exp $");
#include "priv.h"
@@ -212,8 +212,12 @@
struct nvkm_subdev *subdev = &clk->subdev;
int pstate;
- if (!atomic_xchg(&clk->waiting, 0))
+ spin_lock(&clk->lock);
+ if (!atomic_xchg(&clk->waiting, 0)) {
+ spin_unlock(&clk->lock);
return;
+ }
+
clk->pwrsrc = power_supply_is_system_supplied();
nvkm_trace(subdev, "P %d PWR %d U(AC) %d U(DC) %d A %d T %d D %d\n",
@@ -238,7 +242,12 @@
}
}
+#ifdef __NetBSD__
+ DRM_SPIN_WAKEUP_ALL(&clk->wait, &clk->lock);
+#else
wake_up_all(&clk->wait);
+#endif
+ spin_unlock(&clk->lock);
nvkm_notify_get(&clk->pwrsrc_ntfy);
}
@@ -247,8 +256,18 @@
{
atomic_set(&clk->waiting, 1);
schedule_work(&clk->work);
- if (wait)
+ if (wait) {
+#ifdef __NetBSD__
+ int ret;
+ spin_lock(&clk->lock);
+ DRM_SPIN_WAIT_NOINTR_UNTIL(ret, &clk->wait, &clk->lock,
+ !atomic_read(&clk->waiting));
+ spin_unlock(&clk->lock);
+ KASSERT(ret == 0);
+#else
wait_event(clk->wait, !atomic_read(&clk->waiting));
+#endif
+ }
return 0;
}
@@ -546,6 +565,11 @@
nvkm_pstate_del(pstate);
}
+#ifdef __NetBSD__
+ DRM_DESTROY_WAITQUEUE(&clk->wait);
+ spin_lock_destroy(&clk->lock);
+#endif
+
return clk;
}
@@ -572,7 +596,12 @@
clk->allow_reclock = allow_reclock;
INIT_WORK(&clk->work, nvkm_pstate_work);
+#ifdef __NetBSD__
+ spin_lock_init(&clk->lock);
+ DRM_INIT_WAITQUEUE(&clk->wait, "nvclk");
+#else
init_waitqueue_head(&clk->wait);
+#endif
atomic_set(&clk->waiting, 0);
/* If no pstates are provided, try and fetch them from the BIOS */
Home |
Main Index |
Thread Index |
Old Index