netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fsl_ucc_hdlc: add a check of the return value from hdlc_open
@ 2023-08-25 14:31 Alexandra Diupina
  2023-08-26  6:32 ` Christophe Leroy
  0 siblings, 1 reply; 16+ messages in thread
From: Alexandra Diupina @ 2023-08-25 14:31 UTC (permalink / raw)
  To: Zhao Qiang
  Cc: Alexandra Diupina, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, netdev, linuxppc-dev, linux-kernel, lvc-project

Process the result of hold_open() and return it from
uhdlc_open() in case of an error
It is necessary to pass the error code up the control flow,
similar to a possible error in request_irq()

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
---
 drivers/net/wan/fsl_ucc_hdlc.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
index 47c2ad7a3e42..cdd9489c712e 100644
--- a/drivers/net/wan/fsl_ucc_hdlc.c
+++ b/drivers/net/wan/fsl_ucc_hdlc.c
@@ -708,6 +708,7 @@ static int uhdlc_open(struct net_device *dev)
 	hdlc_device *hdlc = dev_to_hdlc(dev);
 	struct ucc_hdlc_private *priv = hdlc->priv;
 	struct ucc_tdm *utdm = priv->utdm;
+	int rc = 0;
 
 	if (priv->hdlc_busy != 1) {
 		if (request_irq(priv->ut_info->uf_info.irq,
@@ -731,10 +732,12 @@ static int uhdlc_open(struct net_device *dev)
 		napi_enable(&priv->napi);
 		netdev_reset_queue(dev);
 		netif_start_queue(dev);
-		hdlc_open(dev);
+		rc = hdlc_open(dev);
+		if (rc)
+			return rc;
 	}
 
-	return 0;
+	return rc;
 }
 
 static void uhdlc_memclean(struct ucc_hdlc_private *priv)
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH] fsl_ucc_hdlc: add a check of the return value from hdlc_open
  2023-08-25 14:31 [PATCH] fsl_ucc_hdlc: add a check of the return value from hdlc_open Alexandra Diupina
@ 2023-08-26  6:32 ` Christophe Leroy
  2023-08-28  8:27   ` [PATCH v2] " Alexandra Diupina
  0 siblings, 1 reply; 16+ messages in thread
From: Christophe Leroy @ 2023-08-26  6:32 UTC (permalink / raw)
  To: Alexandra Diupina, Zhao Qiang
  Cc: netdev, linux-kernel, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	linuxppc-dev, David S. Miller, lvc-project



Le 25/08/2023 à 16:31, Alexandra Diupina a écrit :
> [Vous ne recevez pas souvent de courriers de adiupina@astralinux.ru. Découvrez pourquoi ceci est important à https://aka.ms/LearnAboutSenderIdentification ]
> 
> Process the result of hold_open() and return it from
> uhdlc_open() in case of an error
> It is necessary to pass the error code up the control flow,
> similar to a possible error in request_irq()
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
> Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
> ---
>   drivers/net/wan/fsl_ucc_hdlc.c | 7 +++++--
>   1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
> index 47c2ad7a3e42..cdd9489c712e 100644
> --- a/drivers/net/wan/fsl_ucc_hdlc.c
> +++ b/drivers/net/wan/fsl_ucc_hdlc.c
> @@ -708,6 +708,7 @@ static int uhdlc_open(struct net_device *dev)
>          hdlc_device *hdlc = dev_to_hdlc(dev);
>          struct ucc_hdlc_private *priv = hdlc->priv;
>          struct ucc_tdm *utdm = priv->utdm;
> +       int rc = 0;

rc not usefull outside the block below, no point in having it at all.

> 
>          if (priv->hdlc_busy != 1) {
>                  if (request_irq(priv->ut_info->uf_info.irq,
> @@ -731,10 +732,12 @@ static int uhdlc_open(struct net_device *dev)
>                  napi_enable(&priv->napi);
>                  netdev_reset_queue(dev);
>                  netif_start_queue(dev);
> -               hdlc_open(dev);
> +               rc = hdlc_open(dev);
> +               if (rc)
> +                       return rc;

Don't need that rc variable. Just do:

	return hdlc_open(dev);

>          }
> 
> -       return 0;
> +       return rc;

Change not needed, leave return 0 here.

>   }
> 
>   static void uhdlc_memclean(struct ucc_hdlc_private *priv)
> --
> 2.30.2
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v2] fsl_ucc_hdlc: add a check of the return value from hdlc_open
  2023-08-26  6:32 ` Christophe Leroy
@ 2023-08-28  8:27   ` Alexandra Diupina
  2023-08-28  8:37     ` Christophe Leroy
  0 siblings, 1 reply; 16+ messages in thread
From: Alexandra Diupina @ 2023-08-28  8:27 UTC (permalink / raw)
  To: Zhao Qiang
  Cc: Alexandra Diupina, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, netdev, linuxppc-dev, linux-kernel, lvc-project

