On 9/29/2020 12:58 PM, Wang, Haiyue wrote:
-----Original Message-----
From: Thomas Monjalon <tho...@monjalon.net>
Sent: Tuesday, September 29, 2020 18:36
To: Maxime Coquelin <maxime.coque...@redhat.com>
Cc: dev@dpdk.org; Yigit, Ferruh <ferruh.yi...@intel.com>; 
arybche...@solarflare.com; Shepard Siegel
<shepard.sie...@atomicrules.com>; Ed Czeck <ed.cz...@atomicrules.com>; John 
Miller
<john.mil...@atomicrules.com>; Igor Russkikh <igor.russk...@aquantia.com>; 
Pavel Belous
<pavel.bel...@aquantia.com>; Somalapuram Amaranath <asoma...@amd.com>; Ajit 
Khaparde
<ajit.khapa...@broadcom.com>; Somnath Kotur <somnath.ko...@broadcom.com>; Chas 
Williams
<ch...@att.com>; Wei Hu (Xavier) <xavier.hu...@huawei.com>; Hemant Agrawal 
<hemant.agra...@nxp.com>;
Sachin Saxena <sachin.sax...@oss.nxp.com>; Guo, Jia <jia....@intel.com>; Wang, 
Haiyue
<haiyue.w...@intel.com>; Marcin Wojtas <m...@semihalf.com>; Michal Krawczyk 
<m...@semihalf.com>; Guy
Tzalik <gtza...@amazon.com>; Evgeny Schemeilin <evge...@amazon.com>; Igor Chauskin 
<igo...@amazon.com>;
Zhang, Qi Z <qi.z.zh...@intel.com>; Wang, Xiao W <xiao.w.w...@intel.com>; 
Ziyang Xuan
<xuanziya...@huawei.com>; Xiaoyun Wang <cloud.wangxiao...@huawei.com>; Guoyang 
Zhou
<zhouguoy...@huawei.com>; Min Hu (Connor) <humi...@huawei.com>; Yisen Zhuang 
<yisen.zhu...@huawei.com>;
Xing, Beilei <beilei.x...@intel.com>; Wu, Jingjing <jingjing...@intel.com>; 
Yang, Qiming
<qiming.y...@intel.com>; Alfredo Cardigliano <cardigli...@ntop.org>; Shijith 
Thotton
<sthot...@marvell.com>; Srisivasubramanian Srinivasan <sriniva...@marvell.com>; 
Stephen Hemminger
<sthem...@microsoft.com>; K. Y. Srinivasan <k...@microsoft.com>; Haiyang Zhang 
<haiya...@microsoft.com>;
Long Li <lon...@microsoft.com>; Harman Kalra <hka...@marvell.com>; Rasesh Mody 
<rm...@marvell.com>;
Shahed Shaikh <shsha...@marvell.com>; Wiles, Keith <keith.wi...@intel.com>; 
Xia, Chenbo
<chenbo....@intel.com>; Wang, Zhihong <zhihong.w...@intel.com>; Yong Wang 
<yongw...@vmware.com>;
ma...@nvidia.com
Subject: Re: [PATCH v3 28/29] ethdev: reset all when releasing a port

29/09/2020 12:26, Maxime Coquelin:
On 9/29/20 1:14 AM, Thomas Monjalon wrote:
The function rte_eth_dev_release_port() was resetting partially
the struct rte_eth_dev. The drivers were completing it
with more pointers set to NULL in the close or remove operations.

A full memset is done so most of those assignments become useless.
[...]
With this patch, I get following segfault at init time with Virtio PMD:

         Program received signal SIGSEGV, Segmentation fault.
         0x0000000000854c9b in rte_eth_dev_callback_register (port_id=32,
             event=RTE_ETH_EVENT_UNKNOWN, cb_fn=0x4b24de
<eth_event_callback>,
             cb_arg=0x0) at ../lib/librte_ethdev/rte_ethdev.c:4042
         4042
TAILQ_INSERT_TAIL(&(dev->link_intr_cbs),

Yes this is because after closing a port, everything is resetted,
including .link_intr_cbs which is set only once in a constructor:
http://git.dpdk.org/dpdk/commit/?id=9ec0b3869d8

I can change this patch to selectively set pointers to NULL.

Or if we prefer a big memset 0, we need to rework how RTE_ETH_ALL
is managed to register a callback for any event.
Instead of setting the callback for all ports, we could have
a special catch-call callback list which is called for all events.
This way we could revert initializing .link_intr_cbs in eth_dev_get().



Move 'struct rte_eth_dev_cb_list link_intr_cbs' to the end of 'struct 
rte_eth_dev',
and starting from link_intr_cbs, these members will be kept after closed ? :-)

memset(eth_dev, 0, offsetof(struct rte_eth_dev, link_intr_cbs));


This is similar version of a previous patch:
https://patches.dpdk.org/patch/65795/

That one is also waiting because I remember it was not safe for hotplug.

Instead of a big memset, I am for selectively set pointers to NULL.

Reply via email to