From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52149) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aaIOV-00019F-7T for qemu-devel@nongnu.org; Mon, 29 Feb 2016 02:37:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aaIOR-0005Ju-3K for qemu-devel@nongnu.org; Mon, 29 Feb 2016 02:37:27 -0500 Received: from szxga01-in.huawei.com ([58.251.152.64]:13512) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aaIOQ-0005J4-8h for qemu-devel@nongnu.org; Mon, 29 Feb 2016 02:37:23 -0500 References: <1456710366-10980-1-git-send-email-zhang.zhanghailiang@huawei.com> <1456710366-10980-3-git-send-email-zhang.zhanghailiang@huawei.com> <56D3F2D2.9030600@redhat.com> From: Hailiang Zhang Message-ID: <56D3F4EB.6060704@huawei.com> Date: Mon, 29 Feb 2016 15:36:11 +0800 MIME-Version: 1.0 In-Reply-To: <56D3F2D2.9030600@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jason Wang , qemu-devel@nongnu.org Cc: peter.huangpeng@huawei.com, hongyang.yang@easystack.cn On 2016/2/29 15:27, Jason Wang wrote: > > > On 02/29/2016 09:46 AM, zhanghailiang wrote: >> While the status of filter-buffer changing from 'on' to 'off', >> it need to release all the buffered packets, and delete the related >> timer, while switch from 'off' to 'on', it need to resume the release >> packets timer. >> >> Signed-off-by: zhanghailiang >> Cc: Jason Wang >> Cc: Yang Hongyang >> --- >> v2: >> - New patch >> --- >> net/filter-buffer.c | 19 +++++++++++++++++++ >> 1 file changed, 19 insertions(+) >> >> diff --git a/net/filter-buffer.c b/net/filter-buffer.c >> index 12ad2e3..ed3f19e 100644 >> --- a/net/filter-buffer.c >> +++ b/net/filter-buffer.c >> @@ -124,6 +124,24 @@ static void filter_buffer_setup(NetFilterState *nf, Error **errp) >> } >> } >> >> +static void filter_buffer_status_changed(NetFilterState *nf, Error **errp) >> +{ >> + FilterBufferState *s = FILTER_BUFFER(nf); >> + >> + if (!strcmp(nf->status, "off")) { >> + if (s->interval) { >> + timer_del(&s->release_timer); >> + } >> + filter_buffer_flush(nf); >> + } else { >> + if (s->interval) { >> + timer_init_us(&s->release_timer, QEMU_CLOCK_VIRTUAL, >> + filter_buffer_release_timer, nf); >> + timer_mod(&s->release_timer, >> + qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval); >> + } > > The code looks duplicated with filter_buffer_setup(). > Yea, extract them into a new helper ? filter_buffer_setup_timer() ? >> + } >> +} >> static void filter_buffer_class_init(ObjectClass *oc, void *data) >> { >> NetFilterClass *nfc = NETFILTER_CLASS(oc); >> @@ -131,6 +149,7 @@ static void filter_buffer_class_init(ObjectClass *oc, void *data) >> nfc->setup = filter_buffer_setup; >> nfc->cleanup = filter_buffer_cleanup; >> nfc->receive_iov = filter_buffer_receive_iov; >> + nfc->status_changed = filter_buffer_status_changed; >> } >> >> static void filter_buffer_get_interval(Object *obj, Visitor *v, > > > . >