Changeset 5f0f29ce in mainline for kernel/generic/include/mm/frame.h


Ignore:
Timestamp:
2009-02-26T23:34:27Z (16 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e49e234
Parents:
6b1de7a
Message:

kernel memory management revisited (phase 1): proper support for zone flags

  • the zone_t structures are now statically allocated to be easily available
  • the locking scheme was simplified
  • new flags for non-available zones were introduced
  • FRAME_LOW_4_GiB flag is removed, the functionality will be eventually reimplemented using a generic mechanism
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/mm/frame.h

    r6b1de7a r5f0f29ce  
    3939#include <arch/types.h>
    4040#include <adt/list.h>
    41 #include <synch/spinlock.h>
    4241#include <mm/buddy.h>
    4342#include <arch/mm/page.h>
    4443#include <arch/mm/frame.h>
    4544
    46 #define ONE_FRAME       0
    47 #define TWO_FRAMES      1
    48 #define FOUR_FRAMES     2
     45#define ONE_FRAME    0
     46#define TWO_FRAMES   1
     47#define FOUR_FRAMES  2
    4948
    5049
    5150#ifdef ARCH_STACK_FRAMES
    52 #define STACK_FRAMES ARCH_STACK_FRAMES
     51        #define STACK_FRAMES ARCH_STACK_FRAMES
    5352#else
    54 #define STACK_FRAMES ONE_FRAME
     53        #define STACK_FRAMES ONE_FRAME
    5554#endif
    5655
    57 /** Maximum number of zones in system. */
    58 #define ZONES_MAX               16
     56/** Maximum number of zones in the system. */
     57#define ZONES_MAX  32
    5958
    60 /** Convert the frame address to kernel va. */
    61 #define FRAME_KA                0x1
     59typedef uint8_t frame_flags_t;
     60
     61/** Convert the frame address to kernel VA. */
     62#define FRAME_KA          0x01
    6263/** Do not panic and do not sleep on failure. */
    63 #define FRAME_ATOMIC            0x2
     64#define FRAME_ATOMIC      0x02
    6465/** Do not start reclaiming when no free memory. */
    65 #define FRAME_NO_RECLAIM        0x4
    66 /** Do not allocate above 4 GiB. */
    67 #define FRAME_LOW_4_GiB         0x8
     66#define FRAME_NO_RECLAIM  0x04
     67
     68typedef uint8_t zone_flags_t;
     69
     70/** Zone is reserved (not available for allocation) */
     71#define ZONE_RESERVED  0x08
     72/** Zone is used by firmware (not available for allocation) */
     73#define ZONE_FIRMWARE  0x10
     74
     75/** Currently there is no equivalent zone flags
     76    for frame flags */
     77#define FRAME_TO_ZONE_FLAGS(frame_flags)  0
    6878
    6979static inline uintptr_t PFN2ADDR(pfn_t frame)
     
    8999}
    90100
    91 #define IS_BUDDY_ORDER_OK(index, order)         \
     101#define IS_BUDDY_ORDER_OK(index, order) \
    92102    ((~(((unative_t) -1) << (order)) & (index)) == 0)
    93 #define IS_BUDDY_LEFT_BLOCK(zone, frame)        \
    94     (((frame_index((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 0)
    95 #define IS_BUDDY_RIGHT_BLOCK(zone, frame)       \
    96     (((frame_index((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 1)
    97 #define IS_BUDDY_LEFT_BLOCK_ABS(zone, frame)    \
    98     (((frame_index_abs((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 0)
    99 #define IS_BUDDY_RIGHT_BLOCK_ABS(zone, frame)   \
    100     (((frame_index_abs((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 1)
     103#define IS_BUDDY_LEFT_BLOCK(zone, frame) \
     104    (((frame_index((zone), (frame)) >> (frame)->buddy_order) & 0x01) == 0)
     105#define IS_BUDDY_RIGHT_BLOCK(zone, frame) \
     106    (((frame_index((zone), (frame)) >> (frame)->buddy_order) & 0x01) == 1)
     107#define IS_BUDDY_LEFT_BLOCK_ABS(zone, frame) \
     108    (((frame_index_abs((zone), (frame)) >> (frame)->buddy_order) & 0x01) == 0)
     109#define IS_BUDDY_RIGHT_BLOCK_ABS(zone, frame) \
     110    (((frame_index_abs((zone), (frame)) >> (frame)->buddy_order) & 0x01) == 1)
    101111
    102 #define frame_alloc(order, flags)               \
     112#define frame_alloc(order, flags) \
    103113    frame_alloc_generic(order, flags, NULL)
    104114
    105115extern void frame_init(void);
    106 extern void *frame_alloc_generic(uint8_t, int, unsigned int *);
     116extern void *frame_alloc_generic(uint8_t, frame_flags_t, count_t *);
    107117extern void frame_free(uintptr_t);
    108118extern void frame_reference_add(pfn_t);
    109119
    110 extern int zone_create(pfn_t, count_t, pfn_t, int);
    111 extern void *frame_get_parent(pfn_t, unsigned int);
    112 extern void frame_set_parent(pfn_t, void *, unsigned int);
     120extern count_t zone_create(pfn_t, count_t, pfn_t, zone_flags_t);
     121extern void *frame_get_parent(pfn_t, count_t);
     122extern void frame_set_parent(pfn_t, void *, count_t);
    113123extern void frame_mark_unavailable(pfn_t, count_t);
    114124extern uintptr_t zone_conf_size(count_t);
    115 extern void zone_merge(unsigned int, unsigned int);
     125extern bool zone_merge(count_t, count_t);
    116126extern void zone_merge_all(void);
    117127extern uint64_t zone_total_size(void);
     
    121131 */
    122132extern void zone_print_list(void);
    123 extern void zone_print_one(unsigned int);
     133extern void zone_print_one(count_t);
    124134
    125135#endif
Note: See TracChangeset for help on using the changeset viewer.