From owner-p4-projects@FreeBSD.ORG Mon Sep 3 23:24:20 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 81B7516A41A; Mon, 3 Sep 2007 23:24:20 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 48A6D16A418 for ; Mon, 3 Sep 2007 23:24:20 +0000 (UTC) (envelope-from cnst@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 3E09313C494 for ; Mon, 3 Sep 2007 23:24:20 +0000 (UTC) (envelope-from cnst@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l83NOKa4047503 for ; Mon, 3 Sep 2007 23:24:20 GMT (envelope-from cnst@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l83NOKYB047500 for perforce@freebsd.org; Mon, 3 Sep 2007 23:24:20 GMT (envelope-from cnst@FreeBSD.org) Date: Mon, 3 Sep 2007 23:24:20 GMT Message-Id: <200709032324.l83NOKYB047500@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to cnst@FreeBSD.org using -f From: "Constantine A. Murenin" To: Perforce Change Reviews Cc: Subject: PERFORCE change 126025 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Sep 2007 23:24:20 -0000 http://perforce.freebsd.org/chv.cgi?CH=126025 Change 126025 by cnst@dale on 2007/09/03 23:23:34 remove noops and put the Giant lock instead. The Giant lock is used by the sysctl logic with every sysctl call, so its use in these attach/detach sensor device driver functions is similar (if not better) in nature to the spl usage on OpenBSD. thanks to rwarson and astrodog for some Giant chat on irc :) (although we had a general discussion not specifically related to this code, so reasonable comments are welcome :) Affected files ... .. //depot/projects/soc2007/cnst-sensors/sys.kern/kern_sensors.c#9 edit Differences ... ==== //depot/projects/soc2007/cnst-sensors/sys.kern/kern_sensors.c#9 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $P4: //depot/projects/soc2007/cnst-sensors/sys.kern/kern_sensors.c#8 $ */ +/* $P4: //depot/projects/soc2007/cnst-sensors/sys.kern/kern_sensors.c#9 $ */ /* $FreeBSD$ */ /* $OpenBSD: kern_sensors.c,v 1.19 2007/06/04 18:42:05 deraadt Exp $ */ /* $OpenBSD: kern_sysctl.c,v 1.154 2007/06/01 17:29:10 beck Exp $ */ @@ -31,6 +31,8 @@ #include #include #include +#include +#include #include #include @@ -60,9 +62,8 @@ sensordev_install(struct ksensordev *sensdev) { struct ksensordev *v, *nv; - int s; - s = splhigh(); + mtx_lock(&Giant); if (sensordev_count == 0) { sensdev->num = 0; SLIST_INSERT_HEAD(&sensordev_list, sensdev, list); @@ -75,7 +76,7 @@ SLIST_INSERT_AFTER(v, sensdev, list); } sensordev_count++; - splx(s); + mtx_unlock(&Giant); } void @@ -83,9 +84,9 @@ { struct ksensor *v, *nv; struct ksensors_head *sh; - int s, i; + int i; - s = splhigh(); + mtx_lock(&Giant); sh = &sensdev->sensors_list; if (sensdev->sensors_count == 0) { for (i = 0; i < SENSOR_MAX_TYPES; i++) @@ -111,27 +112,24 @@ if (sensdev->maxnumt[sens->type] == sens->numt) sensdev->maxnumt[sens->type]++; sensdev->sensors_count++; - splx(s); + mtx_unlock(&Giant); } void sensordev_deinstall(struct ksensordev *sensdev) { - int s; - - s = splhigh(); + mtx_lock(&Giant); sensordev_count--; SLIST_REMOVE(&sensordev_list, sensdev, ksensordev, list); - splx(s); + mtx_unlock(&Giant); } void sensor_detach(struct ksensordev *sensdev, struct ksensor *sens) { struct ksensors_head *sh; - int s; - s = splhigh(); + mtx_lock(&Giant); sh = &sensdev->sensors_list; sensdev->sensors_count--; SLIST_REMOVE(sh, sens, ksensor, list); @@ -140,7 +138,7 @@ */ if (sens->numt == sensdev->maxnumt[sens->type] - 1) sensdev->maxnumt[sens->type]--; - splx(s); + mtx_unlock(&Giant); } struct ksensordev *