mbox series

[v3,00/46] Rework matching of network devices to -nic options

Message ID 20240108204909.564514-1-dwmw2@infradead.org
Headers show
Series Rework matching of network devices to -nic options | expand

Message

David Woodhouse Jan. 8, 2024, 8:26 p.m. UTC
Most platforms iterating directly over the nd_table[] are doing one of 
two things. Either they are creating the NIC for their platform and want
to find a matching -nic configuration for it, if such exists. Or they
are only going to create that platform NIC if a matching config *does*
exist.

All of those can be converted to the new qemu_configure_nic_device()
and qemu_create_nic_device() functions. The latter of which will call
qdev_new() to create the device (and apply the config) if a matching
NIC config does exist for it. The existing behaviour of each platform
has been preserved for now, despite it being apparently fairly random.

PCI and indeed XenBus can use a qemu_create_nic_bus_devices() which will 
create all NICs that live on a given bus type. That covers most 
platforms, but some PCI platforms do something special with the first 
NIC of a given type, placing it in the slot where it would have been on 
the real hardware. There were various inconsistencies in the way the 
platforms did so, and whether they cared what model the NIC was. Those 
subtle behavioural changes I *have* allowed to change, and now the 
pci_init_nic_slot() function will pick the first NIC that the user 
specified which isn't explicitly *not* the default type, and put that
in the specified slot.

The tests for npcm7xx used to lament that they had to instantiate both
NICs even when they wanted to test only the second, because there was
no way to specify which hardware devices gets which configuration. I
made that untrue, by allowing 'emc0' and 'emc1' aliases, and fixed up
the test accordingly.

There are one or two special cases which want to do special things with
the MAC address of the primary NIC, to set up a system identification
(or force it to use an Apple OUI, in the case of m68k/q400). All those
work out relatively cleanly too.

And I can clean up the ugly patch which fixed up the Xen network device 
handling, and replace it with a simple call to the new 
qemu_create_nic_bus_devices() function.

I suspect that we can remove the pci_init_nic_devices() from platform
code and just do it later, except for platforms which *care* which
PCI bus the dynamic devices go on (is that just sun4u which puts its
primary NIC onto a different bus?).

Finally, while we're at it, clean up -nic model=help to only print
the device models which are actually usable on the given platform
rather than just listing them *all*.

And now we can make nd_table[] and nb_nics static in net/net.c because
nothing else has any business poking at them directly.

 v3: Rebase to 8.2

 v2: Some build fixes after better coverage testing, revert the Xen fix
     in this series because I'm putting the less invasive hack into 8.2
     (hopefully).

