[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 08/13 V6] remus: implement the API to teardown network buffering
From: Shriram Rajagopalan <rshriram@xxxxxxxxx> During teardown, the netlink resources are released, followed by invocation of hotplug scripts to remove the IFB devices. Signed-off-by: Shriram Rajagopalan <rshriram@xxxxxxxxx> Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxx> Reviewed-by: Wen Congyang <wency@xxxxxxxxxxxxxx> --- tools/libxl/libxl_internal.h | 6 +++++ tools/libxl/libxl_netbuffer.c | 52 +++++++++++++++++++++++++++++++++++++++++ tools/libxl/libxl_nonetbuffer.c | 5 ++++ tools/libxl/libxl_remus.c | 6 +++++ 4 files changed, 69 insertions(+) diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 7216f89..358590b 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -2330,6 +2330,12 @@ _hidden int libxl__remus_netbuf_start_new_epoch(libxl__gc *gc, uint32_t domid, _hidden int libxl__remus_netbuf_release_prev_epoch(libxl__gc *gc, uint32_t domid, libxl__remus_state *remus_state); +_hidden void libxl__remus_teardown_done(libxl__egc *egc, + libxl__domain_suspend_state *dss); + +_hidden void libxl__remus_netbuf_teardown(libxl__egc *egc, + libxl__domain_suspend_state *dss); + struct libxl__domain_suspend_state { /* set by caller of libxl__domain_suspend */ libxl__ao *ao; diff --git a/tools/libxl/libxl_netbuffer.c b/tools/libxl/libxl_netbuffer.c index 1b61597..686101b 100644 --- a/tools/libxl/libxl_netbuffer.c +++ b/tools/libxl/libxl_netbuffer.c @@ -490,6 +490,58 @@ int libxl__remus_netbuf_release_prev_epoch(libxl__gc *gc, uint32_t domid, return remus_netbuf_op(gc, domid, remus_state, tc_buffer_release); } +static void netbuf_teardown_script_cb(libxl__egc *egc, + libxl__ev_child *child, + pid_t pid, int status) +{ + libxl__remus_state *remus_state = CONTAINER_OF(child, *remus_state, child); + + /* Convenience aliases */ + libxl__remus_netbuf_state *const netbuf_state = remus_state->netbuf_state; + + STATE_AO_GC(remus_state->dss->ao); + + libxl__ev_time_deregister(gc, &remus_state->timeout); + + if (status) { + libxl_report_child_exitstatus(CTX, LIBXL__LOG_ERROR, + remus_state->netbufscript, + pid, status); + } + + remus_state->dev_id++; + if (remus_state->dev_id < netbuf_state->num_netbufs) { + if (exec_netbuf_script(gc, remus_state, + "teardown", netbuf_teardown_script_cb)) + goto out; + return; + } + + out: + libxl__remus_teardown_done(egc, remus_state->dss); +} + +/* Note: This function will be called in the same gc context as + * libxl__remus_netbuf_setup, created during the libxl_domain_remus_start + * API call. + */ +void libxl__remus_netbuf_teardown(libxl__egc *egc, + libxl__domain_suspend_state *dss) +{ + /* Convenience aliases */ + libxl__remus_state *const remus_state = dss->remus_state; + libxl__remus_netbuf_state *const netbuf_state = remus_state->netbuf_state; + + STATE_AO_GC(dss->ao); + + free_qdiscs(netbuf_state); + + remus_state->dev_id = 0; + if (exec_netbuf_script(gc, remus_state, "teardown", + netbuf_teardown_script_cb)) + libxl__remus_teardown_done(egc, dss); +} + /* * Local variables: * mode: C diff --git a/tools/libxl/libxl_nonetbuffer.c b/tools/libxl/libxl_nonetbuffer.c index a3e3f5c..ef7b513 100644 --- a/tools/libxl/libxl_nonetbuffer.c +++ b/tools/libxl/libxl_nonetbuffer.c @@ -42,6 +42,11 @@ int libxl__remus_netbuf_release_prev_epoch(libxl__gc *gc, uint32_t domid, return ERROR_FAIL; } +void libxl__remus_netbuf_teardown(libxl__egc *egc, + libxl__domain_suspend_state *dss) +{ +} + /* * Local variables: * mode: C diff --git a/tools/libxl/libxl_remus.c b/tools/libxl/libxl_remus.c index b3342b3..6790c61 100644 --- a/tools/libxl/libxl_remus.c +++ b/tools/libxl/libxl_remus.c @@ -33,3 +33,9 @@ void libxl__remus_setup_done(libxl__egc *egc, " for guest with domid %u", dss->domid); domain_suspend_done(egc, dss, rc); } + +void libxl__remus_teardown_done(libxl__egc *egc, + libxl__domain_suspend_state *dss) +{ + dss->callback(egc, dss, dss->remus_state->saved_rc); +} -- 1.8.4.2 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |