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

7

Eu estou olhando para uma situação onde existem vários módulos DAQ PCIe idênticos (National Instruments) em um chassi PCI / PCIe, conectados através de 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 PCI inicial é feita pelo BIOS, e que o sistema operacional de boot (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 em Red Hat Bugzilla Isso implica que a ordem 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!

KevinM
fonte
2
Sem resposta. Como a postagem cruzada é desaprovada, como migrar isso para, por exemplo, estouro de pilha?
KevinM

Respostas:

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:

A especificação afirma que o software de enumeração deve executar uma   pesquisa em profundidade, antes de continuar a descobrir funções adicionais /   dispositivos no barramento 0, ele deve continuar a procurar o barramento 1.

E para RHEL 6 :

9. Dispositivos e Drivers de Dispositivos

Pedido de Dispositivo PCI

No Red Hat Enterprise Linux 6, a ordem dos dispositivos PCI é baseada no dispositivo PCI   enumeração. A enumeração de dispositivo PCI é baseada no algoritmo de enumeração PCI (profundidade   primeiro e depois a largura) e é constante por tipo de sistema. Além disso, uma vez que os dispositivos são   descoberto, o processo de carregamento do módulo é sequenciado, fornecendo nomes persistentes de   as interfaces.

No entanto, (algumas versões do Linux) suportam 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, como o BIOS faz.

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

KevinM
fonte
@hbogert Ambos são consistentemente diferentes? A frase chave foi "constante por tipo de sistema". Quais são as chances de que um dos seus sistemas esteja fazendo uma pesquisa abrangente?
KevinM
Parece ter sido um acaso e não reproduzível, desconsidere por favor
hbogert