mirror of https://gitlab.com/qemu-project/qemu
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,
|
* 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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue