mm/memblock.c: avoid abuse of RED_INACTIVE
Andrew Morton [Tue, 26 Jul 2011 00:12:18 +0000 (17:12 -0700)]
RED_INACTIVE is a slab thing, and reusing it for memblock was
inappropriate, because memblock is dealing with phys_addr_t's which have a
Kconfigurable sizeof().

Create a new poison type for this application.  Fixes the sparse warning

    warning: cast truncates bits from constant value (9f911029d74e35b becomes 9d74e35b)

Reported-by: H Hartley Sweeten <hartleys@visionengravers.com>
Tested-by: H Hartley Sweeten <hartleys@visionengravers.com>
Acked-by: Pekka Enberg <penberg@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

include/linux/poison.h
mm/memblock.c

index 2110a81..79159de 100644 (file)
 #define        RED_INACTIVE    0x09F911029D74E35BULL   /* when obj is inactive */
 #define        RED_ACTIVE      0xD84156C5635688C0ULL   /* when obj is active */
 
+#ifdef CONFIG_PHYS_ADDR_T_64BIT
+#define MEMBLOCK_INACTIVE      0x3a84fb0144c9e71bULL
+#else
+#define MEMBLOCK_INACTIVE      0x44c9e71bUL
+#endif
+
 #define SLUB_RED_INACTIVE      0xbb
 #define SLUB_RED_ACTIVE                0xcc
 
index a0562d1..ccbf973 100644 (file)
@@ -758,9 +758,9 @@ void __init memblock_analyze(void)
 
        /* Check marker in the unused last array entry */
        WARN_ON(memblock_memory_init_regions[INIT_MEMBLOCK_REGIONS].base
-               != (phys_addr_t)RED_INACTIVE);
+               != MEMBLOCK_INACTIVE);
        WARN_ON(memblock_reserved_init_regions[INIT_MEMBLOCK_REGIONS].base
-               != (phys_addr_t)RED_INACTIVE);
+               != MEMBLOCK_INACTIVE);
 
        memblock.memory_size = 0;
 
@@ -786,8 +786,8 @@ void __init memblock_init(void)
        memblock.reserved.max   = INIT_MEMBLOCK_REGIONS;
 
        /* Write a marker in the unused last array entry */
-       memblock.memory.regions[INIT_MEMBLOCK_REGIONS].base = (phys_addr_t)RED_INACTIVE;
-       memblock.reserved.regions[INIT_MEMBLOCK_REGIONS].base = (phys_addr_t)RED_INACTIVE;
+       memblock.memory.regions[INIT_MEMBLOCK_REGIONS].base = MEMBLOCK_INACTIVE;
+       memblock.reserved.regions[INIT_MEMBLOCK_REGIONS].base = MEMBLOCK_INACTIVE;
 
        /* Create a dummy zero size MEMBLOCK which will get coalesced away later.
         * This simplifies the memblock_add() code below...