• Matthew Cover's avatar
    tuntap: fix multiqueue rx · 8ebebcba
    Matthew Cover authored
    When writing packets to a descriptor associated with a combined queue, the
    packets should end up on that queue.
    Before this change all packets written to any descriptor associated with a
    tap interface end up on rx-0, even when the descriptor is associated with a
    different queue.
    The rx traffic can be generated by either of the following.
      1. a simple tap program which spins up multiple queues and writes packets
         to each of the file descriptors
      2. tx from a qemu vm with a tap multiqueue netdev
    The queue for rx traffic can be observed by either of the following (done
    on the hypervisor in the qemu case).
      1. a simple netmap program which opens and reads from per-queue
      2. configuring RPS and doing per-cpu captures with rxtxcpu
    Alternatively, if you printk() the return value of skb_get_rx_queue() just
    before each instance of netif_receive_skb() in tun.c, you will get 65535
    for every skb.
    Calling skb_record_rx_queue() to set the rx queue to the queue_index fixes
    the association between descriptor and rx queue.
    Signed-off-by: default avatarMatthew Cover <matthew.cover@stackpath.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>