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:
Philippe Mathieu-Daudé 2023-11-20 15:33:19 +01:00
parent 3961613a76
commit b622ee98bf
3 changed files with 11 additions and 4 deletions

View File

@ -678,8 +678,10 @@ typedef struct ThreadContext ThreadContext;
* memory area starting at @area with the size of @sz. After a successful call, * 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, * each page in the area was faulted in writable at least once, for example,
* after allocating file blocks for mapped files. * 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); ThreadContext *tc, Error **errp);
/** /**

View File

@ -497,7 +497,7 @@ static bool madv_populate_write_possible(char *area, size_t pagesize)
errno != EINVAL; 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) ThreadContext *tc, Error **errp)
{ {
static gsize initialized; 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); size_t numpages = DIV_ROUND_UP(sz, hpagesize);
bool use_madv_populate_write; bool use_madv_populate_write;
struct sigaction act; struct sigaction act;
bool rv = true;
/* /*
* Sense on every invocation, as MADV_POPULATE_WRITE cannot be used for * 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); qemu_mutex_unlock(&sigbus_mutex);
error_setg_errno(errp, errno, error_setg_errno(errp, errno,
"qemu_prealloc_mem: failed to install signal handler"); "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) { if (ret) {
error_setg_errno(errp, -ret, error_setg_errno(errp, -ret,
"qemu_prealloc_mem: preallocating memory failed"); "qemu_prealloc_mem: preallocating memory failed");
rv = false;
} }
if (!use_madv_populate_write) { 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); qemu_mutex_unlock(&sigbus_mutex);
} }
return rv;
} }
char *qemu_get_pid_name(pid_t pid) char *qemu_get_pid_name(pid_t pid)

View File

@ -264,7 +264,7 @@ int getpagesize(void)
return system_info.dwPageSize; 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) ThreadContext *tc, Error **errp)
{ {
int i; 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++) { for (i = 0; i < sz / pagesize; i++) {
memset(area + pagesize * i, 0, 1); memset(area + pagesize * i, 0, 1);
} }
return true;
} }
char *qemu_get_pid_name(pid_t pid) char *qemu_get_pid_name(pid_t pid)