From: Ian Campbell on 19 Mar 2010 19:40 On Fri, 2010-03-19 at 23:24 +0000, Yinghai Lu wrote: > On 03/19/2010 03:21 PM, H. Peter Anvin wrote: > > On 03/19/2010 03:18 PM, Yinghai Lu wrote: > >> From: Ian Campbell <ian.campbell(a)citrix.com> > >> > >> This avoids an infinite loop in free_early_partial(). > >> > >> Add a warning to free_early_partial to catch future problems. > >> > >> -v3: according to hpa, don't bother caller. > >> > >> Signed-off-by: Ian Campbell <ian.campbell(a)citrix.com> > >> Signed-off-by: Yinghai Lu <yinghai(a)kernel.org> > >> Cc: Peter Zijlstra <peterz(a)infradead.org> > >> Cc: Ingo Molnar <mingo(a)elte.hu> > >> --- > >> kernel/early_res.c | 5 +++++ > >> 1 files changed, 5 insertions(+), 0 deletions(-) > >> > >> diff --git a/kernel/early_res.c b/kernel/early_res.c > >> index 3cb2c66..f3a861b 100644 > >> --- a/kernel/early_res.c > >> +++ b/kernel/early_res.c > >> @@ -333,6 +333,11 @@ void __init free_early_partial(u64 start, u64 end) > >> struct early_res *r; > >> int i; > >> > >> + if (WARN_ONCE(start >= end, > >> + "free_early_partial got wrong start/end %#llx/%#llx\n", > >> + start, end)) > >> + return; > >> + > >> try_next: > >> i = find_overlapped_early(start, end); > >> if (i >= max_early_res) > > > > No, that's wrong. > > > > The workaround is still needed for the case of equality to avoid the > > infinite loop. > > > > So you need an: > > > > if (start == end) > > return; > > > > confused, do you mean like this > if (start < end), find_overlapped_early will stop the loop. I think Peter means: if (start == end) return; if (WARN_ONCE(start < end, "blah")) return; i.e. silently ignore a zero sized region and verbosely ignore a negatively sized one. Ian. > From: Ian Campbell <ian.campbell(a)citrix.com> > > This avoids an infinite loop in free_early_partial(). > > Add a warning to free_early_partial to catch future problems. > > -v3: according to hpa, don't bother caller. > > Signed-off-by: Ian Campbell <ian.campbell(a)citrix.com> > Signed-off-by: Yinghai Lu <yinghai(a)kernel.org> > Cc: Peter Zijlstra <peterz(a)infradead.org> > Cc: Ingo Molnar <mingo(a)elte.hu> > --- > kernel/early_res.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > Index: linux-2.6/kernel/early_res.c > =================================================================== > --- linux-2.6.orig/kernel/early_res.c > +++ linux-2.6/kernel/early_res.c > @@ -333,6 +333,14 @@ void __init free_early_partial(u64 start > struct early_res *r; > int i; > > + if (start >= end) { > + WARN_ONCE(1, > + "free_early_partial got wrong start/end %#llx/%#llx\n", > + start, end); > + > + return; > + } > + > try_next: > i = find_overlapped_early(start, end); > if (i >= max_early_res) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Ian Campbell on 19 Mar 2010 19:50 On Fri, 2010-03-19 at 23:35 +0000, Ian Campbell wrote: > if (WARN_ONCE(start < end, "blah")) or rather "start > end"... Ian. -- Ian Campbell I am a friend of the working man, and I would rather be his friend than be one. -- Clarence Darrow -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: H. Peter Anvin on 19 Mar 2010 20:00 On 03/19/2010 04:35 PM, Ian Campbell wrote: > > I think Peter means: > > if (start == end) > return; > > if (WARN_ONCE(start < end, "blah")) > return; start > end! > i.e. silently ignore a zero sized region and verbosely ignore a > negatively sized one. Correct. -hpa -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Linus Torvalds on 19 Mar 2010 21:10 On Fri, 19 Mar 2010, Yinghai Lu wrote: > + > + if (start > end) { > + WARN_ONCE(1, > + "free_early_partial got wrong start/end %#llx/%#llx\n", > + start, end); > + > + return; This should be written as if (WARN_ONCE(start > end, "free_early_partial(%#llx/%#llx)\n", start, end)) return; rather than having a separate conditional. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Linus Torvalds on 19 Mar 2010 22:50 On Fri, 19 Mar 2010, Yinghai Lu wrote: > + if (WARN_ONCE(start > end, > + "free_early_partial got wrong start/end %#llx/%#llx\n", > + start, end)) I really don't want multi-line single statements like this. Shorten the string a bit, and it should all fit fine on one line, and be much more greppable. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
First
|
Prev
|
Next
|
Last
Pages: 1 2 3 4 Prev: [PATCH 0/3] reduce per cpu boot up messages Next: acpi/sbs: fix build for ACPI_SYSFS_POWER=n |