19 Dec, 2014

1 commit

  • Pull virtio fixes from Michael S Tsirkin:
    "virtio 1.0 related fixes

    Most importantly, this fixes using virtio_pci as a module.

    Further, the big virtio 1.0 conversion missed a couple of places.
    This fixes them up.

    This isn't 100% sparse-clean yet because on many architectures
    get_user triggers sparse warnings when used with __bitwise tag (when
    same tag is on both pointer and value read).

    I posted a patchset to fix it up by adding __force on all arches that
    don't already have it (many do), when that's merged these warnings
    will go away"

    * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost:
    virtio_pci: restore module attributes
    mic/host: fix up virtio 1.0 APIs
    vringh: update for virtio 1.0 APIs
    vringh: 64 bit features
    tools/virtio: add virtio 1.0 in vringh_test
    tools/virtio: add virtio 1.0 in virtio_test
    tools/virtio: enable -Werror
    tools/virtio: 64 bit features
    tools/virtio: fix vringh test
    tools/virtio: more stubs
    virtio: core support for config generation
    virtio_pci: add VIRTIO_PCI_NO_LEGACY
    virtio_pci: move probe to common file
    virtio_pci_common.h: drop VIRTIO_PCI_NO_LEGACY
    virtio_config: fix virtio_cread_bytes
    virtio: set VIRTIO_CONFIG_S_FEATURES_OK on restore

    Linus Torvalds
     

16 Dec, 2014

2 commits


12 Dec, 2014

1 commit

  • Pull networking updates from David Miller:

    1) New offloading infrastructure and example 'rocker' driver for
    offloading of switching and routing to hardware.

    This work was done by a large group of dedicated individuals, not
    limited to: Scott Feldman, Jiri Pirko, Thomas Graf, John Fastabend,
    Jamal Hadi Salim, Andy Gospodarek, Florian Fainelli, Roopa Prabhu

    2) Start making the networking operate on IOV iterators instead of
    modifying iov objects in-situ during transfers. Thanks to Al Viro
    and Herbert Xu.

    3) A set of new netlink interfaces for the TIPC stack, from Richard
    Alpe.

    4) Remove unnecessary looping during ipv6 routing lookups, from Martin
    KaFai Lau.

    5) Add PAUSE frame generation support to gianfar driver, from Matei
    Pavaluca.

    6) Allow for larger reordering levels in TCP, which are easily
    achievable in the real world right now, from Eric Dumazet.

    7) Add a variable of napi_schedule that doesn't need to disable cpu
    interrupts, from Eric Dumazet.

    8) Use a doubly linked list to optimize neigh_parms_release(), from
    Nicolas Dichtel.

    9) Various enhancements to the kernel BPF verifier, and allow eBPF
    programs to actually be attached to sockets. From Alexei
    Starovoitov.

    10) Support TSO/LSO in sunvnet driver, from David L Stevens.

    11) Allow controlling ECN usage via routing metrics, from Florian
    Westphal.

    12) Remote checksum offload, from Tom Herbert.

    13) Add split-header receive, BQL, and xmit_more support to amd-xgbe
    driver, from Thomas Lendacky.

    14) Add MPLS support to openvswitch, from Simon Horman.

    15) Support wildcard tunnel endpoints in ipv6 tunnels, from Steffen
    Klassert.

    16) Do gro flushes on a per-device basis using a timer, from Eric
    Dumazet. This tries to resolve the conflicting goals between the
    desired handling of bulk vs. RPC-like traffic.

    17) Allow userspace to ask for the CPU upon what a packet was
    received/steered, via SO_INCOMING_CPU. From Eric Dumazet.

    18) Limit GSO packets to half the current congestion window, from Eric
    Dumazet.

    19) Add a generic helper so that all drivers set their RSS keys in a
    consistent way, from Eric Dumazet.

    20) Add xmit_more support to enic driver, from Govindarajulu
    Varadarajan.

    21) Add VLAN packet scheduler action, from Jiri Pirko.

    22) Support configurable RSS hash functions via ethtool, from Eyal
    Perry.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1820 commits)
    Fix race condition between vxlan_sock_add and vxlan_sock_release
    net/macb: fix compilation warning for print_hex_dump() called with skb->mac_header
    net/mlx4: Add support for A0 steering
    net/mlx4: Refactor QUERY_PORT
    net/mlx4_core: Add explicit error message when rule doesn't meet configuration
    net/mlx4: Add A0 hybrid steering
    net/mlx4: Add mlx4_bitmap zone allocator
    net/mlx4: Add a check if there are too many reserved QPs
    net/mlx4: Change QP allocation scheme
    net/mlx4_core: Use tasklet for user-space CQ completion events
    net/mlx4_core: Mask out host side virtualization features for guests
    net/mlx4_en: Set csum level for encapsulated packets
    be2net: Export tunnel offloads only when a VxLAN tunnel is created
    gianfar: Fix dma check map error when DMA_API_DEBUG is enabled
    cxgb4/csiostor: Don't use MASTER_MUST for fw_hello call
    net: fec: only enable mdio interrupt before phy device link up
    net: fec: clear all interrupt events to support i.MX6SX
    net: fec: reset fep link status in suspend function
    net: sock: fix access via invalid file descriptor
    net: introduce helper macro for_each_cmsghdr
    ...

    Linus Torvalds
     

10 Dec, 2014

1 commit

  • Note that the code _using_ ->msg_iter at that point will be very
    unhappy with anything other than unshifted iovec-backed iov_iter.
    We still need to convert users to proper primitives.

    Signed-off-by: Al Viro

    Al Viro
     

09 Dec, 2014

10 commits


29 Oct, 2014

1 commit

  • This patch addresses a bug where individual vhost-scsi configfs endpoint
    groups can be removed from below while active exports to QEMU userspace
    still exist, resulting in an OOPs.

    It adds a configfs_depend_item() in vhost_scsi_set_endpoint() to obtain
    an explicit dependency on se_tpg->tpg_group in order to prevent individual
    vhost-scsi WWPN endpoints from being released via normal configfs methods
    while an QEMU ioctl reference still exists.

    Also, add matching configfs_undepend_item() in vhost_scsi_clear_endpoint()
    to release the dependency, once QEMU's reference to the individual group
    at /sys/kernel/config/target/vhost/$WWPN/$TPGT is released.

    (Fix up vhost_scsi_clear_endpoint() error path - DanC)

    Cc: Michael S. Tsirkin
    Cc: Paolo Bonzini
    Cc: Stefan Hajnoczi
    Cc: # 3.6+
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

23 Jun, 2014

2 commits


13 Jun, 2014

1 commit

  • Pull SCSI target updates from Nicholas Bellinger:
    "The highlights this round include:

    - Add support for T10 PI pass-through between vhost-scsi +
    virtio-scsi (MST + Paolo + MKP + nab)
    - Add support for T10 PI in qla2xxx target mode (Quinn + MKP + hch +
    nab, merged through scsi.git)
    - Add support for percpu-ida pre-allocation in qla2xxx target code
    (Quinn + nab)
    - A number of iser-target fixes related to hardening the network
    portal shutdown path (Sagi + Slava)
    - Fix response length residual handling for a number of control CDBs
    (Roland + Christophe V.)
    - Various iscsi RFC conformance fixes in the CHAP authentication path
    (Tejas and Calsoft folks + nab)
    - Return TASK_SET_FULL status for tcm_fc(FCoE) DataIn + Response
    failures (Vasu + Jun + nab)
    - Fix long-standing ABORT_TASK + session reset hang (nab)
    - Convert iser-initiator + iser-target to include T10 bytes into EDTL
    (Sagi + Or + MKP + Mike Christie)
    - Fix NULL pointer dereference regression related to XCOPY introduced
    in v3.15 + CC'ed to v3.12.y (nab)"

    * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (34 commits)
    target: Fix NULL pointer dereference for XCOPY in target_put_sess_cmd
    vhost-scsi: Include prot_bytes into expected data transfer length
    TARGET/sbc,loopback: Adjust command data length in case pi exists on the wire
    libiscsi, iser: Adjust data_length to include protection information
    scsi_cmnd: Introduce scsi_transfer_length helper
    target: Report correct response length for some commands
    target/sbc: Check that the LBA and number of blocks are correct in VERIFY
    target/sbc: Remove sbc_check_valid_sectors()
    Target/iscsi: Fix sendtargets response pdu for iser transport
    Target/iser: Fix a wrong dereference in case discovery session is over iser
    iscsi-target: Fix ABORT_TASK + connection reset iscsi_queue_req memory leak
    target: Use complete_all for se_cmd->t_transport_stop_comp
    target: Set CMD_T_ACTIVE bit for Task Management Requests
    target: cleanup some boolean tests
    target/spc: Simplify INQUIRY EVPD=0x80
    tcm_fc: Generate TASK_SET_FULL status for response failures
    tcm_fc: Generate TASK_SET_FULL status for DataIN failures
    iscsi-target: Reject mutual authentication with reflected CHAP_C
    iscsi-target: Remove no-op from iscsit_tpg_del_portal_group
    iscsi-target: Fix CHAP_A parameter list handling
    ...

    Linus Torvalds
     

