On Sat, Jan 26, 2013 at 05:49:29PM +0800, Mark Brown wrote:
> Oh, ffs.  This is a false positive from the compiler - there is no case
> where it can actually do this as we will bail out before the walk if the
> list is empty so we'll always take at least one trip through our
> list_for_each_entry() and either return or set ret.  It should be smart
> enough to work out that the list_empty() means list_for_each_entry()
> will iterate over at least one entry or more conservative in what it
> warns about.

Why not code the function in a way that avoids the problem altogether?

        /*
         * This should never happen; we return above if we fail to
         * allocate and we should never be in this code if there are
         * no registers at all.
         */
-       if (list_empty(&map->debugfs_off_cache)) {
-               WARN_ON(list_empty(&map->debugfs_off_cache));
-               return base;
-       }
+       WARN_ON(list_empty(&map->debugfs_off_cache));
+       ret = base;

        /* Find the relevant block */
        list_for_each_entry(c, &map->debugfs_off_cache, list) {
                if (from >= c->min && from <= c->max) {
                        *pos = c->min;
                        return c->base_reg;
                }

                *pos = c->min;
                ret = c->base_reg;
        }

        return ret;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to