|
| From: | Hailiang Zhang |
| Subject: | Re: [Qemu-devel] [PATCH COLO-Frame v14 37/40] COLO: enable buffer filters for PVM |
| Date: | Thu, 18 Feb 2016 15:30:05 +0800 |
| User-agent: | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 |
Hi Jason, On 2016/2/18 11:46, Hailiang Zhang wrote:
On 2016/2/18 11:31, Jason Wang wrote:On 02/06/2016 05:28 PM, zhanghailiang wrote:Enable all buffer filters that added by COLO while go into COLO process, and disable them while exit COLO. Signed-off-by: zhanghailiang <address@hidden> Cc: Jason Wang <address@hidden> Cc: Yang Hongyang <address@hidden> --- v14: - New patch --- migration/colo.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/migration/colo.c b/migration/colo.c index 235578b..86a7638 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -104,10 +104,26 @@ static void secondary_vm_do_failover(void) } } +static void colo_set_filter_status(NetFilterState *nf, void *opaque, + Error **errp) +{ + char colo_filter[128]; + char *name = object_get_canonical_path_component(OBJECT(nf)); + char *status = opaque; + + snprintf(colo_filter, sizeof(colo_filter), "%scolo", nf->netdev_id); + if (strcmp(colo_filter, name)) { + return; + }Checking by name is not elegant. As we've discussed last time, why not let filter-buffer track all filters with zero interval in a linked list and just export a helper to disable and enable them all? Things will be greatly simplified with this, and there's even no need for patch 36.Yes, i know what you mean, but we have to add another 'QTAILQ_ENTRY() entry' like member into struct NetFilterState if we do like that, is it acceptable ?
Sorry for the hasty reply, ;)
We can use a list to store all the colo related buffer filters
without adding any member to struct NetFilterState.
The codes will be like:
struct COLOListNode{
void *opaque;
QLIST_ENTRY(COLOListNode) node;
};
static QLIST_HEAD(, COLOListNode) COLOBufferFilters =
QLIST_HEAD_INITIALIZER(COLOBufferFilters);
void colo_add_buffer_filter()
{
struct COLOListNode *filternode;
...
filter = object_new_with_props();
filternode = g_new0(struct COLOListNode, 1);
filternode->opaque = NETFILTER(filter);
QLIST_INSERT_HEAD(&COLOBufferFilters, filternode, node);
}
And we can track all the colo releated filters directly by
visiting the *COLOBufferFilters* list.
Thanks,
Hailiang
.
| [Prev in Thread] | Current Thread | [Next in Thread] |