From: "Michael S. Tsirkin" <mst@redhat.com>
To: Hu Tao <hutao@cn.fujitsu.com>
Cc: Yasunori Goto <y-goto@jp.fujitsu.com>,
Igor Mammedov <imammedo@redhat.com>,
qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4 16/29] memory: move preallocation code out of exec.c
Date: Wed, 18 Jun 2014 22:14:23 +0300 [thread overview]
Message-ID: <20140618191423.GA27781@redhat.com> (raw)
In-Reply-To: <f080b0ef7ed79b9520cb5fd9f72c3623f44a088d.1402299637.git.hutao@cn.fujitsu.com>
On Mon, Jun 09, 2014 at 06:25:21PM +0800, Hu Tao wrote:
> From: Paolo Bonzini <pbonzini@redhat.com>
>
> So that backends can use it.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
OK this breaks mingw build because you are moving
code to posix file and use it unconditionally on all platforms.
Pls setup mingw build and fix pci branch up, send me fix.
> ---
> exec.c | 44 +------------------------------
> include/qemu/osdep.h | 2 ++
> util/oslib-posix.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 76 insertions(+), 43 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index 36301e2..b640425 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1011,13 +1011,6 @@ static long gethugepagesize(const char *path)
> return fs.f_bsize;
> }
>
> -static sigjmp_buf sigjump;
> -
> -static void sigbus_handler(int signal)
> -{
> - siglongjmp(sigjump, 1);
> -}
> -
> static void *file_ram_alloc(RAMBlock *block,
> ram_addr_t memory,
> const char *path,
> @@ -1087,42 +1080,7 @@ static void *file_ram_alloc(RAMBlock *block,
> }
>
> if (mem_prealloc) {
> - int ret, i;
> - struct sigaction act, oldact;
> - sigset_t set, oldset;
> -
> - memset(&act, 0, sizeof(act));
> - act.sa_handler = &sigbus_handler;
> - act.sa_flags = 0;
> -
> - ret = sigaction(SIGBUS, &act, &oldact);
> - if (ret) {
> - perror("file_ram_alloc: failed to install signal handler");
> - exit(1);
> - }
> -
> - /* unblock SIGBUS */
> - sigemptyset(&set);
> - sigaddset(&set, SIGBUS);
> - pthread_sigmask(SIG_UNBLOCK, &set, &oldset);
> -
> - if (sigsetjmp(sigjump, 1)) {
> - fprintf(stderr, "file_ram_alloc: failed to preallocate pages\n");
> - exit(1);
> - }
> -
> - /* MAP_POPULATE silently ignores failures */
> - for (i = 0; i < (memory/hpagesize); i++) {
> - memset(area + (hpagesize*i), 0, 1);
> - }
> -
> - ret = sigaction(SIGBUS, &oldact, NULL);
> - if (ret) {
> - perror("file_ram_alloc: failed to reinstall signal handler");
> - exit(1);
> - }
> -
> - pthread_sigmask(SIG_SETMASK, &oldset, NULL);
> + os_mem_prealloc(fd, area, memory);
> }
>
> block->fd = fd;
> diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> index ffb2966..9c1a119 100644
> --- a/include/qemu/osdep.h
> +++ b/include/qemu/osdep.h
> @@ -251,4 +251,6 @@ void qemu_init_auxval(char **envp);
>
> void qemu_set_tty_echo(int fd, bool echo);
>
> +void os_mem_prealloc(int fd, char *area, size_t sz);
> +
> #endif
> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
> index 8e9c770..1524ead 100644
> --- a/util/oslib-posix.c
> +++ b/util/oslib-posix.c
> @@ -46,6 +46,7 @@ extern int daemon(int, int);
> #else
> # define QEMU_VMALLOC_ALIGN getpagesize()
> #endif
> +#define HUGETLBFS_MAGIC 0x958458f6
>
> #include <termios.h>
> #include <unistd.h>
> @@ -58,9 +59,12 @@ extern int daemon(int, int);
> #include "qemu/sockets.h"
> #include <sys/mman.h>
> #include <libgen.h>
> +#include <setjmp.h>
> +#include <sys/signal.h>
>
> #ifdef CONFIG_LINUX
> #include <sys/syscall.h>
> +#include <sys/vfs.h>
> #endif
>
> #ifdef __FreeBSD__
> @@ -332,3 +336,72 @@ char *qemu_get_exec_dir(void)
> {
> return g_strdup(exec_dir);
> }
> +
> +static sigjmp_buf sigjump;
> +
> +static void sigbus_handler(int signal)
> +{
> + siglongjmp(sigjump, 1);
> +}
> +
> +static size_t fd_getpagesize(int fd)
> +{
> +#ifdef CONFIG_LINUX
> + struct statfs fs;
> + int ret;
> +
> + if (fd != -1) {
> + do {
> + ret = fstatfs(fd, &fs);
> + } while (ret != 0 && errno == EINTR);
> +
> + if (ret == 0 && fs.f_type == HUGETLBFS_MAGIC) {
> + return fs.f_bsize;
> + }
> + }
> +#endif
> +
> + return getpagesize();
> +}
> +
> +void os_mem_prealloc(int fd, char *area, size_t memory)
> +{
> + int ret, i;
> + struct sigaction act, oldact;
> + sigset_t set, oldset;
> + size_t hpagesize = fd_getpagesize(fd);
> +
> + memset(&act, 0, sizeof(act));
> + act.sa_handler = &sigbus_handler;
> + act.sa_flags = 0;
> +
> + ret = sigaction(SIGBUS, &act, &oldact);
> + if (ret) {
> + perror("os_mem_prealloc: failed to install signal handler");
> + exit(1);
> + }
> +
> + /* unblock SIGBUS */
> + sigemptyset(&set);
> + sigaddset(&set, SIGBUS);
> + pthread_sigmask(SIG_UNBLOCK, &set, &oldset);
> +
> + if (sigsetjmp(sigjump, 1)) {
> + fprintf(stderr, "os_mem_prealloc: failed to preallocate pages\n");
> + exit(1);
> + }
> +
> + /* MAP_POPULATE silently ignores failures */
> + memory = (memory + hpagesize - 1) & -hpagesize;
> + for (i = 0; i < (memory/hpagesize); i++) {
> + memset(area + (hpagesize*i), 0, 1);
> + }
> +
> + ret = sigaction(SIGBUS, &oldact, NULL);
> + if (ret) {
> + perror("os_mem_prealloc: failed to reinstall signal handler");
> + exit(1);
> + }
> +
> + pthread_sigmask(SIG_SETMASK, &oldset, NULL);
> +}
> --
> 1.9.3
>
next prev parent reply other threads:[~2014-06-18 19:14 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-09 10:25 [Qemu-devel] [PATCH v4 00/29] NUMA series and hostmem improvements Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 01/29] NUMA: move numa related code to new file numa.c Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 02/29] NUMA: check if the total numa memory size is equal to ram_size Hu Tao
2014-06-09 23:02 ` Eric Blake
2014-06-10 2:29 ` Hu Tao
2014-06-10 2:36 ` Eric Blake
2014-06-10 2:52 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 03/29] NUMA: Add numa_info structure to contain numa nodes info Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 04/29] NUMA: convert -numa option to use OptsVisitor Hu Tao
2014-06-16 14:08 ` Eduardo Habkost
2014-06-16 14:16 ` Paolo Bonzini
2014-06-16 14:23 ` [Qemu-devel] [libvirt] " Eric Blake
2014-06-16 14:32 ` Paolo Bonzini
2014-06-16 15:39 ` Eduardo Habkost
2014-06-16 15:46 ` Paolo Bonzini
2014-06-16 16:05 ` Eric Blake
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 05/29] NUMA: expand MAX_NODES from 64 to 128 Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 06/29] man: improve -numa doc Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 07/29] vl: redo -object parsing Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 08/29] qmp: improve error reporting for -object and object-add Hu Tao
2014-06-09 15:57 ` Igor Mammedov
2014-06-10 2:07 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 09/29] pc: pass MachineState to pc_memory_init Hu Tao
2014-06-09 13:14 ` Igor Mammedov
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 10/29] numa: introduce memory_region_allocate_system_memory Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 11/29] hostmem: separate allocation from UserCreatable complete method Hu Tao
2014-06-09 10:47 ` Igor Mammedov
2014-06-10 1:55 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 12/29] numa: add -numa node,memdev= option Hu Tao
2014-06-09 17:22 ` [Qemu-devel] [PATCH v4 12/29] numa: add -numa node, memdev= option Eric Blake
2014-06-10 2:23 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 13/29] memory: reorganize file-based allocation Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 14/29] memory: move mem_path handling to memory_region_allocate_system_memory Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 15/29] memory: add error propagation to file-based RAM allocation Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 16/29] memory: move preallocation code out of exec.c Hu Tao
2014-06-18 19:14 ` Michael S. Tsirkin [this message]
2014-06-19 0:43 ` Hu Tao
2014-06-20 3:26 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 17/29] memory: move RAM_PREALLOC_MASK to exec.c, rename Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 18/29] hostmem: add file-based HostMemoryBackend Hu Tao
2014-06-09 11:32 ` Igor Mammedov
2014-06-09 11:35 ` Michael S. Tsirkin
2014-06-09 12:06 ` Igor Mammedov
2014-06-10 2:00 ` Hu Tao
2014-06-10 5:09 ` Paolo Bonzini
2014-06-10 8:30 ` Hu Tao
2014-06-10 8:56 ` Paolo Bonzini
2014-06-10 9:21 ` Hu Tao
2014-06-10 9:59 ` Michael S. Tsirkin
2014-06-10 11:12 ` Paolo Bonzini
2014-06-10 11:23 ` Michael S. Tsirkin
2014-06-10 11:29 ` Paolo Bonzini
2014-06-10 11:35 ` Michael S. Tsirkin
2014-06-10 11:43 ` Paolo Bonzini
2014-06-10 11:48 ` Michael S. Tsirkin
2014-06-10 11:51 ` Paolo Bonzini
2014-06-10 9:07 ` Igor Mammedov
2014-06-10 9:54 ` Michael S. Tsirkin
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 19/29] hostmem: add merge and dump properties Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 20/29] hostmem: allow preallocation of any memory region Hu Tao
2014-06-09 12:28 ` Igor Mammedov
2014-06-09 12:32 ` Paolo Bonzini
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 21/29] hostmem: add property to map memory with MAP_SHARED Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 22/29] configure: add Linux libnuma detection Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 23/29] hostmem: add properties for NUMA memory policy Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 24/29] Introduce signed range Hu Tao
2014-06-09 10:42 ` Peter Maydell
2014-06-09 10:59 ` Michael S. Tsirkin
2014-06-10 6:51 ` Hu Tao
2014-06-10 9:50 ` Michael S. Tsirkin
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 25/29] qapi: make string input visitor parse int list Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 26/29] qapi: make string output " Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 27/29] qom: introduce object_property_get_enum and object_property_get_uint16List Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 28/29] qmp: add query-memdev Hu Tao
2014-06-09 12:36 ` Igor Mammedov
2014-06-09 12:58 ` Paolo Bonzini
2014-06-09 13:32 ` Igor Mammedov
2014-06-09 13:40 ` Paolo Bonzini
2014-06-09 14:08 ` Igor Mammedov
2014-06-09 17:15 ` Eric Blake
2014-06-09 17:24 ` Eric Blake
2014-06-10 2:25 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 29/29] hmp: add info memdev Hu Tao
2014-06-09 10:30 ` [Qemu-devel] [PATCH v4 00/29] NUMA series and hostmem improvements Michael S. Tsirkin
2014-06-09 11:40 ` Michael S. Tsirkin
2014-06-10 1:55 ` Hu Tao
2014-06-10 9:51 ` Hu Tao
2014-06-10 9:56 ` Michael S. Tsirkin
2014-06-10 9:57 ` Hu Tao
2014-06-10 10:19 ` Hu Tao
2014-06-10 10:27 ` Michael S. Tsirkin
2014-06-10 11:09 ` Hu Tao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140618191423.GA27781@redhat.com \
--to=mst@redhat.com \
--cc=ehabkost@redhat.com \
--cc=hutao@cn.fujitsu.com \
--cc=imammedo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=y-goto@jp.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).