x86: fix dmi_alloc() to not advance alloc index in case of
authorParag Warudkar <parag.warudkar@gmail.com>
Wed, 30 Jan 2008 12:31:59 +0000 (13:31 +0100)
committerIngo Molnar <mingo@elte.hu>
Wed, 30 Jan 2008 12:31:59 +0000 (13:31 +0100)
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>
include/asm-x86/dmi.h

index 8e2b0e6aa8e7eb81687f4861758a141084c5402e..5008c365e6e4977aa8a99e13344087f42c8de99a 100644 (file)
@@ -22,8 +22,9 @@ extern char dmi_alloc_data[DMI_MAX_DATA];
 static inline void *dmi_alloc(unsigned len)
 {
        int idx = dmi_alloc_index;
-       if ((dmi_alloc_index += len) > DMI_MAX_DATA)
+       if ((dmi_alloc_index + len) > DMI_MAX_DATA)
                return NULL;
+       dmi_alloc_index += len;
        return dmi_alloc_data + idx;
 }