Fix bitmask last-byte accounting
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 22 Feb 2016 22:11:51 +0000 (17:11 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 2 May 2016 21:11:15 +0000 (17:11 -0400)
This bug was hidden by bad formatting.  It looks like the _size-- is part
of the for loop, but it isn't.

The ancient bitmask code is pretty lousy.  The long-term fix is to just use
the Linux bitops, and throw away our old macros.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/bitmask.h

index f8a5cdd..10738d3 100644 (file)
@@ -79,10 +79,11 @@ static inline bool BITMASK_IS_FULL(volatile uint8_t *map, size_t size)
 {
        int _size = size;
        for (int i = 0; i < BYTES_FOR_BITMASK(size); i++) {
-               for (int j = 0; j < MIN(8,_size); j++)
+               for (int j = 0; j < MIN(8, _size); j++) {
                        if(!((map[i] >> j) &1))
                                return FALSE;
                        _size--;
+               }
        }
        return TRUE;
 }
@@ -92,9 +93,10 @@ static inline bool BITMASK_IS_FULL(volatile uint8_t *map, size_t size)
        int _size = size; \
        for (i = 0; i < BYTES_FOR_BITMASK(size); i++) { \
                int j;  \
-               for (j = 0; j < MIN(8,_size); j++) \
+               for (j = 0; j < MIN(8, _size); j++) { \
                        printk("%x", ((name)[i] >> j) & 1);     \
                        _size--; \
+               } \
        } \
        printk("\n"); \
 }