util/oslib: Have qemu_prealloc_mem() handler return a boolean
Following the example documented since commit e3fe3988d7
("error:
Document Error API usage rules"), have qemu_prealloc_mem()
return a boolean indicating whether an error is set or not.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Gavin Shan <gshan@redhat.com>
Message-Id: <20231120213301.24349-19-philmd@linaro.org>
This commit is contained in:
parent
3961613a76
commit
b622ee98bf
@ -678,8 +678,10 @@ typedef struct ThreadContext ThreadContext;
|
||||
* memory area starting at @area with the size of @sz. After a successful call,
|
||||
* each page in the area was faulted in writable at least once, for example,
|
||||
* after allocating file blocks for mapped files.
|
||||
*
|
||||
* Return: true on success, else false setting @errp with error.
|
||||
*/
|
||||
void qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
bool qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
ThreadContext *tc, Error **errp);
|
||||
|
||||
/**
|
||||
|
@ -497,7 +497,7 @@ static bool madv_populate_write_possible(char *area, size_t pagesize)
|
||||
errno != EINVAL;
|
||||
}
|
||||
|
||||
void qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
bool qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
ThreadContext *tc, Error **errp)
|
||||
{
|
||||
static gsize initialized;
|
||||
@ -506,6 +506,7 @@ void qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
size_t numpages = DIV_ROUND_UP(sz, hpagesize);
|
||||
bool use_madv_populate_write;
|
||||
struct sigaction act;
|
||||
bool rv = true;
|
||||
|
||||
/*
|
||||
* Sense on every invocation, as MADV_POPULATE_WRITE cannot be used for
|
||||
@ -534,7 +535,7 @@ void qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
qemu_mutex_unlock(&sigbus_mutex);
|
||||
error_setg_errno(errp, errno,
|
||||
"qemu_prealloc_mem: failed to install signal handler");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -544,6 +545,7 @@ void qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
if (ret) {
|
||||
error_setg_errno(errp, -ret,
|
||||
"qemu_prealloc_mem: preallocating memory failed");
|
||||
rv = false;
|
||||
}
|
||||
|
||||
if (!use_madv_populate_write) {
|
||||
@ -555,6 +557,7 @@ void qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
}
|
||||
qemu_mutex_unlock(&sigbus_mutex);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
char *qemu_get_pid_name(pid_t pid)
|
||||
|
@ -264,7 +264,7 @@ int getpagesize(void)
|
||||
return system_info.dwPageSize;
|
||||
}
|
||||
|
||||
void qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
bool qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
ThreadContext *tc, Error **errp)
|
||||
{
|
||||
int i;
|
||||
@ -274,6 +274,8 @@ void qemu_prealloc_mem(int fd, char *area, size_t sz, int max_threads,
|
||||
for (i = 0; i < sz / pagesize; i++) {
|
||||
memset(area + pagesize * i, 0, 1);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
char *qemu_get_pid_name(pid_t pid)
|
||||
|
Loading…
Reference in New Issue
Block a user