From owner-svn-src-all@freebsd.org Wed Aug 2 12:37:43 2017 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 30BA4DCFFAF; Wed, 2 Aug 2017 12:37:43 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B462A3FD7; Wed, 2 Aug 2017 12:37:42 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id v72CbXtE035837 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 2 Aug 2017 15:37:33 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua v72CbXtE035837 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id v72CbX4G035836; Wed, 2 Aug 2017 15:37:33 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Wed, 2 Aug 2017 15:37:33 +0300 From: Konstantin Belousov To: Hans Petter Selasky Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r321920 - head/sys/sys Message-ID: <20170802123733.GF1700@kib.kiev.ua> References: <201708021014.v72AEHEk061037@repo.freebsd.org> <7b1d274f-a531-f788-742a-a8375fe76763@selasky.org> <20170802110607.GC1700@kib.kiev.ua> <760e0077-499e-fffb-a86b-979e410b35e1@selasky.org> <20170802111752.GD1700@kib.kiev.ua> <912d42d0-ea07-82ec-e754-f6b6d2b4cc94@selasky.org> <20170802114303.GE1700@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.8.3 (2017-05-23) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Aug 2017 12:37:43 -0000 On Wed, Aug 02, 2017 at 02:26:46PM +0200, Hans Petter Selasky wrote: > On 08/02/17 13:43, Konstantin Belousov wrote: > > On Wed, Aug 02, 2017 at 01:27:50PM +0200, Hans Petter Selasky wrote: > >> On 08/02/17 13:17, Konstantin Belousov wrote: > >>> But y must be dev_t. > >> > >> Sure, but "struct cdev" 's si_drv0 is only "int" . How can it contain > >> dev_t ? > > > > Why should it contain dev_t ? > > Linux KPI abused that field it seems. > > > > Hi, > > The LinuxKPI uses si_drv0 to contain the output from mkdev(). Before the > mkdev() function would fit into 32-bits. Now it is 64-bits. > > I can fix the LinuxKPI bits this time. We can store this information in > si_drv1->xxx instead of using si_drv0 and dev2unit(). si_drv1 is 32bit on 32bit platforms. > > > Lets change the focus of the discussion. > > You cited the > > struct linux_cdev * > > linux_find_cdev(const char *name, unsigned major, unsigned minor) > > function which finds cdev (or some mockup of the native cdev) by major/minor. > > Where does these major/minor numbers come from ? > > The major number is in the range 0..255 and decides the type of device. > The minor number is in the range 0..255 aswell typically and defines a > unique number for each LinuxKPI created character device. > > > I mean that if they are contructed as major(struct stat.st_rdev) and > > minor(struct stat.st_rdev), then even the original code looks wrong > > without the ino64 addition. Since devfs reports the internal inode > > number into st_rdev, which formally is not accessible outside the devfs > > filesystem. So should the code for linux_find_cdev() changed to match > > cdevs against inode number ? > > These numbers do not come from any user-visible files. They are just > used internally in the kernel to pass around information. > > > cdp_inode is serially generated so on real machine it is really a small > > number for any /dev node. You can watch that by ls -l /dev. > > Sure. > > > > > While at it, I found that contrib/mknod/pack_dev.c, still has hardcoded > references to the old makedev(): > > > contrib/mknod/pack_dev.c:#define makedev_freebsd(x,y) ((portdev_t)((((x) << 8) & 0x0000ff00) | \ > > contrib/mknod/pack_dev.c: dev = makedev_freebsd(numbers[0], numbers[1]); > > Same goes for: contrib/libarchive/libarchive/archive_pack_dev.c I do not see how pack_dev.c can be used for anything non-broken on FreeBSD, at least in connection with devfs. For non-devfs filesystems it can be streamlined, of course. I will look at this later. > > And if you "grep -r makedev /usr/src" you'll find more. > > --HPS