Loss of ed(4) in a RC1 booted in qemu
Bakul Shah
bakul at BitBlocks.com
Thu Oct 13 09:28:28 PDT 2005
> Le Thursday 13 October 2005 15:38, Joshua Coombs a écrit :
> > Welp, while I have no real help, I can point out this was reported by
> > another user on the stable list, QEMU + RC1 == no ed
>
> well, I should have looked there before posting here ;-) (sorry for the
> excellent Michel talon at lpthe.jussieu.fr : I should have seeen your post)
>
> > I'm kinda dreading upgrading my 386... I'll pull down the generic
> > kernel and do a test boot to see if it's a QEMU thing or a reguression
> > in RC1
>
> for me, it's definitely a qemu thing : I have two other machines upgraded to
> 6.0 post-RC1, and both are working *fine* ; moreover one is a notebook with a
>
> pcmcia ed(4), and this NIC works perfectly (the issue is therefore seen only
> on qemu)
The same problem exists on -current as well. This is due to
the /dev/ed related commit done on RELENG_6 branch on 10/8
(merge from an earlier 10/5 commit done on the HEAD branch.
This commit supports more ed devices but breaks qemu's ed
emulation). qemu does not emulate a couple of ID registers
that ed_probe_RTL_80x9() seems to insist on reading. I don't
know who is right -- at this point qemu needs to be one of
the standard test targets.
As shown below, I worked around the problem by always calling
nced_probe_Novell() as before (in /sys/dev/ed directory).
NOTE: THIS IS A QUICK WORKAROUND, NOT A REAL FIX. I tried a
better fix but it didn't work in the few minutes I spent on
it (the idea was this: if ed_probe_RTL80x9 fails() with
ENXIO, release all resources that may have been allocated by
it and then call ed_probe_Novell()).
Index: if_ed_pci.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ed/if_ed_pci.c,v
retrieving revision 1.47
diff -w -u -b -r1.47 if_ed_pci.c
--- if_ed_pci.c 5 Oct 2005 05:21:07 -0000 1.47
+++ if_ed_pci.c 12 Oct 2005 23:30:27 -0000
@@ -84,9 +84,9 @@
int flags = 0;
int error;
- if (pci_get_devid(dev) == ED_RTL8029_PCI_ID)
- error = ed_probe_RTL80x9(dev, PCIR_BAR(0), flags);
- else
+ //if (pci_get_devid(dev) == ED_RTL8029_PCI_ID)
+ //error = ed_probe_RTL80x9(dev, PCIR_BAR(0), flags);
+ //else
error = ed_probe_Novell(dev, PCIR_BAR(0), flags);
if (error) {
ed_release_resources(dev);
More information about the freebsd-current
mailing list