From owner-freebsd-current@FreeBSD.ORG Thu Mar 20 17:04:42 2014 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 20A6F88F; Thu, 20 Mar 2014 17:04:42 +0000 (UTC) Received: from mail-we0-x234.google.com (mail-we0-x234.google.com [IPv6:2a00:1450:400c:c03::234]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 8D0B812A; Thu, 20 Mar 2014 17:04:41 +0000 (UTC) Received: by mail-we0-f180.google.com with SMTP id p61so826608wes.11 for ; Thu, 20 Mar 2014 10:04:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=CBqsN3I2k9WuQprYYtXYi9w2Nw3gF6lPgZbN4zcU01M=; b=IvXVpiuJcPgEqbmN4iCB3mwoS8vJNlP2J1o0bfK7lwceFymd6FU4GW36Hlcz4l9B9i bfdy3inyUDNnrDkmfIWDNDyWe04pib96egpIp9mqHNSbnaI1qz7yyZd2md2k+NhofocI gOCYKrJf4e9mgiTuazUIR6tZRCS5pZoA21/SFVh8XY/Lvg3zIS/9+DrI/LxSVuDpOdep uLMypXdkNR7HPE8fEiiPZR7CHwcw0MtGg3sg6rzkwFzsNDzc4rZg84upJksT8XOWZb4U qTi4JQl1Aeu8nyEIFGSRY8sny3QFWpeiO3djNwstGXd/t+jYfONqgAYJa5d4krI42tku YupA== MIME-Version: 1.0 X-Received: by 10.194.174.100 with SMTP id br4mr2538767wjc.83.1395335080011; Thu, 20 Mar 2014 10:04:40 -0700 (PDT) Sender: maksim.yevmenkin@gmail.com Received: by 10.227.113.207 with HTTP; Thu, 20 Mar 2014 10:04:39 -0700 (PDT) In-Reply-To: <201403201005.29278.jhb@freebsd.org> References: <201403201005.29278.jhb@freebsd.org> Date: Thu, 20 Mar 2014 10:04:39 -0700 X-Google-Sender-Auth: HL2dMc4IFWq6lPIalczGOIUD3q4 Message-ID: Subject: Re: [rfc] /dev/devstat permissions patch From: Maksim Yevmenkin To: John Baldwin Content-Type: text/plain; charset=ISO-8859-1 Cc: FreeBSD Current X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Mar 2014 17:04:42 -0000 On Thu, Mar 20, 2014 at 7:05 AM, John Baldwin wrote: > On Tuesday, March 18, 2014 3:29:32 pm Maksim Yevmenkin wrote: >> hello, >> >> would anyone object to the following patch? > > I think this is fine. > > While you are at it, can you test this patch to remove D_NEEDGIANT? > > Index: subr_devstat.c > =================================================================== > --- subr_devstat.c (revision 263302) > +++ subr_devstat.c (working copy) > @@ -460,7 +460,6 @@ static d_mmap_t devstat_mmap; > > static struct cdevsw devstat_cdevsw = { > .d_version = D_VERSION, > - .d_flags = D_NEEDGIANT, > .d_mmap = devstat_mmap, > .d_name = "devstat", > }; > @@ -482,13 +481,16 @@ devstat_mmap(struct cdev *dev, vm_ooffset_t offset > > if (nprot != VM_PROT_READ) > return (-1); > + mtx_lock(&devstat_mutex); > TAILQ_FOREACH(spp, &pagelist, list) { > if (offset == 0) { > *paddr = vtophys(spp->stat); > + mtx_unlock(&devstat_mutex); > return (0); > } > offset -= PAGE_SIZE; > } > + mtx_unlock(&devstat_mutex); > return (-1); > } seems to work fine for me. so, i guess, i will commit combined patch, then == Index: subr_devstat.c =================================================================== --- subr_devstat.c (revision 3427) +++ subr_devstat.c (working copy) @@ -462,7 +462,6 @@ static struct cdevsw devstat_cdevsw = { .d_version = D_VERSION, - .d_flags = D_NEEDGIANT, .d_mmap = devstat_mmap, .d_name = "devstat", }; @@ -484,13 +483,16 @@ if (nprot != VM_PROT_READ) return (-1); + mtx_lock(&devstat_mutex); TAILQ_FOREACH(spp, &pagelist, list) { if (offset == 0) { *paddr = vtophys(spp->stat); + mtx_unlock(&devstat_mutex); return (0); } offset -= PAGE_SIZE; } + mtx_unlock(&devstat_mutex); return (-1); } @@ -505,7 +507,7 @@ mtx_assert(&devstat_mutex, MA_NOTOWNED); if (!once) { make_dev_credf(MAKEDEV_ETERNAL | MAKEDEV_CHECKNAME, - &devstat_cdevsw, 0, NULL, UID_ROOT, GID_WHEEL, 0400, + &devstat_cdevsw, 0, NULL, UID_ROOT, GID_WHEEL, 0444, DEVSTAT_DEVICE_NAME); once = 1; } == thanks max