qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: fam@euphon.net, minyihh@uci.edu, berrange@redhat.com,
	kuhn.chenqun@huawei.com, f4bug@amsat.org, robhenry@microsoft.com,
	mahmoudabdalghany@outlook.com, aaron@os.amperecomputing.com,
	cota@braap.org, stefanha@redhat.com, crosa@redhat.com,
	pbonzini@redhat.com, ma.mandourr@gmail.com,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Taylor Simpson" <tsimpson@quicinc.com>,
	aurelien@aurel32.net
Subject: [PATCH  v3 26/40] tests/tcg: make test-mmap a little less aggressive
Date: Fri,  9 Jul 2021 15:29:51 +0100	[thread overview]
Message-ID: <20210709143005.1554-27-alex.bennee@linaro.org> (raw)
In-Reply-To: <20210709143005.1554-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>

---
v3
  - style and whitespace cleanups, reduce loop even further.
  - remove hexagon timeout hack
---
 tests/tcg/multiarch/test-mmap.c   | 208 +++++++++++++++---------------
 tests/tcg/hexagon/Makefile.target |   9 --
 2 files changed, 104 insertions(+), 113 deletions(-)

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-09 14:56 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-09 14:29 [PATCH for 6.1 v3 00/40] testing and plugins pre-PR Alex Bennée
2021-07-09 14:29 ` [PATCH v3 01/40] Jobs based on custom runners: documentation and configuration placeholder Alex Bennée
2021-07-09 14:29 ` [PATCH v3 02/40] Jobs based on custom runners: build environment docs and playbook Alex Bennée
2021-07-09 14:29 ` [PATCH v3 03/40] Jobs based on custom runners: docs and gitlab-runner setup playbook Alex Bennée
2021-07-09 14:29 ` [PATCH v3 04/40] Jobs based on custom runners: add job definitions for QEMU's machines Alex Bennée
2021-07-09 14:29 ` [PATCH v3 05/40] tests/tcg: also disable the signals test for plugins Alex Bennée
2021-07-09 14:29 ` [PATCH v3 06/40] build: validate that system capstone works before using it Alex Bennée
2021-07-09 14:29 ` [PATCH v3 07/40] gitlab: support for FreeBSD 12, 13 and macOS 11 via cirrus-run Alex Bennée
2021-07-09 14:29 ` [PATCH v3 08/40] cirrus: delete FreeBSD and macOS jobs Alex Bennée
2021-07-09 14:29 ` [PATCH v3 09/40] hw/usb/ccid: remove references to NSS Alex Bennée
2021-07-09 14:29 ` [PATCH v3 10/40] tests/docker: don't use BUILDKIT in GitLab either Alex Bennée
2021-07-09 14:29 ` [PATCH v3 11/40] tests/docker: use project specific container registries Alex Bennée
2021-07-09 14:29 ` [PATCH v3 12/40] tests/docker: use explicit docker.io registry Alex Bennée
2021-07-09 14:29 ` [PATCH v3 13/40] tests/docker: remove FEATURES env var from templates Alex Bennée
2021-07-09 14:29 ` [PATCH v3 14/40] tests/docker: fix sorting in package lists Alex Bennée
2021-07-09 14:29 ` [PATCH v3 15/40] tests/docker: fix mistakes in centos " Alex Bennée
2021-07-09 14:29 ` [PATCH v3 16/40] tests/docker: fix mistakes in fedora package list Alex Bennée
2021-07-09 14:29 ` [PATCH v3 17/40] tests/docker: fix mistakes in ubuntu package lists Alex Bennée
2021-07-09 14:29 ` [PATCH v3 18/40] tests/docker: remove mingw packages from Fedora Alex Bennée
2021-07-09 14:29 ` [PATCH v3 19/40] tests/docker: expand centos8 package list Alex Bennée
2021-07-09 14:29 ` [PATCH v3 20/40] tests/docker: expand fedora " Alex Bennée
2021-07-09 14:29 ` [PATCH v3 21/40] tests/docker: expand ubuntu1804 " Alex Bennée
2021-07-09 14:29 ` [PATCH v3 22/40] tests/docker: expand ubuntu2004 " Alex Bennée
2021-07-09 14:29 ` [PATCH v3 23/40] tests/docker: expand opensuse-leap " Alex Bennée
2021-07-09 14:29 ` [PATCH v3 24/40] tests/vm: update NetBSD to 9.2 Alex Bennée
2021-07-09 14:29 ` [PATCH v3 25/40] tests/vm: update openbsd to release 6.9 Alex Bennée
2021-07-09 14:29 ` Alex Bennée [this message]
2021-07-09 15:04   ` [PATCH v3 26/40] tests/tcg: make test-mmap a little less aggressive Richard Henderson
2021-07-11 23:59   ` Taylor Simpson
2021-07-09 14:29 ` [PATCH v3 27/40] plugins: fix-up handling of internal hostaddr for 32 bit Alex Bennée
2021-07-09 14:29 ` [PATCH v3 28/40] meson.build: move TCG plugin summary output Alex Bennée
2021-07-09 14:29 ` [PATCH v3 29/40] configure: don't allow plugins to be enabled for a non-TCG build Alex Bennée
2021-07-09 14:29 ` [PATCH v3 30/40] configure: add an explicit static and plugins check Alex Bennée
2021-07-09 15:06   ` Richard Henderson
2021-07-09 14:29 ` [PATCH v3 31/40] configure: stop user enabling plugins on Windows for now Alex Bennée
2021-07-09 14:29 ` [PATCH v3 32/40] tcg/plugins: enable by default for most TCG builds Alex Bennée
2021-07-09 15:12   ` Richard Henderson
2021-07-09 14:29 ` [PATCH v3 33/40] contrib/plugins: enable -Wall for building plugins Alex Bennée
2021-07-09 14:29 ` [PATCH v3 34/40] contrib/plugins: add execlog to log instruction execution and memory access Alex Bennée
2021-07-09 14:30 ` [PATCH v3 35/40] docs/devel: tcg-plugins: add execlog plugin description Alex Bennée
2021-07-09 14:30 ` [PATCH v3 36/40] plugins: Added a new cache modelling plugin Alex Bennée
2021-07-09 14:30 ` [PATCH v3 37/40] plugins/cache: Enable cache parameterization Alex Bennée
2021-07-09 14:30 ` [PATCH v3 38/40] plugins/cache: Added FIFO and LRU eviction policies Alex Bennée
2021-07-09 14:30 ` [PATCH v3 39/40] docs/devel: Added cache plugin to the plugins docs Alex Bennée
2021-07-09 14:30 ` [PATCH v3 40/40] MAINTAINERS: Added myself as a reviewer for TCG Plugins 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=20210709143005.1554-27-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=aaron@os.amperecomputing.com \
    --cc=aurelien@aurel32.net \
    --cc=berrange@redhat.com \
    --cc=cota@braap.org \
    --cc=crosa@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=fam@euphon.net \
    --cc=kuhn.chenqun@huawei.com \
    --cc=ma.mandourr@gmail.com \
    --cc=mahmoudabdalghany@outlook.com \
    --cc=minyihh@uci.edu \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=robhenry@microsoft.com \
    --cc=stefanha@redhat.com \
    --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).