Overview
Comment: | improve comments |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
858eba7607ec397dd6bd109fb55fd5ff |
User & Date: | lexi on 2019-08-24 00:20:39 |
Other Links: | manifest | tags |
Context
2019-08-24
| ||
23:02 | stop attempting to auto-detect system constants during build process, and maintain os/arch-specific tables instead check-in: e42b590b45 user: lexi tags: trunk | |
00:20 | improve comments check-in: 858eba7607 user: lexi tags: trunk | |
2019-08-22
| ||
20:04 | fix another typo check-in: 8618103a4e user: lexi tags: trunk | |
Changes
Modified mod/kmem/heapa.fn.c from [c08b42ee14] to [99ad7a3351].
27 28 29 30 31 32 33 34 35 36 37 38 39 40 .. 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 .. 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
void* raw; ubyte* byte; kmbox* header; } region; /* we need to allocate space for the * header and for the actual object */ sz region_size = sizeof(kmbox) + len; kmres reply; # ifdef KFenv_posix /* posix APIs - we've got it easy. currently for * nonlinear heap allocation kmheapa simply uses * m(un)map and lets the kernel worry about it. it * may ultimately be worth replacing this with a ................................................................................ k_platform_syscall_arg args[] = { null, region_size, posix_prot_read | posix_prot_write, posix_flag_anonymous | posix_map_shared, -1, 0 }; /* impl note: while per manpage fd is "ignored" * for MAP_ANONYMOUS, "some implementations" require * a value of -1 */ struct k_platform_syscall_answer r = k_platform_syscall (k_platform_syscall_mmap, Kmsz(args), args); if (r.error == 0) region.byte = (ubyte*)r.ret; else { switch (r.error) { case k_platform_error_EAGAIN: reply.cond = kmcond_bad_lock; break; ................................................................................ reply.raw = (void*)0; return reply; } # else Knoimpl(kmheapa,KVos); # error missing implementation # endif void* const object = (region.byte + sizeof (kmbox)); region.header -> kind = kmkind_heap; region.header -> size = len; reply.cond = kmcond_ok; reply.raw = object; return reply; } |
> > > > > > > > > | | | > > > > > |
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 .. 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 .. 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
void* raw; ubyte* byte; kmbox* header; } region; /* we need to allocate space for the * header and for the actual object */ sz region_size = sizeof(kmbox) + len; /* kmres reply is the struct that shall be returned by the * function. if an error-condition occurs, the appropriate * error code should be determined through system-specific * means, the pointer value should be set to null, and the * object should be returned immediately. if the object is * not returned from within the system-specific section it * will then be filled out with the appropriate values for * a successful allocation and returned to the caller. */ kmres reply; # ifdef KFenv_posix /* posix APIs - we've got it easy. currently for * nonlinear heap allocation kmheapa simply uses * m(un)map and lets the kernel worry about it. it * may ultimately be worth replacing this with a ................................................................................ k_platform_syscall_arg args[] = { null, region_size, posix_prot_read | posix_prot_write, posix_flag_anonymous | posix_map_shared, -1, 0 }; /* impl note: while per manpage fd is "ignored" for * MAP_ANONYMOUS, "some implementations" require a * value of -1, so we're setting it to that just to * be safe. */ struct k_platform_syscall_answer r = k_platform_syscall (k_platform_syscall_mmap, Kmsz(args), args); if (r.error == 0) region.byte = (ubyte*)r.ret; else { switch (r.error) { case k_platform_error_EAGAIN: reply.cond = kmcond_bad_lock; break; ................................................................................ reply.raw = (void*)0; return reply; } # else Knoimpl(kmheapa,KVos); # error missing implementation # endif /* if the system-specific code has not returned early, * we assume success and return the new pointer to the * calling function along with a success code. */ void* const object = (region.byte + sizeof (kmbox)); region.header -> kind = kmkind_heap; region.header -> size = len; reply.cond = kmcond_ok; reply.raw = object; return reply; } |