Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/evbarm/n900 Using a sysmon taskqueue to report even...



details:   https://anonhg.NetBSD.org/src/rev/fe3344f167df
branches:  trunk
changeset: 787112:fe3344f167df
user:      khorben <khorben%NetBSD.org@localhost>
date:      Mon Jun 03 01:47:58 2013 +0000

description:
Using a sysmon taskqueue to report events; fixes crashes when booting
multi-user while calling sysmon_pswitch_event().

Imported from the khorben-n900 branch

diffstat:

 sys/arch/evbarm/n900/n900_acad.c   |  16 ++++++++++------
 sys/arch/evbarm/n900/n900_audjck.c |  16 ++++++++++------
 sys/arch/evbarm/n900/n900_cambtn.c |  21 +++++++++++++++++----
 sys/arch/evbarm/n900/n900_camcvr.c |  16 ++++++++++------
 sys/arch/evbarm/n900/n900_kbdsld.c |  16 ++++++++++------
 sys/arch/evbarm/n900/n900_lckbtn.c |  16 ++++++++++------
 sys/arch/evbarm/n900/n900_prxmty.c |  16 ++++++++++------
 7 files changed, 77 insertions(+), 40 deletions(-)

diffs (truncated from 500 to 300 lines):

diff -r 95c08668a7eb -r fe3344f167df sys/arch/evbarm/n900/n900_acad.c
--- a/sys/arch/evbarm/n900/n900_acad.c  Mon Jun 03 01:31:37 2013 +0000
+++ b/sys/arch/evbarm/n900/n900_acad.c  Mon Jun 03 01:47:58 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: n900_acad.c,v 1.5 2013/04/20 03:37:55 khorben Exp $ */
+/*     $NetBSD: n900_acad.c,v 1.6 2013/06/03 01:47:58 khorben Exp $ */
 
 /*
  * AC adapter driver for the Nokia N900.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: n900_acad.c,v 1.5 2013/04/20 03:37:55 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: n900_acad.c,v 1.6 2013/06/03 01:47:58 khorben Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -41,6 +41,7 @@
 
 #include <dev/gpio/gpiovar.h>
 #include <dev/sysmon/sysmonvar.h>
+#include <dev/sysmon/sysmon_taskq.h>
 
 #include <arm/omap/omap2_gpio.h>
 
@@ -73,9 +74,9 @@
 CFATTACH_DECL_NEW(n900acad, sizeof(struct n900acad_softc),
        n900acad_match, n900acad_attach, n900acad_detach, NULL);
 
-static void    n900acad_refresh(struct n900acad_softc *);
+static void    n900acad_refresh(void *);
 
-static int     n900acad_intr(void *v);
+static int     n900acad_intr(void *);
 
 
 static int
@@ -143,6 +144,7 @@
                    "couldn't establish power handler\n");
        }
 
+       sysmon_task_queue_init();
        sc->sc_smpsw.smpsw_name = device_xname(self);
        sc->sc_smpsw.smpsw_type = PSWITCH_TYPE_ACADAPTER;
        sysmon_pswitch_register(&sc->sc_smpsw);
@@ -161,6 +163,7 @@
 
        gpio_pin_unmap(sc->sc_gpio, &sc->sc_map);
        pmf_device_deregister(self);
+       sysmon_task_queue_fini();
 
        return 0;
 }
@@ -170,13 +173,14 @@
 {
        struct n900acad_softc *sc = v;
 
-       n900acad_refresh(sc);
+       sysmon_task_queue_sched(0, n900acad_refresh, sc);
        return 1;
 }
 
 static void
-n900acad_refresh(struct n900acad_softc *sc)
+n900acad_refresh(void *v)
 {
+       struct n900acad_softc *sc = v;
        int i;
        int event;
 
diff -r 95c08668a7eb -r fe3344f167df sys/arch/evbarm/n900/n900_audjck.c
--- a/sys/arch/evbarm/n900/n900_audjck.c        Mon Jun 03 01:31:37 2013 +0000
+++ b/sys/arch/evbarm/n900/n900_audjck.c        Mon Jun 03 01:47:58 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: n900_audjck.c,v 1.1 2013/05/06 22:56:54 khorben Exp $ */
+/*     $NetBSD: n900_audjck.c,v 1.2 2013/06/03 01:47:58 khorben Exp $ */
 
 /*
  * Audio jack driver for the Nokia N900.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: n900_audjck.c,v 1.1 2013/05/06 22:56:54 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: n900_audjck.c,v 1.2 2013/06/03 01:47:58 khorben Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -41,6 +41,7 @@
 
 #include <dev/gpio/gpiovar.h>
 #include <dev/sysmon/sysmonvar.h>
+#include <dev/sysmon/sysmon_taskq.h>
 
 #include <arm/omap/omap2_gpio.h>
 
@@ -74,9 +75,9 @@
 CFATTACH_DECL_NEW(n900audjck, sizeof(struct n900audjck_softc),
        n900audjck_match, n900audjck_attach, n900audjck_detach, NULL);
 
-static void    n900audjck_refresh(struct n900audjck_softc *);
+static void    n900audjck_refresh(void *);
 
-static int     n900audjck_intr(void *v);
+static int     n900audjck_intr(void *);
 
 
 static int
@@ -144,6 +145,7 @@
                    "couldn't establish power handler\n");
        }
 
+       sysmon_task_queue_init();
        sc->sc_smpsw.smpsw_name = device_xname(self);
        sc->sc_smpsw.smpsw_type = PSWITCH_TYPE_HOTKEY;
        sc->sc_state = PSWITCH_EVENT_RELEASED;
@@ -164,6 +166,7 @@
 
        gpio_pin_unmap(sc->sc_gpio, &sc->sc_map);
        pmf_device_deregister(self);
+       sysmon_task_queue_fini();
 
        return 0;
 }
@@ -173,13 +176,14 @@
 {
        struct n900audjck_softc *sc = v;
 
-       n900audjck_refresh(sc);
+       sysmon_task_queue_sched(0, n900audjck_refresh, sc);
        return 1;
 }
 
 static void
-n900audjck_refresh(struct n900audjck_softc *sc)
+n900audjck_refresh(void *v)
 {
+       struct n900audjck_softc *sc = v;
        int i;
        int event;
 
diff -r 95c08668a7eb -r fe3344f167df sys/arch/evbarm/n900/n900_cambtn.c
--- a/sys/arch/evbarm/n900/n900_cambtn.c        Mon Jun 03 01:31:37 2013 +0000
+++ b/sys/arch/evbarm/n900/n900_cambtn.c        Mon Jun 03 01:47:58 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: n900_cambtn.c,v 1.1 2013/04/20 03:37:55 khorben Exp $ */
+/*     $NetBSD: n900_cambtn.c,v 1.2 2013/06/03 01:47:58 khorben Exp $ */
 
 /*
  * Camera button driver for the Nokia N900.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: n900_cambtn.c,v 1.1 2013/04/20 03:37:55 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: n900_cambtn.c,v 1.2 2013/06/03 01:47:58 khorben Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -42,6 +42,7 @@
 
 #include <dev/gpio/gpiovar.h>
 #include <dev/sysmon/sysmonvar.h>
+#include <dev/sysmon/sysmon_taskq.h>
 
 #include <arm/omap/omap2_gpio.h>
 
@@ -76,9 +77,10 @@
 CFATTACH_DECL_NEW(n900cambtn, sizeof(struct n900cambtn_softc),
        n900cambtn_match, n900cambtn_attach, n900cambtn_detach, NULL);
 
+static void    n900cambtn_refresh(void *);
 static void    n900cambtn_refresh_pin(struct n900cambtn_softc *, int);
 
-static int     n900cambtn_intr(void *v);
+static int     n900cambtn_intr(void *);
 
 
 static int
@@ -163,6 +165,8 @@
                    "couldn't establish power handler\n");
        }
 
+       sysmon_task_queue_init();
+
        /* focus button */
        sc->sc_smpsw[0].smpsw_name = kmem_asprintf("%s%s", device_xname(self),
                        "focus");
