From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58155) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZKjn5-0002nX-QQ for qemu-devel@nongnu.org; Thu, 30 Jul 2015 05:06:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZKjn0-0006uM-CP for qemu-devel@nongnu.org; Thu, 30 Jul 2015 05:06:15 -0400 Received: from [59.151.112.132] (port=43318 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZKjmy-0006tF-6n for qemu-devel@nongnu.org; Thu, 30 Jul 2015 05:06:10 -0400 Message-ID: <55B9E8FB.3080000@cn.fujitsu.com> Date: Thu, 30 Jul 2015 17:06:03 +0800 From: Yang Hongyang MIME-Version: 1.0 References: <1438167116-29270-1-git-send-email-yanghy@cn.fujitsu.com> <1438167116-29270-11-git-send-email-yanghy@cn.fujitsu.com> <55B9B53B.8070603@redhat.com> <55B9BB13.1010601@cn.fujitsu.com> <55B9E573.1050209@redhat.com> In-Reply-To: <55B9E573.1050209@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 10/12] netbuffer: add a public api filter_buffer_release_all List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jason Wang , qemu-devel@nongnu.org Cc: thuth@redhat.com, mrhines@linux.vnet.ibm.com, zhang.zhanghailiang@huawei.com, stefanha@redhat.com On 07/30/2015 04:50 PM, Jason Wang wrote: > > > On 07/30/2015 01:50 PM, Yang Hongyang wrote: >> On 07/30/2015 01:25 PM, Jason Wang wrote: >>> >>> >>> On 07/29/2015 06:51 PM, Yang Hongyang wrote: >>>> add a public api filter_buffer_release_all to release all >>>> buffered packets. >>>> also introduce qemu_find_netfilters_by_model to find all buffer >>>> filters. >>>> >>>> Signed-off-by: Yang Hongyang >>>> --- >>>> include/net/filter.h | 5 +++++ >>>> net/filter-buffer.c | 41 +++++++++++++++++++++++++++++++++++++++++ >>>> net/filter.c | 18 ++++++++++++++++++ >>>> 3 files changed, 64 insertions(+) >>>> >>>> diff --git a/include/net/filter.h b/include/net/filter.h >>>> index 5292563..798b5b2 100644 >>>> --- a/include/net/filter.h >>>> +++ b/include/net/filter.h >>>> @@ -50,5 +50,10 @@ NetFilterState *qemu_new_net_filter(NetFilterInfo >>>> *info, >>>> const char *name); >>>> void netfilter_add(QemuOpts *opts, Error **errp); >>>> void qmp_netfilter_add(QDict *qdict, QObject **ret, Error **errp); >>>> +int qemu_find_netfilters_by_model(const char *model, NetFilterState >>>> **nfs, >>>> + int max); >>>> + >>>> +/* netbuffer filter */ >>>> +void filter_buffer_release_all(void); >>>> >>>> #endif /* QEMU_NET_FILTER_H */ >>>> diff --git a/net/filter-buffer.c b/net/filter-buffer.c >>>> index 628e66f..8bac73b 100644 >>>> --- a/net/filter-buffer.c >>>> +++ b/net/filter-buffer.c >>>> @@ -11,12 +11,14 @@ >>>> #include "filters.h" >>>> #include "qemu-common.h" >>>> #include "qemu/error-report.h" >>>> +#include "qemu/main-loop.h" >>>> >>>> typedef struct FILTERBUFFERState { >>>> NetFilterState nf; >>>> NetClientState dummy; /* used to send buffered packets */ >>>> NetQueue *incoming_queue; >>>> NetQueue *inflight_queue; >>>> + QEMUBH *flush_bh; >>> >>> bh should be stopped and restarted during vm stop and continue. >> >> Sorry, could you explain more about this? do you mean to check >> the vm state before bh_schedule? > > Rethink about this. Looks safe since qemu_can_send_packet() check vmstate. > >> how to stop&restart a bh? bh_delete bh_new bh_schedule? > > qemu_bh_cancel() and qemu_bh_schedule(). Got it, Thank you! > > . > -- Thanks, Yang.