On Thu, Apr 4, 2019 at 12:32 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Thu, Apr 04, 2019 at 12:08:38PM -0700, Dan Williams wrote: > > +++ b/lib/Kconfig > > @@ -318,6 +318,12 @@ config DECOMPRESS_LZ4 > > config GENERIC_ALLOCATOR > > bool > > > > +# > > +# Generic IDA for memory regions > > +# > > Leaky abstraction -- nobody needs know that it's implemented as an IDA. > Suggest: > > # Memory region ID allocation > Looks good to me. > ... > > > +++ b/lib/memregion.c > > @@ -0,0 +1,22 @@ > > +#include <linux/idr.h> > > +#include <linux/module.h> > > + > > +static DEFINE_IDA(region_ida); > > + > > +int memregion_alloc(void) > > +{ > > + return ida_simple_get(®ion_ida, 0, 0, GFP_KERNEL); > > +} > > +EXPORT_SYMBOL(memregion_alloc); > > + > > +void memregion_free(int id) > > +{ > > + ida_simple_remove(®ion_ida, id); > > +} > > +EXPORT_SYMBOL(memregion_free); > > + > > +static void __exit memregion_exit(void) > > +{ > > + ida_destroy(®ion_ida); > > +} > > +module_exit(memregion_exit); > > - Should these be EXPORT_SYMBOL_GPL? I don't see the need. These are simple wrappers around existing EXPORT_SYMBOL() exports, and there's little concern that these interfaces might disappear in the future causing us pain with out of tree modules as these don't touch anything in the core. > - Can we use the new interface, ida_alloc() and ida_free()? Sure. > - Do we really want memregion_exit() to happen while there are still IDs > allocated in the IDA? I think this might well be better as: > > BUG_ON(!ida_empty(®ion_ida)); True, or just delete the module_exit because this functionality can't be built as a module, so the exit path is already dead code. > Also, do we really want to call the structure the region_ida? Why not > region_ids? Sure, sounds good.