summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorKenneth R Westerback <krw@cvs.openbsd.org>2014-12-22 20:08:06 +0000
committerKenneth R Westerback <krw@cvs.openbsd.org>2014-12-22 20:08:06 +0000
commit2aeb75c0a97e4ba4b8eeb48b9e0cf45a21b6c8f1 (patch)
treed4d46baea9e6e7039a5654e20f378afc6dad13e4 /sys/dev
parentddecdefcf0820326a418a46029a662921f3ec05f (diff)
Replace switch workq with taskq, using the blambert@ method (tm).
Tested with non-drm and wsfb systems. ok kettenis@ miod@
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/rasops/rasops.c16
-rw-r--r--sys/dev/rasops/rasops.h7
2 files changed, 13 insertions, 10 deletions
diff --git a/sys/dev/rasops/rasops.c b/sys/dev/rasops/rasops.c
index f881a6540eb..6dae03cb11d 100644
--- a/sys/dev/rasops/rasops.c
+++ b/sys/dev/rasops/rasops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rasops.c,v 1.36 2014/12/19 22:44:58 guenther Exp $ */
+/* $OpenBSD: rasops.c,v 1.37 2014/12/22 20:08:05 krw Exp $ */
/* $NetBSD: rasops.c,v 1.35 2001/02/02 06:01:01 marcus Exp $ */
/*-
@@ -34,7 +34,7 @@
#include <sys/malloc.h>
#include <sys/systm.h>
#include <sys/time.h>
-#include <sys/workq.h>
+#include <sys/task.h>
#include <sys/endian.h>
#include <dev/wscons/wsdisplayvar.h>
@@ -274,6 +274,8 @@ rasops_init(struct rasops_info *ri, int wantrows, int wantcols)
ri->ri_ops.unpack_attr = rasops_vcons_unpack_attr;
}
+ task_set(&ri->ri_switchtask, rasops_doswitch, ri, NULL);
+
rasops_init_devcmap(ri);
return (0);
}
@@ -1425,23 +1427,23 @@ rasops_show_screen(void *v, void *cookie, int waitok,
{
struct rasops_info *ri = v;
+ ri->ri_switchcookie = cookie;
if (cb) {
ri->ri_switchcb = cb;
ri->ri_switchcbarg = cbarg;
- workq_queue_task(NULL, &ri->ri_switchwqt, 0,
- rasops_doswitch, v, cookie);
+ task_add(systq, &ri->ri_switchtask);
return (EAGAIN);
}
- rasops_doswitch(v, cookie);
+ rasops_doswitch(ri, NULL);
return (0);
}
void
-rasops_doswitch(void *v, void *cookie)
+rasops_doswitch(void *v, void *dummy)
{
struct rasops_info *ri = v;
- struct rasops_screen *scr = cookie;
+ struct rasops_screen *scr = ri->ri_switchcookie;
int row, col;
long attr;
diff --git a/sys/dev/rasops/rasops.h b/sys/dev/rasops/rasops.h
index bda5e40e1a3..31bbb577240 100644
--- a/sys/dev/rasops/rasops.h
+++ b/sys/dev/rasops/rasops.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: rasops.h,v 1.15 2013/10/20 21:24:00 miod Exp $ */
+/* $OpenBSD: rasops.h,v 1.16 2014/12/22 20:08:05 krw Exp $ */
/* $NetBSD: rasops.h,v 1.13 2000/06/13 13:36:54 ad Exp $ */
/*-
@@ -33,7 +33,7 @@
#ifndef _RASOPS_H_
#define _RASOPS_H_ 1
-#include <sys/workq.h>
+#include <sys/task.h>
#ifdef SMALL_KERNEL
#define RASOPS_SMALL
@@ -125,7 +125,8 @@ struct rasops_info {
void (*ri_switchcb)(void *, int, int);
void *ri_switchcbarg;
- struct workq_task ri_switchwqt;
+ void *ri_switchcookie;
+ struct task ri_switchtask;
int (*ri_putchar)(void *, int, int, u_int, long);
int (*ri_copycols)(void *, int, int, int, int);