Merge branch 'akpm' (patches from Andrew)
Merge fixes from Andrew Morton: "4 fixes" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: mem-hotplug: use nodes that contain memory as mask in new_node_page() scripts/recordmcount.c: account for .softirqentry.text dma-mapping.h: preserve unmap info for CONFIG_DMA_API_DEBUG mm,ksm: fix endless looping in allocating memory when ksm enable
This commit is contained in:
commit
53061afee4
|
@ -718,7 +718,7 @@ static inline int dma_mmap_wc(struct device *dev,
|
||||||
#define dma_mmap_writecombine dma_mmap_wc
|
#define dma_mmap_writecombine dma_mmap_wc
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NEED_DMA_MAP_STATE
|
#if defined(CONFIG_NEED_DMA_MAP_STATE) || defined(CONFIG_DMA_API_DEBUG)
|
||||||
#define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME
|
#define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME
|
||||||
#define DEFINE_DMA_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME
|
#define DEFINE_DMA_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME
|
||||||
#define dma_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME)
|
#define dma_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME)
|
||||||
|
|
3
mm/ksm.c
3
mm/ksm.c
|
@ -283,7 +283,8 @@ static inline struct rmap_item *alloc_rmap_item(void)
|
||||||
{
|
{
|
||||||
struct rmap_item *rmap_item;
|
struct rmap_item *rmap_item;
|
||||||
|
|
||||||
rmap_item = kmem_cache_zalloc(rmap_item_cache, GFP_KERNEL);
|
rmap_item = kmem_cache_zalloc(rmap_item_cache, GFP_KERNEL |
|
||||||
|
__GFP_NORETRY | __GFP_NOWARN);
|
||||||
if (rmap_item)
|
if (rmap_item)
|
||||||
ksm_rmap_items++;
|
ksm_rmap_items++;
|
||||||
return rmap_item;
|
return rmap_item;
|
||||||
|
|
|
@ -1555,8 +1555,8 @@ static struct page *new_node_page(struct page *page, unsigned long private,
|
||||||
{
|
{
|
||||||
gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE;
|
gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE;
|
||||||
int nid = page_to_nid(page);
|
int nid = page_to_nid(page);
|
||||||
nodemask_t nmask = node_online_map;
|
nodemask_t nmask = node_states[N_MEMORY];
|
||||||
struct page *new_page;
|
struct page *new_page = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO: allocate a destination hugepage from a nearest neighbor node,
|
* TODO: allocate a destination hugepage from a nearest neighbor node,
|
||||||
|
@ -1567,14 +1567,14 @@ static struct page *new_node_page(struct page *page, unsigned long private,
|
||||||
return alloc_huge_page_node(page_hstate(compound_head(page)),
|
return alloc_huge_page_node(page_hstate(compound_head(page)),
|
||||||
next_node_in(nid, nmask));
|
next_node_in(nid, nmask));
|
||||||
|
|
||||||
if (nid != next_node_in(nid, nmask))
|
node_clear(nid, nmask);
|
||||||
node_clear(nid, nmask);
|
|
||||||
|
|
||||||
if (PageHighMem(page)
|
if (PageHighMem(page)
|
||||||
|| (zone_idx(page_zone(page)) == ZONE_MOVABLE))
|
|| (zone_idx(page_zone(page)) == ZONE_MOVABLE))
|
||||||
gfp_mask |= __GFP_HIGHMEM;
|
gfp_mask |= __GFP_HIGHMEM;
|
||||||
|
|
||||||
new_page = __alloc_pages_nodemask(gfp_mask, 0,
|
if (!nodes_empty(nmask))
|
||||||
|
new_page = __alloc_pages_nodemask(gfp_mask, 0,
|
||||||
node_zonelist(nid, gfp_mask), &nmask);
|
node_zonelist(nid, gfp_mask), &nmask);
|
||||||
if (!new_page)
|
if (!new_page)
|
||||||
new_page = __alloc_pages(gfp_mask, 0,
|
new_page = __alloc_pages(gfp_mask, 0,
|
||||||
|
|
|
@ -363,6 +363,7 @@ is_mcounted_section_name(char const *const txtname)
|
||||||
strcmp(".sched.text", txtname) == 0 ||
|
strcmp(".sched.text", txtname) == 0 ||
|
||||||
strcmp(".spinlock.text", txtname) == 0 ||
|
strcmp(".spinlock.text", txtname) == 0 ||
|
||||||
strcmp(".irqentry.text", txtname) == 0 ||
|
strcmp(".irqentry.text", txtname) == 0 ||
|
||||||
|
strcmp(".softirqentry.text", txtname) == 0 ||
|
||||||
strcmp(".kprobes.text", txtname) == 0 ||
|
strcmp(".kprobes.text", txtname) == 0 ||
|
||||||
strcmp(".text.unlikely", txtname) == 0;
|
strcmp(".text.unlikely", txtname) == 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,6 +134,7 @@ my %text_sections = (
|
||||||
".sched.text" => 1,
|
".sched.text" => 1,
|
||||||
".spinlock.text" => 1,
|
".spinlock.text" => 1,
|
||||||
".irqentry.text" => 1,
|
".irqentry.text" => 1,
|
||||||
|
".softirqentry.text" => 1,
|
||||||
".kprobes.text" => 1,
|
".kprobes.text" => 1,
|
||||||
".text.unlikely" => 1,
|
".text.unlikely" => 1,
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue