mirror of https://gitee.com/openkylin/linux.git
[POWERPC] Limit range of __init_ref_ok somewhat
This patch introduces zalloc_maybe_bootmem and uses it so that we don't have to mark a whole (largish) routine as __init_ref_ok. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
88de3cab98
commit
5669c3cf19
|
@ -424,7 +424,7 @@ static int default_irq_host_match(struct irq_host *h, struct device_node *np)
|
||||||
return h->of_node != NULL && h->of_node == np;
|
return h->of_node != NULL && h->of_node == np;
|
||||||
}
|
}
|
||||||
|
|
||||||
__init_refok struct irq_host *irq_alloc_host(struct device_node *of_node,
|
struct irq_host *irq_alloc_host(struct device_node *of_node,
|
||||||
unsigned int revmap_type,
|
unsigned int revmap_type,
|
||||||
unsigned int revmap_arg,
|
unsigned int revmap_arg,
|
||||||
struct irq_host_ops *ops,
|
struct irq_host_ops *ops,
|
||||||
|
@ -439,13 +439,7 @@ __init_refok struct irq_host *irq_alloc_host(struct device_node *of_node,
|
||||||
/* Allocate structure and revmap table if using linear mapping */
|
/* Allocate structure and revmap table if using linear mapping */
|
||||||
if (revmap_type == IRQ_HOST_MAP_LINEAR)
|
if (revmap_type == IRQ_HOST_MAP_LINEAR)
|
||||||
size += revmap_arg * sizeof(unsigned int);
|
size += revmap_arg * sizeof(unsigned int);
|
||||||
if (mem_init_done)
|
host = zalloc_maybe_bootmem(size, GFP_KERNEL);
|
||||||
host = kzalloc(size, GFP_KERNEL);
|
|
||||||
else {
|
|
||||||
host = alloc_bootmem(size);
|
|
||||||
if (host)
|
|
||||||
memset(host, 0, size);
|
|
||||||
}
|
|
||||||
if (host == NULL)
|
if (host == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
|
@ -12,3 +13,17 @@ void * __init_refok alloc_maybe_bootmem(size_t size, gfp_t mask)
|
||||||
else
|
else
|
||||||
return alloc_bootmem(size);
|
return alloc_bootmem(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void * __init_refok zalloc_maybe_bootmem(size_t size, gfp_t mask)
|
||||||
|
{
|
||||||
|
void *p;
|
||||||
|
|
||||||
|
if (mem_init_done)
|
||||||
|
p = kzalloc(size, mask);
|
||||||
|
else {
|
||||||
|
p = alloc_bootmem(size);
|
||||||
|
if (p)
|
||||||
|
memset(p, 0, size);
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
|
@ -190,6 +190,7 @@ extern unsigned long memory_limit;
|
||||||
extern unsigned long klimit;
|
extern unsigned long klimit;
|
||||||
|
|
||||||
extern void *alloc_maybe_bootmem(size_t size, gfp_t mask);
|
extern void *alloc_maybe_bootmem(size_t size, gfp_t mask);
|
||||||
|
extern void *zalloc_maybe_bootmem(size_t size, gfp_t mask);
|
||||||
|
|
||||||
extern int powersave_nap; /* set if nap mode can be used in idle loop */
|
extern int powersave_nap; /* set if nap mode can be used in idle loop */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue