qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/45] Rework matching of network devices to -nic options
@ 2023-10-22 15:51 David Woodhouse
  2023-10-22 15:51 ` [PATCH 01/45] net: add qemu_{configure, create}_nic_device(), qemu_find_nic_info() David Woodhouse
                   ` (44 more replies)
  0 siblings, 45 replies; 50+ messages in thread
From: David Woodhouse @ 2023-10-22 15:51 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Beniamino Galvani, Peter Maydell,
	Strahinja Jankovic, Niek Linnenbank, Cédric Le Goater,
	Andrew Jeffery, Joel Stanley, Igor Mitsyanko,
	Jean-Christophe Dubois, Andrey Smirnov,
	Philippe Mathieu-Daudé, Rob Herring, Subbaraya Sundeep,
	Jan Kiszka, Tyrone Ting, Hao Wu, Radoslaw Biernacki,
	Leif Lindholm, Marcin Juszkiewicz, Edgar E. Iglesias,
	Alistair Francis, Helge Deller, Paolo Bonzini, Eduardo Habkost,
	Michael S. Tsirkin, Marcel Apfelbaum, Song Gao, Thomas Huth,
	Laurent Vivier, Huacai Chen, Jiaxun Yang, Hervé Poussineau,
	Aleksandar Rikalo, Aurelien Jarno, Jason Wang, Jia Liu,
	Stafford Horne, Mark Cave-Ayland, Nicholas Piggin,
	Daniel Henrique Barboza, David Gibson, Harsh Prateek Bora,
	Bin Meng, Palmer Dabbelt, Weiwei Li, Liu Zhiwei,
	David Hildenbrand, Ilya Leoshkevich, Halil Pasic,
	Christian Borntraeger, Eric Farman, Yoshinori Sato, Magnus Damm,
	Artyom Tarasenko, Stefano Stabellini, Anthony Perard,
	Paul Durrant, Max Filippov, qemu-arm, qemu-ppc, qemu-riscv,
	qemu-s390x, xen-devel

In https://lore.kernel.org/qemu-devel/20231019154020.99080-20-dwmw2@infradead.org/
I lamented that the default NIC creation seemed fairly hackish but "that
isn't a yak I want to shave today."

Yet here we are...

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 ditch the two ugly patches which fixed up the Xen network
device handling, and replace them 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.

David Woodhouse (45):
      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_configure_nic_device()
      hw/microblaze: use qemu_configure_nic_device()
      hw/mips: use qemu_create_nic_device()
      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_configure_nic_device()
      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                        |   6 +-
 hw/i386/pc.c                             |  20 +--
 hw/loongarch/virt.c                      |   4 +-
 hw/m68k/mcf5208.c                        |  20 +--
 hw/m68k/q800.c                           |  28 ++--
 hw/microblaze/petalogix_ml605_mmu.c      |   3 +-
 hw/microblaze/petalogix_s3adsp1800_mmu.c |   3 +-
 hw/mips/fuloong2e.c                      |  16 +-
 hw/mips/jazz.c                           |  16 +-
 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                   |  13 +-
 hw/ppc/prep.c                            |   7 +-
 hw/ppc/spapr.c                           |  18 +--
 hw/riscv/microchip_pfsoc.c               |  13 +-
 hw/riscv/sifive_u.c                      |   7 +-
 hw/s390x/s390-virtio-ccw.c               |  11 +-
 hw/sh4/r2d.c                             |   6 +-
 hw/sparc/sun4m.c                         |   8 +-
 hw/sparc64/sun4u.c                       |  27 +---
 hw/xen/xen-bus.c                         |   4 +
 hw/xen/xen_devconfig.c                   |  25 ---
 hw/xenpv/xen_machine_pv.c                |   9 --
 hw/xtensa/virt.c                         |   4 +-
 hw/xtensa/xtfpga.c                       |  11 +-
 include/hw/cris/etraxfs.h                |   2 +-
 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-legacy-backend.h      |   1 -
 include/net/net.h                        |  18 +--
 net/net.c                                | 252 +++++++++++++++++++++++++------
 system/globals.c                         |   2 -
 tests/qtest/npcm7xx_emc-test.c           |  18 +--
 75 files changed, 455 insertions(+), 531 deletions(-)




^ permalink raw reply	[flat|nested] 50+ messages in thread

