[PATCH v9 0/9] Introduce igb

Akihiko Odaki posted 9 patches 1 year, 1 month ago
MAINTAINERS                                   |    9 +
docs/system/device-emulation.rst              |    1 +
docs/system/devices/igb.rst                   |   71 +
hw/net/Kconfig                                |    5 +
hw/net/e1000.c                                |    1 +
hw/net/e1000_common.h                         |  102 +
hw/net/e1000_regs.h                           |  954 +---
hw/net/e1000e.c                               |    3 +-
hw/net/e1000e_core.c                          |   60 +-
hw/net/e1000x_common.c                        |    1 +
hw/net/e1000x_common.h                        |   74 -
hw/net/e1000x_regs.h                          |  967 ++++
hw/net/igb.c                                  |  615 +++
hw/net/igb_common.h                           |  146 +
hw/net/igb_core.c                             | 4076 +++++++++++++++++
hw/net/igb_core.h                             |  146 +
hw/net/igb_regs.h                             |  648 +++
hw/net/igbvf.c                                |  327 ++
hw/net/meson.build                            |    2 +
hw/net/net_rx_pkt.c                           |   48 +-
hw/net/net_rx_pkt.h                           |    5 +-
hw/net/trace-events                           |   40 +-
hw/net/virtio-net.c                           |   67 +-
hw/net/vmxnet3.c                              |   22 +-
hw/pci/pcie_sriov.c                           |    5 +
include/hw/pci/pcie_sriov.h                   |    3 +
include/net/eth.h                             |    8 +-
net/eth.c                                     |   26 +-
.../org.centos/stream/8/x86_64/test-avocado   |    1 +
tests/avocado/igb.py                          |   38 +
tests/qtest/e1000e-test.c                     |   25 +-
tests/qtest/fuzz/generic_fuzz_configs.h       |    5 +
tests/qtest/igb-test.c                        |  243 +
tests/qtest/libqos/e1000e.c                   |   12 -
tests/qtest/libqos/e1000e.h                   |   14 +
tests/qtest/libqos/igb.c                      |  185 +
tests/qtest/libqos/meson.build                |    1 +
tests/qtest/meson.build                       |    1 +
38 files changed, 7809 insertions(+), 1148 deletions(-)
create mode 100644 docs/system/devices/igb.rst
create mode 100644 hw/net/e1000_common.h
create mode 100644 hw/net/e1000x_regs.h
create mode 100644 hw/net/igb.c
create mode 100644 hw/net/igb_common.h
create mode 100644 hw/net/igb_core.c
create mode 100644 hw/net/igb_core.h
create mode 100644 hw/net/igb_regs.h
create mode 100644 hw/net/igbvf.c
create mode 100644 tests/avocado/igb.py
create mode 100644 tests/qtest/igb-test.c
create mode 100644 tests/qtest/libqos/igb.c
[PATCH v9 0/9] Introduce igb
Posted by Akihiko Odaki 1 year, 1 month ago
Based-on: <20230223102018.141748-1-akihiko.odaki@daynix.com>
([PATCH v6 00/34] e1000x cleanups (preliminary for IGB))

igb is a family of Intel's gigabit ethernet controllers. This series implements
82576 emulation in particular. You can see the last patch for the documentation.

Note that there is another effort to bring 82576 emulation. This series was
developed independently by Sriram Yagnaraman.
https://lists.gnu.org/archive/html/qemu-devel/2022-12/msg04670.html

- V8 -> V9:
- Rebased.
- Added patch "net/eth: Introduce EthL4HdrProto". This is not strictly necessary
  yet but I'm still adding it because it will be necessary soon and it touches
  some code common for igb and e1000e.
- Replaced Linux internal types in hw/net/igb_regs.h with standard ones.

V7 -> V8:
- Removed obsolete patch
  "hw/net/net_tx_pkt: Introduce net_tx_pkt_get_eth_hdr" (Cédric Le Goater)

V6 -> V7:
- Reordered statements in igb_receive_internal() so that checksum will be
  calculated only once and it will be more close to e1000e_receive_internal().

