Messages in this thread Patch in this message | | | Date | Thu, 17 Nov 2011 15:32:50 -0800 | From | Andrew Morton <> | Subject | Re: [opensuse-kernel] Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1) |
| |
On Thu, 17 Nov 2011 20:19:06 -0300 Cristian Rodr__guez <crrodriguez@opensuse.org> wrote:
> On 17/11/11 20:05, Andrew Morton wrote: > > > I assume that nobody has gone off and checked whether all current > > callers will survive this change. If they had, they'd have looked in > > drivers/char/ramoops.c and seen: > > > > rounddown_pow_of_two(pdata->mem_size); > > rounddown_pow_of_two(pdata->record_size); > > > > These operations are no-ops. It should be > > > > pdata->mem_size = rounddown_pow_of_two(pdata->mem_size); > > pdata->record_size = rounddown_pow_of_two(pdata->record_size); > > > > That we have this many warts using these interfaces is an indication > > that the interfaces aren't very good. Poorly documented, at least. > > > > making that macro an inline function and annotating with > __attribute__((warn_unused_result)) looks like a good start for me.
The problem is:
* - this can be used to initialise global variables from constant data
I'm surprised that this is true. Is gcc smart enough to actually do this?
<tests it>
--- a/fs/open.c~a +++ a/fs/open.c @@ -31,6 +31,10 @@ #include <linux/ima.h> #include <linux/dnotify.h> +#include <linux/log2.h> + +int blap = rounddown_pow_of_two(42); + #include "internal.h" int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, _ ooh, it worked.
| |