From: "Michael S. Tsirkin" <mst@redhat.com>
To: fuguancheng <fuguancheng@bytedance.com>
Cc: andraprs@amazon.com, kvm@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org, stefanha@redhat.com,
colin.king@canonical.com, kuba@kernel.org,
arseny.krasnov@kaspersky.com, davem@davemloft.net
Subject: Re: [PATCH 2/4] VSOCK DRIVER: support communication using additional guest cid
Date: Mon, 2 Aug 2021 16:13:41 -0400 [thread overview]
Message-ID: <20210802161257-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20210802120720.547894-3-fuguancheng@bytedance.com>
On Mon, Aug 02, 2021 at 08:07:18PM +0800, fuguancheng wrote:
> Changes in this patch are made to allow the guest communicate
> with the host using the additional cids specified when
> creating the guest.
>
> In original settings, the packet sent with the additional CIDS will
> be rejected when received by the host, the newly added function
> vhost_vsock_contain_cid will fix this error.
>
> Now that we have multiple CIDS, the VMADDR_CID_ANY now behaves like
> this:
> 1. The client will use the first available cid specified in the cids
> array if VMADDR_CID_ANY is used.
> 2. The host will still use the original default CID.
> 3. If a guest server binds to VMADDR_CID_ANY, then the server can
> choose to connect to any of the available CIDs for this guest.
>
> Signed-off-by: fuguancheng <fuguancheng@bytedance.com>
> ---
> drivers/vhost/vsock.c | 14 +++++++++++++-
> net/vmw_vsock/af_vsock.c | 2 +-
> net/vmw_vsock/virtio_transport_common.c | 5 ++++-
> 3 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
> index f66c87de91b8..013f8ebf8189 100644
> --- a/drivers/vhost/vsock.c
> +++ b/drivers/vhost/vsock.c
> @@ -74,6 +74,18 @@ struct vhost_vsock {
> bool seqpacket_allow;
> };
>
> +static bool
> +vhost_vsock_contain_cid(struct vhost_vsock *vsock, u32 cid)
> +{
> + u32 index;
> +
> + for (index = 0; index < vsock->num_cid; index++) {
> + if (cid == vsock->cids[index])
> + return true;
> + }
> + return false;
> +}
> +
> static u32 vhost_transport_get_local_cid(void)
> {
> return VHOST_VSOCK_DEFAULT_HOST_CID;
Doing this linear scan on data path is not going to scale
well with lots of CIDs.
> @@ -584,7 +596,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work)
>
> /* Only accept correctly addressed packets */
> if (vsock->num_cid > 0 &&
> - (pkt->hdr.src_cid) == vsock->cids[0] &&
> + vhost_vsock_contain_cid(vsock, pkt->hdr.src_cid) &&
> le64_to_cpu(pkt->hdr.dst_cid) == vhost_transport_get_local_cid())
> virtio_transport_recv_pkt(&vhost_transport, pkt);
> else
> diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
> index 4e1fbe74013f..c22ae7101e55 100644
> --- a/net/vmw_vsock/af_vsock.c
> +++ b/net/vmw_vsock/af_vsock.c
> @@ -251,7 +251,7 @@ static struct sock *__vsock_find_connected_socket(struct sockaddr_vm *src,
> list_for_each_entry(vsk, vsock_connected_sockets(src, dst),
> connected_table) {
> if (vsock_addr_equals_addr(src, &vsk->remote_addr) &&
> - dst->svm_port == vsk->local_addr.svm_port) {
> + vsock_addr_equals_addr(&vsk->local_addr, dst)) {
> return sk_vsock(vsk);
> }
> }
> diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
> index 169ba8b72a63..cb45e2f801f1 100644
> --- a/net/vmw_vsock/virtio_transport_common.c
> +++ b/net/vmw_vsock/virtio_transport_common.c
> @@ -197,7 +197,10 @@ static int virtio_transport_send_pkt_info(struct vsock_sock *vsk,
> if (unlikely(!t_ops))
> return -EFAULT;
>
> - src_cid = t_ops->transport.get_local_cid();
> + if (vsk->local_addr.svm_cid != VMADDR_CID_ANY)
> + src_cid = vsk->local_addr.svm_cid;
> + else
> + src_cid = t_ops->transport.get_local_cid();
> src_port = vsk->local_addr.svm_port;
> if (!info->remote_cid) {
> dst_cid = vsk->remote_addr.svm_cid;
> --
> 2.11.0
>
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: fuguancheng <fuguancheng@bytedance.com>
Cc: jasowang@redhat.com, stefanha@redhat.com, sgarzare@redhat.com,
davem@davemloft.net, kuba@kernel.org,
arseny.krasnov@kaspersky.com, andraprs@amazon.com,
colin.king@canonical.com, kvm@vger.kernel.org,
virtualization@lists.linux-foundation.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/4] VSOCK DRIVER: support communication using additional guest cid
Date: Mon, 2 Aug 2021 16:13:41 -0400 [thread overview]
Message-ID: <20210802161257-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20210802120720.547894-3-fuguancheng@bytedance.com>
On Mon, Aug 02, 2021 at 08:07:18PM +0800, fuguancheng wrote:
> Changes in this patch are made to allow the guest communicate
> with the host using the additional cids specified when
> creating the guest.
>
> In original settings, the packet sent with the additional CIDS will
> be rejected when received by the host, the newly added function
> vhost_vsock_contain_cid will fix this error.
>
> Now that we have multiple CIDS, the VMADDR_CID_ANY now behaves like
> this:
> 1. The client will use the first available cid specified in the cids
> array if VMADDR_CID_ANY is used.
> 2. The host will still use the original default CID.
> 3. If a guest server binds to VMADDR_CID_ANY, then the server can
> choose to connect to any of the available CIDs for this guest.
>
> Signed-off-by: fuguancheng <fuguancheng@bytedance.com>
> ---
> drivers/vhost/vsock.c | 14 +++++++++++++-
> net/vmw_vsock/af_vsock.c | 2 +-
> net/vmw_vsock/virtio_transport_common.c | 5 ++++-
> 3 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
> index f66c87de91b8..013f8ebf8189 100644
> --- a/drivers/vhost/vsock.c
> +++ b/drivers/vhost/vsock.c
> @@ -74,6 +74,18 @@ struct vhost_vsock {
> bool seqpacket_allow;
> };
>
> +static bool
> +vhost_vsock_contain_cid(struct vhost_vsock *vsock, u32 cid)
> +{
> + u32 index;
> +
> + for (index = 0; index < vsock->num_cid; index++) {
> + if (cid == vsock->cids[index])
> + return true;
> + }
> + return false;
> +}
> +
> static u32 vhost_transport_get_local_cid(void)
> {
> return VHOST_VSOCK_DEFAULT_HOST_CID;
Doing this linear scan on data path is not going to scale
well with lots of CIDs.
> @@ -584,7 +596,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work)
>
> /* Only accept correctly addressed packets */
> if (vsock->num_cid > 0 &&
> - (pkt->hdr.src_cid) == vsock->cids[0] &&
> + vhost_vsock_contain_cid(vsock, pkt->hdr.src_cid) &&
> le64_to_cpu(pkt->hdr.dst_cid) == vhost_transport_get_local_cid())
> virtio_transport_recv_pkt(&vhost_transport, pkt);
> else
> diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
> index 4e1fbe74013f..c22ae7101e55 100644
> --- a/net/vmw_vsock/af_vsock.c
> +++ b/net/vmw_vsock/af_vsock.c
> @@ -251,7 +251,7 @@ static struct sock *__vsock_find_connected_socket(struct sockaddr_vm *src,
> list_for_each_entry(vsk, vsock_connected_sockets(src, dst),
> connected_table) {
> if (vsock_addr_equals_addr(src, &vsk->remote_addr) &&
> - dst->svm_port == vsk->local_addr.svm_port) {
> + vsock_addr_equals_addr(&vsk->local_addr, dst)) {
> return sk_vsock(vsk);
> }
> }
> diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
> index 169ba8b72a63..cb45e2f801f1 100644
> --- a/net/vmw_vsock/virtio_transport_common.c
> +++ b/net/vmw_vsock/virtio_transport_common.c
> @@ -197,7 +197,10 @@ static int virtio_transport_send_pkt_info(struct vsock_sock *vsk,
> if (unlikely(!t_ops))
> return -EFAULT;
>
> - src_cid = t_ops->transport.get_local_cid();
> + if (vsk->local_addr.svm_cid != VMADDR_CID_ANY)
> + src_cid = vsk->local_addr.svm_cid;
> + else
> + src_cid = t_ops->transport.get_local_cid();
> src_port = vsk->local_addr.svm_port;
> if (!info->remote_cid) {
> dst_cid = vsk->remote_addr.svm_cid;
> --
> 2.11.0
>
>
next prev parent reply other threads:[~2021-08-02 20:13 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-02 12:07 [PATCH 0/4] Add multi-cid support for vsock driver fuguancheng
2021-08-02 12:07 ` [PATCH 1/4] VSOCK DRIVER: Add multi-cid support for guest fuguancheng
2021-08-02 20:10 ` Michael S. Tsirkin
2021-08-02 20:10 ` Michael S. Tsirkin
2021-08-02 20:11 ` Michael S. Tsirkin
2021-08-02 20:11 ` Michael S. Tsirkin
2021-08-02 20:20 ` Michael S. Tsirkin
2021-08-02 20:20 ` Michael S. Tsirkin
2021-08-02 21:53 ` kernel test robot
2021-08-02 21:53 ` kernel test robot
2021-08-02 12:07 ` [PATCH 2/4] VSOCK DRIVER: support communication using additional guest cid fuguancheng
2021-08-02 20:13 ` Michael S. Tsirkin [this message]
2021-08-02 20:13 ` Michael S. Tsirkin
2021-08-02 12:07 ` [PATCH 3/4] VSOCK DRIVER: support specifying additional cids for host fuguancheng
2021-08-02 15:56 ` kernel test robot
2021-08-02 15:56 ` kernel test robot
2021-08-02 17:50 ` kernel test robot
2021-08-02 17:50 ` kernel test robot
2021-08-02 12:07 ` [PATCH 4/4] VSOCK DRIVER: support communication using host additional cids fuguancheng
2021-08-02 13:42 ` [PATCH 0/4] Add multi-cid support for vsock driver Stefano Garzarella
2021-08-02 13:42 ` Stefano Garzarella
[not found] ` <CAKv9dH5KbN25m8_Wmej9WXgJWheRV5S-tyPCdjUHHEFoWk-V1w@mail.gmail.com>
2021-08-04 15:23 ` [External] " Stefano Garzarella
2021-08-04 15:23 ` Stefano Garzarella
2021-08-02 20:21 ` Michael S. Tsirkin
2021-08-02 20:21 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210802161257-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=andraprs@amazon.com \
--cc=arseny.krasnov@kaspersky.com \
--cc=colin.king@canonical.com \
--cc=davem@davemloft.net \
--cc=fuguancheng@bytedance.com \
--cc=kuba@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=stefanha@redhat.com \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.