mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
vsock/virtio: reduce credit update messages
In order to reduce the number of credit update messages, we send them only when the space available seen by the transmitter is less than VIRTIO_VSOCK_MAX_PKT_BUF_SIZE. Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
473c7391ce
commit
b89d882dc9
@ -41,6 +41,7 @@ struct virtio_vsock_sock {
|
||||
|
||||
/* Protected by rx_lock */
|
||||
u32 fwd_cnt;
|
||||
u32 last_fwd_cnt;
|
||||
u32 rx_bytes;
|
||||
struct list_head rx_queue;
|
||||
};
|
||||
|
@ -211,6 +211,7 @@ static void virtio_transport_dec_rx_pkt(struct virtio_vsock_sock *vvs,
|
||||
void virtio_transport_inc_tx_pkt(struct virtio_vsock_sock *vvs, struct virtio_vsock_pkt *pkt)
|
||||
{
|
||||
spin_lock_bh(&vvs->tx_lock);
|
||||
vvs->last_fwd_cnt = vvs->fwd_cnt;
|
||||
pkt->hdr.fwd_cnt = cpu_to_le32(vvs->fwd_cnt);
|
||||
pkt->hdr.buf_alloc = cpu_to_le32(vvs->buf_alloc);
|
||||
spin_unlock_bh(&vvs->tx_lock);
|
||||
@ -261,6 +262,7 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk,
|
||||
struct virtio_vsock_sock *vvs = vsk->trans;
|
||||
struct virtio_vsock_pkt *pkt;
|
||||
size_t bytes, total = 0;
|
||||
u32 free_space;
|
||||
int err = -EFAULT;
|
||||
|
||||
spin_lock_bh(&vvs->rx_lock);
|
||||
@ -291,11 +293,19 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk,
|
||||
virtio_transport_free_pkt(pkt);
|
||||
}
|
||||
}
|
||||
|
||||
free_space = vvs->buf_alloc - (vvs->fwd_cnt - vvs->last_fwd_cnt);
|
||||
|
||||
spin_unlock_bh(&vvs->rx_lock);
|
||||
|
||||
/* Send a credit pkt to peer */
|
||||
virtio_transport_send_credit_update(vsk, VIRTIO_VSOCK_TYPE_STREAM,
|
||||
NULL);
|
||||
/* We send a credit update only when the space available seen
|
||||
* by the transmitter is less than VIRTIO_VSOCK_MAX_PKT_BUF_SIZE
|
||||
*/
|
||||
if (free_space < VIRTIO_VSOCK_MAX_PKT_BUF_SIZE) {
|
||||
virtio_transport_send_credit_update(vsk,
|
||||
VIRTIO_VSOCK_TYPE_STREAM,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return total;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user