Hi Tejun, I am sorry, I don't take any test for the patch attached in previous mail, and it can't fix the bug completely, please ignore it I provide a new patch attached in this mail which pass test and can fix the issue described below __next_mem_range_rev() defined in mm/memblock.c doesn't achieve desired purpose if parameter type_b ==NULL This new patch can fix the issue and get the last reversed region contained in type_a rightly The new patch is descripted as follows: From 0e242eda7696f176a9a2e585a1db01f0575b39c9 Mon Sep 17 00:00:00 2001 From: zijun_hu <zijun_hu@xxxxxxx> Date: Mon, 25 Jul 2016 15:06:57 +0800 Subject: [PATCH] mm/memblock.c: fix index adjustment error in __next_mem_range_rev() fix region index adjustment error when parameter type_b of __next_mem_range_rev() == NULL Signed-off-by: zijun_hu <zijun_hu@xxxxxxx> --- mm/memblock.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index ac12489..cc5aeab 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -991,7 +991,11 @@ void __init_memblock __next_mem_range_rev(u64 *idx, int nid, ulong flags, if (*idx == (u64)ULLONG_MAX) { idx_a = type_a->cnt - 1; - idx_b = type_b->cnt; + /* in order to get the last reversed region rightly */ + if (type_b != NULL) + idx_b = type_b->cnt; + else + idx_b = 0; } for (; idx_a >= 0; idx_a--) { @@ -1024,7 +1028,7 @@ void __init_memblock __next_mem_range_rev(u64 *idx, int nid, ulong flags, *out_end = m_end; if (out_nid) *out_nid = m_nid; - idx_a++; + idx_a--; *idx = (u32)idx_a | (u64)idx_b << 32; return; } -- 1.9.1 Zijun Hu Tel: +86 021 3813 0008 Ext: 8556 F1 Building, 299 Kang Wei Road, Pudong New Area, Shanghai 201315, China htc.com -----邮件原件----- 发件人: Tejun Heo
[mailto:htejun@xxxxxxxxx]
代表 Tejun Heo 发送时间: 2016年7月26日
2:52 收件人: Zijun Hu(胡自?) 抄送:
akpm@xxxxxxxxxxxxxxxxxxxx;
kuleshovmail@xxxxxxxxx;
ard.biesheuvel@xxxxxxxxxx;
tangchen@xxxxxxxxxxxxxx;
weiyang@xxxxxxxxxxxxxxxxxx;
dev@xxxxxxxxxx;
david@xxxxxxxxxxxxxxxxxxxxx;
linux-mm@xxxxxxxxx;
linux-kernel@xxxxxxxxxxxxxxx 主题: Re: [PATCH] mm/memblock.c: fix index adjustment error in __next_mem_range_rev() On Mon, Jul 25, 2016 at 07:34:12AM +0000,
zijun_hu@xxxxxxx wrote: > Hi All, > There is a bug in mm/memblock.c > Could you review and phase-in this patch? > Thanks a lot > > From 3abf1822d30f77f126bd7a3c09bb243d9c17a029 Mon Sep 17 00:00:00 2001 > From: zijun_hu <zijun_hu@xxxxxxx> > Date: Mon, 25 Jul 2016 15:06:57 +0800 > Subject: [PATCH] mm/memblock.c: fix index adjustment error in > __next_mem_range_rev() > > fix region index adjustment error when parameter type_b of > __next_mem_range_rev() == NULL > > Signed-off-by: zijun_hu <zijun_hu@xxxxxxx> > --- > mm/memblock.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/memblock.c b/mm/memblock.c index ac12489..b14973e > 100644 > --- a/mm/memblock.c > +++ b/mm/memblock.c > @@ -1024,7 +1024,7 @@ void __init_memblock __next_mem_range_rev(u64 *idx, int nid, ulong flags, > *out_end = m_end; > if (out_nid) > *out_nid = m_nid; > - idx_a++; > + idx_a--; Looks good to me. Do you happen to have a test case for this bug? Thanks. -- tejun
|
Attachment:
0001-mm-memblock.c-fix-index-adjustment-error-in.patch
Description: 0001-mm-memblock.c-fix-index-adjustment-error-in.patch