Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 May 2008 23:10:02 +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:  <20080527201002.GU21317@deviant.kiev.zoral.com.ua>
In-Reply-To: <20080527194840.GO64397@hoeg.nl>
References:  <20080527130615.GJ64397@hoeg.nl> <20080527150244.GN21317@deviant.kiev.zoral.com.ua> <20080527165753.GK64397@hoeg.nl> <20080527191302.GS21317@deviant.kiev.zoral.com.ua> <20080527193242.GN64397@hoeg.nl> <20080527194823.GT21317@deviant.kiev.zoral.com.ua> <20080527194840.GO64397@hoeg.nl>

next in thread | previous in thread | raw e-mail | index | archive | help

--dXvu6+ixFx2ZffE8
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, May 27, 2008 at 09:48:40PM +0200, Ed Schouten wrote:
> * Kostik Belousov <kostikbel@gmail.com> wrote:
> > In fact, I do not understand why you leave the UMINORMASK stuff. It mak=
es
> > no sense with the unit =3D=3D minor, IMHO.
>=20
> That's because the uminor() and umajor() routines operate on user device
> numbers (dev_t's). We need to leave those intact, to make things like
> the binary compat work.

What does it mean to take bits 8-15 from the the unit number to denote
some fictitious major ? And, what binary compatibility you talk about
? You changed the layout of the encoding for the minor, but still take
the major from it, while there is simply no space for major after your
patch, and definitely not in [8:15].

Also, look at the sys/types.h:

#ifndef _KERNEL
/*
* minor() gives a cookie instead of an index since we don't want to
* change the meanings of bits 0-15 or waste time and space shifting
* bits 16-31 for devices that don't use them.
*/
#define major(x)        ((int)(((u_int)(x) >> 8)&0xff)) /* major number */
#define minor(x)        ((int)((x)&0xffff00ff))         /* minor number */
#endif /* !_KERNEL */

#define makedev(x,y)    ((dev_t)(((x) << 8) | (y)))     /* create dev_t */

I think, if you want to do the change you proposed, the minors for cdevs
shall be cleanly separated from the major/minor something, the later has no
relations with the cdevs in the current FreeBSD.

I.e., in your patch, the uminor() can and shall be made identity
function, to match minor2unit() and unit2minor(), and umajor() shall just
return 0.

It would be nice to verify that the linuxolator emulation still works
(look at the compat/linux/linux_stats.c).

--dXvu6+ixFx2ZffE8
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)

iEYEARECAAYFAkg8apkACgkQC3+MBN1Mb4hcHgCfYnCrI9/5GgT58CKE9Dqm2Vvh
0NoAn2eJoh8ydCn2jU15ZtICYhsnNux6
=QwvR
-----END PGP SIGNATURE-----

--dXvu6+ixFx2ZffE8--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080527201002.GU21317>