12 Jun, 2014

2 commits

  • Pull vhost infrastructure updates from Michael S. Tsirkin:
    "This reworks vhost core dropping unnecessary RCU uses in favor of VQ
    mutexes which are used on fast path anyway. This fixes worst-case
    latency for users which change the memory mappings a lot. Memory
    allocation for vhost-net now supports fallback on vmalloc (same as for
    vhost-scsi) this makes it possible to create the device on systems
    where memory is very fragmented, with slightly lower performance"

    * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost:
    vhost: move memory pointer to VQs
    vhost: move acked_features to VQs
    vhost: replace rcu with mutex
    vhost-net: extend device allocation to vmalloc

    Linus Torvalds
     
  • This patch updates vhost_scsi_get_tag() to accept the combined
    expected data transfer length + T10 PI bytes as the value passed
    into target_submit_cmd().

    This is required now that target-core logic in commit 14ef9200
    expects to subtract se_cmd->prot_length from se_cmd->data_length.

    Cc: Paolo Bonzini
    Cc: Michael S. Tsirkin
    Cc: Martin K. Petersen
    Cc: Sagi Grimberg
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

09 Jun, 2014

4 commits

  • commit 2ae76693b8bcabf370b981cd00c36cd41d33fabc
    vhost: replace rcu with mutex
    replaced rcu sync for memory accesses with VQ mutex locl/unlock.
    This is correct since all accesses are under VQ mutex, but incomplete:
    we still do useless rcu lock/unlock operations, someone might copy this
    code into some other context where this won't be right.
    This use of RCU is also non standard and hard to understand.
    Let's copy the pointer to each VQ structure, this way
    the access rules become straight-forward, and there's
    no need for RCU anymore.

    Reported-by: Eric Dumazet
    Signed-off-by: Michael S. Tsirkin

    Michael S. Tsirkin
     
  • Refactor code to make sure features are only accessed
    under VQ mutex. This makes everything simpler, no need
    for RCU here anymore.

    Signed-off-by: Michael S. Tsirkin

    Michael S. Tsirkin
     
  • All memory accesses are done under some VQ mutex.
    So lock/unlock all VQs is a faster equivalent of synchronize_rcu()
    for memory access changes.
    Some guests cause a lot of these changes, so it's helpful
    to make them faster.

    Reported-by: "Gonglei (Arei)"
    Signed-off-by: Michael S. Tsirkin

    Michael S. Tsirkin
     
  • Michael Mueller provided a patch to reduce the size of
    vhost-net structure as some allocations could fail under
    memory pressure/fragmentation. We are still left with
    high order allocations though.

    This patch is handling the problem at the core level, allowing
    vhost structures to use vmalloc() if kmalloc() failed.

    As vmalloc() adds overhead on a critical network path, add __GFP_REPEAT
    to kzalloc() flags to do this fallback only when really needed.

    People are still looking at cleaner ways to handle the problem
    at the API level, probably passing in multiple iovecs.
    This hack seems consistent with approaches
    taken since then by drivers/vhost/scsi.c and net/core/dev.c

    Based on patch by Romain Francoise.

    Cc: Michael Mueller
    Signed-off-by: Romain Francoise
    Acked-by: Michael S. Tsirkin

    Michael S. Tsirkin
     

