idr_preload — 
  preload for idr_alloc
 
| void idr_preload ( | gfp_t gfp_mask ); | 
   Preload per-cpu layer buffer for idr_alloc.  Can only be used from
   process context and each idr_preload invocation should be matched with
   idr_preload_end.  Note that preemption is disabled while preloaded.
   
   The first idr_alloc in the preloaded section can be treated as if it
   were invoked with gfp_mask used for preloading.  This allows using more
   permissive allocation masks for idrs protected by spinlocks.
   
   For example, if idr_alloc below fails, the failure can be treated as
   if idr_alloc were called with GFP_KERNEL rather than GFP_NOWAIT.
   
idr_preload(GFP_KERNEL); spin_lock(lock);
id = idr_alloc(idr, ptr, start, end, GFP_NOWAIT);
   spin_unlock(lock);
   idr_preload_end;
   if (id < 0)
   error;