svn commit: r344526 - head/sys/dev/flash
Ian Lepore
ian at FreeBSD.org
Mon Feb 25 17:30:02 UTC 2019
Author: ian
Date: Mon Feb 25 17:30:01 2019
New Revision: 344526
URL: https://svnweb.freebsd.org/changeset/base/344526
Log:
Resolve a name conflict when both SpiFlash and DataFlash devices are present.
Both SpiFlash (mx25l) and DataFlash (at45d) drivers create a disk device
with a name of /dev/flash/spiN where N is the driver's unit number. If
both types of devices are present in the same system, this creates a fatal
conflict that prevents attachment of whichever device attaches second
(because mx25l0 and at45d0 both try to create a spi0).
This gives each type of device a unique name (mx25lN or at45dN respectively)
and also adds an alias of spiN for compatibility. When both device types
appear in the same system, only the first to attach gets the spiN alias.
When the second device attaches there is a non-fatal warning that the alias
can't be created, but both devices are still accessible via their primary
names (and there is no need for the spiN name to work for backwards
compatibility on such a system, because it has never been possible to use
the spiN names when both devices exist).
Modified:
head/sys/dev/flash/at45d.c
head/sys/dev/flash/mx25l.c
Modified: head/sys/dev/flash/at45d.c
==============================================================================
--- head/sys/dev/flash/at45d.c Mon Feb 25 16:40:10 2019 (r344525)
+++ head/sys/dev/flash/at45d.c Mon Feb 25 17:30:01 2019 (r344526)
@@ -338,13 +338,14 @@ at45d_delayed_attach(void *xsc)
sc->disk->d_open = at45d_open;
sc->disk->d_close = at45d_close;
sc->disk->d_strategy = at45d_strategy;
- sc->disk->d_name = "flash/spi";
+ sc->disk->d_name = "flash/at45d";
sc->disk->d_drv1 = sc;
sc->disk->d_maxsize = DFLTPHYS;
sc->disk->d_sectorsize = pagesize;
sc->disk->d_mediasize = pagesize * ident->pagecount;
sc->disk->d_unit = device_get_unit(sc->dev);
disk_create(sc->disk, DISK_VERSION);
+ disk_add_alias(sc->sc_disk, "flash/spi");
bioq_init(&sc->bio_queue);
kproc_create(&at45d_task, sc, &sc->p, 0, 0, "task: at45d flash");
sc->taskstate = TSTATE_RUNNING;
Modified: head/sys/dev/flash/mx25l.c
==============================================================================
--- head/sys/dev/flash/mx25l.c Mon Feb 25 16:40:10 2019 (r344525)
+++ head/sys/dev/flash/mx25l.c Mon Feb 25 17:30:01 2019 (r344526)
@@ -510,7 +510,7 @@ mx25l_attach(device_t dev)
sc->sc_disk->d_strategy = mx25l_strategy;
sc->sc_disk->d_getattr = mx25l_getattr;
sc->sc_disk->d_ioctl = mx25l_ioctl;
- sc->sc_disk->d_name = "flash/spi";
+ sc->sc_disk->d_name = "flash/mx25l";
sc->sc_disk->d_drv1 = sc;
sc->sc_disk->d_maxsize = DFLTPHYS;
sc->sc_disk->d_sectorsize = MX25L_SECTORSIZE;
@@ -522,6 +522,7 @@ mx25l_attach(device_t dev)
sizeof(sc->sc_disk->d_descr));
disk_create(sc->sc_disk, DISK_VERSION);
+ disk_add_alias(sc->sc_disk, "flash/spi");
bioq_init(&sc->sc_bio_queue);
kproc_create(&mx25l_task, sc, &sc->sc_p, 0, 0, "task: mx25l flash");
More information about the svn-src-all
mailing list