vsock/virtio: add transport parameter to the virtio_transport_reset_no_sock()
We are going to add 'struct vsock_sock *' parameter to virtio_transport_get_ops(). In some cases, like in the virtio_transport_reset_no_sock(), we don't have any socket assigned to the packet received, so we can't use the virtio_transport_get_ops(). In order to allow virtio_transport_reset_no_sock() to use the '.send_pkt' callback from the 'vhost_transport' or 'virtio_transport', we add the 'struct virtio_transport *' to it and to its caller: virtio_transport_recv_pkt(). We moved the 'vhost_transport' and 'virtio_transport' definition, to pass their address to the virtio_transport_recv_pkt(). Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
fe502c4a38
commit
4c7246dc45
@@ -384,6 +384,52 @@ static bool vhost_vsock_more_replies(struct vhost_vsock *vsock)
|
||||
return val < vq->num;
|
||||
}
|
||||
|
||||
static struct virtio_transport vhost_transport = {
|
||||
.transport = {
|
||||
.get_local_cid = vhost_transport_get_local_cid,
|
||||
|
||||
.init = virtio_transport_do_socket_init,
|
||||
.destruct = virtio_transport_destruct,
|
||||
.release = virtio_transport_release,
|
||||
.connect = virtio_transport_connect,
|
||||
.shutdown = virtio_transport_shutdown,
|
||||
.cancel_pkt = vhost_transport_cancel_pkt,
|
||||
|
||||
.dgram_enqueue = virtio_transport_dgram_enqueue,
|
||||
.dgram_dequeue = virtio_transport_dgram_dequeue,
|
||||
.dgram_bind = virtio_transport_dgram_bind,
|
||||
.dgram_allow = virtio_transport_dgram_allow,
|
||||
|
||||
.stream_enqueue = virtio_transport_stream_enqueue,
|
||||
.stream_dequeue = virtio_transport_stream_dequeue,
|
||||
.stream_has_data = virtio_transport_stream_has_data,
|
||||
.stream_has_space = virtio_transport_stream_has_space,
|
||||
.stream_rcvhiwat = virtio_transport_stream_rcvhiwat,
|
||||
.stream_is_active = virtio_transport_stream_is_active,
|
||||
.stream_allow = virtio_transport_stream_allow,
|
||||
|
||||
.notify_poll_in = virtio_transport_notify_poll_in,
|
||||
.notify_poll_out = virtio_transport_notify_poll_out,
|
||||
.notify_recv_init = virtio_transport_notify_recv_init,
|
||||
.notify_recv_pre_block = virtio_transport_notify_recv_pre_block,
|
||||
.notify_recv_pre_dequeue = virtio_transport_notify_recv_pre_dequeue,
|
||||
.notify_recv_post_dequeue = virtio_transport_notify_recv_post_dequeue,
|
||||
.notify_send_init = virtio_transport_notify_send_init,
|
||||
.notify_send_pre_block = virtio_transport_notify_send_pre_block,
|
||||
.notify_send_pre_enqueue = virtio_transport_notify_send_pre_enqueue,
|
||||
.notify_send_post_enqueue = virtio_transport_notify_send_post_enqueue,
|
||||
|
||||
.set_buffer_size = virtio_transport_set_buffer_size,
|
||||
.set_min_buffer_size = virtio_transport_set_min_buffer_size,
|
||||
.set_max_buffer_size = virtio_transport_set_max_buffer_size,
|
||||
.get_buffer_size = virtio_transport_get_buffer_size,
|
||||
.get_min_buffer_size = virtio_transport_get_min_buffer_size,
|
||||
.get_max_buffer_size = virtio_transport_get_max_buffer_size,
|
||||
},
|
||||
|
||||
.send_pkt = vhost_transport_send_pkt,
|
||||
};
|
||||
|
||||
static void vhost_vsock_handle_tx_kick(struct vhost_work *work)
|
||||
{
|
||||
struct vhost_virtqueue *vq = container_of(work, struct vhost_virtqueue,
|
||||
@@ -438,7 +484,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work)
|
||||
|
||||
/* Only accept correctly addressed packets */
|
||||
if (le64_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid)
|
||||
virtio_transport_recv_pkt(pkt);
|
||||
virtio_transport_recv_pkt(&vhost_transport, pkt);
|
||||
else
|
||||
virtio_transport_free_pkt(pkt);
|
||||
|
||||
@@ -786,52 +832,6 @@ static struct miscdevice vhost_vsock_misc = {
|
||||
.fops = &vhost_vsock_fops,
|
||||
};
|
||||
|
||||
static struct virtio_transport vhost_transport = {
|
||||
.transport = {
|
||||
.get_local_cid = vhost_transport_get_local_cid,
|
||||
|
||||
.init = virtio_transport_do_socket_init,
|
||||
.destruct = virtio_transport_destruct,
|
||||
.release = virtio_transport_release,
|
||||
.connect = virtio_transport_connect,
|
||||
.shutdown = virtio_transport_shutdown,
|
||||
.cancel_pkt = vhost_transport_cancel_pkt,
|
||||
|
||||
.dgram_enqueue = virtio_transport_dgram_enqueue,
|
||||
.dgram_dequeue = virtio_transport_dgram_dequeue,
|
||||
.dgram_bind = virtio_transport_dgram_bind,
|
||||
.dgram_allow = virtio_transport_dgram_allow,
|
||||
|
||||
.stream_enqueue = virtio_transport_stream_enqueue,
|
||||
.stream_dequeue = virtio_transport_stream_dequeue,
|
||||
.stream_has_data = virtio_transport_stream_has_data,
|
||||
.stream_has_space = virtio_transport_stream_has_space,
|
||||
.stream_rcvhiwat = virtio_transport_stream_rcvhiwat,
|
||||
.stream_is_active = virtio_transport_stream_is_active,
|
||||
.stream_allow = virtio_transport_stream_allow,
|
||||
|
||||
.notify_poll_in = virtio_transport_notify_poll_in,
|
||||
.notify_poll_out = virtio_transport_notify_poll_out,
|
||||
.notify_recv_init = virtio_transport_notify_recv_init,
|
||||
.notify_recv_pre_block = virtio_transport_notify_recv_pre_block,
|
||||
.notify_recv_pre_dequeue = virtio_transport_notify_recv_pre_dequeue,
|
||||
.notify_recv_post_dequeue = virtio_transport_notify_recv_post_dequeue,
|
||||
.notify_send_init = virtio_transport_notify_send_init,
|
||||
.notify_send_pre_block = virtio_transport_notify_send_pre_block,
|
||||
.notify_send_pre_enqueue = virtio_transport_notify_send_pre_enqueue,
|
||||
.notify_send_post_enqueue = virtio_transport_notify_send_post_enqueue,
|
||||
|
||||
.set_buffer_size = virtio_transport_set_buffer_size,
|
||||
.set_min_buffer_size = virtio_transport_set_min_buffer_size,
|
||||
.set_max_buffer_size = virtio_transport_set_max_buffer_size,
|
||||
.get_buffer_size = virtio_transport_get_buffer_size,
|
||||
.get_min_buffer_size = virtio_transport_get_min_buffer_size,
|
||||
.get_max_buffer_size = virtio_transport_get_max_buffer_size,
|
||||
},
|
||||
|
||||
.send_pkt = vhost_transport_send_pkt,
|
||||
};
|
||||
|
||||
static int __init vhost_vsock_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
Reference in New Issue
Block a user