7e85ee0c1d
As explained by Benjamin Herrenschmidt: Oh and btw, your patch alone doesn't fix powerpc, because it's missing a whole bunch of GFP_KERNEL's in the arch code... You would have to grep the entire kernel for things that check slab_is_available() and even then you'll be missing some. For example, slab_is_available() didn't always exist, and so in the early days on powerpc, we used a mem_init_done global that is set form mem_init() (not perfect but works in practice). And we still have code using that to do the test. Therefore, mask out __GFP_WAIT, __GFP_IO, and __GFP_FS in the slab allocators in early boot code to avoid enabling interrupts. Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
43 lines
996 B
C
43 lines
996 B
C
#ifndef __LINUX_SLOB_DEF_H
|
|
#define __LINUX_SLOB_DEF_H
|
|
|
|
void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);
|
|
|
|
static __always_inline void *kmem_cache_alloc(struct kmem_cache *cachep,
|
|
gfp_t flags)
|
|
{
|
|
return kmem_cache_alloc_node(cachep, flags, -1);
|
|
}
|
|
|
|
void *__kmalloc_node(size_t size, gfp_t flags, int node);
|
|
|
|
static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node)
|
|
{
|
|
return __kmalloc_node(size, flags, node);
|
|
}
|
|
|
|
/**
|
|
* kmalloc - allocate memory
|
|
* @size: how many bytes of memory are required.
|
|
* @flags: the type of memory to allocate (see kcalloc).
|
|
*
|
|
* kmalloc is the normal method of allocating memory
|
|
* in the kernel.
|
|
*/
|
|
static __always_inline void *kmalloc(size_t size, gfp_t flags)
|
|
{
|
|
return __kmalloc_node(size, flags, -1);
|
|
}
|
|
|
|
static __always_inline void *__kmalloc(size_t size, gfp_t flags)
|
|
{
|
|
return kmalloc(size, flags);
|
|
}
|
|
|
|
static inline void kmem_cache_init_late(void)
|
|
{
|
|
/* Nothing to do */
|
|
}
|
|
|
|
#endif /* __LINUX_SLOB_DEF_H */
|