enumeratePci, addBars, pciConfigurationPtr, and the PciHeader struct are deleted; the kernel seeds only the host bridge, and the ring-3 pci-bus driver's reports are the sole source of PCI function nodes. The manager matches PCI drivers from reported identity, deduped by registered device id so a bus restart never double-spawns. The flip did its job by exposing a latent SMP race: ring-3 device_register made the broker table concurrent for the first time, and mmio_map read it lock-free — under load a torn resource length mapped hpet's window wrong (its user fault) and underflowed r.len-1 into a kernel integer-overflow panic. Fixed: the broker read in mmio_map (and claim) runs under the big kernel lock, the arithmetic rejects zero-length and wrapping windows cleanly, and pci-bus no longer registers unimplemented size-0 BARs. driver-restart hammered 6x, suite 55/55. |
||
|---|---|---|
| .. | ||
| architecture/x86_64 | ||
| console.zig | ||
| devices-broker.zig | ||
| font.psf | ||
| heap.zig | ||
| ipc-synchronous.zig | ||
| ipc.zig | ||
| irq.zig | ||
| kernel.zig | ||
| log.zig | ||
| pmm.zig | ||
| process.zig | ||
| scheduler.zig | ||
| sync.zig | ||
| tests.zig | ||