From: "Daniel P. Berrangé" <berrange@redhat.com>
To: David Hildenbrand <david@redhat.com>,
Pankaj Gupta <pankaj.gupta.linux@gmail.com>,
Eduardo Habkost <ehabkost@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
qemu-devel@nongnu.org, Pankaj Gupta <pankaj.gupta@ionos.com>,
Igor Mammedov <imammedo@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v3 6/7] util/oslib-posix: Support concurrent os_mem_prealloc() invocation
Date: Tue, 28 Sep 2021 18:01:03 +0100 [thread overview]
Message-ID: <YVNKT5sfSKD1nQXT@redhat.com> (raw)
In-Reply-To: <YVNJSYSP/IVUipc9@redhat.com>
On Tue, Sep 28, 2021 at 05:56:41PM +0100, Daniel P. Berrangé wrote:
> On Mon, Aug 16, 2021 at 11:47:38AM +0200, David Hildenbrand wrote:
> > Add a mutex to protect the SIGBUS case, as we cannot mess concurrently
> > with the sigbus handler and we have to manage the global variable
> > sigbus_memset_context. The MADV_POPULATE_WRITE path can run
> > concurrently.
> >
> > Note that page_mutex and page_cond are shared between concurrent
> > invocations, which shouldn't be a problem.
> >
> > This is a preparation for future virtio-mem prealloc code, which will call
> > os_mem_prealloc() asynchronously from an iothread when handling guest
> > requests.
> >
> > Add a comment that messing with the SIGBUS handler is frowned upon and
> > can result in problems we fortunately haven't seen so far. Note that
> > forwarding signals to the already installed SIGBUS handler isn't clean
> > either, as that one might modify the SIGBUS handler again.
>
> Even with the mutex, messing with SIGBUS post-startup still isn't safe
> as we're clashing with SIGBUS usage in softmmu/cpus.c
>
> IIUC, the virtio-mem prealloc code is something new that we've not
> shipped yet. With this in mind, how about we simply enforce that
> usage of this new feature is dependant on kernel support for
> MADV_POPULATE_WRITE ? If users want this feature they'll simply
> need to update to a modern kernel. This shouldn't break any existing
> deployed QEMU guests IIUC
Oh, I should have read ahead to the next patch where you address
this issue.
With that in mind I'm ok adding
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
>
> >
> > Reviewed-by: Pankaj Gupta <pankaj.gupta@ionos.com>
> > Signed-off-by: David Hildenbrand <david@redhat.com>
> > ---
> > util/oslib-posix.c | 9 +++++++++
> > 1 file changed, 9 insertions(+)
> >
> > diff --git a/util/oslib-posix.c b/util/oslib-posix.c
> > index efa4f96d56..9829149e4b 100644
> > --- a/util/oslib-posix.c
> > +++ b/util/oslib-posix.c
> > @@ -95,6 +95,7 @@ typedef struct MemsetThread MemsetThread;
> >
> > /* used by sigbus_handler() */
> > static MemsetContext *sigbus_memset_context;
> > +static QemuMutex sigbus_mutex;
> >
> > static QemuMutex page_mutex;
> b> static QemuCond page_cond;
> > @@ -625,6 +626,7 @@ static bool madv_populate_write_possible(char *area, size_t pagesize)
> > void os_mem_prealloc(int fd, char *area, size_t memory, int smp_cpus,
> > Error **errp)
> > {
> > + static gsize initialized;
> > int ret;
> > struct sigaction act, oldact;
> > size_t hpagesize = qemu_fd_getpagesize(fd);
> > @@ -638,6 +640,12 @@ void os_mem_prealloc(int fd, char *area, size_t memory, int smp_cpus,
> > use_madv_populate_write = madv_populate_write_possible(area, hpagesize);
> >
> > if (!use_madv_populate_write) {
> > + if (g_once_init_enter(&initialized)) {
> > + qemu_mutex_init(&sigbus_mutex);
> > + g_once_init_leave(&initialized, 1);
> > + }
> > +
> > + qemu_mutex_lock(&sigbus_mutex);
> > memset(&act, 0, sizeof(act));
> > act.sa_handler = &sigbus_handler;
> > act.sa_flags = 0;
> > @@ -665,6 +673,7 @@ void os_mem_prealloc(int fd, char *area, size_t memory, int smp_cpus,
> > perror("os_mem_prealloc: failed to reinstall signal handler");
> > exit(1);
> > }
> > + qemu_mutex_unlock(&sigbus_mutex);
> > }
> > }
> >
> > --
> > 2.31.1
> >
>
> Regards,
> Daniel
> --
> |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org -o- https://fstop138.berrange.com :|
> |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
>
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2021-09-28 17:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-16 9:47 [PATCH v3 0/7] util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc() David Hildenbrand
2021-08-16 9:47 ` [PATCH v3 1/7] util/oslib-posix: Let touch_all_pages() return an error David Hildenbrand
2021-09-28 16:21 ` Daniel P. Berrangé
2021-08-16 9:47 ` [PATCH v3 2/7] util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc() David Hildenbrand
2021-09-28 16:45 ` Daniel P. Berrangé
2021-08-16 9:47 ` [PATCH v3 3/7] util/oslib-posix: Introduce and use MemsetContext for touch_all_pages() David Hildenbrand
2021-08-16 9:47 ` [PATCH v3 4/7] util/oslib-posix: Don't create too many threads with small memory or little pages David Hildenbrand
2021-09-28 16:47 ` Daniel P. Berrangé
2021-08-16 9:47 ` [PATCH v3 5/7] util/oslib-posix: Avoid creating a single thread with MADV_POPULATE_WRITE David Hildenbrand
2021-09-28 16:52 ` Daniel P. Berrangé
2021-08-16 9:47 ` [PATCH v3 6/7] util/oslib-posix: Support concurrent os_mem_prealloc() invocation David Hildenbrand
2021-09-28 16:56 ` Daniel P. Berrangé
2021-09-28 17:01 ` Daniel P. Berrangé [this message]
2021-09-28 17:17 ` David Hildenbrand
2021-08-16 9:47 ` [PATCH v3 7/7] util/oslib-posix: Forward SIGBUS to MCE handler under Linux David Hildenbrand
2021-09-28 16:59 ` Daniel P. Berrangé
2021-09-28 17:13 ` David Hildenbrand
2021-09-28 14:01 ` [PATCH v3 0/7] util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc() David Hildenbrand
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=YVNKT5sfSKD1nQXT@redhat.com \
--to=berrange@redhat.com \
--cc=david@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=mst@redhat.com \
--cc=pankaj.gupta.linux@gmail.com \
--cc=pankaj.gupta@ionos.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).