From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34256) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1boXFP-0003XA-Fp for qemu-devel@nongnu.org; Mon, 26 Sep 2016 10:51:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1boXFN-0007ft-57 for qemu-devel@nongnu.org; Mon, 26 Sep 2016 10:51:10 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58760) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1boXFM-0007fo-RU for qemu-devel@nongnu.org; Mon, 26 Sep 2016 10:51:09 -0400 Date: Mon, 26 Sep 2016 16:51:05 +0200 From: Kevin Wolf Message-ID: <20160926145105.GK6093@noname.str.redhat.com> References: <1474890272-22952-1-git-send-email-pl@kamp.de> <1474890272-22952-2-git-send-email-pl@kamp.de> <20160926134456.GI6093@noname.str.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] [PATCH V8 1/6] oslib-posix: add helpers for stack alloc and free List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Lieven 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 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 > >>--- > >> 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