Changes in uspace/drv/uhci-hcd/utils/malloc32.h [fb2de0a:aeca5a3] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/utils/malloc32.h
rfb2de0a raeca5a3 41 41 #include <as.h> 42 42 43 #include "slab.h" 44 43 45 #define UHCI_STRCUTURES_ALIGNMENT 16 44 46 #define UHCI_REQUIRED_PAGE_SIZE 4096 … … 57 59 uintptr_t result; 58 60 const int ret = as_get_physical_mapping(addr, &result); 61 assert(ret == EOK); 62 59 63 if (ret != EOK) 60 64 return 0; … … 68 72 */ 69 73 static inline void * malloc32(size_t size) { 70 /* This works only when the host has less than 4GB of memory as 71 * physical address needs to fit into 32 bits */ 72 73 /* If we need more than one page there is no guarantee that the 74 * memory will be continuous */ 75 if (size > PAGE_SIZE) 76 return NULL; 77 /* Calculate alignment to make sure the block won't cross page 78 * boundary */ 79 size_t alignment = UHCI_STRCUTURES_ALIGNMENT; 80 while (alignment < size) 81 alignment *= 2; 82 return memalign(alignment, size); 74 if (size <= SLAB_ELEMENT_SIZE) 75 return slab_malloc_g(); 76 usb_log_warning("Requested %zu bytes, current allocator can't handle " 77 "that amount, pray that the standard malloc will suffice.", size); 78 return memalign(UHCI_STRCUTURES_ALIGNMENT, size); 83 79 } 84 80 /*----------------------------------------------------------------------------*/ … … 90 86 if (!addr) 91 87 return; 88 if (slab_in_range_g(addr)) 89 return slab_free_g(addr); 92 90 free(addr); 93 91 } … … 100 98 { 101 99 void *free_address = as_get_mappable_page(UHCI_REQUIRED_PAGE_SIZE); 100 assert(free_address); /* TODO: remove this assert */ 102 101 if (free_address == 0) 103 102 return NULL;
Note:
See TracChangeset
for help on using the changeset viewer.