From owner-svn-src-projects@freebsd.org Thu Nov 24 22:33:19 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B952FC54209 for ; Thu, 24 Nov 2016 22:33:19 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 93C4CC4E; Thu, 24 Nov 2016 22:33:19 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAOMXILb073526; Thu, 24 Nov 2016 22:33:18 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAOMXInv073524; Thu, 24 Nov 2016 22:33:18 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201611242233.uAOMXInv073524@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Thu, 24 Nov 2016 22:33:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r309123 - in projects/clang390-import: sys/dev/virtio/pci usr.sbin/bhyve X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Nov 2016 22:33:19 -0000 Author: dim Date: Thu Nov 24 22:33:18 2016 New Revision: 309123 URL: https://svnweb.freebsd.org/changeset/base/309123 Log: Merge ^/head r309118 through r309122. Modified: projects/clang390-import/sys/dev/virtio/pci/virtio_pci.c projects/clang390-import/usr.sbin/bhyve/pci_virtio_console.c Directory Properties: projects/clang390-import/ (props changed) Modified: projects/clang390-import/sys/dev/virtio/pci/virtio_pci.c ============================================================================== --- projects/clang390-import/sys/dev/virtio/pci/virtio_pci.c Thu Nov 24 22:18:55 2016 (r309122) +++ projects/clang390-import/sys/dev/virtio/pci/virtio_pci.c Thu Nov 24 22:33:18 2016 (r309123) @@ -1087,7 +1087,8 @@ vtpci_set_host_msix_vectors(struct vtpci * For shared MSIX, all the virtqueues share the first * interrupt. */ - if ((sc->vtpci_flags & VTPCI_FLAG_SHARED_MSIX) == 0) + if (!sc->vtpci_vqs[idx].vtv_no_intr && + (sc->vtpci_flags & VTPCI_FLAG_SHARED_MSIX) == 0) intr++; } Modified: projects/clang390-import/usr.sbin/bhyve/pci_virtio_console.c ============================================================================== --- projects/clang390-import/usr.sbin/bhyve/pci_virtio_console.c Thu Nov 24 22:18:55 2016 (r309122) +++ projects/clang390-import/usr.sbin/bhyve/pci_virtio_console.c Thu Nov 24 22:33:18 2016 (r309123) @@ -53,6 +53,7 @@ __FBSDID("$FreeBSD$"); #include "pci_emul.h" #include "virtio.h" #include "mevent.h" +#include "sockstream.h" #define VTCON_RINGSZ 64 #define VTCON_MAXPORTS 16 @@ -90,6 +91,7 @@ struct pci_vtcon_port { bool vsp_enabled; bool vsp_console; bool vsp_rx_ready; + bool vsp_open; int vsp_rxq; int vsp_txq; void * vsp_arg; @@ -116,6 +118,7 @@ struct pci_vtcon_softc { char * vsc_rootdir; int vsc_kq; int vsc_nports; + bool vsc_ready; struct pci_vtcon_port vsc_control_port; struct pci_vtcon_port vsc_ports[VTCON_MAXPORTS]; struct pci_vtcon_config *vsc_config; @@ -359,6 +362,7 @@ pci_vtcon_sock_accept(int fd __unused, e sock->vss_open = true; sock->vss_conn_fd = s; sock->vss_conn_evp = mevent_add(s, EVF_READ, pci_vtcon_sock_rx, sock); + pci_vtcon_open_port(sock->vss_port, true); } @@ -422,16 +426,21 @@ pci_vtcon_sock_tx(struct pci_vtcon_port int niov) { struct pci_vtcon_sock *sock; - int ret; + int i, ret; sock = (struct pci_vtcon_sock *)arg; if (sock->vss_conn_fd == -1) return; - ret = writev(sock->vss_conn_fd, iov, niov); + for (i = 0; i < niov; i++) { + ret = stream_write(sock->vss_conn_fd, iov[i].iov_base, + iov[i].iov_len); + if (ret <= 0) + break; + } - if (ret < 0 && errno != EWOULDBLOCK) { + if (ret <= 0) { mevent_delete_close(sock->vss_conn_evp); sock->vss_conn_fd = -1; sock->vss_open = false; @@ -454,11 +463,15 @@ pci_vtcon_control_tx(struct pci_vtcon_po switch (ctrl->event) { case VTCON_DEVICE_READY: + sc->vsc_ready = true; /* set port ready events for registered ports */ for (i = 0; i < VTCON_MAXPORTS; i++) { tmp = &sc->vsc_ports[i]; if (tmp->vsp_enabled) pci_vtcon_announce_port(tmp); + + if (tmp->vsp_open) + pci_vtcon_open_port(tmp, true); } break; @@ -500,6 +513,11 @@ pci_vtcon_open_port(struct pci_vtcon_por { struct pci_vtcon_control event; + if (!port->vsp_sc->vsc_ready) { + port->vsp_open = true; + return; + } + event.id = port->vsp_id; event.event = VTCON_PORT_OPEN; event.value = (int)open;