Message ID | 20240108204909.564514-20-dwmw2@infradead.org |
---|---|
State | New |
Headers | show |
Series | Rework matching of network devices to -nic options | expand |
On 08/01/2024 21.26, David Woodhouse wrote: > From: David Woodhouse <dwmw@amazon.co.uk> > > The first sunhme NIC gets placed a function 1 on slot 1 of PCI bus A, > and the rest are dynamically assigned on PCI bus B. > > Previously, any PCI NIC would get the special treatment purely by > virtue of being first in the list. > > Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> > --- > hw/sparc64/sun4u.c | 27 ++++++++------------------- > 1 file changed, 8 insertions(+), 19 deletions(-) > > diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c > index 24d53bf5fd..eda9b58a21 100644 > --- a/hw/sparc64/sun4u.c > +++ b/hw/sparc64/sun4u.c > @@ -639,29 +639,18 @@ static void sun4uv_init(MemoryRegion *address_space_mem, > > memset(&macaddr, 0, sizeof(MACAddr)); > onboard_nic = false; > - for (i = 0; i < nb_nics; i++) { > - PCIBus *bus; > - nd = &nd_table[i]; > - > - if (!nd->model || strcmp(nd->model, mc->default_nic) == 0) { > - if (!onboard_nic) { > - pci_dev = pci_new_multifunction(PCI_DEVFN(1, 1), mc->default_nic); > - bus = pci_busA; > - memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr)); > - onboard_nic = true; > - } else { > - pci_dev = pci_new(-1, mc->default_nic); > - bus = pci_busB; > - } > - } else { > - pci_dev = pci_new(-1, nd->model); > - bus = pci_busB; > - } > > + nd = qemu_find_nic_info(mc->default_nic, true, NULL); > + if (nd) { > + pci_dev = pci_new_multifunction(PCI_DEVFN(1, 1), mc->default_nic); > dev = &pci_dev->qdev; > qdev_set_nic_properties(dev, nd); > - pci_realize_and_unref(pci_dev, bus, &error_fatal); > + pci_realize_and_unref(pci_dev, pci_busA, &error_fatal); > + > + memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr)); > + onboard_nic = true; > } > + pci_init_nic_devices(pci_busB, mc->default_nic); > > /* If we don't have an onboard NIC, grab a default MAC address so that > * we have a valid machine id */ Reviewed-by: Thomas Huth <thuth@redhat.com>
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 24d53bf5fd..eda9b58a21 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -639,29 +639,18 @@ static void sun4uv_init(MemoryRegion *address_space_mem, memset(&macaddr, 0, sizeof(MACAddr)); onboard_nic = false; - for (i = 0; i < nb_nics; i++) { - PCIBus *bus; - nd = &nd_table[i]; - - if (!nd->model || strcmp(nd->model, mc->default_nic) == 0) { - if (!onboard_nic) { - pci_dev = pci_new_multifunction(PCI_DEVFN(1, 1), mc->default_nic); - bus = pci_busA; - memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr)); - onboard_nic = true; - } else { - pci_dev = pci_new(-1, mc->default_nic); - bus = pci_busB; - } - } else { - pci_dev = pci_new(-1, nd->model); - bus = pci_busB; - } + nd = qemu_find_nic_info(mc->default_nic, true, NULL); + if (nd) { + pci_dev = pci_new_multifunction(PCI_DEVFN(1, 1), mc->default_nic); dev = &pci_dev->qdev; qdev_set_nic_properties(dev, nd); - pci_realize_and_unref(pci_dev, bus, &error_fatal); + pci_realize_and_unref(pci_dev, pci_busA, &error_fatal); + + memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr)); + onboard_nic = true; } + pci_init_nic_devices(pci_busB, mc->default_nic); /* If we don't have an onboard NIC, grab a default MAC address so that * we have a valid machine id */