03 Jun, 2014

4 commits

  • This patch updates vhost_scsi_handle_vq() to check for the existance
    of virtio_scsi_cmd_req_pi comparing vq->iov[0].iov_len in order to
    calculate seperate data + protection SGLs from data_num.

    Also update tcm_vhost_submission_work() to pass the pre-allocated
    cmd->tvc_prot_sgl[] memory into target_submit_cmd_map_sgls(), and
    update vhost_scsi_get_tag() parameters to accept scsi_tag, lun, and
    task_attr.

    Cc: Michael S. Tsirkin
    Cc: Paolo Bonzini
    Cc: Martin K. Petersen
    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Cc: Sagi Grimberg
    Cc: H. Peter Anvin
    Acked-by: Michael S. Tsirkin
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds vhost_scsi_map_iov_to_prot() to perform the mapping of
    T10 data integrity memory between virtio iov + struct scatterlist using
    get_user_pages_fast() following existing code.

    As with vhost_scsi_map_iov_to_sgl(), this does sanity checks against the
    total prot_sgl_count vs. pre-allocated SGLs, and loops across protection
    iovs using vhost_scsi_map_to_sgl() to perform the actual memory mapping.

    Also update tcm_vhost_release_cmd() to release associated tvc_prot_sgl[]
    struct page.

    Cc: Michael S. Tsirkin
    Cc: Paolo Bonzini
    Cc: Martin K. Petersen
    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Cc: Sagi Grimberg
    Cc: H. Peter Anvin
    Acked-by: Michael S. Tsirkin
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch updates tcm_vhost_make_nexus() to pre-allocate per descriptor
    tcm_vhost_cmd->tvc_prot_sgl[] used to expose protection SGLs from within
    virtio-scsi guest memory to vhost-scsi.

    Cc: Michael S. Tsirkin
    Cc: Paolo Bonzini
    Cc: Martin K. Petersen
    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Acked-by: Michael S. Tsirkin
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • Move the overflow check for sgl_count > TCM_VHOST_PREALLOC_SGLS into
    vhost_scsi_map_iov_to_sgl() so that it's based on the total number
    of SGLs for all IOVs, instead of single IOVs.

    Also, rename TCM_VHOST_PREALLOC_PAGES -> TCM_VHOST_PREALLOC_UPAGES
    to better describe pointers to user-space pages.

    Cc: Michael S. Tsirkin
    Cc: Paolo Bonzini
    Cc: Martin K. Petersen
    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Acked-by: Michael S. Tsirkin
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

18 Apr, 2014

1 commit

  • Mostly scripted conversion of the smp_mb__* barriers.

    Signed-off-by: Peter Zijlstra
    Acked-by: Paul E. McKenney
    Link: http://lkml.kernel.org/n/tip-55dhyhocezdw1dg7u19hmh1u@git.kernel.org
    Cc: Linus Torvalds
    Cc: linux-arch@vger.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

13 Apr, 2014