V5 -> V6:
- Rebased.
- Renamed "test" to "packet" in tests/qtest/e1000e-test.c.
- Fixed Rx logic so that a Rx pool without enough space won't prevent other
  pools from receiving, based on Sriram Yagnaraman's work.

V4 -> V5:
- Rebased.
- Squashed patches to copy from e1000e code and modify it.
- Listed the implemented features.
- Added a check for interrupts availablity on PF.
- Fixed the declaration of igb_receive_internal(). (Sriram Yagnaraman)

V3 -> V4:
- Rebased.
- Corrected PCIDevice specified for DMA.

V2 -> V3:
- Rebased.
- Fixed PCIDevice reference in hw/net/igbvf.c.
- Fixed TX packet switching when VM loopback is enabled.
- Fixed VMDq enablement check.
- Fixed RX descriptor length parser.
- Fixed the definitions of RQDPC readers.
- Implemented VLAN VM filter.
- Implemented VT_CTL.Def_PL.
- Implemented the combination of VMDq and RSS.
- Noted that igb is tested with Windows HLK.

V1 -> V2:
- Spun off e1000e general improvements to a distinct series.
- Restored vnet_hdr offload as there seems nothing preventing from that.

Akihiko Odaki (9):
  net/eth: Introduce EthL4HdrProto
  pcie: Introduce pcie_sriov_num_vfs
  e1000: Split header files
  Intrdocue igb device emulation
  tests/qtest/e1000e-test: Fabricate ethernet header
  tests/qtest/libqos/e1000e: Export macreg functions
  igb: Introduce qtest for igb device
  tests/avocado: Add igb test
  docs/system/devices/igb: Add igb documentation

 MAINTAINERS                                   |    9 +
 docs/system/device-emulation.rst              |    1 +
 docs/system/devices/igb.rst                   |   71 +
 hw/net/Kconfig                                |    5 +
 hw/net/e1000.c                                |    1 +
 hw/net/e1000_common.h                         |  102 +
 hw/net/e1000_regs.h                           |  954 +---
 hw/net/e1000e.c                               |    3 +-
 hw/net/e1000e_core.c                          |   60 +-
 hw/net/e1000x_common.c                        |    1 +
 hw/net/e1000x_common.h                        |   74 -
 hw/net/e1000x_regs.h                          |  967 ++++
 hw/net/igb.c                                  |  615 +++
 hw/net/igb_common.h                           |  146 +
 hw/net/igb_core.c                             | 4076 +++++++++++++++++
 hw/net/igb_core.h                             |  146 +
 hw/net/igb_regs.h                             |  648 +++
 hw/net/igbvf.c                                |  327 ++
 hw/net/meson.build                            |    2 +
 hw/net/net_rx_pkt.c                           |   48 +-
 hw/net/net_rx_pkt.h                           |    5 +-
 hw/net/trace-events                           |   40 +-
 hw/net/virtio-net.c                           |   67 +-
 hw/net/vmxnet3.c                              |   22 +-
 hw/pci/pcie_sriov.c                           |    5 +
 include/hw/pci/pcie_sriov.h                   |    3 +
 include/net/eth.h                             |    8 +-
 net/eth.c                                     |   26 +-
 .../org.centos/stream/8/x86_64/test-avocado   |    1 +
 tests/avocado/igb.py                          |   38 +
 tests/qtest/e1000e-test.c                     |   25 +-
 tests/qtest/fuzz/generic_fuzz_configs.h       |    5 +
 tests/qtest/igb-test.c                        |  243 +
 tests/qtest/libqos/e1000e.c                   |   12 -
 tests/qtest/libqos/e1000e.h                   |   14 +
 tests/qtest/libqos/igb.c                      |  185 +
 tests/qtest/libqos/meson.build                |    1 +
 tests/qtest/meson.build                       |    1 +
 38 files changed, 7809 insertions(+), 1148 deletions(-)
 create mode 100644 docs/system/devices/igb.rst
 create mode 100644 hw/net/e1000_common.h
 create mode 100644 hw/net/e1000x_regs.h
 create mode 100644 hw/net/igb.c
 create mode 100644 hw/net/igb_common.h
 create mode 100644 hw/net/igb_core.c
 create mode 100644 hw/net/igb_core.h
 create mode 100644 hw/net/igb_regs.h
 create mode 100644 hw/net/igbvf.c
 create mode 100644 tests/avocado/igb.py
 create mode 100644 tests/qtest/igb-test.c
 create mode 100644 tests/qtest/libqos/igb.c

