modutils: add FEATURE_INSMOD_TRY_MMAP option

function                                             old     new   delta
try_to_mmap_module                                     -     121    +121
bb_init_module_24                                   4514    4578     +64
bb_init_module                                       119     173     +54
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/0 up/down: 239/0)             Total: 239 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2009-10-25 04:35:22 +01:00
parent 30f3c1d5fd
commit 77c066ea5c
4 changed files with 92 additions and 16 deletions

View File

@ -3783,12 +3783,20 @@ int FAST_FUNC bb_init_module_24(const char *m_filename, const char *options)
int m_has_modinfo;
#endif
char *image;
size_t image_size = 64 * 1024 * 1024;
size_t image_size;
bool mmaped;
/* Load module into memory and unzip if compressed */
image = xmalloc_open_zipped_read_close(m_filename, &image_size);
if (!image)
return EXIT_FAILURE;
image_size = INT_MAX - 4095;
mmaped = 0;
image = try_to_mmap_module(m_filename, &image_size);
if (image) {
mmaped = 1;
} else {
/* Load module into memory and unzip if compressed */
image = xmalloc_open_zipped_read_close(m_filename, &image_size);
if (!image)
return EXIT_FAILURE;
}
m_name = xstrdup(bb_basename(m_filename));
/* "module.o[.gz]" -> "module" */
@ -3901,7 +3909,10 @@ int FAST_FUNC bb_init_module_24(const char *m_filename, const char *options)
exit_status = EXIT_SUCCESS;
out:
free(image);
if (mmaped)
munmap(image, image_size);
else
free(image);
free(m_name);
return exit_status;