interesting bug of new fdc(4) - two /dev/fd0 device files

John Baldwin jhb at FreeBSD.org
Fri Sep 24 12:35:20 PDT 2004


On Friday 24 September 2004 03:12 pm, Rostislav Krasny wrote:
> I have FreeBSD 5.3-BETA5 and 5.3-BETA4 installed on separate disks of
> the same computer. After the installation I added a second floppy drive
> (disk B in DOS). See following logs about how both systems work after
> that:
>
> dmesg and shell logs of 5.3-BETA5 (two /dev/fd0 device files):
>
> PNP0700: adding dma mask 0x4
> PNP0700: adding io range 0x3f2-0x3f5, size=0x4, align=0
> PNP0700: adding irq mask 0x40
> pnpbios: handle 12 device ID PNP0700 (0007d041)
> [snipped]
> fdc0: ic_type 90 part_id 80
> fdc0: <Enhanced floppy controller> at port 0x3f0-0x3f5 irq 6 drq 2 on
> isa0
> fdc0: ic_type 90 part_id 80
> fdc0: [MPSAFE]
> fdc0: [FAST]
> fd0: <1440-KB 3.5" drive> on fdc0 drive 0
> fd1: <1440-KB 3.5" drive> on fdc0 drive 1
>
> > ls -il /dev/fd[0-9]
>
> 73 crw-r-----  1 root  operator    4,  10 Sep 24 20:21 /dev/fd0
> 73 crw-r-----  1 root  operator    4,  10 Sep 24 20:21 /dev/fd0
>
>
> dmesg and shell logs of 5.3-BETA4 (no such bug):
>
> PNP0700: adding dma mask 0x4
> PNP0700: adding io range 0x3f2-0x3f5, size=0x4, align=0
> PNP0700: adding irq mask 0x40
> pnpbios: handle 12 device ID PNP0700 (0007d041)
> [snipped]
> fdc0: <Enhanced floppy controller (i82077, NE72065 or clone)> at port
> 0x3f7,0x3f
> 0-0x3f5 irq 6 drq 2 on isa0
> fdc0: FIFO enabled, 8 bytes threshold
> fd0: <1440-KB 3.5" drive> on fdc0 drive 0
> fd1: <1440-KB 3.5" drive> on fdc0 drive 1
>
> > ls -il /dev/fd[0-9]
>
> 32 crw-r-----  1 root  operator  242,   0 Sep 24 19:05 /dev/fd0
> 34 crw-r-----  1 root  operator  242,   1 Sep 24 19:05 /dev/fd1
>
>
> P.S. having two floppy drives became rare at our days but this is still
> possible and correct to be used by anyone.

Looks like a bug in fd2_attach():

	fd->fd_geom = g_new_geomf(&g_fd_class,
        	"fd%d", device_get_unit(fd->fdc->fdc_dev));

Try changing that line in sys/dev/fdc/fdc.c (about line 1909) to use 
fd->fd_dev rather than fd->fdc->fdc_dev.

Or, alternatively, change the two lines to:

	fd->fd_geom = g_new_geomf(&g_fd_class, "%s",
		device_get_nameunit(fd));

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-current mailing list