Date: Thu, 24 Nov 2016 22:33:18 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> 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 Message-ID: <201611242233.uAOMXInv073524@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611242233.uAOMXInv073524>