@@ -193,6 +197,7 @@
 
        gpio_pin_unmap(sc->sc_gpio, &sc->sc_map);
        pmf_device_deregister(self);
+       sysmon_task_queue_fini();
 
        return 0;
 }
@@ -202,9 +207,17 @@
 {
        struct n900cambtn_softc *sc = v;
 
+       sysmon_task_queue_sched(0, n900cambtn_refresh, sc);
+       return 1;
+}
+
+static void
+n900cambtn_refresh(void *v)
+{
+       struct n900cambtn_softc *sc = v;
+
        n900cambtn_refresh_pin(sc, N900CAMBTN_PIN_CAPTURE);
        n900cambtn_refresh_pin(sc, N900CAMBTN_PIN_FOCUS);
-       return 1;
 }
 
 static void
diff -r 95c08668a7eb -r fe3344f167df sys/arch/evbarm/n900/n900_camcvr.c
--- a/sys/arch/evbarm/n900/n900_camcvr.c        Mon Jun 03 01:31:37 2013 +0000
+++ b/sys/arch/evbarm/n900/n900_camcvr.c        Mon Jun 03 01:47:58 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: n900_camcvr.c,v 1.1 2013/04/20 03:37:55 khorben Exp $ */
+/*     $NetBSD: n900_camcvr.c,v 1.2 2013/06/03 01:47:58 khorben Exp $ */
 
 /*
  * Camera cover driver for the Nokia N900.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: n900_camcvr.c,v 1.1 2013/04/20 03:37:55 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: n900_camcvr.c,v 1.2 2013/06/03 01:47:58 khorben Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -41,6 +41,7 @@
 
 #include <dev/gpio/gpiovar.h>
 #include <dev/sysmon/sysmonvar.h>
+#include <dev/sysmon/sysmon_taskq.h>
 
 #include <arm/omap/omap2_gpio.h>
 
@@ -73,9 +74,9 @@
 CFATTACH_DECL_NEW(n900camcvr, sizeof(struct n900camcvr_softc),
        n900camcvr_match, n900camcvr_attach, n900camcvr_detach, NULL);
 
-static void    n900camcvr_refresh(struct n900camcvr_softc *);
+static void    n900camcvr_refresh(void *);
 
-static int     n900camcvr_intr(void *v);
+static int     n900camcvr_intr(void *);
 
 
 static int
@@ -143,6 +144,7 @@
                    "couldn't establish power handler\n");
        }
 
+       sysmon_task_queue_init();
        sc->sc_smpsw.smpsw_name = device_xname(self);
        sc->sc_smpsw.smpsw_type = PSWITCH_TYPE_HOTKEY;
        sysmon_pswitch_register(&sc->sc_smpsw);
@@ -162,6 +164,7 @@
 
        gpio_pin_unmap(sc->sc_gpio, &sc->sc_map);
        pmf_device_deregister(self);
+       sysmon_task_queue_fini();
 
        return 0;
 }
@@ -171,13 +174,14 @@
 {
        struct n900camcvr_softc *sc = v;
 
-       n900camcvr_refresh(sc);
+       sysmon_task_queue_sched(0, n900camcvr_refresh, sc);
        return 1;
 }
 
 static void
-n900camcvr_refresh(struct n900camcvr_softc *sc)
+n900camcvr_refresh(void *v)
 {
+       struct n900camcvr_softc *sc = v;
        int i;
        int event;
 
diff -r 95c08668a7eb -r fe3344f167df sys/arch/evbarm/n900/n900_kbdsld.c
--- a/sys/arch/evbarm/n900/n900_kbdsld.c        Mon Jun 03 01:31:37 2013 +0000
+++ b/sys/arch/evbarm/n900/n900_kbdsld.c        Mon Jun 03 01:47:58 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: n900_kbdsld.c,v 1.1 2013/04/20 03:37:55 khorben Exp $ */
+/*     $NetBSD: n900_kbdsld.c,v 1.2 2013/06/03 01:47:58 khorben Exp $ */
 
 /*
  * Keypad slide driver for the Nokia N900.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>



Home | Main Index | Thread Index | Old Index