From: Kevin Wolf <kwolf@redhat.com>
To: Peter Lieven <pl@kamp.de>
Cc: qemu-devel@nongnu.org, mreitz@redhat.com, pbonzini@redhat.com,
mst@redhat.com, dgilbert@redhat.com, peter.maydell@linaro.org,
eblake@redhat.com, rth@twiddle.net, armbru@redhat.com
Subject: Re: [Qemu-devel] [PATCH V8 1/6] oslib-posix: add helpers for stack alloc and free
Date: Mon, 26 Sep 2016 16:51:05 +0200 [thread overview]
Message-ID: <20160926145105.GK6093@noname.str.redhat.com> (raw)
In-Reply-To: <f9079f83-8d55-358b-dd87-642c6f13175b@kamp.de>
Am 26.09.2016 um 16:43 hat Peter Lieven geschrieben:
> Am 26.09.2016 um 15:44 schrieb Kevin Wolf:
> >Am 26.09.2016 um 13:44 hat Peter Lieven geschrieben:
> >>the allocated stack will be adjusted to the minimum supported stack size
> >>by the OS and rounded up to be a multiple of the system pagesize.
> >>Additionally an architecture dependent guard page is added to the stack
> >>to catch stack overflows.
> >>
> >>Signed-off-by: Peter Lieven <pl@kamp.de>
> >>---
> >> include/sysemu/os-posix.h | 27 +++++++++++++++++++++++++++
> >> util/oslib-posix.c | 43 +++++++++++++++++++++++++++++++++++++++++++
> >> 2 files changed, 70 insertions(+)
> >>
> >>diff --git a/include/sysemu/os-posix.h b/include/sysemu/os-posix.h
> >>index 9c7dfdf..4a0f493 100644
> >>--- a/include/sysemu/os-posix.h
> >>+++ b/include/sysemu/os-posix.h
> >>@@ -60,4 +60,31 @@ int qemu_utimens(const char *path, const qemu_timespec *times);
> >> bool is_daemonized(void);
> >>+/**
> >>+ * qemu_alloc_stack:
> >>+ * @sz: pointer to a size_t holding the requested stack size
> >>+ *
> >>+ * Allocate memory that can be used as a stack, for instance for
> >>+ * coroutines. If the memory cannot be allocated, this function
> >>+ * will abort (like g_malloc()). This function also inserts an
> >>+ * additional guard page to catch a potential stack overflow.
> >>+ * Note that the useable stack memory can be greater than the
> >>+ * requested stack size due to alignment and minimal stack size
> >>+ * restrictions. In this case the value of sz is adjusted.
> >>+ *
> >>+ * The allocated stack must be freed with qemu_free_stack().
> >>+ *
> >>+ * Returns: pointer to (the lowest address of) the stack memory.
> >Not quite. It's the pointer to the lowest address of the guard page,
> >while the returned stack size doesn't include the guard page. This is an
> >awkward interface, and consequently patch 3 fails to use it correctly.
> >
> >So you end up with something like:
> >
> > |GGGG|....|....|....|
> > **** **** ****
> >
> > G = guard page
> > . = allocated stack page
> > * = stack as used for makecontext()
> >
> >That is, the guard page is included in the stack used to create the
> >coroutine context, and the last page stays unused. On systems where we
> >only allocate a single page for the stack, this obviously means that the
> >tests still fail.
>
> you are right. so I should adjust the size to allocsz instead?
That's probably the easiest fix.
Kevin
> the other option would be to keep version 7 of this series and
> adjust the COROUTINE_SIZE to MAX(2*pagesize(), 1 << 16) to
> avoid the problem?
>
> Peter
next prev parent reply other threads:[~2016-09-26 14:51 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-26 11:44 [Qemu-devel] [PATCH V8 0/6] coroutine: mmap stack memory and stack size Peter Lieven
2016-09-26 11:44 ` [Qemu-devel] [PATCH V8 1/6] oslib-posix: add helpers for stack alloc and free Peter Lieven
2016-09-26 13:44 ` Kevin Wolf
2016-09-26 14:43 ` Peter Lieven
2016-09-26 14:51 ` Kevin Wolf [this message]
2016-09-26 11:44 ` [Qemu-devel] [PATCH V8 2/6] coroutine: add a macro for the coroutine stack size Peter Lieven
2016-09-26 11:44 ` [Qemu-devel] [PATCH V8 3/6] coroutine-ucontext: use helper for allocating stack memory Peter Lieven
2016-09-26 11:44 ` [Qemu-devel] [PATCH V8 4/6] coroutine-sigaltstack: " Peter Lieven
2016-09-26 13:51 ` Kevin Wolf
2016-09-26 11:44 ` [Qemu-devel] [PATCH V8 5/6] oslib-posix: add a configure switch to debug stack usage Peter Lieven
2016-09-26 11:44 ` [Qemu-devel] [PATCH V8 6/6] coroutine: reduce stack size to 60kB Peter Lieven
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=20160926145105.GK6093@noname.str.redhat.com \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=mreitz@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=pl@kamp.de \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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).