David Woodhouse (46):
      net: add qemu_{configure,create}_nic_device(), qemu_find_nic_info()
      net: report list of available models according to platform
      net: add qemu_create_nic_bus_devices()
      hw/pci: add pci_init_nic_devices(), pci_init_nic_in_slot()
      hw/i386/pc: use qemu_get_nic_info() and pci_init_nic_devices()
      hw/xen: use qemu_create_nic_bus_devices() to instantiate Xen NICs
      hw/alpha/dp264: use pci_init_nic_devices()
      hw/arm/sbsa-ref: use pci_init_nic_devices()
      hw/arm/virt: use pci_init_nic_devices()
      hw/hppa: use pci_init_nic_devices()
      hw/loongarch: use pci_init_nic_devices()
      hw/mips/fuloong2e: use pci_init_nic_devices()
      hw/mips/malta: use pci_init_nic_devices()
      hw/mips/loongson3_virt: use pci_init_nic_devices()
      hw/ppc/prep: use pci_init_nic_devices()
      hw/ppc/spapr: use qemu_get_nic_info() and pci_init_nic_devices()
      hw/ppc: use pci_init_nic_devices()
      hw/sh4/r2d: use pci_init_nic_devices()
      hw/sparc64/sun4u: use pci_init_nic_devices()
      hw/xtensa/virt: use pci_init_nic_devices()
      hw/arm/allwinner: use qemu_configure_nic_device()
      hw/arm/aspeed: use qemu_configure_nic_device()
      hw/arm/exynos4: use qemu_create_nic_device()
      hw/arm/fsl: use qemu_configure_nic_device()
      hw/net/smc91c111: use qemu_configure_nic_device()
      hw/net/lan9118: use qemu_configure_nic_device()
      hw/arm/highbank: use qemu_create_nic_device()
      hw/arm/npcm7xx: use qemu_configure_nic_device, allow emc0/emc1 as aliases
      hw/arm/stellaris: use qemu_find_nic_info()
      hw/arm: use qemu_configure_nic_device()
      hw/net/etraxfs-eth: use qemu_configure_nic_device()
      hw/m68k/mcf5208: use qemu_create_nic_device()
      hw/m68k/q800: use qemu_find_nic_info()
      hw/microblaze: use qemu_configure_nic_device()
      hw/mips/mipssim: use qemu_create_nic_device()
      hw/mips/jazz: use qemu_find_nic_info()
      hw/net/lasi_i82596: use qemu_configure_nic_device()
      hw/openrisc/openrisc_sim: use qemu_create_nic_device()
      hw/riscv: use qemu_configure_nic_device()
      hw/s390x/s390-virtio-ccw: use qemu_create_nic_device()
      hw/sparc/sun4m: use qemu_find_nic_info()
      hw/xtensa/xtfpga: use qemu_create_nic_device()
      net: remove qemu_check_nic_model()
      hw/pci: remove pci_nic_init_nofail()
      net: remove qemu_show_nic_models(), qemu_find_nic_model()
      net: make nb_nics and nd_table[] static in net/net.c

 hw/alpha/dp264.c                         |   4 +-
 hw/arm/allwinner-a10.c                   |   6 +-
 hw/arm/allwinner-h3.c                    |   6 +-
 hw/arm/allwinner-r40.c                   |  27 +---
 hw/arm/aspeed.c                          |   9 +-
 hw/arm/exynos4_boards.c                  |   6 +-
 hw/arm/fsl-imx25.c                       |   2 +-
 hw/arm/fsl-imx6.c                        |   2 +-
 hw/arm/fsl-imx6ul.c                      |   2 +-
 hw/arm/fsl-imx7.c                        |   2 +-
 hw/arm/gumstix.c                         |   6 +-
 hw/arm/highbank.c                        |  12 +-
 hw/arm/integratorcp.c                    |   5 +-
 hw/arm/kzm.c                             |   4 +-
 hw/arm/mainstone.c                       |   3 +-
 hw/arm/mps2-tz.c                         |   8 +-
 hw/arm/mps2.c                            |   2 +-
 hw/arm/msf2-soc.c                        |   6 +-
 hw/arm/musicpal.c                        |   3 +-
 hw/arm/npcm7xx.c                         |  16 +-
 hw/arm/realview.c                        |  25 ++-
 hw/arm/sbsa-ref.c                        |   4 +-
 hw/arm/stellaris.c                       |  30 +++-
 hw/arm/versatilepb.c                     |  15 +-
 hw/arm/vexpress.c                        |   4 +-
 hw/arm/virt.c                            |   4 +-
 hw/arm/xilinx_zynq.c                     |  11 +-
 hw/arm/xlnx-versal.c                     |   7 +-
 hw/arm/xlnx-zynqmp.c                     |   8 +-
 hw/cris/axis_dev88.c                     |   9 +-
 hw/hppa/machine.c                        |   7 +-
 hw/i386/pc.c                             |  33 ++--
 hw/i386/pc_piix.c                        |   2 +-
 hw/i386/pc_q35.c                         |   2 +-
 hw/loongarch/virt.c                      |   4 +-
 hw/m68k/mcf5208.c                        |  19 +--
 hw/m68k/q800.c                           |  29 ++--
 hw/microblaze/petalogix_ml605_mmu.c      |   3 +-
 hw/microblaze/petalogix_s3adsp1800_mmu.c |   3 +-
 hw/mips/fuloong2e.c                      |  16 +-
 hw/mips/jazz.c                           |  15 +-
 hw/mips/loongson3_virt.c                 |   4 +-
 hw/mips/malta.c                          |  15 +-
 hw/mips/mipssim.c                        |  13 +-
 hw/net/etraxfs_eth.c                     |   5 +-
 hw/net/lan9118.c                         |   5 +-
 hw/net/lasi_i82596.c                     |   3 +-
 hw/net/smc91c111.c                       |   5 +-
 hw/openrisc/openrisc_sim.c               |  18 +--
 hw/pci/pci.c                             |  73 +++------
 hw/ppc/e500.c                            |   4 +-
 hw/ppc/mac_newworld.c                    |   4 +-
 hw/ppc/mac_oldworld.c                    |   4 +-
 hw/ppc/ppc440_bamboo.c                   |  14 +-
 hw/ppc/prep.c                            |   8 +-
 hw/ppc/spapr.c                           |  18 +--
 hw/riscv/microchip_pfsoc.c               |  14 +-
 hw/riscv/sifive_u.c                      |   7 +-
 hw/s390x/s390-virtio-ccw.c               |  11 +-
 hw/sh4/r2d.c                             |   6 +-
 hw/sparc/sun4m.c                         |  20 ++-
 hw/sparc64/sun4u.c                       |  27 +---
 hw/xen/xen-bus.c                         |   6 +-
 hw/xen/xen_devconfig.c                   |  25 ---
 hw/xenpv/xen_machine_pv.c                |   9 --
 hw/xtensa/virt.c                         |   4 +-
 hw/xtensa/xtfpga.c                       |  13 +-
 include/hw/cris/etraxfs.h                |   2 +-
 include/hw/i386/pc.h                     |   4 +-
 include/hw/net/lan9118.h                 |   2 +-
 include/hw/net/ne2000-isa.h              |   2 -
 include/hw/net/smc91c111.h               |   2 +-
 include/hw/pci/pci.h                     |   7 +-
 include/hw/xen/xen-bus.h                 |   2 +-
 include/hw/xen/xen-legacy-backend.h      |   1 -
 include/net/net.h                        |  18 +--
 net/net.c                                | 253 +++++++++++++++++++++++++------
 system/globals.c                         |   2 -
 tests/qtest/npcm7xx_emc-test.c           |  18 +--
 79 files changed, 479 insertions(+), 550 deletions(-)

