qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: peter.maydell@linaro.org
Cc: "Richard Henderson" <richard.henderson@linaro.org>,
	"Taylor Simpson" <tsimpson@quicinc.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	qemu-devel@nongnu.org
Subject: [PULL 26/40] tests/tcg: make test-mmap a little less aggressive
Date: Mon, 12 Jul 2021 13:26:39 +0100	[thread overview]
Message-ID: <20210712122653.11354-27-alex.bennee@linaro.org> (raw)
In-Reply-To: <20210712122653.11354-1-alex.bennee@linaro.org>

The check_aligned_anonymous_unfixed_mmaps and
check_aligned_anonymous_unfixed_colliding_mmaps do a lot of mmap's and
copying of data. This is especially unfriendly to targets like hexagon
which have quite large pages and need to do sanity checks on each
memory access.

While we are at it clean-up the white space and style issues from the
legacy code. As we no longer do quite so much needless memory access
we can also remove the hexagon timeout hack.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
Message-Id: <20210709143005.1554-27-alex.bennee@linaro.org>

diff --git a/tests/tcg/multiarch/test-mmap.c b/tests/tcg/multiarch/test-mmap.c
index 11d0e777b1..96257f8ebe 100644
--- a/tests/tcg/multiarch/test-mmap.c
+++ b/tests/tcg/multiarch/test-mmap.c
@@ -49,64 +49,62 @@ size_t test_fsize;
 
 void check_aligned_anonymous_unfixed_mmaps(void)
 {
-	void *p1;
-	void *p2;
-	void *p3;
-	void *p4;
-	void *p5;
-	uintptr_t p;
-	int i;
-
-	fprintf(stdout, "%s", __func__);
-	for (i = 0; i < 0x1fff; i++)
-	{
-		size_t len;
-
-		len = pagesize + (pagesize * i & 7);
-		p1 = mmap(NULL, len, PROT_READ, 
-			  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-		p2 = mmap(NULL, len, PROT_READ, 
-			  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-		p3 = mmap(NULL, len, PROT_READ, 
-			  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-		p4 = mmap(NULL, len, PROT_READ, 
-			  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-		p5 = mmap(NULL, len, PROT_READ, 
-			  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-
-		/* Make sure we get pages aligned with the pagesize. The
-		   target expects this.  */
-		fail_unless (p1 != MAP_FAILED);
-		fail_unless (p2 != MAP_FAILED);
-		fail_unless (p3 != MAP_FAILED);
-		fail_unless (p4 != MAP_FAILED);
-		fail_unless (p5 != MAP_FAILED);
-		p = (uintptr_t) p1;
-		D(printf ("p=%x\n", p));
-		fail_unless ((p & pagemask) == 0);
-		p = (uintptr_t) p2;
-		fail_unless ((p & pagemask) == 0);
-		p = (uintptr_t) p3;
-		fail_unless ((p & pagemask) == 0);
-		p = (uintptr_t) p4;
-		fail_unless ((p & pagemask) == 0);
-		p = (uintptr_t) p5;
-		fail_unless ((p & pagemask) == 0);
-
-		/* Make sure we can read from the entire area.  */
-		memcpy (dummybuf, p1, pagesize);
-		memcpy (dummybuf, p2, pagesize);
-		memcpy (dummybuf, p3, pagesize);
-		memcpy (dummybuf, p4, pagesize);
-		memcpy (dummybuf, p5, pagesize);
-
-		munmap (p1, len);
-		munmap (p2, len);
-		munmap (p3, len);
-		munmap (p4, len);
-		munmap (p5, len);
-	}
-	fprintf(stdout, " passed\n");
+    void *p1;
+    void *p2;
+    void *p3;
+    void *p4;
+    void *p5;
+    uintptr_t p;
+    int i;
+    fprintf(stdout, "%s", __func__);
+    for (i = 0; i < 8; i++) {
+        size_t len;
+        len = pagesize + (pagesize * i);
+        p1 = mmap(NULL, len, PROT_READ,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+        p2 = mmap(NULL, len, PROT_READ,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+        p3 = mmap(NULL, len, PROT_READ,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+        p4 = mmap(NULL, len, PROT_READ,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+        p5 = mmap(NULL, len, PROT_READ,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+
+        /*
+         * Make sure we get pages aligned with the pagesize. The
+         * target expects this.
+         */
+        fail_unless(p1 != MAP_FAILED);
+        fail_unless(p2 != MAP_FAILED);
+        fail_unless(p3 != MAP_FAILED);
+        fail_unless(p4 != MAP_FAILED);
+        fail_unless(p5 != MAP_FAILED);
+        p = (uintptr_t) p1;
+        D(printf("p=%x\n", p));
+        fail_unless((p & pagemask) == 0);
+        p = (uintptr_t) p2;
+        fail_unless((p & pagemask) == 0);
+        p = (uintptr_t) p3;
+        fail_unless((p & pagemask) == 0);
+        p = (uintptr_t) p4;
+        fail_unless((p & pagemask) == 0);
+        p = (uintptr_t) p5;
+        fail_unless((p & pagemask) == 0);
+
+        /* Make sure we can read from the entire area.  */
+        memcpy(dummybuf, p1, pagesize);
+        memcpy(dummybuf, p2, pagesize);
+        memcpy(dummybuf, p3, pagesize);
+        memcpy(dummybuf, p4, pagesize);
+        memcpy(dummybuf, p5, pagesize);
+        munmap(p1, len);
+        munmap(p2, len);
+        munmap(p3, len);
+        munmap(p4, len);
+        munmap(p5, len);
+    }
+    fprintf(stdout, " passed\n");
 }
 
 void check_large_anonymous_unfixed_mmap(void)
@@ -135,52 +133,54 @@ void check_large_anonymous_unfixed_mmap(void)
 
 void check_aligned_anonymous_unfixed_colliding_mmaps(void)
 {
-	char *p1;
-	char *p2;
-	char *p3;
-	uintptr_t p;
-	int i;
-
-	fprintf(stdout, "%s", __func__);
-	for (i = 0; i < 0x2fff; i++)
-	{
-		int nlen;
-		p1 = mmap(NULL, pagesize, PROT_READ, 
-			  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-		fail_unless (p1 != MAP_FAILED);
-		p = (uintptr_t) p1;
-		fail_unless ((p & pagemask) == 0);
-		memcpy (dummybuf, p1, pagesize);
-
-		p2 = mmap(NULL, pagesize, PROT_READ, 
-			  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-		fail_unless (p2 != MAP_FAILED);
-		p = (uintptr_t) p2;
-		fail_unless ((p & pagemask) == 0);
-		memcpy (dummybuf, p2, pagesize);
-
-
-		munmap (p1, pagesize);
-		nlen = pagesize * 8;
-		p3 = mmap(NULL, nlen, PROT_READ, 
-			  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-		fail_unless (p3 != MAP_FAILED);
-
-		/* Check if the mmaped areas collide.  */
-		if (p3 < p2 
-		    && (p3 + nlen) > p2)
-			fail_unless (0);
-
-		memcpy (dummybuf, p3, pagesize);
-
-		/* Make sure we get pages aligned with the pagesize. The
-		   target expects this.  */
-		p = (uintptr_t) p3;
-		fail_unless ((p & pagemask) == 0);
-		munmap (p2, pagesize);
-		munmap (p3, nlen);
-	}
-	fprintf(stdout, " passed\n");
+    char *p1;
+    char *p2;
+    char *p3;
+    uintptr_t p;
+    int i;
+
+    fprintf(stdout, "%s", __func__);
+    for (i = 0; i < 2; i++) {
+        int nlen;
+        p1 = mmap(NULL, pagesize, PROT_READ,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+        fail_unless(p1 != MAP_FAILED);
+        p = (uintptr_t) p1;
+        fail_unless((p & pagemask) == 0);
+        memcpy(dummybuf, p1, pagesize);
+
+        p2 = mmap(NULL, pagesize, PROT_READ,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+        fail_unless(p2 != MAP_FAILED);
+        p = (uintptr_t) p2;
+        fail_unless((p & pagemask) == 0);
+        memcpy(dummybuf, p2, pagesize);
+
+
+        munmap(p1, pagesize);
+        nlen = pagesize * 8;
+        p3 = mmap(NULL, nlen, PROT_READ,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+        fail_unless(p3 != MAP_FAILED);
+
+        /* Check if the mmaped areas collide.  */
+        if (p3 < p2
+            && (p3 + nlen) > p2) {
+            fail_unless(0);
+        }
+
+        memcpy(dummybuf, p3, pagesize);
+
+        /*
+         * Make sure we get pages aligned with the pagesize. The
+         * target expects this.
+         */
+        p = (uintptr_t) p3;
+        fail_unless((p & pagemask) == 0);
+        munmap(p2, pagesize);
+        munmap(p3, nlen);
+    }
+    fprintf(stdout, " passed\n");
 }
 
 void check_aligned_anonymous_fixed_mmaps(void)
diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile.target
index 0992787d50..050cd61c1a 100644
--- a/tests/tcg/hexagon/Makefile.target
+++ b/tests/tcg/hexagon/Makefile.target
@@ -18,15 +18,6 @@
 # Hexagon doesn't support gdb, so skip the EXTRA_RUNS
 EXTRA_RUNS =
 
-# Hexagon has 64K pages, so increase the timeout to keep
-# test-mmap from timing out
-ifeq ($(CONFIG_DEBUG_TCG),y)
-TIMEOUT=800
-else
-TIMEOUT=500
-endif
-
-
 CFLAGS += -Wno-incompatible-pointer-types -Wno-undefined-internal
 CFLAGS += -fno-unroll-loops
 
-- 
2.20.1



  parent reply	other threads:[~2021-07-12 12:42 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-12 12:26 [PULL for 6.1 00/40] testing and plugin updates Alex Bennée
2021-07-12 12:26 ` [PULL 01/40] Jobs based on custom runners: documentation and configuration placeholder Alex Bennée
2021-07-12 12:26 ` [PULL 02/40] Jobs based on custom runners: build environment docs and playbook Alex Bennée
2021-07-12 12:26 ` [PULL 03/40] Jobs based on custom runners: docs and gitlab-runner setup playbook Alex Bennée
2021-07-12 12:26 ` [PULL 04/40] Jobs based on custom runners: add job definitions for QEMU's machines Alex Bennée
2021-07-12 12:26 ` [PULL 05/40] tests/tcg: also disable the signals test for plugins Alex Bennée
2021-07-12 12:26 ` [PULL 06/40] build: validate that system capstone works before using it Alex Bennée
2021-07-12 12:26 ` [PULL 07/40] gitlab: support for FreeBSD 12, 13 and macOS 11 via cirrus-run Alex Bennée
2021-07-12 12:26 ` [PULL 08/40] cirrus: delete FreeBSD and macOS jobs Alex Bennée
2021-07-12 12:26 ` [PULL 09/40] hw/usb/ccid: remove references to NSS Alex Bennée
2021-07-12 12:26 ` [PULL 10/40] tests/docker: don't use BUILDKIT in GitLab either Alex Bennée
2021-07-12 12:26 ` [PULL 11/40] tests/docker: use project specific container registries Alex Bennée
2021-07-12 12:26 ` [PULL 12/40] tests/docker: use explicit docker.io registry Alex Bennée
2021-07-12 12:26 ` [PULL 13/40] tests/docker: remove FEATURES env var from templates Alex Bennée
2021-07-12 12:26 ` [PULL 14/40] tests/docker: fix sorting in package lists Alex Bennée
2021-07-12 12:26 ` [PULL 15/40] tests/docker: fix mistakes in centos " Alex Bennée
2021-07-12 12:26 ` [PULL 16/40] tests/docker: fix mistakes in fedora package list Alex Bennée
2021-07-12 12:26 ` [PULL 17/40] tests/docker: fix mistakes in ubuntu package lists Alex Bennée
2021-07-12 12:26 ` [PULL 18/40] tests/docker: remove mingw packages from Fedora Alex Bennée
2021-07-12 12:26 ` [PULL 19/40] tests/docker: expand centos8 package list Alex Bennée
2021-07-12 12:26 ` [PULL 20/40] tests/docker: expand fedora " Alex Bennée
2021-07-12 12:26 ` [PULL 21/40] tests/docker: expand ubuntu1804 " Alex Bennée
2021-07-12 12:26 ` [PULL 22/40] tests/docker: expand ubuntu2004 " Alex Bennée
2021-07-12 12:26 ` [PULL 23/40] tests/docker: expand opensuse-leap " Alex Bennée
2021-07-12 12:26 ` [PULL 24/40] tests/vm: update NetBSD to 9.2 Alex Bennée
2021-07-12 12:26 ` [PULL 25/40] tests/vm: update openbsd to release 6.9 Alex Bennée
2021-07-12 12:26 ` Alex Bennée [this message]
2021-07-12 12:26 ` [PULL 27/40] plugins: fix-up handling of internal hostaddr for 32 bit Alex Bennée
2021-07-12 12:26 ` [PULL 28/40] meson.build: move TCG plugin summary output Alex Bennée
2021-07-12 12:26 ` [PULL 29/40] configure: don't allow plugins to be enabled for a non-TCG build Alex Bennée
2021-07-12 12:26 ` [PULL 30/40] configure: add an explicit static and plugins check Alex Bennée
2021-07-12 12:26 ` [PULL 31/40] configure: stop user enabling plugins on Windows for now Alex Bennée
2021-07-12 12:26 ` [PULL 32/40] tcg/plugins: enable by default for most TCG builds Alex Bennée
2021-07-16  6:54   ` Christian Borntraeger
2021-07-16 11:28     ` Christian Borntraeger
2021-07-16 13:16       ` Alex Bennée
2021-07-16 14:51       ` Richard Henderson
2021-07-16 14:58         ` Christian Borntraeger
2021-07-16 15:31           ` Christian Borntraeger
2021-07-16 16:02             ` Richard Henderson
2021-07-12 12:26 ` [PULL 33/40] contrib/plugins: enable -Wall for building plugins Alex Bennée
2021-07-12 12:26 ` [PULL 34/40] contrib/plugins: add execlog to log instruction execution and memory access Alex Bennée
2021-07-12 12:26 ` [PULL 35/40] docs/devel: tcg-plugins: add execlog plugin description Alex Bennée
2021-07-12 12:26 ` [PULL 36/40] plugins: Added a new cache modelling plugin Alex Bennée
2021-07-12 12:26 ` [PULL 37/40] plugins/cache: Enable cache parameterization Alex Bennée
2021-07-12 12:26 ` [PULL 38/40] plugins/cache: Added FIFO and LRU eviction policies Alex Bennée
2021-07-12 12:26 ` [PULL 39/40] docs/devel: Added cache plugin to the plugins docs Alex Bennée
2021-07-12 12:26 ` [PULL 40/40] MAINTAINERS: Added myself as a reviewer for TCG Plugins Alex Bennée
2021-07-12 12:56 ` [PULL for 6.1 00/40] testing and plugin updates Alex Bennée
2021-07-12 14:51   ` Alex Bennée
2021-07-12 22:19   ` Alex Bennée

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=20210712122653.11354-27-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=tsimpson@quicinc.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).