aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorParag Warudkar <parag.warudkar@gmail.com>2008-01-30 07:31:59 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:31:59 -0500
commitbca25bafbb390eeec376ac994954b99489d198ec (patch)
tree39f9cd65b78c8efe65b633456c5473c38c4d249c
parent79da4721117fcf188b4b007b775738a530f574da (diff)
x86: fix dmi_alloc() to not advance alloc index in case of
dmi_alloc() for CONFIG_X86_64 is defined to allocate from a static array and it maintains a allocation index which is advanced each time allocation is attempted - it gets incremented even if an allocation fails thereby depriving any future request that may be small enough to be satisfied from the array. Fix this by first testing if allocation is going to be possible and incrementing alloc index only then. Signed-off-by: Parag Warudkar <parag.warudkar@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--include/asm-x86/dmi.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/asm-x86/dmi.h b/include/asm-x86/dmi.h
index 8e2b0e6aa8e7..5008c365e6e4 100644
--- a/include/asm-x86/dmi.h
+++ b/include/asm-x86/dmi.h
@@ -22,8 +22,9 @@ extern char dmi_alloc_data[DMI_MAX_DATA];
22static inline void *dmi_alloc(unsigned len) 22static inline void *dmi_alloc(unsigned len)
23{ 23{
24 int idx = dmi_alloc_index; 24 int idx = dmi_alloc_index;
25 if ((dmi_alloc_index += len) > DMI_MAX_DATA) 25 if ((dmi_alloc_index + len) > DMI_MAX_DATA)
26 return NULL; 26 return NULL;
27 dmi_alloc_index += len;
27 return dmi_alloc_data + idx; 28 return dmi_alloc_data + idx;
28} 29}
29 30