On Thu, Jan 22, 2015 at 12:03:49AM -0800, sfeldma@gmail.com wrote: > From: Scott Feldman > > v5: > > - Per Jason Wang review: > - Fix some missing/wrong references in the rocker.txt spec > - mark rocker as unmigratable. > > v4: > > - Per Paolo Bonzini review: > - move reg_guide.txt to docs/specs/rocker.txt > - fix some spelling/grammer mistakes in the rocker.txt doc > - fix some misleading/wrong statements in rocker.txt > - add double 4-byte access for 64-bit registers > - define new ROCKER_Exxx to replace usage of errno.h return codes > - Add patch from David Ahern to timestamp debug output > > v3: > > - Per Stefan Hajnoczi review: > - move HMP rocker cmds to "info rocker" > - prefix QMP rocker cmds with query- > - tag QMP cmds as "Since 2.3" > - convert structs to typedef with CamelCase naming > - Remove SDHCI device ID move patch...Paolo Bonzini is addressing > SDHCI move is separate patch. > > v2: > > - Address reg_guide.txt review comments from Eric Blake > - Address QMP review comments from Eric Blake > > v1: > > [This is a collaboration between myself and Jiri Pirko]. > > This patch set adds a new ethernet switch device, called rocker. Rocker is > intended to emulate HW features of switch ASICs found in today's > data-center-class switch/routers. The original motivation in creating a new > device is to accelerate device driver development for ethernet switches in the > Linux kernel. A device driver for rocker already exists in the Linux 3.18 > kernel and loads against this device. Basic L2 switching (bridging) > functionality is offloaded to the device. Work continues to enable offloading > of L3 routing functions and ACLs, as well as support for a flow-based modes, > such as OpenVSwitch with OpenFlow. Future support for terminating L2-over-L3 > tunnels is also planned. > > The core network processing functions are based on the spec of a real device: > Broadcom's OF-DPA. Specifically, rocker borrows OF-DPA's network processing > pipeline comprised of flow match and action tables. Only the OF-DPA spec was > used in constructing rocker. The rocker developers do not have access to the > real OF-DPA's software source code, so this is a clean-room, ground-up > development. > > Each rocker device is a PCI device with a memory-mapped register space and > MSI-X interrupts for command and event processing, as well as CPU-bound I/O. > Each device can support up to 62 "front-panel" ports, which present themselves > as -netdev attachment points. The device is programmed using OF-DPA flow and > group tables to setup the flow pipeline. The programming defines the > forwarding path for packets ingressing on 'front-panel' ports. The forwarding > path can look at L2/L3/L4 packet header to forward the packet to its > destination. For the performance path, packets would ingress and egress only > on the device, and not be passed up to the device driver (or host OS). The > slow path for control packets will forward packets to the CPU via the device > driver for host OS processing. > > A QMP/HMP interface is added to give inside into the device's internal port > configuration and flow/group tables. > > A test directory is included with some basic sanity tests to verify the device > and driver. > > David Ahern (1): > rocker: timestamp on the debug logs helps correlate with events in > the VM > > Scott Feldman (9): > net: add MAC address string printer > virtio-net: use qemu_mac_strdup_printf > rocker: add register programming guide > pci: add rocker device ID > pci: add network device class 'other' for network switches > rocker: add new rocker switch device > qmp: add rocker device support > rocker: add tests > MAINTAINERS: add rocker > > MAINTAINERS | 6 + > default-configs/pci.mak | 1 + > docs/specs/pci-ids.txt | 1 + > docs/specs/rocker.txt | 1006 ++++++++++++++ > hmp-commands.hx | 24 + > hmp.c | 303 +++++ > hmp.h | 4 + > hw/net/Makefile.objs | 3 + > hw/net/rocker/rocker.c | 1517 +++++++++++++++++++++ > hw/net/rocker/rocker.h | 85 ++ > hw/net/rocker/rocker_desc.c | 379 ++++++ > hw/net/rocker/rocker_desc.h | 57 + > hw/net/rocker/rocker_fp.c | 242 ++++ > hw/net/rocker/rocker_fp.h | 54 + > hw/net/rocker/rocker_hw.h | 491 +++++++ > hw/net/rocker/rocker_of_dpa.c | 2622 ++++++++++++++++++++++++++++++++++++ > hw/net/rocker/rocker_of_dpa.h | 25 + > hw/net/rocker/rocker_tlv.h | 244 ++++ > hw/net/rocker/rocker_world.c | 108 ++ > hw/net/rocker/rocker_world.h | 63 + > hw/net/rocker/test/README | 5 + > hw/net/rocker/test/all | 19 + > hw/net/rocker/test/bridge | 43 + > hw/net/rocker/test/bridge-stp | 52 + > hw/net/rocker/test/bridge-vlan | 52 + > hw/net/rocker/test/bridge-vlan-stp | 64 + > hw/net/rocker/test/port | 22 + > hw/net/rocker/test/tut.dot | 8 + > hw/net/virtio-net.c | 12 +- > include/hw/pci/pci.h | 1 + > include/hw/pci/pci_ids.h | 1 + > include/net/net.h | 1 + > monitor.c | 28 + > net/net.c | 7 + > qapi-schema.json | 3 + > qapi/rocker.json | 259 ++++ > qmp-commands.hx | 97 ++ > 37 files changed, 7900 insertions(+), 9 deletions(-) > create mode 100644 docs/specs/rocker.txt > create mode 100644 hw/net/rocker/rocker.c > create mode 100644 hw/net/rocker/rocker.h > create mode 100644 hw/net/rocker/rocker_desc.c > create mode 100644 hw/net/rocker/rocker_desc.h > create mode 100644 hw/net/rocker/rocker_fp.c > create mode 100644 hw/net/rocker/rocker_fp.h > create mode 100644 hw/net/rocker/rocker_hw.h > create mode 100644 hw/net/rocker/rocker_of_dpa.c > create mode 100644 hw/net/rocker/rocker_of_dpa.h > create mode 100644 hw/net/rocker/rocker_tlv.h > create mode 100644 hw/net/rocker/rocker_world.c > create mode 100644 hw/net/rocker/rocker_world.h > create mode 100644 hw/net/rocker/test/README > create mode 100755 hw/net/rocker/test/all > create mode 100755 hw/net/rocker/test/bridge > create mode 100755 hw/net/rocker/test/bridge-stp > create mode 100755 hw/net/rocker/test/bridge-vlan > create mode 100755 hw/net/rocker/test/bridge-vlan-stp > create mode 100755 hw/net/rocker/test/port > create mode 100644 hw/net/rocker/test/tut.dot > create mode 100644 qapi/rocker.json Thanks, this series is in good shape. I have left some final comments including memory leaks and moving the test code (these are worth fixing). Looking forward to merging the next revision!