Process the result of hold_open() and return it from
uhdlc_open() in case of an error
It is necessary to pass the error code up the control flow,
similar to a possible error in request_irq()

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
---
v2: Remove the 'rc' variable (stores the return value of the 
hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
 drivers/net/wan/fsl_ucc_hdlc.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
index cdd9489c712e..4164abea7725 100644
--- a/drivers/net/wan/fsl_ucc_hdlc.c
+++ b/drivers/net/wan/fsl_ucc_hdlc.c
@@ -708,7 +708,6 @@ static int uhdlc_open(struct net_device *dev)
 	hdlc_device *hdlc = dev_to_hdlc(dev);
 	struct ucc_hdlc_private *priv = hdlc->priv;
 	struct ucc_tdm *utdm = priv->utdm;
-	int rc = 0;
 
 	if (priv->hdlc_busy != 1) {
 		if (request_irq(priv->ut_info->uf_info.irq,
@@ -732,12 +731,10 @@ static int uhdlc_open(struct net_device *dev)
 		napi_enable(&priv->napi);
 		netdev_reset_queue(dev);
 		netif_start_queue(dev);
-		rc = hdlc_open(dev);
-		if (rc)
-			return rc;
+		return hdlc_open(dev);
 	}
 
-	return rc;
+	return 0;
 }
 
 static void uhdlc_memclean(struct ucc_hdlc_private *priv)
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] fsl_ucc_hdlc: add a check of the return value from hdlc_open
  2023-08-28  8:27   ` [PATCH v2] " Alexandra Diupina
@ 2023-08-28  8:37     ` Christophe Leroy
  2023-08-28 12:12       ` [PATCH v3] fsl_ucc_hdlc: process the result of hold_open() Alexandra Diupina
  0 siblings, 1 reply; 16+ messages in thread
From: Christophe Leroy @ 2023-08-28  8:37 UTC (permalink / raw)
  To: Alexandra Diupina, Zhao Qiang
  Cc: netdev, linux-kernel, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	linuxppc-dev, David S. Miller, lvc-project



Le 28/08/2023 à 10:27, Alexandra Diupina a écrit :
> [Vous ne recevez pas souvent de courriers de adiupina@astralinux.ru. Découvrez pourquoi ceci est important à https://aka.ms/LearnAboutSenderIdentification ]
> 
> Process the result of hold_open() and return it from
> uhdlc_open() in case of an error
> It is necessary to pass the error code up the control flow,
> similar to a possible error in request_irq()
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
> Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
> ---
> v2: Remove the 'rc' variable (stores the return value of the
> hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
>   drivers/net/wan/fsl_ucc_hdlc.c | 7 ++-----
>   1 file changed, 2 insertions(+), 5 deletions(-)

I think you did a mistake. A v2 should substitute v1, not come in 
addition to it. So you have to squash this patch into previous one 
before resending.

Christophe

> 
> diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
> index cdd9489c712e..4164abea7725 100644
> --- a/drivers/net/wan/fsl_ucc_hdlc.c
> +++ b/drivers/net/wan/fsl_ucc_hdlc.c
> @@ -708,7 +708,6 @@ static int uhdlc_open(struct net_device *dev)
>          hdlc_device *hdlc = dev_to_hdlc(dev);
>          struct ucc_hdlc_private *priv = hdlc->priv;
>          struct ucc_tdm *utdm = priv->utdm;
> -       int rc = 0;
> 
>          if (priv->hdlc_busy != 1) {
>                  if (request_irq(priv->ut_info->uf_info.irq,
> @@ -732,12 +731,10 @@ static int uhdlc_open(struct net_device *dev)
>                  napi_enable(&priv->napi);
>                  netdev_reset_queue(dev);
>                  netif_start_queue(dev);
> -               rc = hdlc_open(dev);
> -               if (rc)
> -                       return rc;
> +               return hdlc_open(dev);
>          }
> 
> -       return rc;
> +       return 0;
>   }
> 
>   static void uhdlc_memclean(struct ucc_hdlc_private *priv)
> --
> 2.30.2
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v3] fsl_ucc_hdlc: process the result of hold_open()
  2023-08-28  8:37     ` Christophe Leroy
@ 2023-08-28 12:12       ` Alexandra Diupina
  2023-08-28 13:11         ` Christophe Leroy
  2023-08-28 19:38         ` Jakub Kicinski
  0 siblings, 2 replies; 16+ messages in thread
From: Alexandra Diupina @ 2023-08-28 12:12 UTC (permalink / raw)
  To: Zhao Qiang
  Cc: Alexandra Diupina, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, netdev, linuxppc-dev, linux-kernel, lvc-project

Process the result of hold_open() and return it from
uhdlc_open() in case of an error
It is necessary to pass the error code up the control flow,
similar to a possible error in request_irq()

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
---
v3: Fix the commits tree
v2: Remove the 'rc' variable (stores the return value of the 
hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
 drivers/net/wan/fsl_ucc_hdlc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
index 47c2ad7a3e42..4164abea7725 100644
--- a/drivers/net/wan/fsl_ucc_hdlc.c
+++ b/drivers/net/wan/fsl_ucc_hdlc.c
@@ -731,7 +731,7 @@ static int uhdlc_open(struct net_device *dev)
 		napi_enable(&priv->napi);
 		netdev_reset_queue(dev);
 		netif_start_queue(dev);
-		hdlc_open(dev);
+		return hdlc_open(dev);
 	}
 
 	return 0;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v3] fsl_ucc_hdlc: process the result of hold_open()
  2023-08-28 12:12       ` [PATCH v3] fsl_ucc_hdlc: process the result of hold_open() Alexandra Diupina
@ 2023-08-28 13:11         ` Christophe Leroy
  2023-08-28 19:38         ` Jakub Kicinski
  1 sibling, 0 replies; 16+ messages in thread
From: Christophe Leroy @ 2023-08-28 13:11 UTC (permalink / raw)
  To: Alexandra Diupina, Zhao Qiang
  Cc: netdev, linux-kernel, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	linuxppc-dev, David S. Miller, lvc-project



Le 28/08/2023 à 14:12, Alexandra Diupina a écrit :
> [Vous ne recevez pas souvent de courriers de adiupina@astralinux.ru. Découvrez pourquoi ceci est important à https://aka.ms/LearnAboutSenderIdentification ]
> 
> Process the result of hold_open() and return it from
> uhdlc_open() in case of an error
> It is necessary to pass the error code up the control flow,
> similar to a possible error in request_irq()
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
> Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>

Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>

> ---
> v3: Fix the commits tree
> v2: Remove the 'rc' variable (stores the return value of the
> hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
>   drivers/net/wan/fsl_ucc_hdlc.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
> index 47c2ad7a3e42..4164abea7725 100644
> --- a/drivers/net/wan/fsl_ucc_hdlc.c
> +++ b/drivers/net/wan/fsl_ucc_hdlc.c
> @@ -731,7 +731,7 @@ static int uhdlc_open(struct net_device *dev)
>                  napi_enable(&priv->napi);
>                  netdev_reset_queue(dev);
>                  netif_start_queue(dev);
> -               hdlc_open(dev);
> +               return hdlc_open(dev);
>          }
> 
>          return 0;
> --
> 2.30.2
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3] fsl_ucc_hdlc: process the result of hold_open()
  2023-08-28 12:12       ` [PATCH v3] fsl_ucc_hdlc: process the result of hold_open() Alexandra Diupina
  2023-08-28 13:11         ` Christophe Leroy
@ 2023-08-28 19:38         ` Jakub Kicinski
  2023-09-01 10:48           ` Александра Дюпина
  1 sibling, 1 reply; 16+ messages in thread
From: Jakub Kicinski @ 2023-08-28 19:38 UTC (permalink / raw)
  To: Alexandra Diupina, Zhao Qiang
  Cc: David S. Miller, Eric Dumazet, Paolo Abeni, netdev, linuxppc-dev,
	linux-kernel, lvc-project

On Mon, 28 Aug 2023 15:12:35 +0300 Alexandra Diupina wrote:
> Process the result of hold_open() and return it from
> uhdlc_open() in case of an error
> It is necessary to pass the error code up the control flow,
> similar to a possible error in request_irq()
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
> Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
> ---
> v3: Fix the commits tree
> v2: Remove the 'rc' variable (stores the return value of the 
> hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
>  drivers/net/wan/fsl_ucc_hdlc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
> index 47c2ad7a3e42..4164abea7725 100644
> --- a/drivers/net/wan/fsl_ucc_hdlc.c
> +++ b/drivers/net/wan/fsl_ucc_hdlc.c
> @@ -731,7 +731,7 @@ static int uhdlc_open(struct net_device *dev)
>  		napi_enable(&priv->napi);
>  		netdev_reset_queue(dev);
>  		netif_start_queue(dev);
> -		hdlc_open(dev);
> +		return hdlc_open(dev);

Don't you have to undo all the things done prior to hdlc_open()?

Before you post v4 please make sure that you've read:
https://www.kernel.org/doc/html/next/process/maintainer-netdev.html#resending-after-review

Zhao, please review the next version.
-- 
pw-bot: cr

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3] fsl_ucc_hdlc: process the result of hold_open()
  2023-08-28 19:38         ` Jakub Kicinski
@ 2023-09-01 10:48           ` Александра Дюпина
  2023-09-01 11:05             ` Denis Kirjanov
  0 siblings, 1 reply; 16+ messages in thread
From: Александра Дюпина @ 2023-09-01 10:48 UTC (permalink / raw)
  To: Jakub Kicinski, Zhao Qiang
  Cc: David S. Miller, Eric Dumazet, Paolo Abeni, netdev, linuxppc-dev,
	linux-kernel, lvc-project

Thanks for the review!

28.08.2023 22:38, Jakub Kicinski пишет:
> Don't you have to undo all the things done prior to hdlc_open()?
Yes, it looks like I really need to undo everything that was done before 
hdlc_open().
But the question arose - would it be enough to call the uhdlc_close(dev) 
function?
In addition, it seems to me and my colleagues that a call to 
hdlc_close(dev) should be added to the uhdlc_close() function, similar 
to the following functions:
1. drivers/net/wan/n2.c (n2_close function)
2. drivers/net/wan/pc300too.c (pc300_close function)
3. drivers/net/wan/pci200syn.c (pci200_close function)
4. drivers/net/wan/wanxl.c (wanxl_close function)
Tell me, please, are we wrong?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3] fsl_ucc_hdlc: process the result of hold_open()
  2023-09-01 10:48           ` Александра Дюпина
@ 2023-09-01 11:05             ` Denis Kirjanov
  2023-09-04 12:31               ` [PATCH v4] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close() Alexandra Diupina
  0 siblings, 1 reply; 16+ messages in thread
From: Denis Kirjanov @ 2023-09-01 11:05 UTC (permalink / raw)
  To: Александра
	Дюпина,
	Jakub Kicinski, Zhao Qiang
  Cc: David S. Miller, Eric Dumazet, Paolo Abeni, netdev, linuxppc-dev,
	linux-kernel, lvc-project



On 9/1/23 13:48, Александра Дюпина wrote:
> Thanks for the review!
> 
> 28.08.2023 22:38, Jakub Kicinski пишет:
>> Don't you have to undo all the things done prior to hdlc_open()?
> Yes, it looks like I really need to undo everything that was done before hdlc_open().
> But the question arose - would it be enough to call the uhdlc_close(dev) function?

looks like it is.

> In addition, it seems to me and my colleagues that a call to hdlc_close(dev) should be added to the uhdlc_close() function, similar to the 

yes, take a look at the comment for hdlc_close()

following functions:
> 1. drivers/net/wan/n2.c (n2_close function)
> 2. drivers/net/wan/pc300too.c (pc300_close function)
> 3. drivers/net/wan/pci200syn.c (pci200_close function)
> 4. drivers/net/wan/wanxl.c (wanxl_close function)
> Tell me, please, are we wrong?
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v4] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close()
  2023-09-01 11:05             ` Denis Kirjanov
@ 2023-09-04 12:31               ` Alexandra Diupina
  2023-09-04 17:03                 ` Christophe Leroy
  0 siblings, 1 reply; 16+ messages in thread
From: Alexandra Diupina @ 2023-09-04 12:31 UTC (permalink / raw)
  To: Zhao Qiang
  Cc: Alexandra Diupina, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, netdev, linuxppc-dev, linux-kernel, lvc-project

Process the result of hdlc_open() and call uhdlc_close()
in case of an error. It is necessary to pass the error
code up the control flow, similar to a possible
error in request_irq().
Also add a hdlc_close() call to the uhdlc_close()
because the comment to hdlc_close() says it must be called
by the hardware driver when the HDLC device is being closed

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
---
v4: undo all the things done prior to hdlc_open() as 
Jakub Kicinski <kuba@kernel.org> suggested, 
add hdlc_close() call to the uhdlc_close() to match the function comment, 
add uhdlc_close() declaration to the top of the file not to put the 
uhdlc_close() function definition before uhdlc_open()
v3: Fix the commits tree
v2: Remove the 'rc' variable (stores the return value of the 
hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
 drivers/net/wan/fsl_ucc_hdlc.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
index 47c2ad7a3e42..fd999dabdd39 100644
--- a/drivers/net/wan/fsl_ucc_hdlc.c
+++ b/drivers/net/wan/fsl_ucc_hdlc.c
@@ -34,6 +34,8 @@
 #define TDM_PPPOHT_SLIC_MAXIN
 #define RX_BD_ERRORS (R_CD_S | R_OV_S | R_CR_S | R_AB_S | R_NO_S | R_LG_S)
 
+static int uhdlc_close(struct net_device *dev);
+
 static struct ucc_tdm_info utdm_primary_info = {
 	.uf_info = {
 		.tsa = 0,
@@ -731,7 +733,9 @@ static int uhdlc_open(struct net_device *dev)
 		napi_enable(&priv->napi);
 		netdev_reset_queue(dev);
 		netif_start_queue(dev);
-		hdlc_open(dev);
+
+		int rc = hdlc_open(dev);
+		return rc == 0 ? 0 : (uhdlc_close(dev), rc);
 	}
 
 	return 0;
@@ -824,6 +828,8 @@ static int uhdlc_close(struct net_device *dev)
 	netdev_reset_queue(dev);
 	priv->hdlc_busy = 0;
 
+	hdlc_close(dev);
+
 	return 0;
 }
 
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close()
  2023-09-04 12:31               ` [PATCH v4] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close() Alexandra Diupina
@ 2023-09-04 17:03                 ` Christophe Leroy
  2023-09-04 17:04                   ` Christophe Leroy
  2023-09-05 10:46                   ` Paolo Abeni
  0 siblings, 2 replies; 16+ messages in thread
From: Christophe Leroy @ 2023-09-04 17:03 UTC (permalink / raw)
  To: Alexandra Diupina, Zhao Qiang
  Cc: netdev, linux-kernel, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	linuxppc-dev, David S. Miller, lvc-project



Le 04/09/2023 à 14:31, Alexandra Diupina a écrit :
> Process the result of hdlc_open() and call uhdlc_close()
> in case of an error. It is necessary to pass the error
> code up the control flow, similar to a possible
> error in request_irq().
> Also add a hdlc_close() call to the uhdlc_close()
> because the comment to hdlc_close() says it must be called
> by the hardware driver when the HDLC device is being closed
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
> Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
> ---
> v4: undo all the things done prior to hdlc_open() as
> Jakub Kicinski <kuba@kernel.org> suggested,
> add hdlc_close() call to the uhdlc_close() to match the function comment,
> add uhdlc_close() declaration to the top of the file not to put the
> uhdlc_close() function definition before uhdlc_open()
> v3: Fix the commits tree
> v2: Remove the 'rc' variable (stores the return value of the
> hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
>   drivers/net/wan/fsl_ucc_hdlc.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
> index 47c2ad7a3e42..fd999dabdd39 100644
> --- a/drivers/net/wan/fsl_ucc_hdlc.c
> +++ b/drivers/net/wan/fsl_ucc_hdlc.c
> @@ -34,6 +34,8 @@
>   #define TDM_PPPOHT_SLIC_MAXIN
>   #define RX_BD_ERRORS (R_CD_S | R_OV_S | R_CR_S | R_AB_S | R_NO_S | R_LG_S)
>   
> +static int uhdlc_close(struct net_device *dev);
> +
>   static struct ucc_tdm_info utdm_primary_info = {
>   	.uf_info = {
>   		.tsa = 0,
> @@ -731,7 +733,9 @@ static int uhdlc_open(struct net_device *dev)
>   		napi_enable(&priv->napi);
>   		netdev_reset_queue(dev);
>   		netif_start_queue(dev);
> -		hdlc_open(dev);
> +
> +		int rc = hdlc_open(dev);

Do not mix declarations and code. Please put all declaration at the top 
of the block.

> +		return rc == 0 ? 0 : (uhdlc_close(dev), rc);
>   	}

That's not easy to read.

I know that's more changes, but I'd prefer something like:

static int uhdlc_open(struct net_device *dev)
{
	u32 cecr_subblock;
	hdlc_device *hdlc = dev_to_hdlc(dev);
	struct ucc_hdlc_private *priv = hdlc->priv;
	struct ucc_tdm *utdm = priv->utdm;
	int rc;

	if (priv->hdlc_busy != 1)
		return 0;

	if (request_irq(priv->ut_info->uf_info.irq,
			ucc_hdlc_irq_handler, 0, "hdlc", priv))
		return -ENODEV;

	cecr_subblock = ucc_fast_get_qe_cr_subblock(
				priv->ut_info->uf_info.ucc_num);

	qe_issue_cmd(QE_INIT_TX_RX, cecr_subblock,
		     QE_CR_PROTOCOL_UNSPECIFIED, 0);

	ucc_fast_enable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);

	/* Enable the TDM port */
	if (priv->tsa)
		qe_setbits_8(&utdm->si_regs->siglmr1_h, 0x1 << utdm->tdm_port);

	priv->hdlc_busy = 1;
	netif_device_attach(priv->ndev);
	napi_enable(&priv->napi);
	netdev_reset_queue(dev);
	netif_start_queue(dev);

	rc = hdlc_open(dev);
	if (rc)
		uhdlc_close(dev);

	return rc;
}



>   
>   	return 0;
> @@ -824,6 +828,8 @@ static int uhdlc_close(struct net_device *dev)
>   	netdev_reset_queue(dev);
>   	priv->hdlc_busy = 0;
>   
> +	hdlc_close(dev);
> +
>   	return 0;
>   }
>   


And while you are looking at the correctness of this code, is it sure 
that uhdlc_open() cannot be called twice in parallele ?
If it can be called in parallèle I think the "if (priv->hdlc_busy != 1)" 
should be replaced by something using cmpxchg()

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close()
  2023-09-04 17:03                 ` Christophe Leroy
