Hi,

Anyway, I think “odp_buffer_free” should check this,  and if duplicate free 
happens(all data plane products in our company should avoid this, I think.), 
the bugs will be very hard to figure out.

But I don’t know which is better between using “ODP_ASSERT” and “ if 
(odp_likely())”. Perhaps “ if (odp_likely())” will cost less CPU, Maybe. 
However, if duplicate free happens, “ODP_ASSERT” can

inform us at the happening time.

Thanks
Zaibo


发件人: Bill Fischofer [mailto:bill.fischo...@linaro.org]
发送时间: 2016年1月25日 8:57
收件人: Xu Zaibo
抄送: Tangchaofei; Liuzhongzhu; chenlizhi; yangfajun; Huwei (Xavier); Cuiaiguo 
(Aiguo Cui, WN); LNG ODP Mailman List
主题: Re: [lng-odp] [PATCH] pool:odp_buffer_free:check for buffer status

This is a duplicate of patch http://patches.opendataplane.org/patch/3629/ that 
I submitted in November but somehow fell through the cracks.  Perhaps you'd 
like to review that series so that it can be merged?

Thanks.

Bill

On Fri, Jan 22, 2016 at 3:06 AM, Zaibo Xu 
<xuza...@huawei.com<mailto:xuza...@huawei.com>> wrote:
if a buffer or packet is freed repeatedly, it will be a disaster.
To avoid this, a checking for buffer status is done before free opertion,
and it will do nothing if buffer allocator is ODP_FREEBUF.

Signed-off-by: Zaibo Xu <xuza...@huawei.com<mailto:xuza...@huawei.com>>
---
 platform/linux-generic/odp_pool.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/platform/linux-generic/odp_pool.c 
b/platform/linux-generic/odp_pool.c
index 84d35bf..f26755d 100644
--- a/platform/linux-generic/odp_pool.c
+++ b/platform/linux-generic/odp_pool.c
@@ -562,10 +562,12 @@ void odp_buffer_free(odp_buffer_t buf)
        odp_buffer_hdr_t *buf_hdr = odp_buf_to_hdr(buf);
        pool_entry_t *pool = odp_buf_to_pool(buf_hdr);

-       if (odp_unlikely(pool->s.low_wm_assert))
-               ret_buf(&pool->s, buf_hdr);
-       else
-               ret_local_buf(&pool->s.local_cache[local_id], buf_hdr);
+       if (odp_likely(buf_hdr->allocator != ODP_FREEBUF)) {
+               if (odp_unlikely(pool->s.low_wm_assert))
+                       ret_buf(&pool->s, buf_hdr);
+               else
+                       ret_local_buf(&pool->s.local_cache[local_id], buf_hdr);
+       }
 }

 void odp_buffer_free_multi(const odp_buffer_t buf[], int len)
--
1.9.1

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org<mailto:lng-odp@lists.linaro.org>
https://lists.linaro.org/mailman/listinfo/lng-odp

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to