Comments

David Woodhouse Jan. 24, 2024, 1:13 p.m. UTC | #1
Hi Jason,

I think this series probably lives or dies with you. I think it's a
worthwhile cleanup, but I no longer have an immediate need for it; I
shipped a slightly ugly workaround in QEMU 8.2.

Please could you let me know if it's worth persisting with it?

Thanks.

On Mon, 2024-01-08 at 20:26 +0000, David Woodhouse wrote:
> 
> Most platforms iterating directly over the nd_table[] are doing one of 
> two things. Either they are creating the NIC for their platform and want
> to find a matching -nic configuration for it, if such exists. Or they
> are only going to create that platform NIC if a matching config *does*
> exist.
> 
> All of those can be converted to the new qemu_configure_nic_device()
> and qemu_create_nic_device() functions. The latter of which will call
> qdev_new() to create the device (and apply the config) if a matching
> NIC config does exist for it. The existing behaviour of each platform
> has been preserved for now, despite it being apparently fairly random.
> 
> PCI and indeed XenBus can use a qemu_create_nic_bus_devices() which will 
> create all NICs that live on a given bus type. That covers most 
> platforms, but some PCI platforms do something special with the first
> NIC of a given type, placing it in the slot where it would have been on 
> the real hardware. There were various inconsistencies in the way the 
> platforms did so, and whether they cared what model the NIC was. Those 
> subtle behavioural changes I *have* allowed to change, and now the 
> pci_init_nic_slot() function will pick the first NIC that the user 
> specified which isn't explicitly *not* the default type, and put that
> in the specified slot.
> 
> The tests for npcm7xx used to lament that they had to instantiate both
> NICs even when they wanted to test only the second, because there was
> no way to specify which hardware devices gets which configuration. I
> made that untrue, by allowing 'emc0' and 'emc1' aliases, and fixed up
> the test accordingly.
> 
> There are one or two special cases which want to do special things with
> the MAC address of the primary NIC, to set up a system identification
> (or force it to use an Apple OUI, in the case of m68k/q400). All those
> work out relatively cleanly too.
> 
> And I can clean up the ugly patch which fixed up the Xen network device 
> handling, and replace it with a simple call to the new 
> qemu_create_nic_bus_devices() function.
> 
> I suspect that we can remove the pci_init_nic_devices() from platform
> code and just do it later, except for platforms which *care* which
> PCI bus the dynamic devices go on (is that just sun4u which puts its
> primary NIC onto a different bus?).
> 
> Finally, while we're at it, clean up -nic model=help to only print
> the device models which are actually usable on the given platform
> rather than just listing them *all*.
> 
> And now we can make nd_table[] and nb_nics static in net/net.c because
> nothing else has any business poking at them directly.
> 
>  v3: Rebase to 8.2
> 
>  v2: Some build fixes after better coverage testing, revert the Xen fix
>      in this series because I'm putting the less invasive hack into 8.2
>      (hopefully).
> 
> David Woodhouse (46):
>       net: add qemu_{configure,create}_nic_device(), qemu_find_nic_info()
>       net: report list of available models according to platform
>       net: add qemu_create_nic_bus_devices()
>       hw/pci: add pci_init_nic_devices(), pci_init_nic_in_slot()
>       hw/i386/pc: use qemu_get_nic_info() and pci_init_nic_devices()
>       hw/xen: use qemu_create_nic_bus_devices() to instantiate Xen NICs
>       hw/alpha/dp264: use pci_init_nic_devices()
>       hw/arm/sbsa-ref: use pci_init_nic_devices()
>       hw/arm/virt: use pci_init_nic_devices()
>       hw/hppa: use pci_init_nic_devices()
>       hw/loongarch: use pci_init_nic_devices()
>       hw/mips/fuloong2e: use pci_init_nic_devices()
>       hw/mips/malta: use pci_init_nic_devices()
>       hw/mips/loongson3_virt: use pci_init_nic_devices()
>       hw/ppc/prep: use pci_init_nic_devices()
>       hw/ppc/spapr: use qemu_get_nic_info() and pci_init_nic_devices()
>       hw/ppc: use pci_init_nic_devices()
>       hw/sh4/r2d: use pci_init_nic_devices()
>       hw/sparc64/sun4u: use pci_init_nic_devices()
>       hw/xtensa/virt: use pci_init_nic_devices()
>       hw/arm/allwinner: use qemu_configure_nic_device()
>       hw/arm/aspeed: use qemu_configure_nic_device()
>       hw/arm/exynos4: use qemu_create_nic_device()
>       hw/arm/fsl: use qemu_configure_nic_device()
>       hw/net/smc91c111: use qemu_configure_nic_device()
>       hw/net/lan9118: use qemu_configure_nic_device()
>       hw/arm/highbank: use qemu_create_nic_device()
>       hw/arm/npcm7xx: use qemu_configure_nic_device, allow emc0/emc1 as aliases
>       hw/arm/stellaris: use qemu_find_nic_info()
>       hw/arm: use qemu_configure_nic_device()
>       hw/net/etraxfs-eth: use qemu_configure_nic_device()
>       hw/m68k/mcf5208: use qemu_create_nic_device()
>       hw/m68k/q800: use qemu_find_nic_info()
>       hw/microblaze: use qemu_configure_nic_device()
>       hw/mips/mipssim: use qemu_create_nic_device()
>       hw/mips/jazz: use qemu_find_nic_info()
>       hw/net/lasi_i82596: use qemu_configure_nic_device()
>       hw/openrisc/openrisc_sim: use qemu_create_nic_device()
>       hw/riscv: use qemu_configure_nic_device()
>       hw/s390x/s390-virtio-ccw: use qemu_create_nic_device()
>       hw/sparc/sun4m: use qemu_find_nic_info()
>       hw/xtensa/xtfpga: use qemu_create_nic_device()
>       net: remove qemu_check_nic_model()
>       hw/pci: remove pci_nic_init_nofail()
>       net: remove qemu_show_nic_models(), qemu_find_nic_model()
>       net: make nb_nics and nd_table[] static in net/net.c
> 
>  hw/alpha/dp264.c                         |   4 +-
>  hw/arm/allwinner-a10.c                   |   6 +-
>  hw/arm/allwinner-h3.c                    |   6 +-
>  hw/arm/allwinner-r40.c                   |  27 +---
>  hw/arm/aspeed.c                          |   9 +-
>  hw/arm/exynos4_boards.c                  |   6 +-
>  hw/arm/fsl-imx25.c                       |   2 +-
>  hw/arm/fsl-imx6.c                        |   2 +-
>  hw/arm/fsl-imx6ul.c                      |   2 +-
>  hw/arm/fsl-imx7.c                        |   2 +-
>  hw/arm/gumstix.c                         |   6 +-
>  hw/arm/highbank.c                        |  12 +-
>  hw/arm/integratorcp.c                    |   5 +-
>  hw/arm/kzm.c                             |   4 +-
>  hw/arm/mainstone.c                       |   3 +-
>  hw/arm/mps2-tz.c                         |   8 +-
>  hw/arm/mps2.c                            |   2 +-
>  hw/arm/msf2-soc.c                        |   6 +-
>  hw/arm/musicpal.c                        |   3 +-
>  hw/arm/npcm7xx.c                         |  16 +-
>  hw/arm/realview.c                        |  25 ++-
>  hw/arm/sbsa-ref.c                        |   4 +-
>  hw/arm/stellaris.c                       |  30 +++-
>  hw/arm/versatilepb.c                     |  15 +-
>  hw/arm/vexpress.c                        |   4 +-
>  hw/arm/virt.c                            |   4 +-
>  hw/arm/xilinx_zynq.c                     |  11 +-
>  hw/arm/xlnx-versal.c                     |   7 +-
>  hw/arm/xlnx-zynqmp.c                     |   8 +-
>  hw/cris/axis_dev88.c                     |   9 +-
>  hw/hppa/machine.c                        |   7 +-
>  hw/i386/pc.c                             |  33 ++--
>  hw/i386/pc_piix.c                        |   2 +-
>  hw/i386/pc_q35.c                         |   2 +-
>  hw/loongarch/virt.c                      |   4 +-
>  hw/m68k/mcf5208.c                        |  19 +--
>  hw/m68k/q800.c                           |  29 ++--
>  hw/microblaze/petalogix_ml605_mmu.c      |   3 +-
>  hw/microblaze/petalogix_s3adsp1800_mmu.c |   3 +-
>  hw/mips/fuloong2e.c                      |  16 +-
>  hw/mips/jazz.c                           |  15 +-
>  hw/mips/loongson3_virt.c                 |   4 +-
>  hw/mips/malta.c                          |  15 +-
>  hw/mips/mipssim.c                        |  13 +-
>  hw/net/etraxfs_eth.c                     |   5 +-
>  hw/net/lan9118.c                         |   5 +-
>  hw/net/lasi_i82596.c                     |   3 +-
>  hw/net/smc91c111.c                       |   5 +-
>  hw/openrisc/openrisc_sim.c               |  18 +--
>  hw/pci/pci.c                             |  73 +++------
>  hw/ppc/e500.c                            |   4 +-
>  hw/ppc/mac_newworld.c                    |   4 +-
>  hw/ppc/mac_oldworld.c                    |   4 +-
>  hw/ppc/ppc440_bamboo.c                   |  14 +-
>  hw/ppc/prep.c                            |   8 +-
>  hw/ppc/spapr.c                           |  18 +--
>  hw/riscv/microchip_pfsoc.c               |  14 +-
>  hw/riscv/sifive_u.c                      |   7 +-
>  hw/s390x/s390-virtio-ccw.c               |  11 +-
>  hw/sh4/r2d.c                             |   6 +-
>  hw/sparc/sun4m.c                         |  20 ++-
>  hw/sparc64/sun4u.c                       |  27 +---
>  hw/xen/xen-bus.c                         |   6 +-
>  hw/xen/xen_devconfig.c                   |  25 ---
>  hw/xenpv/xen_machine_pv.c                |   9 --
>  hw/xtensa/virt.c                         |   4 +-
>  hw/xtensa/xtfpga.c                       |  13 +-
>  include/hw/cris/etraxfs.h                |   2 +-
>  include/hw/i386/pc.h                     |   4 +-
>  include/hw/net/lan9118.h                 |   2 +-
>  include/hw/net/ne2000-isa.h              |   2 -
>  include/hw/net/smc91c111.h               |   2 +-
>  include/hw/pci/pci.h                     |   7 +-
>  include/hw/xen/xen-bus.h                 |   2 +-
>  include/hw/xen/xen-legacy-backend.h      |   1 -
>  include/net/net.h                        |  18 +--
>  net/net.c                                | 253 +++++++++++++++++++++++++------
>  system/globals.c                         |   2 -
>  tests/qtest/npcm7xx_emc-test.c           |  18 +--
>  79 files changed, 479 insertions(+), 550 deletions(-)
> 
> 
> 
>
Jason Wang Jan. 25, 2024, 12:38 a.m. UTC | #2
On Wed, Jan 24, 2024 at 9:14 PM David Woodhouse <dwmw2@infradead.org> wrote:
>
> Hi Jason,
>
> I think this series probably lives or dies with you. I think it's a
> worthwhile cleanup, but I no longer have an immediate need for it; I
> shipped a slightly ugly workaround in QEMU 8.2.
>
> Please could you let me know if it's worth persisting with it?

Yes it is.

Thomas, I remember you've done tweaks for -nic in the past. would you
like to review this series?

Thanks

>
> Thanks.
>
> On Mon, 2024-01-08 at 20:26 +0000, David Woodhouse wrote:
> >
> > Most platforms iterating directly over the nd_table[] are doing one of
> > two things. Either they are creating the NIC for their platform and want
> > to find a matching -nic configuration for it, if such exists. Or they
> > are only going to create that platform NIC if a matching config *does*
> > exist.
> >
> > All of those can be converted to the new qemu_configure_nic_device()
> > and qemu_create_nic_device() functions. The latter of which will call
> > qdev_new() to create the device (and apply the config) if a matching
> > NIC config does exist for it. The existing behaviour of each platform
> > has been preserved for now, despite it being apparently fairly random.
> >
> > PCI and indeed XenBus can use a qemu_create_nic_bus_devices() which will
> > create all NICs that live on a given bus type. That covers most
> > platforms, but some PCI platforms do something special with the first
> > NIC of a given type, placing it in the slot where it would have been on
> > the real hardware. There were various inconsistencies in the way the
> > platforms did so, and whether they cared what model the NIC was. Those
> > subtle behavioural changes I *have* allowed to change, and now the
> > pci_init_nic_slot() function will pick the first NIC that the user
> > specified which isn't explicitly *not* the default type, and put that
> > in the specified slot.
> >
> > The tests for npcm7xx used to lament that they had to instantiate both
> > NICs even when they wanted to test only the second, because there was
> > no way to specify which hardware devices gets which configuration. I
> > made that untrue, by allowing 'emc0' and 'emc1' aliases, and fixed up
> > the test accordingly.
> >
> > There are one or two special cases which want to do special things with
> > the MAC address of the primary NIC, to set up a system identification
> > (or force it to use an Apple OUI, in the case of m68k/q400). All those
> > work out relatively cleanly too.
> >
> > And I can clean up the ugly patch which fixed up the Xen network device
> > handling, and replace it with a simple call to the new
> > qemu_create_nic_bus_devices() function.
> >
> > I suspect that we can remove the pci_init_nic_devices() from platform
> > code and just do it later, except for platforms which *care* which
> > PCI bus the dynamic devices go on (is that just sun4u which puts its
> > primary NIC onto a different bus?).
> >
> > Finally, while we're at it, clean up -nic model=help to only print
> > the device models which are actually usable on the given platform
> > rather than just listing them *all*.
> >
> > And now we can make nd_table[] and nb_nics static in net/net.c because
> > nothing else has any business poking at them directly.
> >
> >  v3: Rebase to 8.2
> >
> >  v2: Some build fixes after better coverage testing, revert the Xen fix
> >      in this series because I'm putting the less invasive hack into 8.2
> >      (hopefully).
> >
> > David Woodhouse (46):
> >       net: add qemu_{configure,create}_nic_device(), qemu_find_nic_info()
> >       net: report list of available models according to platform
> >       net: add qemu_create_nic_bus_devices()
> >       hw/pci: add pci_init_nic_devices(), pci_init_nic_in_slot()
> >       hw/i386/pc: use qemu_get_nic_info() and pci_init_nic_devices()
> >       hw/xen: use qemu_create_nic_bus_devices() to instantiate Xen NICs
> >       hw/alpha/dp264: use pci_init_nic_devices()
> >       hw/arm/sbsa-ref: use pci_init_nic_devices()
> >       hw/arm/virt: use pci_init_nic_devices()
> >       hw/hppa: use pci_init_nic_devices()
> >       hw/loongarch: use pci_init_nic_devices()
> >       hw/mips/fuloong2e: use pci_init_nic_devices()
> >       hw/mips/malta: use pci_init_nic_devices()
> >       hw/mips/loongson3_virt: use pci_init_nic_devices()
> >       hw/ppc/prep: use pci_init_nic_devices()
> >       hw/ppc/spapr: use qemu_get_nic_info() and pci_init_nic_devices()
> >       hw/ppc: use pci_init_nic_devices()
> >       hw/sh4/r2d: use pci_init_nic_devices()
> >       hw/sparc64/sun4u: use pci_init_nic_devices()
> >       hw/xtensa/virt: use pci_init_nic_devices()
> >       hw/arm/allwinner: use qemu_configure_nic_device()
> >       hw/arm/aspeed: use qemu_configure_nic_device()
> >       hw/arm/exynos4: use qemu_create_nic_device()
> >       hw/arm/fsl: use qemu_configure_nic_device()
> >       hw/net/smc91c111: use qemu_configure_nic_device()
> >       hw/net/lan9118: use qemu_configure_nic_device()
> >       hw/arm/highbank: use qemu_create_nic_device()
> >       hw/arm/npcm7xx: use qemu_configure_nic_device, allow emc0/emc1 as aliases
> >       hw/arm/stellaris: use qemu_find_nic_info()
> >       hw/arm: use qemu_configure_nic_device()
> >       hw/net/etraxfs-eth: use qemu_configure_nic_device()
> >       hw/m68k/mcf5208: use qemu_create_nic_device()
> >       hw/m68k/q800: use qemu_find_nic_info()
> >       hw/microblaze: use qemu_configure_nic_device()
> >       hw/mips/mipssim: use qemu_create_nic_device()
> >       hw/mips/jazz: use qemu_find_nic_info()
> >       hw/net/lasi_i82596: use qemu_configure_nic_device()
> >       hw/openrisc/openrisc_sim: use qemu_create_nic_device()
> >       hw/riscv: use qemu_configure_nic_device()
> >       hw/s390x/s390-virtio-ccw: use qemu_create_nic_device()
> >       hw/sparc/sun4m: use qemu_find_nic_info()
> >       hw/xtensa/xtfpga: use qemu_create_nic_device()
> >       net: remove qemu_check_nic_model()
> >       hw/pci: remove pci_nic_init_nofail()
> >       net: remove qemu_show_nic_models(), qemu_find_nic_model()
> >       net: make nb_nics and nd_table[] static in net/net.c
> >
> >  hw/alpha/dp264.c                         |   4 +-
> >  hw/arm/allwinner-a10.c                   |   6 +-
> >  hw/arm/allwinner-h3.c                    |   6 +-
> >  hw/arm/allwinner-r40.c                   |  27 +---
> >  hw/arm/aspeed.c                          |   9 +-
> >  hw/arm/exynos4_boards.c                  |   6 +-
> >  hw/arm/fsl-imx25.c                       |   2 +-
> >  hw/arm/fsl-imx6.c                        |   2 +-
> >  hw/arm/fsl-imx6ul.c                      |   2 +-
> >  hw/arm/fsl-imx7.c                        |   2 +-
> >  hw/arm/gumstix.c                         |   6 +-
> >  hw/arm/highbank.c                        |  12 +-
> >  hw/arm/integratorcp.c                    |   5 +-
> >  hw/arm/kzm.c                             |   4 +-
> >  hw/arm/mainstone.c                       |   3 +-
> >  hw/arm/mps2-tz.c                         |   8 +-
> >  hw/arm/mps2.c                            |   2 +-
> >  hw/arm/msf2-soc.c                        |   6 +-
> >  hw/arm/musicpal.c                        |   3 +-
> >  hw/arm/npcm7xx.c                         |  16 +-
> >  hw/arm/realview.c                        |  25 ++-
> >  hw/arm/sbsa-ref.c                        |   4 +-
> >  hw/arm/stellaris.c                       |  30 +++-
> >  hw/arm/versatilepb.c                     |  15 +-
> >  hw/arm/vexpress.c                        |   4 +-
> >  hw/arm/virt.c                            |   4 +-
> >  hw/arm/xilinx_zynq.c                     |  11 +-
> >  hw/arm/xlnx-versal.c                     |   7 +-
> >  hw/arm/xlnx-zynqmp.c                     |   8 +-
> >  hw/cris/axis_dev88.c                     |   9 +-
> >  hw/hppa/machine.c                        |   7 +-
> >  hw/i386/pc.c                             |  33 ++--
> >  hw/i386/pc_piix.c                        |   2 +-
> >  hw/i386/pc_q35.c                         |   2 +-
> >  hw/loongarch/virt.c                      |   4 +-
> >  hw/m68k/mcf5208.c                        |  19 +--
> >  hw/m68k/q800.c                           |  29 ++--
> >  hw/microblaze/petalogix_ml605_mmu.c      |   3 +-
> >  hw/microblaze/petalogix_s3adsp1800_mmu.c |   3 +-
> >  hw/mips/fuloong2e.c                      |  16 +-
> >  hw/mips/jazz.c                           |  15 +-
> >  hw/mips/loongson3_virt.c                 |   4 +-
> >  hw/mips/malta.c                          |  15 +-
> >  hw/mips/mipssim.c                        |  13 +-
> >  hw/net/etraxfs_eth.c                     |   5 +-
> >  hw/net/lan9118.c                         |   5 +-
> >  hw/net/lasi_i82596.c                     |   3 +-
> >  hw/net/smc91c111.c                       |   5 +-
> >  hw/openrisc/openrisc_sim.c               |  18 +--
> >  hw/pci/pci.c                             |  73 +++------
> >  hw/ppc/e500.c                            |   4 +-
> >  hw/ppc/mac_newworld.c                    |   4 +-
> >  hw/ppc/mac_oldworld.c                    |   4 +-
> >  hw/ppc/ppc440_bamboo.c                   |  14 +-
> >  hw/ppc/prep.c                            |   8 +-
> >  hw/ppc/spapr.c                           |  18 +--
> >  hw/riscv/microchip_pfsoc.c               |  14 +-
> >  hw/riscv/sifive_u.c                      |   7 +-
> >  hw/s390x/s390-virtio-ccw.c               |  11 +-
> >  hw/sh4/r2d.c                             |   6 +-
> >  hw/sparc/sun4m.c                         |  20 ++-
> >  hw/sparc64/sun4u.c                       |  27 +---
> >  hw/xen/xen-bus.c                         |   6 +-
> >  hw/xen/xen_devconfig.c                   |  25 ---
> >  hw/xenpv/xen_machine_pv.c                |   9 --
> >  hw/xtensa/virt.c                         |   4 +-
> >  hw/xtensa/xtfpga.c                       |  13 +-
> >  include/hw/cris/etraxfs.h                |   2 +-
> >  include/hw/i386/pc.h                     |   4 +-
> >  include/hw/net/lan9118.h                 |   2 +-
> >  include/hw/net/ne2000-isa.h              |   2 -
> >  include/hw/net/smc91c111.h               |   2 +-
> >  include/hw/pci/pci.h                     |   7 +-
> >  include/hw/xen/xen-bus.h                 |   2 +-
> >  include/hw/xen/xen-legacy-backend.h      |   1 -
> >  include/net/net.h                        |  18 +--
> >  net/net.c                                | 253 +++++++++++++++++++++++++------
> >  system/globals.c                         |   2 -
> >  tests/qtest/npcm7xx_emc-test.c           |  18 +--
> >  79 files changed, 479 insertions(+), 550 deletions(-)
> >
> >
> >
> >
>
Thomas Huth Jan. 26, 2024, 4:51 p.m. UTC | #3
On 25/01/2024 01.38, Jason Wang wrote:
> On Wed, Jan 24, 2024 at 9:14 PM David Woodhouse <dwmw2@infradead.org> wrote:
>>
>> Hi Jason,
>>
>> I think this series probably lives or dies with you. I think it's a
>> worthwhile cleanup, but I no longer have an immediate need for it; I
>> shipped a slightly ugly workaround in QEMU 8.2.
>>
>> Please could you let me know if it's worth persisting with it?
> 
> Yes it is.

