Date: Tue, 27 May 2008 18:02:44 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: Ed Schouten <ed@80386.nl> Cc: arch@freebsd.org Subject: Re: Simplifying devfs: minor == unit Message-ID: <20080527150244.GN21317@deviant.kiev.zoral.com.ua> In-Reply-To: <20080527130615.GJ64397@hoeg.nl> References: <20080527130615.GJ64397@hoeg.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
--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+--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080527150244.GN21317>