On Sun, 28 Apr 2024 16:00:45 +0900 Akihiko Odaki <akihiko.od...@daynix.com> wrote:
> Since qemu_set_vnet_hdr_len() is always called when > qemu_using_vnet_hdr() is called, we can merge them and save some code. > > For consistency, express that the virtio-net header is not in use by > returning 0 with qemu_get_vnet_hdr_len() instead of having a dedicated > function, qemu_get_using_vnet_hdr(). > > Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com> With a simple e1000e test (silly configuration as I was just using it as a placeholder for some pci tests) bisection led me to this for a qemu segfault. Reverting this patch resolves it. Much of this is probably irrelevant.. qemu-system-aarch64 \ -M virt,ras=on,nvdimm=on,gic-version=3,hmat=on -m 4g,maxmem=8g,slots=4 -cpu max -smp 4 \ -kernel Image \ -drive if=none,file=/mnt/d/images/full.qcow2,format=qcow2,id=hd \ -device pcie-root-port,id=root_port1 \ -device e1000e,bus=root_port1,id=rngtest0 \ -device virtio-blk-pci,drive=hd \ -nographic -no-reboot -append 'earlycon memblock=debug root=/dev/vda2 fsck.mode=skip maxcpus=4 tp_printk' \ -bios QEMU_EFI.fd I've not dug into why yet as in middle of some other debugging. Jonathan > --- > include/net/net.h | 7 ------- > hw/net/e1000e.c | 1 - > hw/net/igb.c | 1 - > hw/net/net_tx_pkt.c | 4 ++-- > hw/net/virtio-net.c | 3 --- > hw/net/vmxnet3.c | 2 -- > net/dump.c | 4 +--- > net/net.c | 24 +----------------------- > net/netmap.c | 5 ----- > net/tap.c | 28 +--------------------------- > 10 files changed, 5 insertions(+), 74 deletions(-) > > diff --git a/include/net/net.h b/include/net/net.h > index b1f9b35fcca1..6fe5a0aee833 100644 > --- a/include/net/net.h > +++ b/include/net/net.h > @@ -57,8 +57,6 @@ typedef bool (HasUfo)(NetClientState *); > typedef bool (HasUso)(NetClientState *); > typedef bool (HasVnetHdr)(NetClientState *); > typedef bool (HasVnetHdrLen)(NetClientState *, int); > -typedef bool (GetUsingVnetHdr)(NetClientState *); > -typedef void (UsingVnetHdr)(NetClientState *, bool); > typedef void (SetOffload)(NetClientState *, int, int, int, int, int, int, > int); > typedef int (GetVnetHdrLen)(NetClientState *); > typedef void (SetVnetHdrLen)(NetClientState *, int); > @@ -88,10 +86,7 @@ typedef struct NetClientInfo { > HasUso *has_uso; > HasVnetHdr *has_vnet_hdr; > HasVnetHdrLen *has_vnet_hdr_len; > - GetUsingVnetHdr *get_using_vnet_hdr; > - UsingVnetHdr *using_vnet_hdr; > SetOffload *set_offload; > - GetVnetHdrLen *get_vnet_hdr_len; > SetVnetHdrLen *set_vnet_hdr_len; > SetVnetLE *set_vnet_le; > SetVnetBE *set_vnet_be; > @@ -194,8 +189,6 @@ bool qemu_has_ufo(NetClientState *nc); > bool qemu_has_uso(NetClientState *nc); > bool qemu_has_vnet_hdr(NetClientState *nc); > bool qemu_has_vnet_hdr_len(NetClientState *nc, int len); > -bool qemu_get_using_vnet_hdr(NetClientState *nc); > -void qemu_using_vnet_hdr(NetClientState *nc, bool enable); > void qemu_set_offload(NetClientState *nc, int csum, int tso4, int tso6, > int ecn, int ufo, int uso4, int uso6); > int qemu_get_vnet_hdr_len(NetClientState *nc); > diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c > index 7c6f6029518c..d0dde767f6aa 100644 > --- a/hw/net/e1000e.c > +++ b/hw/net/e1000e.c > @@ -352,7 +352,6 @@ e1000e_init_net_peer(E1000EState *s, PCIDevice *pci_dev, > uint8_t *macaddr) > for (i = 0; i < s->conf.peers.queues; i++) { > nc = qemu_get_subqueue(s->nic, i); > qemu_set_vnet_hdr_len(nc->peer, sizeof(struct virtio_net_hdr)); > - qemu_using_vnet_hdr(nc->peer, true); > } > } > > diff --git a/hw/net/igb.c b/hw/net/igb.c > index 9b37523d6df8..1224c7ba8e38 100644 > --- a/hw/net/igb.c > +++ b/hw/net/igb.c > @@ -349,7 +349,6 @@ igb_init_net_peer(IGBState *s, PCIDevice *pci_dev, > uint8_t *macaddr) > for (i = 0; i < s->conf.peers.queues; i++) { > nc = qemu_get_subqueue(s->nic, i); > qemu_set_vnet_hdr_len(nc->peer, sizeof(struct virtio_net_hdr)); > - qemu_using_vnet_hdr(nc->peer, true); > } > } > > diff --git a/hw/net/net_tx_pkt.c b/hw/net/net_tx_pkt.c > index 2134a18c4c90..903238dca24d 100644 > --- a/hw/net/net_tx_pkt.c > +++ b/hw/net/net_tx_pkt.c > @@ -578,7 +578,7 @@ static void net_tx_pkt_sendv( > { > NetClientState *nc = opaque; > > - if (qemu_get_using_vnet_hdr(nc->peer)) { > + if (qemu_get_vnet_hdr_len(nc->peer)) { > qemu_sendv_packet(nc, virt_iov, virt_iov_cnt); > } else { > qemu_sendv_packet(nc, iov, iov_cnt); > @@ -808,7 +808,7 @@ static bool net_tx_pkt_do_sw_fragmentation(struct > NetTxPkt *pkt, > > bool net_tx_pkt_send(struct NetTxPkt *pkt, NetClientState *nc) > { > - bool offload = qemu_get_using_vnet_hdr(nc->peer); > + bool offload = qemu_get_vnet_hdr_len(nc->peer); > return net_tx_pkt_send_custom(pkt, offload, net_tx_pkt_sendv, nc); > } > > diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c > index 58014a92ad19..f6112c0ac97d 100644 > --- a/hw/net/virtio-net.c > +++ b/hw/net/virtio-net.c > @@ -3794,9 +3794,6 @@ static void virtio_net_device_realize(DeviceState *dev, > Error **errp) > > peer_test_vnet_hdr(n); > if (peer_has_vnet_hdr(n)) { > - for (i = 0; i < n->max_queue_pairs; i++) { > - qemu_using_vnet_hdr(qemu_get_subqueue(n->nic, i)->peer, true); > - } > n->host_hdr_len = sizeof(struct virtio_net_hdr); > } else { > n->host_hdr_len = 0; > diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c > index 707487c63666..63a91877730d 100644 > --- a/hw/net/vmxnet3.c > +++ b/hw/net/vmxnet3.c > @@ -2091,8 +2091,6 @@ static void vmxnet3_net_init(VMXNET3State *s) > if (s->peer_has_vhdr) { > qemu_set_vnet_hdr_len(qemu_get_queue(s->nic)->peer, > sizeof(struct virtio_net_hdr)); > - > - qemu_using_vnet_hdr(qemu_get_queue(s->nic)->peer, 1); > } > > qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a); > diff --git a/net/dump.c b/net/dump.c > index 16073f245828..956e34a123c0 100644 > --- a/net/dump.c > +++ b/net/dump.c > @@ -154,10 +154,8 @@ static ssize_t filter_dump_receive_iov(NetFilterState > *nf, NetClientState *sndr, > int iovcnt, NetPacketSent *sent_cb) > { > NetFilterDumpState *nfds = FILTER_DUMP(nf); > - int offset = qemu_get_using_vnet_hdr(nf->netdev) ? > - qemu_get_vnet_hdr_len(nf->netdev) : 0; > > - dump_receive_iov(&nfds->ds, iov, iovcnt, offset); > + dump_receive_iov(&nfds->ds, iov, iovcnt, > qemu_get_vnet_hdr_len(nf->netdev)); > return 0; > } > > diff --git a/net/net.c b/net/net.c > index a2f0c828bbf2..bd51037ebfb0 100644 > --- a/net/net.c > +++ b/net/net.c > @@ -529,24 +529,6 @@ bool qemu_has_vnet_hdr_len(NetClientState *nc, int len) > return nc->info->has_vnet_hdr_len(nc, len); > } > > -bool qemu_get_using_vnet_hdr(NetClientState *nc) > -{ > - if (!nc || !nc->info->get_using_vnet_hdr) { > - return false; > - } > - > - return nc->info->get_using_vnet_hdr(nc); > -} > - > -void qemu_using_vnet_hdr(NetClientState *nc, bool enable) > -{ > - if (!nc || !nc->info->using_vnet_hdr) { > - return; > - } > - > - nc->info->using_vnet_hdr(nc, enable); > -} > - > void qemu_set_offload(NetClientState *nc, int csum, int tso4, int tso6, > int ecn, int ufo, int uso4, int uso6) > { > @@ -559,11 +541,7 @@ void qemu_set_offload(NetClientState *nc, int csum, int > tso4, int tso6, > > int qemu_get_vnet_hdr_len(NetClientState *nc) > { > - if (!nc || !nc->info->get_vnet_hdr_len) { > - return 0; > - } > - > - return nc->info->get_vnet_hdr_len(nc); > + return nc->vnet_hdr_len; > } > > void qemu_set_vnet_hdr_len(NetClientState *nc, int len) > diff --git a/net/netmap.c b/net/netmap.c > index 241b27c8e973..297510e19088 100644 > --- a/net/netmap.c > +++ b/net/netmap.c > @@ -351,10 +351,6 @@ static bool netmap_has_vnet_hdr(NetClientState *nc) > return netmap_has_vnet_hdr_len(nc, sizeof(struct virtio_net_hdr)); > } > > -static void netmap_using_vnet_hdr(NetClientState *nc, bool enable) > -{ > -} > - > static void netmap_set_vnet_hdr_len(NetClientState *nc, int len) > { > NetmapState *s = DO_UPCAST(NetmapState, nc, nc); > @@ -393,7 +389,6 @@ static NetClientInfo net_netmap_info = { > .has_ufo = netmap_has_vnet_hdr, > .has_vnet_hdr = netmap_has_vnet_hdr, > .has_vnet_hdr_len = netmap_has_vnet_hdr_len, > - .using_vnet_hdr = netmap_using_vnet_hdr, > .set_offload = netmap_set_offload, > .set_vnet_hdr_len = netmap_set_vnet_hdr_len, > }; > diff --git a/net/tap.c b/net/tap.c > index 72ae95894ff1..c848844955df 100644 > --- a/net/tap.c e1> +++ b/net/tap.c > @@ -262,13 +262,6 @@ static bool tap_has_vnet_hdr_len(NetClientState *nc, int > len) > return tap_has_vnet_hdr(nc); > } > > -static int tap_get_vnet_hdr_len(NetClientState *nc) > -{ > - TAPState *s = DO_UPCAST(TAPState, nc, nc); > - > - return s->host_vnet_hdr_len; > -} > - > static void tap_set_vnet_hdr_len(NetClientState *nc, int len) > { > TAPState *s = DO_UPCAST(TAPState, nc, nc); > @@ -280,23 +273,7 @@ static void tap_set_vnet_hdr_len(NetClientState *nc, int > len) > > tap_fd_set_vnet_hdr_len(s->fd, len); > s->host_vnet_hdr_len = len; > -} > - > -static bool tap_get_using_vnet_hdr(NetClientState *nc) > -{ > - TAPState *s = DO_UPCAST(TAPState, nc, nc); > - > - return s->using_vnet_hdr; > -} > - > -static void tap_using_vnet_hdr(NetClientState *nc, bool using_vnet_hdr) > -{ > - TAPState *s = DO_UPCAST(TAPState, nc, nc); > - > - assert(nc->info->type == NET_CLIENT_DRIVER_TAP); > - assert(!!s->host_vnet_hdr_len == using_vnet_hdr); > - > - s->using_vnet_hdr = using_vnet_hdr; > + s->using_vnet_hdr = true; > } > > static int tap_set_vnet_le(NetClientState *nc, bool is_le) > @@ -394,10 +371,7 @@ static NetClientInfo net_tap_info = { > .has_uso = tap_has_uso, > .has_vnet_hdr = tap_has_vnet_hdr, > .has_vnet_hdr_len = tap_has_vnet_hdr_len, > - .get_using_vnet_hdr = tap_get_using_vnet_hdr, > - .using_vnet_hdr = tap_using_vnet_hdr, > .set_offload = tap_set_offload, > - .get_vnet_hdr_len = tap_get_vnet_hdr_len, > .set_vnet_hdr_len = tap_set_vnet_hdr_len, > .set_vnet_le = tap_set_vnet_le, > .set_vnet_be = tap_set_vnet_be, >