svn commit: r309123 - in projects/clang390-import: sys/dev/virtio/pci usr.sbin/bhyve
Dimitry Andric
dim at FreeBSD.org
Thu Nov 24 22:33:19 UTC 2016
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;
More information about the svn-src-projects
mailing list