@ 2023-09-04 17:04                   ` Christophe Leroy
  2023-09-05 10:46                   ` Paolo Abeni
  1 sibling, 0 replies; 16+ messages in thread
From: Christophe Leroy @ 2023-09-04 17:04 UTC (permalink / raw)
  To: Alexandra Diupina, Zhao Qiang
  Cc: netdev, linux-kernel, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	linuxppc-dev, David S. Miller, lvc-project



Le 04/09/2023 à 19:03, Christophe Leroy a écrit :
> 
> 
> Le 04/09/2023 à 14:31, Alexandra Diupina a écrit :
>> Process the result of hdlc_open() and call uhdlc_close()
>> in case of an error. It is necessary to pass the error
>> code up the control flow, similar to a possible
>> error in request_irq().
>> Also add a hdlc_close() call to the uhdlc_close()
>> because the comment to hdlc_close() says it must be called
>> by the hardware driver when the HDLC device is being closed
>>
>> Found by Linux Verification Center (linuxtesting.org) with SVACE.
>>
>> Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
>> Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
>> ---
>> v4: undo all the things done prior to hdlc_open() as
>> Jakub Kicinski <kuba@kernel.org> suggested,
>> add hdlc_close() call to the uhdlc_close() to match the function comment,
>> add uhdlc_close() declaration to the top of the file not to put the
>> uhdlc_close() function definition before uhdlc_open()
>> v3: Fix the commits tree
>> v2: Remove the 'rc' variable (stores the return value of the
>> hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
>>   drivers/net/wan/fsl_ucc_hdlc.c | 8 +++++++-
>>   1 file changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/wan/fsl_ucc_hdlc.c 
>> b/drivers/net/wan/fsl_ucc_hdlc.c
>> index 47c2ad7a3e42..fd999dabdd39 100644
>> --- a/drivers/net/wan/fsl_ucc_hdlc.c
>> +++ b/drivers/net/wan/fsl_ucc_hdlc.c
>> @@ -34,6 +34,8 @@
>>   #define TDM_PPPOHT_SLIC_MAXIN
>>   #define RX_BD_ERRORS (R_CD_S | R_OV_S | R_CR_S | R_AB_S | R_NO_S | 
>> R_LG_S)
>> +static int uhdlc_close(struct net_device *dev);
>> +
>>   static struct ucc_tdm_info utdm_primary_info = {
>>       .uf_info = {
>>           .tsa = 0,
>> @@ -731,7 +733,9 @@ static int uhdlc_open(struct net_device *dev)
>>           napi_enable(&priv->napi);
>>           netdev_reset_queue(dev);
>>           netif_start_queue(dev);
>> -        hdlc_open(dev);
>> +
>> +        int rc = hdlc_open(dev);
> 
> Do not mix declarations and code. Please put all declaration at the top 
> of the block.
> 
>> +        return rc == 0 ? 0 : (uhdlc_close(dev), rc);
>>       }
> 
> That's not easy to read.
> 
> I know that's more changes, but I'd prefer something like:
> 
> static int uhdlc_open(struct net_device *dev)
> {
>      u32 cecr_subblock;
>      hdlc_device *hdlc = dev_to_hdlc(dev);
>      struct ucc_hdlc_private *priv = hdlc->priv;
>      struct ucc_tdm *utdm = priv->utdm;
>      int rc;
> 
>      if (priv->hdlc_busy != 1)

Of course should be:

	if (priv->hdlc_busy == 1)

>          return 0;
> 
>      if (request_irq(priv->ut_info->uf_info.irq,
>              ucc_hdlc_irq_handler, 0, "hdlc", priv))
>          return -ENODEV;
> 
>      cecr_subblock = ucc_fast_get_qe_cr_subblock(
>                  priv->ut_info->uf_info.ucc_num);
> 
>      qe_issue_cmd(QE_INIT_TX_RX, cecr_subblock,
>               QE_CR_PROTOCOL_UNSPECIFIED, 0);
> 
>      ucc_fast_enable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);
> 
>      /* Enable the TDM port */
>      if (priv->tsa)
>          qe_setbits_8(&utdm->si_regs->siglmr1_h, 0x1 << utdm->tdm_port);
> 
>      priv->hdlc_busy = 1;
>      netif_device_attach(priv->ndev);
>      napi_enable(&priv->napi);
>      netdev_reset_queue(dev);
>      netif_start_queue(dev);
> 
>      rc = hdlc_open(dev);
>      if (rc)
>          uhdlc_close(dev);
> 
>      return rc;
> }
> 
> 
> 
>>       return 0;
>> @@ -824,6 +828,8 @@ static int uhdlc_close(struct net_device *dev)
>>       netdev_reset_queue(dev);
>>       priv->hdlc_busy = 0;
>> +    hdlc_close(dev);
>> +
>>       return 0;
>>   }
> 
> 
> And while you are looking at the correctness of this code, is it sure 
> that uhdlc_open() cannot be called twice in parallele ?
> If it can be called in parallèle I think the "if (priv->hdlc_busy != 1)" 
> should be replaced by something using cmpxchg()

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close()
  2023-09-04 17:03                 ` Christophe Leroy
  2023-09-04 17:04                   ` Christophe Leroy
