Description of problem:
We are using an original PCI device driver in order to control 2 same PCI
devices(co-processor type) mounted on a PCI board. The driver distinguishes
these devices by minor number, #0 and #1. When the driver is accessing them
alternately, it may attempts to write in a wrong device, e.g. it writes into
#1's congfigration space despite of "#0" is set in the PCI device struct
pci_dev. The driver controls IO space by using pci_write_config_word().
Version-Release number of selected component (if applicable):
kernel-smp-2.6.9-11.ELsmp (same for kernel-smp-2.6.9-22.ELsmp)
Sometimes, but not always.
Steps to Reproduce:
1.User of the driver is 1 process only.
2.For bottom half handler, tasklet is used.
3.In the spin_lock_irqsave() state.
4.PCI config command registor(04h) is frequently switched(enable/disable).
The driver accesses to unintended devices, i.e. #1 instead of #0, vice varsa.
It occurs even after hundreds of msec interval.
Error frequency is unstable from 1/50 to 1/5000.
The frequency decreases for 1CPU (HyperThreading ON) compared to 2CPU.
The driver accesses devices according to the argument of pci_dev.
This phenomenon doesn't occur when the driver accesses just one device.
This phenomenon isn't observed in a case of 1CPU and HyperThreading OFF (using
This phenomenon has never happened for kernel 2.4.
Are there any information for similar case?
Are there any possible settings or means to avoid this situation?
Thanks for your attention.
We don't debug custom pci drivers. Perhaps you can contact GPS. thanks.
Global Professional Services
or call +1-866-273-3428 x45606