Re: Vista fixes PCIe re-install problem ... why ?



From our PCI dev:



There are two more possibilities I thought of. First is that I believe we
made a change to Vista to correct a bug where we were not waiting the
requisite 10ms after putting a device into D0 before carrying on with the
enumeration of a device. He could test this by putting the device into D0
at some point after the uninstall and before the reinstall through the
debugger. This would cause Server 2003 to avoid the power state transition
and make the delay a non-issue.



A second possibility is that the device clears a theoretically read-only
register when it goes through a D3->D0 transition. The Subsystem ID
register is the most likely culprit. One possibility is that we saw this
device in our internal testing of Vista and added it to a hack database of
devices that act in this way. Devices on the hack list won't fail Start if
their subsystem ID changes.



If he sends the vendor/device IDs of the device, I can check this out. If
it's the power issue, I'll look into what the backporting status of the fix
is.



However, the timing issue is still a possibility. We cache the
vendor/device IDs of a device when it is first found, when we create a PDO
for the device. These cached IDs are what is used for driver matching, and
since a driver uninstall/reinstall doesn't cause the PDO to be recreated,
the fact that we found the right driver the second time around doesn't mean
that the device was still present at that time - we used cached IDs. Also,
two of the big transitions that can cause a device to disappear for some
period of time are device firmware download and power state transitions.
The first, if it applies to this device, would only happen in AddDevice or
Start. The second happens in Start. In both cases it is reasonable for the
entire driver load to happen properly but for the device to disappear during
Start if one of these situations is happening.



To debug, you can set a breakpoint on PcipIsSameDevice. This will compare a
config header read from the hardware with the cached values in the PDO. It
should be possible to step through this routine and see where the mismatch
is occurring. If the config header buffer contains all FF's, then we're
probably talking about a timing problem where the device momentarily becomes
unavailable. If it looks right but the subsystem ID is wrong, we're
probably talking about the subsystem ID problem above.



If it is one of these kinds of problems, then it's not reasonable for OS's
to preserve behavior across versions - we're talking about hardware bugs.
We make every effort to provide consistent backwards compatibility, but
preserving perfect compatibility, even for non-compliant hardware, means
that we can't make any changes, not even bugfixes.



-Eliyas


.



Relevant Pages

  • Linux IEEE 1394/ FireWire subsystem TODO list
    ... Another page related to FireWire ... driver development status is http://wiki.linux1394.org/JujuMigration. ... IEEE1394 Subsystem ... Implement MCAP and multicast support. ...
    (Linux-Kernel)
  • Re: [spi-devel-general] [Patch 1/4] Industrialio Core
    ... this subsystem is _huge_. ... how I imagine the ADC subsystem. ... then it will get moved to the main headers rather than being driver specific. ... If we know the device is an accelerometer rather than a general ADC is would be ...
    (Linux-Kernel)
  • Re: which PCI device instance ID fields never impact software?
    ... "If the manufacturer makes a modification during the life of a PCI device ... "Any bug fix, feature, or performance update that does not change the ... to the subsystem fields. ... per-unique-device-flavour driver. ...
    (microsoft.public.development.device.drivers)
  • RE: KLD and USB driver
    ... >I can successfully load and unload the module, but the usb subsystem does ... >not appear to see the driver. ... the usb subsystem does not use my driver. ... priority referencing subsystem priority and priority within the subsystem ...
    (freebsd-hackers)