• M
    tuntap: fix multiqueue rx · 3e8f5d55
    Matthew Cover 提交于
    [ Upstream commit 8ebebcba559a1bfbaec7bbda64feb9870b9c58da ]
    
    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
         descriptors
      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: NMatthew Cover <matthew.cover@stackpath.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3e8f5d55
tun.c 81.5 KB