Hi Boris, On Sun, May 13, 2018 at 4:02 PM, Boris Brezillon <boris.brezil...@bootlin.com> wrote: > ndelay() is supposed to take an unsigned long, but if you define > ndelay() as a macro and the caller pass an unsigned long long instead > of an unsigned long, the unsigned long long to unsigned long cast is > not done and we end up with an "undefined reference to `__udivdi3'" > error at link time. > > Fix that by making ndelay() an inline function and then defining dummy > ndelay() macro that redirects to the ndelay() function (it's how most > archs do to implement ndelay()). > > Fixes: c8ee038bd148 ("m68k: Implement ndelay() based on the existing udelay() > logic") > Signed-off-by: Boris Brezillon <boris.brezil...@bootlin.com> > --- > Hello Geert, > > This patch is fixing the bug reported by kbuild test robot here [1]. > I could have patched the PSEC_TO_NSEC() macro to cast the result of > the division on a u32, but I thought making m68k consistent with what > other archs do would be preferable. > > Let me know if don't like the solution, and I'll patch the ndelay() > caller instead.
Thanks for your patch! With the comment a few lines above removed: - * This is a macro so that the const version can factor out the first - * multiply and shift. Acked-by: Geert Uytterhoeven <ge...@linux-m68k.org> > > Regards, > > Boris > > [1]https://lkml.org/lkml/2018/5/13/72 > --- > arch/m68k/include/asm/delay.h | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/arch/m68k/include/asm/delay.h b/arch/m68k/include/asm/delay.h > index 7f474121e4ca..66ba159002a3 100644 > --- a/arch/m68k/include/asm/delay.h > +++ b/arch/m68k/include/asm/delay.h > @@ -115,6 +115,13 @@ static inline void __udelay(unsigned long usecs) > */ > #define HZSCALE (268435456 / (1000000 / HZ)) > > -#define ndelay(n) __delay(DIV_ROUND_UP((n) * ((((HZSCALE) >> 11) * > (loops_per_jiffy >> 11)) >> 6), 1000)) > +static inline void ndelay(unsigned long nsec) > +{ > + __delay(DIV_ROUND_UP(nsec * > + ((((HZSCALE) >> 11) * > + (loops_per_jiffy >> 11)) >> 6), > + 1000)); > +} > +#define ndelay(n) ndelay(n) > > #endif /* defined(_M68K_DELAY_H) */ Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@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-m68k" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html