Linux MIPS Architecture development
 help / color / mirror / Atom feed
* [PATCH] rt2x00: call clk_get_rate only if we have a clock
@ 2017-07-08  6:30 Mathias Kresin
  2017-07-08  7:24 ` Mathias Kresin
  0 siblings, 1 reply; 2+ messages in thread
From: Mathias Kresin @ 2017-07-08  6:30 UTC (permalink / raw)
  To: sgruszka, helmut.schaa, kvalo; +Cc: linux-mips

If clk_get returns an error, rt2x00dev->clk is set to NULL. In
contrast to the common clock framework provided clk_get_rate(), at
least the ramips and bcm63xx legacy implementation of the clk API
access the rate member of the clk struct without a NULL check. This
results into a kernel panic if we do not have a (SoC) clock.

Call clk_get_rate only if we have a clock to fix the issues. This
approach is similar to what is done in the kernel at various places.
Usually clk_get_rate() is only called if clk_get_rate() doesn't return
an error.

Signed-off-by: Mathias Kresin <dev@kresin.me>
---
 drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index d11c7b2..2a525b9 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -2059,6 +2059,9 @@ static void rt2800_config_lna_gain(struct rt2x00_dev *rt2x00dev,
 
 static inline bool rt2800_clk_is_20mhz(struct rt2x00_dev *rt2x00dev)
 {
+	if (!rt2x00dev->clk)
+		return 0;
+
 	return clk_get_rate(rt2x00dev->clk) == 20000000;
 }
 
-- 
2.7.4

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

* Re: [PATCH] rt2x00: call clk_get_rate only if we have a clock
  2017-07-08  6:30 [PATCH] rt2x00: call clk_get_rate only if we have a clock Mathias Kresin
@ 2017-07-08  7:24 ` Mathias Kresin
  0 siblings, 0 replies; 2+ messages in thread
From: Mathias Kresin @ 2017-07-08  7:24 UTC (permalink / raw)
  To: linux-mips

08.07.2017 08:30, Mathias Kresin:
> If clk_get returns an error, rt2x00dev->clk is set to NULL. In
> contrast to the common clock framework provided clk_get_rate(), at
> least the ramips and bcm63xx legacy implementation of the clk API
> access the rate member of the clk struct without a NULL check. This
> results into a kernel panic if we do not have a (SoC) clock.
> 
> Call clk_get_rate only if we have a clock to fix the issues. This
> approach is similar to what is done in the kernel at various places.
> Usually clk_get_rate() is only called if clk_get_rate() doesn't return
> an error.
> 
> Signed-off-by: Mathias Kresin <dev@kresin.me>
> ---
>   drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> index d11c7b2..2a525b9 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> @@ -2059,6 +2059,9 @@ static void rt2800_config_lna_gain(struct rt2x00_dev *rt2x00dev,
>   
>   static inline bool rt2800_clk_is_20mhz(struct rt2x00_dev *rt2x00dev)
>   {
> +	if (!rt2x00dev->clk)
> +		return 0;
> +
>   	return clk_get_rate(rt2x00dev->clk) == 20000000;
>   }
>   
> 

Please disregard the patch. Send it to the wrong list.

Mathias

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

end of thread, other threads:[~2017-07-08  7:24 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-08  6:30 [PATCH] rt2x00: call clk_get_rate only if we have a clock Mathias Kresin
2017-07-08  7:24 ` Mathias Kresin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox