Rev 1760 | Rev 1767 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1760 | Rev 1766 | ||
---|---|---|---|
Line 929... | Line 929... | ||
929 | * @param pzone Preferred zone |
929 | * @param pzone Preferred zone |
930 | * |
930 | * |
931 | * @return Physical address of the allocated frame. |
931 | * @return Physical address of the allocated frame. |
932 | * |
932 | * |
933 | */ |
933 | */ |
934 | void * frame_alloc_generic(__u8 order, int flags, int *status, int *pzone) |
934 | void * frame_alloc_generic(__u8 order, int flags, int *pzone) |
935 | { |
935 | { |
936 | ipl_t ipl; |
936 | ipl_t ipl; |
937 | int freed; |
937 | int freed; |
938 | pfn_t v; |
938 | pfn_t v; |
939 | zone_t *zone; |
939 | zone_t *zone; |
Line 965... | Line 965... | ||
965 | /* |
965 | /* |
966 | * TODO: Sleep until frames are available again. |
966 | * TODO: Sleep until frames are available again. |
967 | */ |
967 | */ |
968 | interrupts_restore(ipl); |
968 | interrupts_restore(ipl); |
969 | 969 | ||
970 | if (flags & FRAME_ATOMIC) { |
970 | if (flags & FRAME_ATOMIC) |
971 | ASSERT(status != NULL); |
- | |
972 | if (status) |
- | |
973 | *status = FRAME_NO_MEMORY; |
- | |
974 | return 0; |
971 | return 0; |
975 | } |
- | |
976 | 972 | ||
977 | panic("Sleep not implemented.\n"); |
973 | panic("Sleep not implemented.\n"); |
978 | goto loop; |
974 | goto loop; |
979 | } |
975 | } |
980 | 976 | ||
Line 982... | Line 978... | ||
982 | v += zone->base; |
978 | v += zone->base; |
983 | 979 | ||
984 | spinlock_unlock(&zone->lock); |
980 | spinlock_unlock(&zone->lock); |
985 | interrupts_restore(ipl); |
981 | interrupts_restore(ipl); |
986 | 982 | ||
987 | if (status) |
- | |
988 | *status = FRAME_OK; |
- | |
989 | - | ||
990 | if (flags & FRAME_KA) |
983 | if (flags & FRAME_KA) |
991 | return (void *)PA2KA(PFN2ADDR(v)); |
984 | return (void *)PA2KA(PFN2ADDR(v)); |
992 | return (void *)PFN2ADDR(v); |
985 | return (void *)PFN2ADDR(v); |
993 | } |
986 | } |
994 | 987 |