1 commit

  • Pull SCSI target updates from Nicholas Bellinger:
    "Here are the target pending updates for v3.15-rc1. Apologies in
    advance for waiting until the second to last day of the merge window
    to send these out.

    The highlights this round include:

    - iser-target support for T10 PI (DIF) offloads (Sagi + Or)
    - Fix Task Aborted Status (TAS) handling in target-core (Alex Leung)
    - Pass in transport supported PI at session initialization (Sagi + MKP + nab)
    - Add WRITE_INSERT + READ_STRIP T10 PI support in target-core (nab + Sagi)
    - Fix iscsi-target ERL=2 ASYNC_EVENT connection pointer bug (nab)
    - Fix tcm_fc use-after-free of ft_tpg (Andy Grover)
    - Use correct ib_sg_dma primitives in ib_isert (Mike Marciniszyn)

    Also, note the virtio-scsi + vhost-scsi changes to expose T10 PI
    metadata into KVM guest have been left-out for now, as there where a
    few comments from MST + Paolo that where not able to be addressed in
    time for v3.15. Please expect this feature for v3.16-rc1"

    * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (43 commits)
    ib_srpt: Use correct ib_sg_dma primitives
    target/tcm_fc: Rename ft_tport_create to ft_tport_get
    target/tcm_fc: Rename ft_{add,del}_lport to {add,del}_wwn
    target/tcm_fc: Rename structs and list members for clarity
    target/tcm_fc: Limit to 1 TPG per wwn
    target/tcm_fc: Don't export ft_lport_list
    target/tcm_fc: Fix use-after-free of ft_tpg
    target: Add check to prevent Abort Task from aborting itself
    target: Enable READ_STRIP emulation in target_complete_ok_work
    target/sbc: Add sbc_dif_read_strip software emulation
    target: Enable WRITE_INSERT emulation in target_execute_cmd
    target/sbc: Add sbc_dif_generate software emulation
    target/sbc: Only expose PI read_cap16 bits when supported by fabric
    target/spc: Only expose PI mode page bits when supported by fabric
    target/spc: Only expose PI inquiry bits when supported by fabric
    target: Pass in transport supported PI at session initialization
    target/iblock: Fix double bioset_integrity_free bug
    Target/sbc: Initialize COMPARE_AND_WRITE write_sg scatterlist
    target/rd: T10-Dif: RAM disk is allocating more space than required.
    iscsi-target: Fix ERL=2 ASYNC_EVENT connection pointer bug
    ...

    Linus Torvalds
     

07 Apr, 2014

2 commits

  • In order to support local WRITE_INSERT + READ_STRIP operations for
    non PI enabled fabrics, the fabric driver needs to be able signal
    what protection offload operations are supported.

    This is done at session initialization time so the modes can be
    signaled by individual se_wwn + se_portal_group endpoints, as well
    as optionally across different transports on the same endpoint.

    For iser-target, set TARGET_PROT_ALL if the underlying ib_device
    has already signaled PI offload support, and allow this to be
    exposed via a new iscsit_transport->iscsit_get_sup_prot_ops()
    callback.

    For loopback, set TARGET_PROT_ALL to signal SCSI initiator mode
    operation.

    For all other drivers, set TARGET_PROT_NORMAL to disable fabric
    level PI.

    Cc: Martin K. Petersen
    Cc: Sagi Grimberg
    Cc: Or Gerlitz
    Cc: Quinn Tran
    Cc: Giridhar Malavali
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • Now that TASK_ABORTED status is not generated for all cases by
    TMR ABORT_TASK + LUN_RESET, a new TFO->abort_task() caller is
    necessary in order to give fabric drivers a chance to unmap
    hardware / software resources before the se_cmd descriptor is
    released via the normal TFO->release_cmd() codepath.

    This patch adds TFO->aborted_task() in core_tmr_abort_task()
    in place of the original transport_send_task_abort(), and
    also updates all fabric drivers to implement this caller.

    The fabric drivers that include changes to perform cleanup
    via ->aborted_task() are:

    - iscsi-target
    - iser-target
    - srpt
    - tcm_qla2xxx

    The fabric drivers that currently set ->aborted_task() to
    NOPs are:

    - loopback
    - tcm_fc
    - usb-gadget
    - sbp-target
    - vhost-scsi

    For the latter five, there appears to be no additional cleanup
    required before invoking TFO->release_cmd() to release the
    se_cmd descriptor.

    v2 changes:
    - Move ->aborted_task() call into transport_cmd_finish_abort (Alex)

    Cc: Alex Leung
    Cc: Mark Rustad
    Cc: Roland Dreier
    Cc: Vu Pham
    Cc: Chris Boot
    Cc: Sebastian Andrzej Siewior
    Cc: Michael S. Tsirkin
    Cc: Giridhar Malavali
    Cc: Saurav Kashyap
    Cc: Quinn Tran
    Cc: Sagi Grimberg
    Cc: Or Gerlitz
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

