From nobody Tue Feb 10 00:22:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1512446054644742.2637052571863; Mon, 4 Dec 2017 19:54:14 -0800 (PST) Received: from localhost ([::1]:46267 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eM4JB-0005vI-TH for importer@patchew.org; Mon, 04 Dec 2017 22:54:13 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33324) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eM4Ez-0001Th-65 for qemu-devel@nongnu.org; Mon, 04 Dec 2017 22:49:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eM4Ex-0007QB-9n for qemu-devel@nongnu.org; Mon, 04 Dec 2017 22:49:53 -0500 Received: from mga01.intel.com ([192.55.52.88]:32277) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eM4Ex-0007JF-0Q for qemu-devel@nongnu.org; Mon, 04 Dec 2017 22:49:51 -0500 Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Dec 2017 19:49:50 -0800 Received: from devel-ww.sh.intel.com ([10.239.48.110]) by orsmga003.jf.intel.com with ESMTP; 04 Dec 2017 19:49:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,362,1508828400"; d="scan'208";a="9615383" From: Wei Wang To: virtio-dev@lists.oasis-open.org, qemu-devel@nongnu.org, mst@redhat.com, marcandre.lureau@redhat.com, jasowang@redhat.com, stefanha@redhat.com, pbonzini@redhat.com Date: Tue, 5 Dec 2017 11:33:15 +0800 Message-Id: <1512444796-30615-7-git-send-email-wei.w.wang@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1512444796-30615-1-git-send-email-wei.w.wang@intel.com> References: <1512444796-30615-1-git-send-email-wei.w.wang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.88 Subject: [Qemu-devel] [PATCH v3 6/7] vhost-pci-slave: handle VHOST_USER_SET_VHOST_PCI X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: zhiyong.yang@intel.com, jan.kiszka@siemens.com, Wei Wang , avi.cohen@huawei.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch implements the slave part handling of the VHOST_USER_SET_VHOST_PCI msg. Receiving a "true" from the master will set the LINK_UP status of the vhost-pci device config status, and a config interrupt will be injected to the guest to notify that the device is ready to use. The driver is expected to start reading the metadata for remote memory and vring setup after this LINK_UP interrupt is received. Receiving a "false" from the master will clear the LINK_UP status and inject a config interrupt to the guest to notify the driver to stop sending and receiving packets. Signed-off-by: Wei Wang --- hw/net/vhost_pci_net.c | 13 +++++++++++++ hw/virtio/vhost-pci-slave.c | 3 +++ include/hw/virtio/vhost-pci-net.h | 2 ++ include/standard-headers/linux/vhost_pci_net.h | 2 ++ 4 files changed, 20 insertions(+) diff --git a/hw/net/vhost_pci_net.c b/hw/net/vhost_pci_net.c index 11184c3..39eb28d 100644 --- a/hw/net/vhost_pci_net.c +++ b/hw/net/vhost_pci_net.c @@ -32,6 +32,19 @@ static uint64_t vpnet_get_features(VirtIODevice *vdev, u= int64_t features, return features; } =20 +void vpnet_set_link_up(VhostPCINet *vpnet, bool up) +{ + VirtIODevice *vdev =3D VIRTIO_DEVICE(vpnet); + + if (up) { + vpnet->status |=3D VPNET_S_LINK_UP; + } else { + vpnet->status &=3D ~VPNET_S_LINK_UP; + } + + virtio_notify_config(vdev); +} + static void vpnet_get_config(VirtIODevice *vdev, uint8_t *config) { VhostPCINet *vpnet =3D VHOST_PCI_NET(vdev); diff --git a/hw/virtio/vhost-pci-slave.c b/hw/virtio/vhost-pci-slave.c index 8052884..6554efb 100644 --- a/hw/virtio/vhost-pci-slave.c +++ b/hw/virtio/vhost-pci-slave.c @@ -287,6 +287,9 @@ void vp_slave_read(void *opaque, const uint8_t *buf, in= t size) case VHOST_USER_SET_VRING_ENABLE: vp_slave_set_vring_enable(vpnet, &msg); break; + case VHOST_USER_SET_VHOST_PCI: + vpnet_set_link_up(vpnet, (bool)msg.payload.u64); + break; case VHOST_USER_SET_LOG_BASE: break; case VHOST_USER_SET_LOG_FD: diff --git a/include/hw/virtio/vhost-pci-net.h b/include/hw/virtio/vhost-pc= i-net.h index 6f4ab6a..2d0e94c 100644 --- a/include/hw/virtio/vhost-pci-net.h +++ b/include/hw/virtio/vhost-pci-net.h @@ -37,4 +37,6 @@ typedef struct VhostPCINet { CharBackend chr_be; } VhostPCINet; =20 +void vpnet_set_link_up(VhostPCINet *vpnet, bool up); + #endif diff --git a/include/standard-headers/linux/vhost_pci_net.h b/include/stand= ard-headers/linux/vhost_pci_net.h index 792261e..ab91989 100644 --- a/include/standard-headers/linux/vhost_pci_net.h +++ b/include/standard-headers/linux/vhost_pci_net.h @@ -35,6 +35,8 @@ =20 #define MAX_REMOTE_REGION 8 =20 +/* Set by the device to indicate that the device (e.g. metadata) is ready = */ +#define VPNET_S_LINK_UP 1 struct vpnet_config { uint16_t status; }; --=20 2.7.4