rtl2830: __udivdi3 undefined

Message ID 4F53EA7D.4090402@gmail.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Gianluca Gennari March 4, 2012, 10:19 p.m. UTC
  Il 29/02/2012 22:30, Geert Uytterhoeven ha scritto:
> http://kisskb.ellerman.id.au/kisskb/buildresult/5759200/ ERROR:
> "__udivdi3" [drivers/media/dvb/frontends/rtl2830.ko] undefined!
> 
> I didn't look too deeply into it, but I think it's caused by the
> "num /= priv->cfg.xtal" in rtl2830_init() (with num being u64).
> 
> Can't it use do_div() instead?
> 
> Gr{oetje,eeting}s,
> 
> Geert
> 
> -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 --
> geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a
> hacker. But when I'm talking to journalists I just say "programmer"
> or something like that. -- Linus Torvalds -- To unsubscribe from this
> list: send the line "unsubscribe linux-media" in the body of a
> message to majordomo@vger.kernel.org More majordomo info at
> http://vger.kernel.org/majordomo-info.html
> 

Probably the best solution is to use div_u64.
The following patch fixed the warning on my 32 bit system.

Signed-off-by: Gianluca Gennari <gennarone@gmail.com>
---
 drivers/media/dvb/frontends/rtl2830.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
  

Comments

Geert Uytterhoeven March 6, 2012, 6:02 p.m. UTC | #1
On Sun, Mar 4, 2012 at 23:19, Gianluca Gennari <gennarone@gmail.com> wrote:
> Probably the best solution is to use div_u64.
> The following patch fixed the warning on my 32 bit system.
>
> Signed-off-by: Gianluca Gennari <gennarone@gmail.com>

Thanks, that fixes it (div_u64() is do_div() on 32-bit).

Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>

> ---
>  drivers/media/dvb/frontends/rtl2830.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/media/dvb/frontends/rtl2830.c
> b/drivers/media/dvb/frontends/rtl2830.c
> index f971d94..45196c5 100644
> --- a/drivers/media/dvb/frontends/rtl2830.c
> +++ b/drivers/media/dvb/frontends/rtl2830.c
> @@ -244,7 +244,7 @@ static int rtl2830_init(struct dvb_frontend *fe)
>
>        num = priv->cfg.if_dvbt % priv->cfg.xtal;
>        num *= 0x400000;
> -       num /= priv->cfg.xtal;
> +       num = div_u64(num, priv->cfg.xtal);
>        num = -num;
>        if_ctl = num & 0x3fffff;
>        dbg("%s: if_ctl=%08x", __func__, if_ctl);

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Antti Palosaari March 12, 2012, 7:58 p.m. UTC | #2
On 05.03.2012 00:19, Gianluca Gennari wrote:
> Il 29/02/2012 22:30, Geert Uytterhoeven ha scritto:
>> http://kisskb.ellerman.id.au/kisskb/buildresult/5759200/ ERROR:
>> "__udivdi3" [drivers/media/dvb/frontends/rtl2830.ko] undefined!
>>
>> I didn't look too deeply into it, but I think it's caused by the
>> "num /= priv->cfg.xtal" in rtl2830_init() (with num being u64).
>>
>> Can't it use do_div() instead?
>>
>> Gr{oetje,eeting}s,
>>
>> Geert
>>
>> -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 --
>> geert@linux-m68k.org
>>
>> In personal conversations with technical people, I call myself a
>> hacker. But when I'm talking to journalists I just say "programmer"
>> or something like that. -- Linus Torvalds -- To unsubscribe from this
>> list: send the line "unsubscribe linux-media" in the body of a
>> message to majordomo@vger.kernel.org More majordomo info at
>> http://vger.kernel.org/majordomo-info.html
>>
>
> Probably the best solution is to use div_u64.
> The following patch fixed the warning on my 32 bit system.
>
> Signed-off-by: Gianluca Gennari<gennarone@gmail.com>
> ---
>   drivers/media/dvb/frontends/rtl2830.c |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/media/dvb/frontends/rtl2830.c
> b/drivers/media/dvb/frontends/rtl2830.c
> index f971d94..45196c5 100644
> --- a/drivers/media/dvb/frontends/rtl2830.c
> +++ b/drivers/media/dvb/frontends/rtl2830.c
> @@ -244,7 +244,7 @@ static int rtl2830_init(struct dvb_frontend *fe)
>
>   	num = priv->cfg.if_dvbt % priv->cfg.xtal;
>   	num *= 0x400000;
> -	num /= priv->cfg.xtal;
> +	num = div_u64(num, priv->cfg.xtal);
>   	num = -num;
>   	if_ctl = num&  0x3fffff;
>   	dbg("%s: if_ctl=%08x", __func__, if_ctl);

Acked-by: Antti Palosaari <crope@iki.fi>

I have been two weeks on skiing trip and since didn't acked that earlier.


regards
Antti
  

Patch

diff --git a/drivers/media/dvb/frontends/rtl2830.c
b/drivers/media/dvb/frontends/rtl2830.c
index f971d94..45196c5 100644
--- a/drivers/media/dvb/frontends/rtl2830.c
+++ b/drivers/media/dvb/frontends/rtl2830.c
@@ -244,7 +244,7 @@  static int rtl2830_init(struct dvb_frontend *fe)

 	num = priv->cfg.if_dvbt % priv->cfg.xtal;
 	num *= 0x400000;
-	num /= priv->cfg.xtal;
+	num = div_u64(num, priv->cfg.xtal);
 	num = -num;
 	if_ctl = num & 0x3fffff;
 	dbg("%s: if_ctl=%08x", __func__, if_ctl);