[alsa-devel] [PATCH] ALSA: at73c213: clk_round_rate() can return a zero upon error
Treat both negative and zero return values from clk_round_rate() as errors. This is needed since subsequent patches will convert clk_round_rate()'s return value to be an unsigned type, rather than a signed type, since some clock sources can generate rates higher than (2^31)-1 Hz.
Eventually, when calling clk_round_rate(), only a return value of zero will be considered a error. All other values will be considered valid rates. The comparison against values less than 0 is kept to preserve the correct behavior in the meantime.
Signed-off-by: Paul Walmsley pwalmsley@nvidia.com Cc: Hans-Christian Egtvedt egtvedt@samfundet.no Cc: Takashi Iwai tiwai@suse.de Cc: Jaroslav Kysela perex@perex.cz --- Applies on v3.13-rc3. See also:
http://marc.info/?l=linux-arm-kernel&m=138542591313620&w=2
sound/spi/at73c213.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c index 8e3d9a6c7a3b..25c38afaee49 100644 --- a/sound/spi/at73c213.c +++ b/sound/spi/at73c213.c @@ -174,7 +174,7 @@ static int snd_at73c213_set_bitrate(struct snd_at73c213 *chip) dac_rate_new = 8 * (ssc_rate / ssc_div);
status = clk_round_rate(chip->board->dac_clk, dac_rate_new); - if (status < 0) + if (status <= 0) return status;
/* Ignore difference smaller than 256 Hz. */
Around Mon 09 Dec 2013 18:40:48 -0800 or thereabout, Paul Walmsley wrote:
Treat both negative and zero return values from clk_round_rate() as errors. This is needed since subsequent patches will convert clk_round_rate()'s return value to be an unsigned type, rather than a signed type, since some clock sources can generate rates higher than (2^31)-1 Hz.
Eventually, when calling clk_round_rate(), only a return value of zero will be considered a error. All other values will be considered valid rates. The comparison against values less than 0 is kept to preserve the correct behavior in the meantime.
Signed-off-by: Paul Walmsley pwalmsley@nvidia.com Cc: Hans-Christian Egtvedt egtvedt@samfundet.no Cc: Takashi Iwai tiwai@suse.de Cc: Jaroslav Kysela perex@perex.cz
Thanks for fixing.
Acked-by: Hans-Christian Egtvedt egtvedt@samfundet.no
Applies on v3.13-rc3. See also:
http://marc.info/?l=linux-arm-kernel&m=138542591313620&w=2
sound/spi/at73c213.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c index 8e3d9a6c7a3b..25c38afaee49 100644 --- a/sound/spi/at73c213.c +++ b/sound/spi/at73c213.c @@ -174,7 +174,7 @@ static int snd_at73c213_set_bitrate(struct snd_at73c213 *chip) dac_rate_new = 8 * (ssc_rate / ssc_div);
status = clk_round_rate(chip->board->dac_clk, dac_rate_new);
if (status < 0)
if (status <= 0) return status;
/* Ignore difference smaller than 256 Hz. */
At Mon, 9 Dec 2013 18:40:48 -0800, Paul Walmsley wrote:
Treat both negative and zero return values from clk_round_rate() as errors. This is needed since subsequent patches will convert clk_round_rate()'s return value to be an unsigned type, rather than a signed type, since some clock sources can generate rates higher than (2^31)-1 Hz.
Eventually, when calling clk_round_rate(), only a return value of zero will be considered a error. All other values will be considered valid rates. The comparison against values less than 0 is kept to preserve the correct behavior in the meantime.
Signed-off-by: Paul Walmsley pwalmsley@nvidia.com Cc: Hans-Christian Egtvedt egtvedt@samfundet.no Cc: Takashi Iwai tiwai@suse.de Cc: Jaroslav Kysela perex@perex.cz
Applies on v3.13-rc3. See also:
Is the behavior "returning zero upon error" already in 3.13? That is, should this (and another) patch be taken as a 3.13-fix patch, or it's for 3.14?
thanks,
Takashi
sound/spi/at73c213.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c index 8e3d9a6c7a3b..25c38afaee49 100644 --- a/sound/spi/at73c213.c +++ b/sound/spi/at73c213.c @@ -174,7 +174,7 @@ static int snd_at73c213_set_bitrate(struct snd_at73c213 *chip) dac_rate_new = 8 * (ssc_rate / ssc_div);
status = clk_round_rate(chip->board->dac_clk, dac_rate_new);
if (status < 0)
if (status <= 0) return status;
/* Ignore difference smaller than 256 Hz. */
On Mon, 9 Dec 2013, Takashi Iwai wrote:
At Mon, 9 Dec 2013 18:40:48 -0800, Paul Walmsley wrote:
Treat both negative and zero return values from clk_round_rate() as errors. This is needed since subsequent patches will convert clk_round_rate()'s return value to be an unsigned type, rather than a signed type, since some clock sources can generate rates higher than (2^31)-1 Hz.
Is the behavior "returning zero upon error" already in 3.13? That is, should this (and another) patch be taken as a 3.13-fix patch, or it's for 3.14?
It depends on the platform. The Common Clock Framework code returns 0 upon error right now. But other clock framework implementations, such as the one used by the Atmel AT91 boards, return negative error codes. And looking at the mainline code, it looks like the at73c213 chip is most likely to be used on AT91 boards.
So if you want to send this patch for v3.13-rc, it's probably justified, but it's low-priority. v3.14 is also fine.
I'll be sending some followup patches to the platform maintainers to change the clock framework code to return 0 upon error. But those can't be applied until the drivers are fixed, if we want to avoid regressions in error path handling. So from that point of view, applying these driver patches in v3.13-rc would mean there is less delay to getting the platform clock framework fixes upstream :-)
- Paul
At Tue, 10 Dec 2013 11:46:43 -0800, Paul Walmsley wrote:
On Mon, 9 Dec 2013, Takashi Iwai wrote:
At Mon, 9 Dec 2013 18:40:48 -0800, Paul Walmsley wrote:
Treat both negative and zero return values from clk_round_rate() as errors. This is needed since subsequent patches will convert clk_round_rate()'s return value to be an unsigned type, rather than a signed type, since some clock sources can generate rates higher than (2^31)-1 Hz.
Is the behavior "returning zero upon error" already in 3.13? That is, should this (and another) patch be taken as a 3.13-fix patch, or it's for 3.14?
It depends on the platform. The Common Clock Framework code returns 0 upon error right now. But other clock framework implementations, such as the one used by the Atmel AT91 boards, return negative error codes. And looking at the mainline code, it looks like the at73c213 chip is most likely to be used on AT91 boards.
So if you want to send this patch for v3.13-rc, it's probably justified, but it's low-priority. v3.14 is also fine.
I'll be sending some followup patches to the platform maintainers to change the clock framework code to return 0 upon error. But those can't be applied until the drivers are fixed, if we want to avoid regressions in error path handling. So from that point of view, applying these driver patches in v3.13-rc would mean there is less delay to getting the platform clock framework fixes upstream :-)
OK, unless any known regressions are reported, I'm inclined to put this for 3.14. Now applied to for-next branch. Thanks!
Takashi
participants (3)
-
Hans-Christian Egtvedt
-
Paul Walmsley
-
Takashi Iwai