end of thread, other threads:[~2023-10-27 12:32 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-22 15:51 [PATCH 0/45] Rework matching of network devices to -nic options David Woodhouse
2023-10-22 15:51 ` [PATCH 01/45] net: add qemu_{configure, create}_nic_device(), qemu_find_nic_info() David Woodhouse
2023-10-22 15:51 ` [PATCH 02/45] net: report list of available models according to platform David Woodhouse
2023-10-22 15:51 ` [PATCH 03/45] net: add qemu_create_nic_bus_devices() David Woodhouse
2023-10-22 15:51 ` [PATCH 04/45] hw/pci: add pci_init_nic_devices(), pci_init_nic_in_slot() David Woodhouse
2023-10-22 15:51 ` [PATCH 05/45] hw/i386/pc: use qemu_get_nic_info() and pci_init_nic_devices() David Woodhouse
2023-10-22 15:51 ` [PATCH 06/45] hw/xen: use qemu_create_nic_bus_devices() to instantiate Xen NICs David Woodhouse
2023-10-22 15:51 ` [PATCH 07/45] hw/alpha/dp264: use pci_init_nic_devices() David Woodhouse
2023-10-22 15:51 ` [PATCH 08/45] hw/arm/sbsa-ref: " David Woodhouse
2023-10-24 11:32   ` Leif Lindholm
2023-10-22 15:51 ` [PATCH 09/45] hw/arm/virt: " David Woodhouse
2023-10-22 15:51 ` [PATCH 10/45] hw/hppa: " David Woodhouse
2023-10-22 15:51 ` [PATCH 11/45] hw/loongarch: " David Woodhouse
2023-10-22 15:51 ` [PATCH 12/45] hw/mips/fuloong2e: " David Woodhouse
2023-10-22 15:51 ` [PATCH 13/45] hw/mips/malta: " David Woodhouse
2023-10-22 15:51 ` [PATCH 14/45] hw/mips/loongson3_virt: " David Woodhouse
2023-10-22 15:51 ` [PATCH 15/45] hw/ppc/prep: " David Woodhouse
2023-10-22 15:51 ` [PATCH 16/45] hw/ppc/spapr: use qemu_get_nic_info() and pci_init_nic_devices() David Woodhouse
2023-10-22 15:51 ` [PATCH 17/45] hw/ppc: use pci_init_nic_devices() David Woodhouse
2023-10-22 15:51 ` [PATCH 18/45] hw/sh4/r2d: " David Woodhouse
2023-10-27 12:31   ` Yoshinori Sato
2023-10-22 15:51 ` [PATCH 19/45] hw/sparc64/sun4u: " David Woodhouse
2023-10-22 15:51 ` [PATCH 20/45] hw/xtensa/virt: " David Woodhouse
2023-10-22 15:51 ` [PATCH 21/45] hw/arm/allwinner: use qemu_configure_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 22/45] hw/arm/aspeed: " David Woodhouse
2023-10-22 15:51 ` [PATCH 23/45] hw/arm/exynos4: use qemu_create_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 24/45] hw/arm/fsl: use qemu_configure_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 25/45] hw/net/smc91c111: " David Woodhouse
2023-10-22 15:51 ` [PATCH 26/45] hw/net/lan9118: " David Woodhouse
2023-10-22 15:51 ` [PATCH 27/45] hw/arm/highbank: use qemu_create_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 28/45] hw/arm/npcm7xx: use qemu_configure_nic_device, allow emc0/emc1 as aliases David Woodhouse
2023-10-22 15:51 ` [PATCH 29/45] hw/arm/stellaris: use qemu_find_nic_info() David Woodhouse
2023-10-22 15:51 ` [PATCH 30/45] hw/arm: use qemu_configure_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 31/45] hw/net/etraxfs-eth: " David Woodhouse
2023-10-22 15:51 ` [PATCH 32/45] hw/m68k/mcf5208: use qemu_create_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 33/45] hw/m68k/q800: use qemu_configure_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 34/45] hw/microblaze: " David Woodhouse
2023-10-22 15:51 ` [PATCH 35/45] hw/mips: use qemu_create_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 36/45] hw/net/lasi_i82596: use qemu_configure_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 37/45] hw/openrisc/openrisc_sim: use qemu_create_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 38/45] hw/riscv: use qemu_configure_nic_device() David Woodhouse
2023-10-25 15:42   ` Daniel Henrique Barboza
2023-10-25 15:51     ` David Woodhouse
2023-10-22 15:51 ` [PATCH 39/45] hw/s390x/s390-virtio-ccw: use qemu_create_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 40/45] hw/sparc/sun4m: use qemu_configure_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 41/45] hw/xtensa/xtfpga: use qemu_create_nic_device() David Woodhouse
2023-10-22 15:51 ` [PATCH 42/45] net: remove qemu_check_nic_model() David Woodhouse
2023-10-22 15:51 ` [PATCH 43/45] hw/pci: remove pci_nic_init_nofail() David Woodhouse
2023-10-22 15:51 ` [PATCH 44/45] net: remove qemu_show_nic_models(), qemu_find_nic_model() David Woodhouse
2023-10-22 15:52 ` [PATCH 45/45] net: make nb_nics and nd_table[] static in net/net.c David Woodhouse

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).