From owner-freebsd-arch@FreeBSD.ORG Tue May 27 15:22:42 2008 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 28858106564A for ; Tue, 27 May 2008 15:22:42 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.zoral.com.ua (skuns.zoral.com.ua [91.193.166.194]) by mx1.freebsd.org (Postfix) with ESMTP id BAA568FC18 for ; Tue, 27 May 2008 15:22:41 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (root@deviant.kiev.zoral.com.ua [10.1.1.148]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id m4RF2icZ027145 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 27 May 2008 18:02:45 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.2/8.14.2) with ESMTP id m4RF2jLO096820; Tue, 27 May 2008 18:02:45 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.2/8.14.2/Submit) id m4RF2jMJ096819; Tue, 27 May 2008 18:02:45 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Tue, 27 May 2008 18:02:44 +0300 From: Kostik Belousov To: Ed Schouten Message-ID: <20080527150244.GN21317@deviant.kiev.zoral.com.ua> References: <20080527130615.GJ64397@hoeg.nl> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="N/GrjenRD+RJfyz+" Content-Disposition: inline In-Reply-To: <20080527130615.GJ64397@hoeg.nl> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: ClamAV version 0.91.2, clamav-milter version 0.91.2 on skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.4 X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on skuns.kiev.zoral.com.ua Cc: arch@freebsd.org Subject: Re: Simplifying devfs: minor == unit X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 May 2008 15:22:42 -0000 --N/GrjenRD+RJfyz+ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, May 27, 2008 at 03:06:15PM +0200, Ed Schouten wrote: > Hello everyone, >=20 > Right before I left to BSDCan I was looking at the devfs code. When I > started hacking the TTY code, I discovered minor/unit numbers are still > actively used within the FreeBSD kernel, even though they are never > exposed to userspace. Devfs automatically generates an inode number for > each device. Right now, st_rdev is always equal to st_ino, which still > guarantees device numbers are unique throughout the system. >=20 > In an experimental branch in Perforce, I decided to see what would > happen if I would completely remove minor numbers from device drivers. > This means make_dev()'s minor argument is removed, but also the minor(), > unit2minor(), etc. functions. Drivers could use si_drv0 directly, just > like si_drv1 and si_drv2 are used right now. >=20 > This doesn't seem to be possible because of the design of the device > cloner (not the eventhandler, just the clone_* routines), which > preallocates an unnamed device with a specific unit numer, which can > later be passed to make_dev(). >=20 > This is why I want to do this in little steps right now. I was thinking > about doing the following: >=20 > - si_drv0 currently contains the minor number. We could alter the > minor2unit(), etc. routines to make minor numbers equal to unit > numbers. This means most routines will now become a no-op. See > attachment. >=20 > - When that hits the tree, we could decide to run a big regexp on the > source code to make drivers use si_drv0 directly. >=20 > - I've seen most drivers only use the device cloner, because they need > descriptor local storage. It turns out more drivers need this than I > initially thought. kib@ has a patch for this, so I hope this gets > committed one of these {days,weeks,months}. The patch was committed ~ a week ago. >=20 > - After we've got file descriptor local storage, I think we can live > without the cloner. This means we could consider removing the minor > number argument from make_dev(), removing the unique unit number > restriction we currently have inside devfs, which causes many drivers > to use number pools for no obvious reason. I think we cannot live without clones regardless of devfs_cdevpriv. The model assumed for the pty, snp and probably several other devices actually requires new cdev instead of the priv data. >=20 > I was thinking about discussing this patch with my mentor + committing > it somewhere in the nearby future. Any comments? Making minor =3D=3D unit number looks to be not a bad idea, please, look at the saga of the tty_pty.c revs. 1.153, 156, 1.157. Making the devices use si_drv0 directly probably is not so good since we remove the indirection layer that is already present and allows for some (minor) freedom in the devfs/kern_conf implementation. --N/GrjenRD+RJfyz+ Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAkg8IpQACgkQC3+MBN1Mb4jVywCg1/dbG6rHS2dQ9ASSWswl3emC Vq8AoNFeeMdX5QWOlGFEhdqkwDWxA+nO =tgwm -----END PGP SIGNATURE----- --N/GrjenRD+RJfyz+--