> The virtio-vsock RX worker currently acquires and releases the socket lock > for every received packet. Keep the lock held while processing a bounded > run of packets that belongs to the same socket. > > Only ordinary RW packets for an established STREAM socket whose transport > and protocol remain unchanged are eligible. Control packets, SEQPACKET > traffic, state or transport changes, malformed packets, and sockets whose > protocol has been replaced end the active batch and retain their existing > handling. > > Serialize the initial eligibility check with sk_callback_lock because > sockmap removal restores the protocol without taking the socket lock. > > Limit each batch to 64 packets or 64KB of payload, bounding the work under > one socket lock. Keep the lookup reference until the batch finishes. > > Keep a batch only while another skb metadata charge fits in the receive > buffer. Share this predicate with virtio_transport_inc_rx_pkt(). When an > enqueued skb consumes the final metadata slot, finish the batch and release > the socket lock before processing another packet, restoring the reader's > scheduling opportunity from the per-packet path. > > The virtqueue callback remains a queue_work() callback. Batching runs only > in the process-context RX worker. > > Introduce virtio_transport_rx_batch_finish() to tear down the batch and > release the socket lock and lookup reference. > > Signed-off-by: Jia Jia <[email protected]>
Sashiko has reviewed this patch and found no issues. It looks great! -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=2
