[v3] net/ice: fix segmentation fault with a wrong package
Checks
Commit Message
This patch fixes core dump issue when entering safe mode with a
wrong ice.pkg. In safe mode, rte_flow is not supported and it
won't initialize any flow engine.
Fixes: 7615a6895009 ("net/ice: rework for generic flow enabling")
Signed-off-by: Simei Su <simei.su@intel.com>
---
drivers/net/ice/ice_ethdev.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
Comments
> -----Original Message-----
> From: Su, Simei <simei.su@intel.com>
> Sent: Thursday, November 7, 2019 1:47 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; Ye, Xiaolong <xiaolong.ye@intel.com>;
> Yang, Qiming <qiming.yang@intel.com>
> Cc: dev@dpdk.org; Su, Simei <simei.su@intel.com>
> Subject: [PATCH v3] net/ice: fix segmentation fault with a wrong package
>
> This patch fixes core dump issue when entering safe mode with a wrong
> ice.pkg. In safe mode, rte_flow is not supported and it won't initialize any flow
> engine.
>
> Fixes: 7615a6895009 ("net/ice: rework for generic flow enabling")
>
> Signed-off-by: Simei Su <simei.su@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
Hi, simei
On 11/07, Simei Su wrote:
>This patch fixes core dump issue when entering safe mode with a
>wrong ice.pkg. In safe mode, rte_flow is not supported and it
>won't initialize any flow engine.
>
>Fixes: 7615a6895009 ("net/ice: rework for generic flow enabling")
>
>Signed-off-by: Simei Su <simei.su@intel.com>
>---
> drivers/net/ice/ice_ethdev.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
>diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
>index d81eb5e..2a28d8e 100644
>--- a/drivers/net/ice/ice_ethdev.c
>+++ b/drivers/net/ice/ice_ethdev.c
>@@ -2164,10 +2164,12 @@ static int ice_parse_devargs(struct rte_eth_dev *dev)
> /* get base queue pairs index in the device */
> ice_base_queue_get(pf);
>
>- ret = ice_flow_init(ad);
>- if (ret) {
>- PMD_INIT_LOG(ERR, "Failed to initialize flow");
>- return ret;
>+ if (!ad->is_safe_mode) {
>+ ret = ice_flow_init(ad);
>+ if (ret) {
>+ PMD_INIT_LOG(ERR, "Failed to initialize flow");
>+ return ret;
>+ }
Do we need to print out some message indicates that now ice is in safe mode?
Thanks,
Xiaolong
> }
>
> ret = ice_reset_fxp_resource(hw);
>@@ -2311,7 +2313,8 @@ static int ice_parse_devargs(struct rte_eth_dev *dev)
>
> ice_dev_stop(dev);
>
>- ice_flow_uninit(ad);
>+ if (!ad->is_safe_mode)
>+ ice_flow_uninit(ad);
>
> /* release all queue resource */
> ice_free_queues(dev);
>--
>1.8.3.1
>
Hi, xiaolong
> -----Original Message-----
> From: Ye, Xiaolong <xiaolong.ye@intel.com>
> Sent: Monday, November 11, 2019 5:06 PM
> To: Su, Simei <simei.su@intel.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; dev@dpdk.org
> Subject: Re: [PATCH v3] net/ice: fix segmentation fault with a wrong package
>
> Hi, simei
>
> On 11/07, Simei Su wrote:
> >This patch fixes core dump issue when entering safe mode with a wrong
> >ice.pkg. In safe mode, rte_flow is not supported and it won't
> >initialize any flow engine.
> >
> >Fixes: 7615a6895009 ("net/ice: rework for generic flow enabling")
> >
> >Signed-off-by: Simei Su <simei.su@intel.com>
> >---
> > drivers/net/ice/ice_ethdev.c | 13 ++++++++-----
> > 1 file changed, 8 insertions(+), 5 deletions(-)
> >
> >diff --git a/drivers/net/ice/ice_ethdev.c
> >b/drivers/net/ice/ice_ethdev.c index d81eb5e..2a28d8e 100644
> >--- a/drivers/net/ice/ice_ethdev.c
> >+++ b/drivers/net/ice/ice_ethdev.c
> >@@ -2164,10 +2164,12 @@ static int ice_parse_devargs(struct rte_eth_dev
> *dev)
> > /* get base queue pairs index in the device */
> > ice_base_queue_get(pf);
> >
> >- ret = ice_flow_init(ad);
> >- if (ret) {
> >- PMD_INIT_LOG(ERR, "Failed to initialize flow");
> >- return ret;
> >+ if (!ad->is_safe_mode) {
> >+ ret = ice_flow_init(ad);
> >+ if (ret) {
> >+ PMD_INIT_LOG(ERR, "Failed to initialize flow");
> >+ return ret;
> >+ }
>
> Do we need to print out some message indicates that now ice is in safe mode?
>
We already have print info when ice is in safe mode. Thanks!
Br
Simei
> Thanks,
> Xiaolong
>
> > }
> >
> > ret = ice_reset_fxp_resource(hw);
> >@@ -2311,7 +2313,8 @@ static int ice_parse_devargs(struct rte_eth_dev
> >*dev)
> >
> > ice_dev_stop(dev);
> >
> >- ice_flow_uninit(ad);
> >+ if (!ad->is_safe_mode)
> >+ ice_flow_uninit(ad);
> >
> > /* release all queue resource */
> > ice_free_queues(dev);
> >--
> >1.8.3.1
> >
On 11/07, Simei Su wrote:
>This patch fixes core dump issue when entering safe mode with a
>wrong ice.pkg. In safe mode, rte_flow is not supported and it
>won't initialize any flow engine.
>
>Fixes: 7615a6895009 ("net/ice: rework for generic flow enabling")
>
>Signed-off-by: Simei Su <simei.su@intel.com>
>---
> drivers/net/ice/ice_ethdev.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
>diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
>index d81eb5e..2a28d8e 100644
>--- a/drivers/net/ice/ice_ethdev.c
>+++ b/drivers/net/ice/ice_ethdev.c
>@@ -2164,10 +2164,12 @@ static int ice_parse_devargs(struct rte_eth_dev *dev)
> /* get base queue pairs index in the device */
> ice_base_queue_get(pf);
>
>- ret = ice_flow_init(ad);
>- if (ret) {
>- PMD_INIT_LOG(ERR, "Failed to initialize flow");
>- return ret;
>+ if (!ad->is_safe_mode) {
>+ ret = ice_flow_init(ad);
>+ if (ret) {
>+ PMD_INIT_LOG(ERR, "Failed to initialize flow");
>+ return ret;
>+ }
> }
>
> ret = ice_reset_fxp_resource(hw);
>@@ -2311,7 +2313,8 @@ static int ice_parse_devargs(struct rte_eth_dev *dev)
>
> ice_dev_stop(dev);
>
>- ice_flow_uninit(ad);
>+ if (!ad->is_safe_mode)
>+ ice_flow_uninit(ad);
>
> /* release all queue resource */
> ice_free_queues(dev);
>--
>1.8.3.1
>
Applied to dpdk-next-net-intel. Thanks.
@@ -2164,10 +2164,12 @@ static int ice_parse_devargs(struct rte_eth_dev *dev)
/* get base queue pairs index in the device */
ice_base_queue_get(pf);
- ret = ice_flow_init(ad);
- if (ret) {
- PMD_INIT_LOG(ERR, "Failed to initialize flow");
- return ret;
+ if (!ad->is_safe_mode) {
+ ret = ice_flow_init(ad);
+ if (ret) {
+ PMD_INIT_LOG(ERR, "Failed to initialize flow");
+ return ret;
+ }
}
ret = ice_reset_fxp_resource(hw);
@@ -2311,7 +2313,8 @@ static int ice_parse_devargs(struct rte_eth_dev *dev)
ice_dev_stop(dev);
- ice_flow_uninit(ad);
+ if (!ad->is_safe_mode)
+ ice_flow_uninit(ad);
/* release all queue resource */
ice_free_queues(dev);