@ 2023-09-05 10:46                   ` Paolo Abeni
  2023-09-19 14:25                     ` [PATCH v5] " Alexandra Diupina
  1 sibling, 1 reply; 16+ messages in thread
From: Paolo Abeni @ 2023-09-05 10:46 UTC (permalink / raw)
  To: Christophe Leroy, Alexandra Diupina, Zhao Qiang
  Cc: netdev, linux-kernel, Eric Dumazet, Jakub Kicinski, linuxppc-dev,
	David S. Miller, lvc-project

On Mon, 2023-09-04 at 17:03 +0000, Christophe Leroy wrote:
> 
> Le 04/09/2023 à 14:31, Alexandra Diupina a écrit :
> > diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
> > index 47c2ad7a3e42..fd999dabdd39 100644
> > --- a/drivers/net/wan/fsl_ucc_hdlc.c
> > +++ b/drivers/net/wan/fsl_ucc_hdlc.c
> > @@ -34,6 +34,8 @@
> >   #define TDM_PPPOHT_SLIC_MAXIN
> >   #define RX_BD_ERRORS (R_CD_S | R_OV_S | R_CR_S | R_AB_S | R_NO_S | R_LG_S)
> >   
> > +static int uhdlc_close(struct net_device *dev);
> > +
> >   static struct ucc_tdm_info utdm_primary_info = {
> >   	.uf_info = {
> >   		.tsa = 0,
> > @@ -731,7 +733,9 @@ static int uhdlc_open(struct net_device *dev)
> >   		napi_enable(&priv->napi);
> >   		netdev_reset_queue(dev);
> >   		netif_start_queue(dev);
> > -		hdlc_open(dev);
> > +
> > +		int rc = hdlc_open(dev);
> 
> Do not mix declarations and code. Please put all declaration at the top 
> of the block.
> 
> > +		return rc == 0 ? 0 : (uhdlc_close(dev), rc);
> >   	}
> 
> That's not easy to read.
> 
> I know that's more changes, but I'd prefer something like:
> 
> static int uhdlc_open(struct net_device *dev)
> {
> 	u32 cecr_subblock;
> 	hdlc_device *hdlc = dev_to_hdlc(dev);
> 	struct ucc_hdlc_private *priv = hdlc->priv;
> 	struct ucc_tdm *utdm = priv->utdm;
> 	int rc;
> 
> 	if (priv->hdlc_busy != 1)
> 		return 0;
> 
> 	if (request_irq(priv->ut_info->uf_info.irq,
> 			ucc_hdlc_irq_handler, 0, "hdlc", priv))
> 		return -ENODEV;
> 
> 	cecr_subblock = ucc_fast_get_qe_cr_subblock(
> 				priv->ut_info->uf_info.ucc_num);
> 
> 	qe_issue_cmd(QE_INIT_TX_RX, cecr_subblock,
> 		     QE_CR_PROTOCOL_UNSPECIFIED, 0);
> 
> 	ucc_fast_enable(priv->uccf, COMM_DIR_RX | COMM_DIR_TX);
> 
> 	/* Enable the TDM port */
> 	if (priv->tsa)
> 		qe_setbits_8(&utdm->si_regs->siglmr1_h, 0x1 << utdm->tdm_port);
> 
> 	priv->hdlc_busy = 1;
> 	netif_device_attach(priv->ndev);
> 	napi_enable(&priv->napi);
> 	netdev_reset_queue(dev);
> 	netif_start_queue(dev);
> 
> 	rc = hdlc_open(dev);
> 	if (rc)
> 		uhdlc_close(dev);
> 
> 	return rc;
> }

I agree the above is more readable, but I don't think the whole
refactor is not worthy for a -net fix. I think simply rewriting the
final statements as:

		rc = hdlc_open(dev);
		if (rc)
			uhdlc_close(dev);

		return rc;	

would be good for -net.
 
> >   	return 0;
> > @@ -824,6 +828,8 @@ static int uhdlc_close(struct net_device *dev)
> >   	netdev_reset_queue(dev);
> >   	priv->hdlc_busy = 0;
> >   
> > +	hdlc_close(dev);
> > +
> >   return 0;
> >     
> 
> And while you are looking at the correctness of this code, is it sure 
> that uhdlc_open() cannot be called twice in parallele ?
> If it can be called in parallèle I think the "if (priv->hdlc_busy != 1)" 
> should be replaced by something using cmpxchg()

That part is safe, ndo_open() is invoked under the rtnl lock.

The other comments are IMHO relevant, @Alexandra: please address them.

Thanks!

Paolo


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v5] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close()
  2023-09-05 10:46                   ` Paolo Abeni
@ 2023-09-19 14:25                     ` Alexandra Diupina
  2023-09-22  7:09                       ` Christophe Leroy
  2023-09-22  7:20                       ` patchwork-bot+netdevbpf
  0 siblings, 2 replies; 16+ messages in thread