-- 
2.39.1


Re: [PATCH v9 0/9] Introduce igb
Posted by Jason Wang 1 year ago
On Thu, Feb 23, 2023 at 6:51 PM Akihiko Odaki <akihiko.odaki@daynix.com> wrote:
>
> Based-on: <20230223102018.141748-1-akihiko.odaki@daynix.com>
> ([PATCH v6 00/34] e1000x cleanups (preliminary for IGB))
>
> igb is a family of Intel's gigabit ethernet controllers. This series implements
> 82576 emulation in particular. You can see the last patch for the documentation.
>
> Note that there is another effort to bring 82576 emulation. This series was
> developed independently by Sriram Yagnaraman.
> https://lists.gnu.org/archive/html/qemu-devel/2022-12/msg04670.html

I've queued this series with some fixes about the compiler warnings
about the end of statement just after "default:"

It mainly the user of

commit 5bf7f8430247e7bff7e2010de25556aeb6adb548
Author: Akihiko Odaki <akihiko.odaki@daynix.com>
Date:   Thu Feb 23 19:50:49 2023 +0900

    net/eth: Introduce EthL4HdrProto

That changes virtio-net, e1000e, and igb. Please check the changes and
post patches on top if I was wrong.

diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c
index 239875dd89..4d9679ca0b 100644
--- a/hw/net/e1000e_core.c
+++ b/hw/net/e1000e_core.c
@@ -1275,6 +1275,7 @@ e1000e_build_rx_metadata(E1000ECore *core,
             break;

         default:
+            break;
         }
     } else {
         trace_e1000e_rx_metadata_l4_cso_disabled();
diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c
index d779c3dc14..a7c7bfdc75 100644
--- a/hw/net/igb_core.c
+++ b/hw/net/igb_core.c
@@ -1239,6 +1239,7 @@ igb_build_rx_metadata(IGBCore *core,
             break;

         default:
+            goto func_exit;
         }
     } else {
         trace_e1000e_rx_metadata_l4_cso_disabled();
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 4b1d387356..3524f02f2e 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -1751,6 +1751,7 @@ static uint8_t virtio_net_get_hash_type(bool hasip4,
             break;

         default:
+            break;
         }

         if (types & VIRTIO_NET_RSS_HASH_TYPE_IPv4) {
@@ -1777,6 +1778,7 @@ static uint8_t virtio_net_get_hash_type(bool hasip4,
             break;

         default:
+            break;
         }

         if (types & VIRTIO_NET_RSS_HASH_TYPE_IP_EX) {


>
> - V8 -> V9:
> - Rebased.
> - Added patch "net/eth: Introduce EthL4HdrProto". This is not strictly necessary
>   yet but I'm still adding it because it will be necessary soon and it touches
>   some code common for igb and e1000e.
> - Replaced Linux internal types in hw/net/igb_regs.h with standard ones.
>
> V7 -> V8:
> - Removed obsolete patch
>   "hw/net/net_tx_pkt: Introduce net_tx_pkt_get_eth_hdr" (Cédric Le Goater)
>
> V6 -> V7:
> - Reordered statements in igb_receive_internal() so that checksum will be
>   calculated only once and it will be more close to e1000e_receive_internal().
>
> V5 -> V6:
> - Rebased.
> - Renamed "test" to "packet" in tests/qtest/e1000e-test.c.
> - Fixed Rx logic so that a Rx pool without enough space won't prevent other
>   pools from receiving, based on Sriram Yagnaraman's work.
>
> V4 -> V5:
> - Rebased.
> - Squashed patches to copy from e1000e code and modify it.
> - Listed the implemented features.
> - Added a check for interrupts availablity on PF.
> - Fixed the declaration of igb_receive_internal(). (Sriram Yagnaraman)
>
> V3 -> V4:
> - Rebased.
> - Corrected PCIDevice specified for DMA.
>
> V2 -> V3:
> - Rebased.
> - Fixed PCIDevice reference in hw/net/igbvf.c.
> - Fixed TX packet switching when VM loopback is enabled.
> - Fixed VMDq enablement check.
> - Fixed RX descriptor length parser.
> - Fixed the definitions of RQDPC readers.
> - Implemented VLAN VM filter.
> - Implemented VT_CTL.Def_PL.
> - Implemented the combination of VMDq and RSS.
> - Noted that igb is tested with Windows HLK.
>
> V1 -> V2:
> - Spun off e1000e general improvements to a distinct series.
> - Restored vnet_hdr offload as there seems nothing preventing from that.
>
> Akihiko Odaki (9):
>   net/eth: Introduce EthL4HdrProto
>   pcie: Introduce pcie_sriov_num_vfs
>   e1000: Split header files
>   Intrdocue igb device emulation
>   tests/qtest/e1000e-test: Fabricate ethernet header
>   tests/qtest/libqos/e1000e: Export macreg functions
>   igb: Introduce qtest for igb device
>   tests/avocado: Add igb test
>   docs/system/devices/igb: Add igb documentation
>
>  MAINTAINERS                                   |    9 +
>  docs/system/device-emulation.rst              |    1 +
>  docs/system/devices/igb.rst                   |   71 +
>  hw/net/Kconfig                                |    5 +
>  hw/net/e1000.c                                |    1 +
>  hw/net/e1000_common.h                         |  102 +
>  hw/net/e1000_regs.h                           |  954 +---
>  hw/net/e1000e.c                               |    3 +-
>  hw/net/e1000e_core.c                          |   60 +-
>  hw/net/e1000x_common.c                        |    1 +
>  hw/net/e1000x_common.h                        |   74 -
>  hw/net/e1000x_regs.h                          |  967 ++++
>  hw/net/igb.c                                  |  615 +++
>  hw/net/igb_common.h                           |  146 +
>  hw/net/igb_core.c                             | 4076 +++++++++++++++++
>  hw/net/igb_core.h                             |  146 +
>  hw/net/igb_regs.h                             |  648 +++
>  hw/net/igbvf.c                                |  327 ++
>  hw/net/meson.build                            |    2 +
>  hw/net/net_rx_pkt.c                           |   48 +-
>  hw/net/net_rx_pkt.h                           |    5 +-
>  hw/net/trace-events                           |   40 +-
>  hw/net/virtio-net.c                           |   67 +-
>  hw/net/vmxnet3.c                              |   22 +-
>  hw/pci/pcie_sriov.c                           |    5 +
>  include/hw/pci/pcie_sriov.h                   |    3 +
>  include/net/eth.h                             |    8 +-
>  net/eth.c                                     |   26 +-
>  .../org.centos/stream/8/x86_64/test-avocado   |    1 +
>  tests/avocado/igb.py                          |   38 +
>  tests/qtest/e1000e-test.c                     |   25 +-
>  tests/qtest/fuzz/generic_fuzz_configs.h       |    5 +
>  tests/qtest/igb-test.c                        |  243 +
>  tests/qtest/libqos/e1000e.c                   |   12 -
>  tests/qtest/libqos/e1000e.h                   |   14 +
>  tests/qtest/libqos/igb.c                      |  185 +
>  tests/qtest/libqos/meson.build                |    1 +
>  tests/qtest/meson.build                       |    1 +
>  38 files changed, 7809 insertions(+), 1148 deletions(-)
>  create mode 100644 docs/system/devices/igb.rst
>  create mode 100644 hw/net/e1000_common.h
>  create mode 100644 hw/net/e1000x_regs.h
>  create mode 100644 hw/net/igb.c
>  create mode 100644 hw/net/igb_common.h
>  create mode 100644 hw/net/igb_core.c
>  create mode 100644 hw/net/igb_core.h
>  create mode 100644 hw/net/igb_regs.h
>  create mode 100644 hw/net/igbvf.c
>  create mode 100644 tests/avocado/igb.py
>  create mode 100644 tests/qtest/igb-test.c
>  create mode 100644 tests/qtest/libqos/igb.c
>
> --
> 2.39.1
>