Hi folks, As part of my boot-from-ZFS work, I've generalised how "non-disk" disk-type storage devices interface with the mountroot mechanism and also tidied up how devices can report that they can contain a virtual storage device (eg, a RAID, LVM, ZFS, etc).
A summary of changes: - A new bdev/cdev device flag D_STORAGEPOOL, which indicates that the device can contain other storage device. - A new device_t flag DVF_NO_PARTITIONS, for storage devices which don't contain partititons (eg, wedges, flash). - New mountroot_rootspec hooks, which allows a device driver to advertise that it can contain a virtual storage device. The new interface is: mountroot_rootspec_hook_establish() Called by a driver to register a callback to check if the passed boot device string is matched by a driver and a callback to print a list of any boot devices provided by the driver. The match function also passes a string prefix (eg "wedge") to register the hook. mountroot_rootspec_hook_disestablish() Remove callbacks previously registered. domountroot_rootspec_hooks() Called during the mount root process. This checks if registered prefixes match any listed hooks and calls them. The prefix is can be separated from the boot specifier with either a ":" or an "="; for example "wedge:foo", "NAME=bar". domountroot_rootspec_print() Called when the boot device prompt lists the available boot devices. These changes remove most wedge-specific code from sys/kern, removes the hard-coded list of device types used by RAIDframe autoconfiguration, and will also be used for the upcoming boot-from-ZFS support. This has been tested on amd64 with FFS and ZFS for a while, but hasn't had any testing on any other architectures. The diffstats output is below, and the diff is available at http://www.NetBSD.org/~simonb/mountroot-20220812.diff Any comments, questions, suggestions or abuse before I commit this? Cheers, Simon. arch/hp300/dev/rd.c | 4 +- arch/sun3/dev/xd.c | 4 +- arch/sun3/dev/xy.c | 4 +- arch/vax/mba/hp.c | 4 +- arch/vax/vsa/hdc9224.c | 4 +- arch/xen/xen/xbd_xenbus.c | 4 +- dev/ata/wd.c | 4 +- dev/ccd.c | 4 +- dev/cgd.c | 4 +- dev/dkwedge/dk.c | 29 ++++++++++++-- dev/dm/device-mapper.c | 4 +- dev/flash/flash.c | 3 + dev/gpib/rd.c | 4 +- dev/ld.c | 4 +- dev/mca/ed_mca.c | 4 +- dev/mscp/mscp_disk.c | 4 +- dev/ofw/ofdisk.c | 4 +- dev/qbus/rl.c | 4 +- dev/raidframe/rf_netbsdkintf.c | 38 ++----------------- dev/scsipi/sd.c | 4 +- dev/vme/xd.c | 4 +- dev/vme/xy.c | 4 +- dev/vnd.c | 4 +- kern/kern_hook.c | 80 +++++++++++++++++++++++++++++++++++++++++ kern/kern_subr.c | 59 +++++++----------------------- kern/subr_device.c | 22 +++++++++++ kern/subr_devsw.c | 13 ++++++ rump/librump/rumpvfs/rumpblk.c | 6 +-- sys/conf.h | 2 + sys/device.h | 3 + sys/dkio.h | 2 + sys/systm.h | 8 ++++ 32 files changed, 219 insertions(+), 126 deletions(-)