tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Questions about pci configuration and the mpt(4) driver

        Hello.  I've been working on an issue with the mpt(4) driver, the
driver for the LSI Fusion SCSI controller cards and raid cards.  In the
process of working through the issue, I've discovered that the mpt(4)
driver is very fragile if the need to reset the hardware arises.  In
particular, if a hardware reset is done, all of the pci configuration
registers get zorched, causing interrupt handling to fail and requests to
get stuck in the driver and hardware's queue.  I've been looking for
examples of how to reset the PCI registers after such a reset, but neither
the OpenBSD or FreeBSD drivers offer a clue.  All BSD drivers I've looked
at lament the problem, but none provide a solution.  I've considered
extracting the PCI initialization process from the mpt_pci_attach() routine
into a separate function that can be called at any time while things are
running, but there must be a reason this hasn't been done already and why I
don't see any examples that look obvious to me of any drivers that do this.
Is it safe to call pci_intr_disestablish() and pci_intr_establish() during
the course of normal multi-user operation for a particular driver as a
means of re-attaching interrupts to a device that's forgotten how to
generate them?  Are there any examples of drivers that do a complete reset
of the hardware, including pci and pci interrupt settings while continuing
to operate in multi-user mode?

Home | Main Index | Thread Index | Old Index