1. 01 Mar, 2021 6 commits
    • Torin Cooper-Bennun's avatar
      can: tcan4x5x: tcan4x5x_init(): fix initialization - clear MRAM before entering Normal Mode · 27126252
      Torin Cooper-Bennun authored
      This patch prevents a potentially destructive race condition. The
      device is fully operational on the bus after entering Normal Mode, so
      zeroing the MRAM after entering this mode may lead to loss of
      information, e.g. new received messages.
      
      This patch fixes the problem by first initializing the MRAM, then
      bringing the device into Normale Mode.
      
      Fixes: 5443c226 ("can: tcan4x5x: Add tcan4x5x driver to the kernel")
      Link: https://lore.kernel.org/r/20210226163440.313628-1-torin@maxiluxsystems.comSuggested-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarTorin Cooper-Bennun <torin@maxiluxsystems.com>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      27126252
    • Oleksij Rempel's avatar
      can: skb: can_skb_set_owner(): fix ref counting if socket was closed before setting skb ownership · e940e089
      Oleksij Rempel authored
      There are two ref count variables controlling the free()ing of a socket:
      - struct sock::sk_refcnt - which is changed by sock_hold()/sock_put()
      - struct sock::sk_wmem_alloc - which accounts the memory allocated by
        the skbs in the send path.
      
      In case there are still TX skbs on the fly and the socket() is closed,
      the struct sock::sk_refcnt reaches 0. In the TX-path the CAN stack
      clones an "echo" skb, calls sock_hold() on the original socket and
      references it. This produces the following back trace:
      
      | WARNING: CPU: 0 PID: 280 at lib/refcount.c:25 refcount_warn_saturate+0x114/0x134
      | refcount_t: addition on 0; use-after-free.
      | Modules linked in: coda_vpu(E) v4l2_jpeg(E) videobuf2_vmalloc(E) imx_vdoa(E)
      | CPU: 0 PID: 280 Comm: test_can.sh Tainted: G            E     5.11.0-04577-gf8ff6603c617 #203
      | Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
      | Backtrace:
      | [<80bafea4>] (dump_backtrace) from [<80bb0280>] (show_stack+0x20/0x24) r7:00000000 r6:600f0113 r5:00000000 r4:81441220
      | [<80bb0260>] (show_stack) from [<80bb593c>] (dump_stack+0xa0/0xc8)
      | [<80bb589c>] (dump_stack) from [<8012b268>] (__warn+0xd4/0x114) r9:00000019 r8:80f4a8c2 r7:83e4150c r6:00000000 r5:00000009 r4:80528f90
      | [<8012b194>] (__warn) from [<80bb09c4>] (warn_slowpath_fmt+0x88/0xc8) r9:83f26400 r8:80f4a8d1 r7:00000009 r6:80528f90 r5:00000019 r4:80f4a8c2
      | [<80bb0940>] (warn_slowpath_fmt) from [<80528f90>] (refcount_warn_saturate+0x114/0x134) r8:00000000 r7:00000000 r6:82b44000 r5:834e5600 r4:83f4d540
      | [<80528e7c>] (refcount_warn_saturate) from [<8079a4c8>] (__refcount_add.constprop.0+0x4c/0x50)
      | [<8079a47c>] (__refcount_add.constprop.0) from [<8079a57c>] (can_put_echo_skb+0xb0/0x13c)
      | [<8079a4cc>] (can_put_echo_skb) from [<8079ba98>] (flexcan_start_xmit+0x1c4/0x230) r9:00000010 r8:83f48610 r7:0fdc0000 r6:0c080000 r5:82b44000 r4:834e5600
      | [<8079b8d4>] (flexcan_start_xmit) from [<80969078>] (netdev_start_xmit+0x44/0x70) r9:814c0ba0 r8:80c8790c r7:00000000 r6:834e5600 r5:82b44000 r4:82ab1f00
      | [<80969034>] (netdev_start_xmit) from [<809725a4>] (dev_hard_start_xmit+0x19c/0x318) r9:814c0ba0 r8:00000000 r7:82ab1f00 r6:82b44000 r5:00000000 r4:834e5600
      | [<80972408>] (dev_hard_start_xmit) from [<809c6584>] (sch_direct_xmit+0xcc/0x264) r10:834e5600 r9:00000000 r8:00000000 r7:82b44000 r6:82ab1f00 r5:834e5600 r4:83f27400
      | [<809c64b8>] (sch_direct_xmit) from [<809c6c0c>] (__qdisc_run+0x4f0/0x534)
      
      To fix this problem, only set skb ownership to sockets which have still
      a ref count > 0.
      
      Fixes: 0ae89beb ("can: add destructor for self generated skbs")
      Cc: Oliver Hartkopp <socketcan@hartkopp.net>
      Cc: Andre Naujoks <nautsch2@gmail.com>
      Link: https://lore.kernel.org/r/20210226092456.27126-1-o.rempel@pengutronix.deSuggested-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Reviewed-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      e940e089
    • Marc Kleine-Budde's avatar
      can: mcp251xfd: revert "can: mcp251xfd: add BQL support" · 2afe72ea
      Marc Kleine-Budde authored
      In the following 4 patches
      
      | 99842c96 can: dev: can_rx_offload_get_echo_skb(): extend to return can frame length
      | 9420e1d4 can: dev: can_get_echo_skb(): extend to return can frame length
      | 1dcb6e57 can: dev: can_put_echo_skb(): extend to handle frame_len
      | f0ef72fe can: dev: extend struct can_skb_priv to hold CAN frame length
      
      the CAN echo SKB support was extended to hold the CAN frame
      length (which is the length of the CAN frame on the wire). It is meant
      as a helper for BQL support, to avoid the re-calculation of the frame
      length before sending it and on TX-completion.
      
      However if the CAN frame is send without the request to be looped back
      the SKB is discarded in can_put_echo_skb() and the subsequent
      can_get_echo_skb() and can_rx_offload_get_echo_skb() return 0 for the
      CAN frame length. This results in BQL stalling the TX queue after a
      few packages.
      
      Until the BQL helpers can_get_echo_skb() and
      can_rx_offload_get_echo_skb() are fixed, revert the BQL support for
      the mcp251xfd driver.
      
      This reverts commit 4162e18e.
      
      Fixes: 4162e18e ("can: mcp251xfd: add BQL support")
      Cc: Manivannan Sadhasivam <mani@kernel.org>
      Cc: Thomas Kopp <thomas.kopp@microchip.com>
      Link: https://lore.kernel.org/r/20210228083347.28580-1-mkl@pengutronix.deSigned-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      2afe72ea
    • Joakim Zhang's avatar
      can: flexcan: invoke flexcan_chip_freeze() to enter freeze mode · c6382004
      Joakim Zhang authored
      Invoke flexcan_chip_freeze() to enter freeze mode, since need poll
      freeze mode acknowledge.
      
      Fixes: e955cead ("CAN: Add Flexcan CAN controller driver")
      Link: https://lore.kernel.org/r/20210218110037.16591-4-qiangqing.zhang@nxp.comSigned-off-by: default avatarJoakim Zhang <qiangqing.zhang@nxp.com>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      c6382004
    • Joakim Zhang's avatar
      can: flexcan: enable RX FIFO after FRZ/HALT valid · ec15e27c
      Joakim Zhang authored
      RX FIFO enable failed could happen when do system reboot stress test:
      
      [    0.303958] flexcan 5a8d0000.can: 5a8d0000.can supply xceiver not found, using dummy regulator
      [    0.304281] flexcan 5a8d0000.can (unnamed net_device) (uninitialized): Could not enable RX FIFO, unsupported core
      [    0.314640] flexcan 5a8d0000.can: registering netdev failed
      [    0.320728] flexcan 5a8e0000.can: 5a8e0000.can supply xceiver not found, using dummy regulator
      [    0.320991] flexcan 5a8e0000.can (unnamed net_device) (uninitialized): Could not enable RX FIFO, unsupported core
      [    0.331360] flexcan 5a8e0000.can: registering netdev failed
      [    0.337444] flexcan 5a8f0000.can: 5a8f0000.can supply xceiver not found, using dummy regulator
      [    0.337716] flexcan 5a8f0000.can (unnamed net_device) (uninitialized): Could not enable RX FIFO, unsupported core
      [    0.348117] flexcan 5a8f0000.can: registering netdev failed
      
      RX FIFO should be enabled after the FRZ/HALT are valid. But the current
      code enable RX FIFO and FRZ/HALT at the same time.
      
      Fixes: e955cead ("CAN: Add Flexcan CAN controller driver")
      Link: https://lore.kernel.org/r/20210218110037.16591-3-qiangqing.zhang@nxp.comSigned-off-by: default avatarJoakim Zhang <qiangqing.zhang@nxp.com>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      ec15e27c
    • Joakim Zhang's avatar
      can: flexcan: assert FRZ bit in flexcan_chip_freeze() · 449052cf
      Joakim Zhang authored
      Assert HALT bit to enter freeze mode, there is a premise that FRZ bit is
      asserted. This patch asserts FRZ bit in flexcan_chip_freeze, although
      the reset value is 1b'1. This is a prepare patch, later patch will
      invoke flexcan_chip_freeze() to enter freeze mode, which polling freeze
      mode acknowledge.
      
      Fixes: b1aa1c7a ("can: flexcan: fix transition from and to freeze mode in chip_{,un}freeze")
      Link: https://lore.kernel.org/r/20210218110037.16591-2-qiangqing.zhang@nxp.comSigned-off-by: default avatarJoakim Zhang <qiangqing.zhang@nxp.com>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      449052cf
  2. 28 Feb, 2021 7 commits
    • Jakub Kicinski's avatar
      Merge branch 'net-hns3-fixes-fot-net' · 447621e3
      Jakub Kicinski authored
      Huazhong Tan says:
      
      ====================
      net: hns3: fixes fot -net
      
      The patchset includes some fixes for the HNS3 ethernet driver.
      ====================
      
      Link: https://lore.kernel.org/r/1614410693-8107-1-git-send-email-tanhuazhong@huawei.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      447621e3
    • Jian Shen's avatar
      net: hns3: fix bug when calculating the TCAM table info · b36fc875
      Jian Shen authored
      The function hclge_fd_convert_tuple() is used to convert tuples
      and tuples mask to TCAM x and y.  But it misuses the source mac
      as source mac mask when convert INNER_SRC_MAC, which may cause
      the flow director rule works unexpectedly. So fix it.
      
      Fixes: 11732868 ("net: hns3: Add input key and action config support for flow director")
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      b36fc875
    • Jian Shen's avatar
      net: hns3: fix query vlan mask value error for flow director · c75ec148
      Jian Shen authored
      Currently, the driver returns VLAN_VID_MASK for vlan mask field,
      when get flow director rule information for rule doesn't use vlan.
      It may cause the vlan mask value display as 0xf000 in this
      case, like below:
      
      estuary:/$ ethtool -u eth1
      50 RX rings available
      Total 1 rules
      
      Filter: 2
      Rule Type: TCP over IPv4
      Src IP addr: 0.0.0.0 mask: 255.255.255.255
      Dest IP addr: 0.0.0.0 mask: 255.255.255.255
      TOS: 0x0 mask: 0xff
      Src port: 0 mask: 0xffff
      Dest port: 0 mask: 0xffff
      VLAN EtherType: 0x0 mask: 0xffff
      VLAN: 0x0 mask: 0xf000
      User-defined: 0x1234 mask: 0x0
      Action: Direct to queue 3
      
      Fix it by return 0.
      
      Fixes: 05c2314f ("net: hns3: Add support for rule query of flow director")
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      c75ec148
    • Jian Shen's avatar
      net: hns3: fix error mask definition of flow director · ae85ddda
      Jian Shen authored
      Currently, some bit filed definitions of flow director TCAM
      configuration command are incorrect. Since the wrong MSB is
      always 0, and these fields are assgined in order, so it still works.
      
      Fix it by redefine them.
      
      Fixes: 11732868 ("net: hns3: Add input key and action config support for flow director")
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      ae85ddda
    • Daniel Borkmann's avatar
      net: Fix gro aggregation for udp encaps with zero csum · 89e5c58f
      Daniel Borkmann authored
      We noticed a GRO issue for UDP-based encaps such as vxlan/geneve when the
      csum for the UDP header itself is 0. In that case, GRO aggregation does
      not take place on the phys dev, but instead is deferred to the vxlan/geneve
      driver (see trace below).
      
      The reason is essentially that GRO aggregation bails out in udp_gro_receive()
      for such case when drivers marked the skb with CHECKSUM_UNNECESSARY (ice, i40e,
      others) where for non-zero csums 2abb7cdc ("udp: Add support for doing
      checksum unnecessary conversion") promotes those skbs to CHECKSUM_COMPLETE
      and napi context has csum_valid set. This is however not the case for zero
      UDP csum (here: csum_cnt is still 0 and csum_valid continues to be false).
      
      At the same time 57c67ff4 ("udp: additional GRO support") added matches
      on !uh->check ^ !uh2->check as part to determine candidates for aggregation,
      so it certainly is expected to handle zero csums in udp_gro_receive(). The
      purpose of the check added via 662880f4 ("net: Allow GRO to use and set
      levels of checksum unnecessary") seems to catch bad csum and stop aggregation
      right away.
      
      One way to fix aggregation in the zero case is to only perform the !csum_valid
      check in udp_gro_receive() if uh->check is infact non-zero.
      
      Before:
      
        [...]
        swapper     0 [008]   731.946506: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100400 len=1500   (1)
        swapper     0 [008]   731.946507: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100200 len=1500
        swapper     0 [008]   731.946507: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497101100 len=1500
        swapper     0 [008]   731.946508: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497101700 len=1500
        swapper     0 [008]   731.946508: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497101b00 len=1500
        swapper     0 [008]   731.946508: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100600 len=1500
        swapper     0 [008]   731.946508: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100f00 len=1500
        swapper     0 [008]   731.946509: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100a00 len=1500
        swapper     0 [008]   731.946516: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100500 len=1500
        swapper     0 [008]   731.946516: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100700 len=1500
        swapper     0 [008]   731.946516: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497101d00 len=1500   (2)
        swapper     0 [008]   731.946517: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497101000 len=1500
        swapper     0 [008]   731.946517: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497101c00 len=1500
        swapper     0 [008]   731.946517: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497101400 len=1500
        swapper     0 [008]   731.946518: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100e00 len=1500
        swapper     0 [008]   731.946518: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497101600 len=1500
        swapper     0 [008]   731.946521: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff966497100800 len=774
        swapper     0 [008]   731.946530: net:netif_receive_skb: dev=test_vxlan skbaddr=0xffff966497100400 len=14032 (1)
        swapper     0 [008]   731.946530: net:netif_receive_skb: dev=test_vxlan skbaddr=0xffff966497101d00 len=9112  (2)
        [...]
      
        # netperf -H 10.55.10.4 -t TCP_STREAM -l 20
        MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.55.10.4 () port 0 AF_INET : demo
        Recv   Send    Send
        Socket Socket  Message  Elapsed
        Size   Size    Size     Time     Throughput
        bytes  bytes   bytes    secs.    10^6bits/sec
      
         87380  16384  16384    20.01    13129.24
      
      After:
      
        [...]
        swapper     0 [026]   521.862641: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff93ab0d479000 len=11286 (1)
        swapper     0 [026]   521.862643: net:netif_receive_skb: dev=test_vxlan skbaddr=0xffff93ab0d479000 len=11236 (1)
        swapper     0 [026]   521.862650: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff93ab0d478500 len=2898  (2)
        swapper     0 [026]   521.862650: net:netif_receive_skb: dev=enp10s0f0  skbaddr=0xffff93ab0d479f00 len=8490  (3)
        swapper     0 [026]   521.862653: net:netif_receive_skb: dev=test_vxlan skbaddr=0xffff93ab0d478500 len=2848  (2)
        swapper     0 [026]   521.862653: net:netif_receive_skb: dev=test_vxlan skbaddr=0xffff93ab0d479f00 len=8440  (3)
        [...]
      
        # netperf -H 10.55.10.4 -t TCP_STREAM -l 20
        MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.55.10.4 () port 0 AF_INET : demo
        Recv   Send    Send
        Socket Socket  Message  Elapsed
        Size   Size    Size     Time     Throughput
        bytes  bytes   bytes    secs.    10^6bits/sec
      
         87380  16384  16384    20.01    24576.53
      
      Fixes: 57c67ff4 ("udp: additional GRO support")
      Fixes: 662880f4 ("net: Allow GRO to use and set levels of checksum unnecessary")
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: Jesse Brandeburg <jesse.brandeburg@intel.com>
      Cc: Tom Herbert <tom@herbertland.com>
      Acked-by: default avatarWillem de Bruijn <willemb@google.com>
      Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Link: https://lore.kernel.org/r/20210226212248.8300-1-daniel@iogearbox.netSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      89e5c58f
    • Rafał Miłecki's avatar
      net: broadcom: bcm4908_enet: enable RX after processing packets · d313d16b
      Rafał Miłecki authored
      When receiving a lot of packets hardware may run out of free
      descriptiors and stop RX ring. Enable it every time after handling
      received packets.
      
      Fixes: 4feffead ("net: broadcom: bcm4908enet: add BCM4908 controller driver")
      Signed-off-by: default avatarRafał Miłecki <rafal@milecki.pl>
      Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Link: https://lore.kernel.org/r/20210226132038.29849-1-zajec5@gmail.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      d313d16b
    • Yinjun Zhang's avatar
      ethtool: fix the check logic of at least one channel for RX/TX · a4fc088a
      Yinjun Zhang authored
      The command "ethtool -L <intf> combined 0" may clean the RX/TX channel
      count and skip the error path, since the attrs
      tb[ETHTOOL_A_CHANNELS_RX_COUNT] and tb[ETHTOOL_A_CHANNELS_TX_COUNT]
      are NULL in this case when recent ethtool is used.
      
      Tested using ethtool v5.10.
      
      Fixes: 7be92514 ("ethtool: check if there is at least one channel for TX/RX in the core")
      Signed-off-by: default avatarYinjun Zhang <yinjun.zhang@corigine.com>
      Signed-off-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarLouis Peens <louis.peens@netronome.com>
      Link: https://lore.kernel.org/r/20210225125102.23989-1-simon.horman@netronome.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      a4fc088a
  3. 26 Feb, 2021 25 commits
  4. 25 Feb, 2021 2 commits
    • Linus Torvalds's avatar
      Merge tag 'pwm/for-5.12-rc1' of... · 2c87f7a3
      Linus Torvalds authored
      Merge tag 'pwm/for-5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/thierry.reding/linux-pwm
      
      Pull pwm updates from Thierry Reding:
       "The ZTE ZX platform is being removed, so the PWM driver is no longer
        needed and removed as well.
      
        Other than that this contains a small set of fixes and cleanups across
        a couple of drivers"
      
      * tag 'pwm/for-5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/thierry.reding/linux-pwm:
        pwm: lpc18xx-sct: remove unneeded semicolon
        pwm: iqs620a: Correct a stale state variable
        pwm: iqs620a: Fix overflow and optimize calculations
        pwm: rockchip: Enable clock before calling clk_get_rate()
        pwm: rockchip: Eliminate potential race condition when probing
        pwm: rockchip: Replace "bus clk" with "PWM clk"
        pwm: rockchip: rockchip_pwm_probe(): Remove superfluous clk_unprepare()
        pwm: rockchip: Enable APB clock during register access while probing
        pwm: Remove ZTE ZX driver
      2c87f7a3
    • Linus Torvalds's avatar
      Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost · ffc17596
      Linus Torvalds authored
      Pull virtio updates from Michael Tsirkin:
      
       - new vdpa features to allow creation and deletion of new devices
      
       - virtio-blk support per-device queue depth
      
       - fixes, cleanups all over the place
      
      * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost: (31 commits)
        virtio-input: add multi-touch support
        virtio_mmio: fix one typo
        vdpa/mlx5: fix param validation in mlx5_vdpa_get_config()
        virtio_net: Fix fall-through warnings for Clang
        virtio_input: Prevent EV_MSC/MSC_TIMESTAMP loop storm for MT.
        virtio-blk: support per-device queue depth
        virtio_vdpa: don't warn when fail to disable vq
        virtio-pci: introduce modern device module
        virito-pci-modern: rename map_capability() to vp_modern_map_capability()
        virtio-pci-modern: introduce helper to get notification offset
        virtio-pci-modern: introduce helper for getting queue nums
        virtio-pci-modern: introduce helper for setting/geting queue size
        virtio-pci-modern: introduce helper to set/get queue_enable
        virtio-pci-modern: introduce vp_modern_queue_address()
        virtio-pci-modern: introduce vp_modern_set_queue_vector()
        virtio-pci-modern: introduce vp_modern_generation()
        virtio-pci-modern: introduce helpers for setting and getting features
        virtio-pci-modern: introduce helpers for setting and getting status
        virtio-pci-modern: introduce helper to set config vector
        virtio-pci-modern: introduce vp_modern_remove()
        ...
      ffc17596