Re: [PATCH] bring sanity to div64.h and do_div usage

Troy Benjegerdes
2002-02-08T21:17:40Z

> > > >+/* yeah, this is a mess, and leaves out m68k.... */
> > > >+# if defined(CONFIG_X86) || define(CONFIG_ARCH_S390) ||
>
> Just noticed there is a typo. It should be "defined(CONFIG_ARCH_S390)" not
> "define"... Just spotted it

fixed.

> #if defined(__mc68000__) so just use that instead. Any m68k people reading
> this care to comment?

fixed.

> Sorry can't say. Don't have 64 bit computers/gcc. )-: But as a matter of
> principle I wouldn't trust gcc. I remember at least one case being
> discussed on lkml before where gcc was not optimizing away obviously
> optimizable code...

anyone else have comments on this? (for now I'm adding a '(BITS_PER_LONG ==
64) to the first if..

> >I provided the #define option so we can have *one* sane cross platform 64
> >bit divide, but one that still makes people think before using do_div.
>
> You are just obfuscating the kernel code.

Obviously, there are good reasons for real 64 bit divides.

Would you rather have a 'do_div64()' function that does full divisions?

For ntfs/smbfs, can you just make two consecutive calls?

do_div(&val, 10000)
do_div(&val, 1000)

> Rewrite the algorithm is the obvious choice. The old NTFS driver used to
> have one but I got rid of it in favour of the nice do_div() assuming it
> would always work... But even that had certain restrictions put in place
> because of the special uses it had so it is not generic enough for
> do_div(). Considering do_div() is not useful in current state I may have to
> resurrect the original code and put it into NTFS (and SMBFS, which has the
> same problem). But it would be much better to have a proper do_div()
> instead. Otherwise we will just get proliferation of various do_div()
> implementations in various drivers.

Yes, I'd like to avoid 16 different degenerate case implementations of
do_div() in various drivers.

Linus (or anyone else in a position to send stuff to Linus), could you please
make a statement about what would be acceptable? Should we have two
functions, rewrite vsprintf, or what?

I could just punt and fix powerpc with asm, but I really don't think do_div
gets called enough to be worth the trouble of asm code. (ASM is for mucking
with MMU's, atomic ops, etc, not 64 bit divides in-kernel)

--
Troy Benjegerdes | master of mispeeling | 'da hozer' | hozer@drgw.net
-----"If this message isn't misspelled, I didn't write it" -- Me -----
"Why do musicians compose symphonies and poets write poems? They do it
because life wouldn't have any meaning for them if they didn't. That's
why I draw cartoons. It's my life." -- Charles Schulz