From: Alexandra Diupina @ 2023-09-19 14:25 UTC (permalink / raw)
  To: Zhao Qiang
  Cc: Alexandra Diupina, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, netdev, linuxppc-dev, linux-kernel, lvc-project

Process the result of hdlc_open() and call uhdlc_close()
in case of an error. It is necessary to pass the error
code up the control flow, similar to a possible
error in request_irq().
Also add a hdlc_close() call to the uhdlc_close()
because the comment to hdlc_close() says it must be called
by the hardware driver when the HDLC device is being closed

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
---
v5: do some refactoring as Paolo Abeni <pabeni@redhat.com> and 
Christophe Leroy <christophe.leroy@csgroup.eu> suggested
v4: undo all the things done prior to hdlc_open() as 
Jakub Kicinski <kuba@kernel.org> suggested, 
add hdlc_close() call to the uhdlc_close() to match the function comment, 
add uhdlc_close() declaration to the top of the file not to put the 
uhdlc_close() function definition before uhdlc_open()
v3: Fix the commits tree
v2: Remove the 'rc' variable (stores the return value of the 
hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
 drivers/net/wan/fsl_ucc_hdlc.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
index 47c2ad7a3e42..fd50bb313b92 100644
--- a/drivers/net/wan/fsl_ucc_hdlc.c
+++ b/drivers/net/wan/fsl_ucc_hdlc.c
@@ -34,6 +34,8 @@
 #define TDM_PPPOHT_SLIC_MAXIN
 #define RX_BD_ERRORS (R_CD_S | R_OV_S | R_CR_S | R_AB_S | R_NO_S | R_LG_S)
 
+static int uhdlc_close(struct net_device *dev);
+
 static struct ucc_tdm_info utdm_primary_info = {
 	.uf_info = {
 		.tsa = 0,
@@ -708,6 +710,7 @@ static int uhdlc_open(struct net_device *dev)
 	hdlc_device *hdlc = dev_to_hdlc(dev);
 	struct ucc_hdlc_private *priv = hdlc->priv;
 	struct ucc_tdm *utdm = priv->utdm;
+	int rc = 0;
 
 	if (priv->hdlc_busy != 1) {
 		if (request_irq(priv->ut_info->uf_info.irq,
@@ -731,10 +734,13 @@ static int uhdlc_open(struct net_device *dev)
 		napi_enable(&priv->napi);
 		netdev_reset_queue(dev);
 		netif_start_queue(dev);
-		hdlc_open(dev);
+
+		rc = hdlc_open(dev);
+		if (rc)
+			uhdlc_close(dev);
 	}
 
-	return 0;
+	return rc;
 }
 
 static void uhdlc_memclean(struct ucc_hdlc_private *priv)
@@ -824,6 +830,8 @@ static int uhdlc_close(struct net_device *dev)
 	netdev_reset_queue(dev);
 	priv->hdlc_busy = 0;
 
+	hdlc_close(dev);
+
 	return 0;
 }
 
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v5] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close()
  2023-09-19 14:25                     ` [PATCH v5] " Alexandra Diupina
@ 2023-09-22  7:09                       ` Christophe Leroy
  2023-09-22  7:20                       ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 16+ messages in thread
From: Christophe Leroy @ 2023-09-22  7:09 UTC (permalink / raw)
  To: Alexandra Diupina, Zhao Qiang
  Cc: netdev, linux-kernel, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	linuxppc-dev, David S. Miller, lvc-project



Le 19/09/2023 à 16:25, Alexandra Diupina a écrit :
> Process the result of hdlc_open() and call uhdlc_close()
> in case of an error. It is necessary to pass the error
> code up the control flow, similar to a possible
> error in request_irq().
> Also add a hdlc_close() call to the uhdlc_close()
> because the comment to hdlc_close() says it must be called
> by the hardware driver when the HDLC device is being closed
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: c19b6d246a35 ("drivers/net: support hdlc function for QE-UCC")
> Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>

Suggested-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>

> ---
> v5: do some refactoring as Paolo Abeni <pabeni@redhat.com> and
> Christophe Leroy <christophe.leroy@csgroup.eu> suggested
> v4: undo all the things done prior to hdlc_open() as
> Jakub Kicinski <kuba@kernel.org> suggested,
> add hdlc_close() call to the uhdlc_close() to match the function comment,
> add uhdlc_close() declaration to the top of the file not to put the
> uhdlc_close() function definition before uhdlc_open()
> v3: Fix the commits tree
> v2: Remove the 'rc' variable (stores the return value of the
> hdlc_open()) as Christophe Leroy <christophe.leroy@csgroup.eu> suggested
>   drivers/net/wan/fsl_ucc_hdlc.c | 12 ++++++++++--
>   1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
> index 47c2ad7a3e42..fd50bb313b92 100644
> --- a/drivers/net/wan/fsl_ucc_hdlc.c
> +++ b/drivers/net/wan/fsl_ucc_hdlc.c
> @@ -34,6 +34,8 @@
>   #define TDM_PPPOHT_SLIC_MAXIN
>   #define RX_BD_ERRORS (R_CD_S | R_OV_S | R_CR_S | R_AB_S | R_NO_S | R_LG_S)
>   
> +static int uhdlc_close(struct net_device *dev);
> +
>   static struct ucc_tdm_info utdm_primary_info = {
>   	.uf_info = {
>   		.tsa = 0,
> @@ -708,6 +710,7 @@ static int uhdlc_open(struct net_device *dev)
>   	hdlc_device *hdlc = dev_to_hdlc(dev);
>   	struct ucc_hdlc_private *priv = hdlc->priv;
>   	struct ucc_tdm *utdm = priv->utdm;
> +	int rc = 0;
>   
>   	if (priv->hdlc_busy != 1) {
>   		if (request_irq(priv->ut_info->uf_info.irq,
> @@ -731,10 +734,13 @@ static int uhdlc_open(struct net_device *dev)
>   		napi_enable(&priv->napi);
>   		netdev_reset_queue(dev);
>   		netif_start_queue(dev);
> -		hdlc_open(dev);
> +
> +		rc = hdlc_open(dev);
> +		if (rc)
> +			uhdlc_close(dev);
>   	}
>   
> -	return 0;
> +	return rc;
>   }
>   
>   static void uhdlc_memclean(struct ucc_hdlc_private *priv)
> @@ -824,6 +830,8 @@ static int uhdlc_close(struct net_device *dev)
>   	netdev_reset_queue(dev);
>   	priv->hdlc_busy = 0;
>   
> +	hdlc_close(dev);
> +
>   	return 0;
>   }
>   

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v5] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close()
  2023-09-19 14:25                     ` [PATCH v5] " Alexandra Diupina
  2023-09-22  7:09                       ` Christophe Leroy
@ 2023-09-22  7:20                       ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 16+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-09-22  7:20 UTC (permalink / raw)
  To: Alexandra Diupina
  Cc: qiang.zhao, davem, edumazet, kuba, pabeni, netdev, linuxppc-dev,
	linux-kernel, lvc-project

Hello:

This patch was applied to netdev/net.git (main)
by David S. Miller <davem@davemloft.net>:

On Tue, 19 Sep 2023 17:25:02 +0300 you wrote:
> Process the result of hdlc_open() and call uhdlc_close()
> in case of an error. It is necessary to pass the error
> code up the control flow, similar to a possible
> error in request_irq().
> Also add a hdlc_close() call to the uhdlc_close()
> because the comment to hdlc_close() says it must be called
> by the hardware driver when the HDLC device is being closed
> 
> [...]

Here is the summary with links:
  - [v5] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close()
    https://git.kernel.org/netdev/net/c/a59addacf899

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2023-09-22  7:20 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-25 14:31 [PATCH] fsl_ucc_hdlc: add a check of the return value from hdlc_open Alexandra Diupina
2023-08-26  6:32 ` Christophe Leroy
2023-08-28  8:27   ` [PATCH v2] " Alexandra Diupina
2023-08-28  8:37     ` Christophe Leroy
2023-08-28 12:12       ` [PATCH v3] fsl_ucc_hdlc: process the result of hold_open() Alexandra Diupina
2023-08-28 13:11         ` Christophe Leroy
2023-08-28 19:38         ` Jakub Kicinski
2023-09-01 10:48           ` Александра Дюпина
2023-09-01 11:05             ` Denis Kirjanov
2023-09-04 12:31               ` [PATCH v4] drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close() Alexandra Diupina
2023-09-04 17:03                 ` Christophe Leroy
2023-09-04 17:04                   ` Christophe Leroy
2023-09-05 10:46                   ` Paolo Abeni
2023-09-19 14:25                     ` [PATCH v5] " Alexandra Diupina
2023-09-22  7:09                       ` Christophe Leroy
2023-09-22  7:20                       ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).