|
@@ -29,7 +29,7 @@ void *kmem_cache_alloc(struct kmem_cache *cachep, int flags)
|
|
{
|
|
{
|
|
struct radix_tree_node *node;
|
|
struct radix_tree_node *node;
|
|
|
|
|
|
- if (flags & __GFP_NOWARN)
|
|
|
|
|
|
+ if (!(flags & __GFP_DIRECT_RECLAIM))
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
pthread_mutex_lock(&cachep->lock);
|
|
pthread_mutex_lock(&cachep->lock);
|
|
@@ -73,10 +73,17 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
|
|
|
|
|
|
void *kmalloc(size_t size, gfp_t gfp)
|
|
void *kmalloc(size_t size, gfp_t gfp)
|
|
{
|
|
{
|
|
- void *ret = malloc(size);
|
|
|
|
|
|
+ void *ret;
|
|
|
|
+
|
|
|
|
+ if (!(gfp & __GFP_DIRECT_RECLAIM))
|
|
|
|
+ return NULL;
|
|
|
|
+
|
|
|
|
+ ret = malloc(size);
|
|
uatomic_inc(&nr_allocated);
|
|
uatomic_inc(&nr_allocated);
|
|
if (kmalloc_verbose)
|
|
if (kmalloc_verbose)
|
|
printf("Allocating %p from malloc\n", ret);
|
|
printf("Allocating %p from malloc\n", ret);
|
|
|
|
+ if (gfp & __GFP_ZERO)
|
|
|
|
+ memset(ret, 0, size);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|