Date: Fri, 5 Aug 2016 14:09:13 GMT From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r307236 - soc2016/vincenzo/head/usr.sbin/bhyve Message-ID: <201608051409.u75E9Dpb004831@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: vincenzo Date: Fri Aug 5 14:09:12 2016 New Revision: 307236 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=307236 Log: bhyve: net-backends: expand netmap_common_init() Modified: soc2016/vincenzo/head/usr.sbin/bhyve/net_backends.c Modified: soc2016/vincenzo/head/usr.sbin/bhyve/net_backends.c ============================================================================== --- soc2016/vincenzo/head/usr.sbin/bhyve/net_backends.c Fri Aug 5 14:08:35 2016 (r307235) +++ soc2016/vincenzo/head/usr.sbin/bhyve/net_backends.c Fri Aug 5 14:09:12 2016 (r307236) @@ -552,28 +552,34 @@ return 0; } -/* Used by netmap at initialization time. */ static int -netmap_common_init(struct net_backend *be, struct netmap_priv *priv, - uint32_t nr_flags, const char *devname, - net_backend_cb_t cb, void *param) +netmap_init(struct net_backend *be, const char *devname, + net_backend_cb_t cb, void *param) { const char *ndname = "/dev/netmap"; + struct netmap_priv *priv = NULL; struct nmreq req; - char tname[40]; + int ptnetmap = 0; + + priv = calloc(1, sizeof(struct netmap_priv)); + if (priv == NULL) { + WPRINTF(("Unable alloc netmap private data\n")); + return -1; + } strncpy(priv->ifname, devname, sizeof(priv->ifname)); priv->ifname[sizeof(priv->ifname) - 1] = '\0'; memset(&req, 0, sizeof(req)); - req.nr_flags = nr_flags; + req.nr_flags = ptnetmap ? NR_PTNETMAP_HOST : 0; priv->nmd = nm_open(priv->ifname, &req, NETMAP_NO_TX_POLL, NULL); if (priv->nmd == NULL) { WPRINTF(("Unable to nm_open(): device '%s', " "interface '%s', errno (%s)\n", ndname, devname, strerror(errno))); - goto err_open; + free(priv); + return -1; } priv->tx = NETMAP_TXRING(priv->nmd->nifp, 0); @@ -584,36 +590,6 @@ priv->rx_continue = 0; be->fd = priv->nmd->fd; - - /* Create a thread for netmap poll. */ - pthread_create(&priv->evloop_tid, NULL, netmap_evloop_thread, (void *)be); - snprintf(tname, sizeof(tname), "netmap-evloop-%p", priv); - pthread_set_name_np(priv->evloop_tid, tname); - - return 0; - -err_open: - return -1; -} - -static int -netmap_init(struct net_backend *be, const char *devname, - net_backend_cb_t cb, void *param) -{ - struct netmap_priv *priv = NULL; - int ptnetmap = 0; - - priv = calloc(1, sizeof(struct netmap_priv)); - if (priv == NULL) { - WPRINTF(("Unable alloc netmap private data\n")); - return -1; - } - - if (netmap_common_init(be, priv, ptnetmap ? NR_PTNETMAP_HOST : 0, - devname, cb, param)) { - goto err; - } - be->priv = priv; priv->ptnetmap.netmap_priv = priv; @@ -627,14 +603,16 @@ /* XXX Call ptn_memdev_attach() here or in get_ptnetmap ? */ ptn_memdev_attach(priv->nmd->mem, priv->nmd->memsize, priv->nmd->req.nr_arg2); + } else { + char tname[40]; + + /* Create a thread for netmap poll. */ + pthread_create(&priv->evloop_tid, NULL, netmap_evloop_thread, (void *)be); + snprintf(tname, sizeof(tname), "netmap-evloop-%p", priv); + pthread_set_name_np(priv->evloop_tid, tname); } return 0; - -err: - free(priv); - - return -1; } static void
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201608051409.u75E9Dpb004831>