Commit a551398
fix: write compliant bit pattern for BAR sizing
According to the PCI spec [1], "[t]o determine how much address space a
Function requires, system software should write a value of all 1's to
each BAR register and then read the value back." QEMU (and possibly
others) mask the provided address based on the size of the address space
[2], which is always larger than 128 bytes for memory BARs, so the value
of the last nibble has no effect. However, cloud-hypervisor (with
possibly others) is more strict in its interpretation of the
specification and check for exactly the all-bits-set pattern [3]. On the
latter platforms, the current pattern can be erroneously interpreted as
a BAR relocation instead of sizing.
[1]: PCI Express Base Specification Revision 6.0, page 930
[2]: v10.1.2:hw/pci/pci.c:1658
[3]: v49.0:pci/src/configuration.rs:9791 parent b35f742 commit a551398
1 file changed
+2
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
321 | 321 | | |
322 | 322 | | |
323 | 323 | | |
324 | | - | |
| 324 | + | |
325 | 325 | | |
326 | 326 | | |
327 | 327 | | |
| |||
349 | 349 | | |
350 | 350 | | |
351 | 351 | | |
352 | | - | |
| 352 | + | |
353 | 353 | | |
354 | 354 | | |
355 | 355 | | |
| |||
0 commit comments