Os barramentos e dispositivos PCI / PCIe sempre são enumerados na mesma ordem?

7

Estou investigando uma situação em que há vários módulos DAQ PCIe idênticos (National Instruments) em um chassi PCI / PCIe, conectados por um controlador de chassi simples ou duplo. Na pior das hipóteses, pode haver 8 módulos idênticos no barramento.

Fui levado a acreditar que a enumeração PCI não é determinística - ou seja, não há garantia de que, inicializando para inicializar, o barramento PCI será enumerado na mesma ordem. Isso é verdade?

Isso também implica que os valores PCI (e) de barramento / dispositivo / função podem mudar, inicializar para inicializar, mesmo que o layout de hardware físico não seja?

Em suma, eu entendo que a enumeração inicial do PCI é feita pelo BIOS, e que o sistema operacional de inicialização (RHEL 6, no meu caso) usa essa lista enumerada para atender ao hardware identificado. Essa lista sempre contém os dispositivos encontrados na mesma ordem ou não?

Esta é uma dica no Red Hat Bugzilla que implica que a ordenação do BIOS é sempre a mesma .

Por favor, note que eu não estou (ainda) falando sobre a ordem na qual o sistema operacional lida com os dispositivos (por exemplo, no Linux, determinando a ordem / dev / name).

Obrigado!

    
por KevinM 17.10.2012 / 10:59

1 resposta

5

A resposta curta é "Sim", se o BIOS (que executa a enumeração inicial) aderir à especificação PCI.

De acordo com: "Arquitetura do Sistema PCI Express" R. Budruk, D. Anderson, T. Shanley, IMPRENSA DO DESENVOLVEDOR DE ADDISON-WESLEY, 2003. ISBN: 0-321-15630-7, página 743:

The specification states that the enumeration software must perform a depth-first search, so before proceeding to discover additional functions/ devices on bus 0, it must proceed to search bus 1.

E para RHEL 6 :

9. Devices and Device Drivers

PCI Device Ordering

In Red Hat Enterprise Linux 6, the PCI device ordering is based on the PCI device enumeration. PCI device enumeration is based on the PCI enumeration algorithm (depth first then breadth) and is constant per system type. Additionally, once the devices are discovered, the module loading process is sequentialized, providing persistent naming of the interfaces.

No entanto, (algumas versões do?) Linux suporta um parâmetro do kernel "pci = bfsort" que muda o algoritmo de enumeração do Linux para "largura primeiro". Isso mudará a ordem em que o kernel do Linux carrega e inicializa os dispositivos PCI por meio do BIOS.

Em qualquer caso, as listas enumeradas de boot-to-boot ainda conterão itens detectados na mesma ordem.

    
por 19.10.2012 / 17:17