Skip to content

Commit

Permalink
apply changes requested by reviewer.
Browse files Browse the repository at this point in the history
  • Loading branch information
outscale-fne committed Nov 2, 2020
1 parent e57befd commit e62d406
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 66 deletions.
131 changes: 67 additions & 64 deletions src/vhost.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,16 +125,14 @@ static struct pg_brick_config *vhost_config_new(const char *name,
}

/* To know if a vhost brick is server or not. */
/* If the brick is server, return 0. */
/* If the brick is server, return 0 else return 1. */
static int pg_vhost_is_server(struct pg_brick *brick)
{
struct pg_vhost_state *state =
pg_brick_get_state(brick,
struct pg_vhost_state);

if(state->flags & 1)
return -1;
return 0;
return state->flags & PG_VHOST_USER_CLIENT;
}

static int vhost_burst(struct pg_brick *brick, enum pg_side from,
Expand Down Expand Up @@ -265,7 +263,7 @@ static int vhost_poll(struct pg_brick *brick, uint16_t *pkts_cnt,

pkts_mask = pg_mask_firsts(count);
ret = pg_brick_burst(s->edge.link, state->output, s->edge.pair_index,
in, pkts_mask, errp);
in, pkts_mask, errp);
pg_packets_free(in, pkts_mask);
return ret;
}
Expand All @@ -282,6 +280,63 @@ static int vhost_poll(struct pg_brick *brick, uint16_t *pkts_cnt,
#define RTE_VHOST_USER_DEQUEUE_ZERO_COPY (1ULL << 2)
#endif

static void vhost_create_socket(struct pg_vhost_state *state, uint64_t flags,
struct pg_error **errp)
{
struct pg_vhost_socket *s;
char *path;
int ret;

path = g_strdup_printf("%s/qemu-%s", sockets_path, state->brick.name);
/* If the socket is CLIENT do NOT destroy the socket. */
if((flags & 1) == 0)
g_remove(path);

printf("New vhost-user socket: %s, zero-copy %s\n", path,
(flags & RTE_VHOST_USER_DEQUEUE_ZERO_COPY) ?
"enable" : "disable");

flags = flags & (RTE_VHOST_USER_CLIENT | RTE_VHOST_USER_NO_RECONNECT |
RTE_VHOST_USER_DEQUEUE_ZERO_COPY);

ret = rte_vhost_driver_register(path, flags);
if (ret) {
*errp = pg_error_new_errno(-ret,
"Failed to start vhost user driver");
goto free_exit;
}


ret = rte_vhost_driver_callback_register(path, &virtio_net_device_ops);
if (ret) {
*errp = pg_error_new_errno(-ret,
"Failed to register vhost-user callbacks");
goto free_exit;
}

rte_vhost_driver_start(path);
if (ret) {
*errp = pg_error_new_errno(-ret,
"Error registering driver for socket %s",
path);
goto free_exit;
}

pthread_mutex_lock(&mutex);

s = g_new0(struct pg_vhost_socket, 1);
s->path = path;

state->socket = s;
state->socket->state = state;

LIST_INSERT_HEAD(&sockets, s, socket_list);

pthread_mutex_unlock(&mutex);
return;
free_exit:
g_free(path);
}

static enum pg_side vhost_get_side(struct pg_brick *brick)
{
Expand All @@ -307,13 +362,17 @@ static void vhost_destroy(struct pg_brick *brick, struct pg_error **errp)
struct pg_vhost_state *state =
pg_brick_get_state(brick, struct pg_vhost_state);
rte_vhost_driver_unregister(state->socket->path);

pthread_mutex_lock(&mutex);
g_free(state->socket->path);
g_free(state->socket);
LIST_REMOVE(state->socket, socket_list);

/* If the socket is client, do NOT destroy the existing socket. */
if(pg_vhost_is_server(brick) == 0)
g_remove(state->socket->path);

LIST_REMOVE(state->socket, socket_list);
g_free(state->socket->path);
g_free(state->socket);

pthread_mutex_unlock(&mutex);
}

Expand Down Expand Up @@ -388,62 +447,6 @@ static void on_destroy_device(int dev)
}
pthread_mutex_unlock(&mutex);
}
static void vhost_create_socket(struct pg_vhost_state *state, uint64_t flags,
struct pg_error **errp)
{
struct pg_vhost_socket *s;
char *path;
int ret;

path = g_strdup_printf("%s/qemu-%s", sockets_path, state->brick.name);
/* If the socket is CLIENT do NOT destroy the socket. */
if((flags & 1) == 0)
g_remove(path);

printf("New vhost-user socket: %s, zero-copy %s\n", path,
(flags & RTE_VHOST_USER_DEQUEUE_ZERO_COPY) ?
"enable" : "disable");

flags = flags & (RTE_VHOST_USER_CLIENT | RTE_VHOST_USER_NO_RECONNECT |
RTE_VHOST_USER_DEQUEUE_ZERO_COPY);

ret = rte_vhost_driver_register(path, flags);
if (ret) {
*errp = pg_error_new_errno(-ret,
"Failed to start vhost user driver");
goto free_exit;
}

ret = rte_vhost_driver_callback_register(path,
&virtio_net_device_ops);
if (ret) {
*errp = pg_error_new_errno(-ret,
"Failed to register vhost-user callbacks");
goto free_exit;
}

rte_vhost_driver_start(path);
if (ret) {
*errp = pg_error_new_errno(-ret,
"Error registering driver for socket %s",
path);
goto free_exit;
}
pthread_mutex_lock(&mutex);

s = g_new0(struct pg_vhost_socket, 1);
s->path = path;

state->socket = s;
state->socket->state = state;

LIST_INSERT_HEAD(&sockets, s, socket_list);

pthread_mutex_unlock(&mutex);
return;
free_exit:
g_free(path);
}

#define VHOST_NOT_READY \
"vhost not ready, did you called vhost_start after packetgraph_start ?"
Expand Down
1 change: 0 additions & 1 deletion tests/integration/tests.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

/* Copyright 2015 Outscale SAS
*
* This file is part of Packetgraph.
Expand Down
2 changes: 1 addition & 1 deletion tests/vhost/test-vhost.c
Original file line number Diff line number Diff line change
Expand Up @@ -1010,7 +1010,6 @@ static void test_vhost_destroy(void)

void test_vhost(void)
{
pg_test_add_func("/vhost/as_cli", test_vhost_as_cli);
pg_test_add_func("/vhost/net_classics", test_vhost_net_classics);
pg_test_add_func("/vhost/flow", test_vhost_flow);
pg_test_add_func("/vhost/multivm", test_vhost_multivm);
Expand All @@ -1019,6 +1018,7 @@ void test_vhost(void)
pg_test_add_func("/vhost/reco", test_vhost_reco);
pg_test_add_func("/vhost/destroy", test_vhost_destroy);
pg_test_add_func("/vhost/seccomp", test_vhost_seccomp);
pg_test_add_func("/vhost/as_cli", test_vhost_as_cli);
}

#undef SSH

0 comments on commit e62d406

Please sign in to comment.