On Fri, Jul 27, 2007 at 05:36:14AM +0100, Al Viro wrote: > On Fri, Jul 27, 2007 at 06:27:44AM +0200, Sam Ravnborg wrote: > > On Fri, Jul 27, 2007 at 02:18:13AM +0100, Al Viro wrote: > > > On Thu, Jul 26, 2007 at 11:01:41PM +0200, Sam Ravnborg wrote: > > > > > > > +static void *__init_refok alloc_rte(unsigned long size) > > > > +{ > > > > + return alloc_bootmem(size); > > > > +} > > > > > > That makes no sense at all. If we ever call that after freeing initmem, > > > we are screwed, period. Sounds like __init fodder. > > > > The call site has logic to prevent this from being called after init. > > And the call site cannot be made __init and to limit the scope of > > the __init_refok a small function is used. > > > > So unless I mis-understood something the above should be OK. > > Then the call site must be __init_refok, AFAICS. The point is, > the callers of alloc_rte() are where the analysis belongs; use of > __init_refok means that you assert that all calls of __init *from* > *it* are safe. Otherwise it just becomes "make modpost STFU and > let's hope that code is really OK".
The above function is suposed to be used solely from iosapic_alloc_rte() and not for general use. And instead of declaring all of iosapic_alloc_rte() as __init_refok then the single line doing the call to an __init function was factored out and marked __init. alloc_rte() can be used from everywhere but the naming suggest that this is for rte only. To make it more clear what the function was used for I could have made it like this: /* * Call site shall make sure this isused only during early init. * Use __init_refok to avoid warnings from modpost. */ static void * __init_refok alloc_rte(unsigned long size) { return alloc_bootmen(sizeof(struct iosapic_rte_info) * size); } Would that make the intention more clear? As for marking all of iosapic_alloc_rte() __init_refok this was not done because that would then not detect any new __init usage within the function. That could be done too obviously - it is anyway only 30 loc. Sam - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/