Agreed! It would be great of getting rid of the ugly global nd_table[] finally!

> Thomas, I remember you've done tweaks for -nic in the past. would you
> like to review this series?

I tried to skim through the patches today, some nits here and there, but 
nothing sever, so IMHO it should be fine once they are fixed.

  HTH,
   Thomas
David Woodhouse Jan. 28, 2024, 12:37 p.m. UTC | #4
On Fri, 2024-01-26 at 17:51 +0100, Thomas Huth wrote:
> On 25/01/2024 01.38, Jason Wang wrote:
> > On Wed, Jan 24, 2024 at 9:14 PM David Woodhouse <dwmw2@infradead.org> wrote:
> > > 
> > > Hi Jason,
> > > 
> > > I think this series probably lives or dies with you. I think it's a
> > > worthwhile cleanup, but I no longer have an immediate need for it; I
> > > shipped a slightly ugly workaround in QEMU 8.2.
> > > 
> > > Please could you let me know if it's worth persisting with it?
> > 
> > Yes it is.
> 
> Agreed! It would be great of getting rid of the ugly global nd_table[] finally!
> 
> > Thomas, I remember you've done tweaks for -nic in the past. would you
> > like to review this series?
> 
> I tried to skim through the patches today, some nits here and there, but 
> nothing sever, so IMHO it should be fine once they are fixed.

Thank you for the reviews! I think I've covered everything in v4 which
I posted yesterday, except possible one Reviewed-by: tag went AWOL
which I'll round up for next time.