02 Apr, 2014

1 commit


29 Mar, 2014

2 commits

  • vhost fails to validate negative error code
    from vhost_get_vq_desc causing
    a crash: we are using -EFAULT which is 0xfffffff2
    as vector size, which exceeds the allocated size.

    The code in question was introduced in commit
    8dd014adfea6f173c1ef6378f7e5e7924866c923
    vhost-net: mergeable buffers support

    CVE-2014-0055

    Signed-off-by: Michael S. Tsirkin
    Signed-off-by: David S. Miller

    Michael S. Tsirkin
     
  • When mergeable buffers are disabled, and the
    incoming packet is too large for the rx buffer,
    get_rx_bufs returns success.

    This was intentional in order for make recvmsg
    truncate the packet and then handle_rx would
    detect err != sock_len and drop it.

    Unfortunately we pass the original sock_len to
    recvmsg - which means we use parts of iov not fully
    validated.

    Fix this up by detecting this overrun and doing packet drop
    immediately.

    CVE-2014-0077

    Signed-off-by: Michael S. Tsirkin
    Signed-off-by: David S. Miller

    Michael S. Tsirkin
     

02 Mar, 2014

1 commit

  • Pull SCSI target fixes from Nicholas Bellinger:
    "The bulk of the series are bugfixes for qla2xxx target NPIV support
    that went in for v3.14-rc1. Also included are a few DIF related
    fixes, a qla2xxx fix (Cc'ed to stable) from Greg W., and vhost/scsi
    protocol version related fix from Venkatesh.

    Also just a heads up that a series to address a number of issues with
    iser-target active I/O reset/shutdown is still being tested, and will
    be included in a separate -rc6 PULL request"

    * git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending:
    vhost/scsi: Check LUN structure byte 0 is set to 1, per spec
    qla2xxx: Fix kernel panic on selective retransmission request
    Target/sbc: Don't use sg as iterator in sbc_verify_read
    target: Add DIF sense codes in transport_generic_request_failure
    target/sbc: Fix sbc_dif_copy_prot addr offset bug
    tcm_qla2xxx: Fix NAA formatted name for NPIV WWPNs
    tcm_qla2xxx: Perform configfs depend/undepend for base_tpg
    tcm_qla2xxx: Add NPIV specific enable/disable attribute logic
    qla2xxx: Check + fail when npiv_vports_inuse exists in shutdown
    qla2xxx: Fix qlt_lport_register base_vha callback race

    Linus Torvalds
     

25 Feb, 2014

1 commit


14 Feb, 2014

2 commits

  • vhost_zerocopy_callback accesses VQ right after it drops a ubuf
    reference. In theory, this could race with device removal which waits
    on the ubuf kref, and crash on use after free.

    Do all accesses within rcu read side critical section, and synchronize
    on release.

    Since callbacks are always invoked from bh, synchronize_rcu_bh seems
    enough and will help release complete a bit faster.

    Signed-off-by: Michael S. Tsirkin
    Acked-by: Jason Wang
    Signed-off-by: David S. Miller

    Michael S. Tsirkin
     
  • vhost checked the counter within the refcnt before decrementing. It
    really wanted to know that it is the one that has the last reference, as
    a way to batch freeing resources a bit more efficiently.

    Note: we only let refcount go to 0 on device release.

    This works well but we now access the ref counter twice so there's a
    race: all users might see a high count and decide to defer freeing
    resources.
    In the end no one initiates freeing resources until the last reference
    is gone (which is on VM shotdown so might happen after a looooong time).

    Let's do what we probably should have done straight away:
    switch from kref to plain atomic, documenting the
    semantics, return the refcount value atomically after decrement,
    then use that to avoid the deadlock.

    Reported-by: Qin Chuanyu
    Signed-off-by: Michael S. Tsirkin
    Acked-by: Jason Wang
    Signed-off-by: David S. Miller

    Michael S. Tsirkin