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;