Changeset c5396c1 in mainline for kernel/generic/include/adt/bitmap.h


Ignore:
Timestamp:
2013-09-12T10:27:17Z (11 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6e75f2d
Parents:
4a5f2b0
Message:

abandon the 2nd level bitmap
according to observations it is very rare to have allocation requests for more than 8 frames, therefore the conservative update of the 2nd level bitmap can hardly provide any benefits
the natural blocking of the bitmap (by bytes) should provide a reasonable performance

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/adt/bitmap.h

    r4a5f2b0 rc5396c1  
    4444        size_t elements;
    4545        uint8_t *bits;
    46        
    47         size_t block_size;
    48         uint8_t *blocks;
    4946} bitmap_t;
    5047
     
    5249    unsigned int value)
    5350{
    54         if (element < bitmap->elements) {
    55                 /*
    56                  * The 2nd level bitmap is conservative.
    57                  * Make sure we update it properly.
    58                  */
    59                
    60                 if (value) {
    61                         bitmap->bits[element / BITMAP_ELEMENT] |=
    62                             (1 << (element & BITMAP_REMAINER));
    63                 } else {
    64                         bitmap->bits[element / BITMAP_ELEMENT] &=
    65                             ~(1 << (element & BITMAP_REMAINER));
    66                        
    67                         if (bitmap->block_size > 0) {
    68                                 size_t block = element / bitmap->block_size;
    69                                
    70                                 bitmap->blocks[block / BITMAP_ELEMENT] &=
    71                                     ~(1 << (block & BITMAP_REMAINER));
    72                         }
    73                 }
     51        if (element >= bitmap->elements)
     52                return;
     53       
     54        size_t byte = element / BITMAP_ELEMENT;
     55        uint8_t mask = 1 << (element & BITMAP_REMAINER);
     56       
     57        if (value) {
     58                bitmap->bits[byte] |= mask;
     59        } else {
     60                bitmap->bits[byte] &= ~mask;
    7461        }
    7562}
     
    8067                return 0;
    8168       
    82         return !!((bitmap->bits)[element / BITMAP_ELEMENT] &
    83             (1 << (element & BITMAP_REMAINER)));
     69        size_t byte = element / BITMAP_ELEMENT;
     70        uint8_t mask = 1 << (element & BITMAP_REMAINER);
     71       
     72        return !!((bitmap->bits)[byte] & mask);
    8473}
    8574
    86 extern size_t bitmap_size(size_t, size_t);
    87 extern void bitmap_initialize(bitmap_t *, size_t, size_t, void *);
     75extern size_t bitmap_size(size_t);
     76extern void bitmap_initialize(bitmap_t *, size_t, void *);
    8877
    8978extern void bitmap_set_range(bitmap_t *, size_t, size_t);
Note: See TracChangeset for help on using the changeset viewer.