[PATCH 2/7] harness: Use run-time _SC_PAGE_SIZE instead of build-time PAGESIZE
authorGuillem Jover <guillem@hadrons.org>
Fri, 8 Feb 2019 23:28:53 +0000 (00:28 +0100)
committerGuillem Jover <guillem@debian.org>
Tue, 26 Feb 2019 04:26:21 +0000 (04:26 +0000)
The getconf(1) command is inherently not cross-compilation friendly.
In addition PAGESIZE depends on the specific system, even within a
specific arch, so using a hard-coded value is never safe.

Signed-off-by: Guillem Jover <guillem@hadrons.org>
Gbp-Pq: Name 0002-harness-Use-run-time-_SC_PAGE_SIZE-instead-of-build-.patch

harness/Makefile
harness/cases/18.t

index 9e2f95f2cfbf3ad487fe6c40e0aa5dcb98afd1c9..1ca4290c6045ad1a79aad036deb35008a8e7f35e 100644 (file)
@@ -6,7 +6,7 @@ PROGS:=$(PARTPROGS) $(EXTRAPROGS)
 HARNESS_SRCS:=main.c
 # io_queue.c
 
-MK_CPPFLAGS := -I../src -DPAGE_SIZE=$(shell getconf PAGESIZE) $(CPPFLAGS)
+MK_CPPFLAGS := -I../src $(CPPFLAGS)
 CFLAGS = -Wall -g -O2
 #-lpthread -lrt
 MK_CFLAGS = $(CFLAGS)
index 5587ceb65fce739fa9695c6759c472659298f968..daa1d26adcd6f5f66dcd3e77f53637b4ff61fa96 100644 (file)
 
 #define THREADS_NUM 100
 
+static size_t page_size;
+
 void
 aio_worker(void *ptr)
 {
-       int i, j, fd;
-       char buffer[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
+       int i, j, fd, ret;
+       char *buffer = NULL;
+
+       ret = posix_memalign((void **)&buffer, page_size, page_size);
+       assert(ret == 0);
+       assert(buffer != NULL);
 
        fd = open(FILENAME, O_DIRECT|O_RDONLY);
        assert(fd >= 0);
@@ -55,19 +61,19 @@ aio_worker(void *ptr)
                struct iocb *cbs[1];
 
                assert(!io_queue_init(1, &ctx));
-               io_prep_pread(&cb, fd, buffer, PAGE_SIZE, 0);
+               io_prep_pread(&cb, fd, buffer, page_size, 0);
                cbs[0] = &cb;
 
-               memset(buffer, '0', PAGE_SIZE);
+               memset(buffer, '0', page_size);
                assert(io_submit(ctx, 1, &cbs[0]) == 1);
                // wait random time (0-500ms) ?
 
                io_destroy(ctx);
-               memset(buffer, DESTROY_PATTERN, PAGE_SIZE);
+               memset(buffer, DESTROY_PATTERN, page_size);
                // wait random for (0-500ms) ?
 
                // check it is still DESTROY_PATTERN
-               for (j = 0; j < PAGE_SIZE; j++) {
+               for (j = 0; j < page_size; j++) {
                        if (buffer[j] != DESTROY_PATTERN) {
                                fprintf(stderr,
                                        "Buffer has unexpected character: %c\n",
@@ -77,6 +83,7 @@ aio_worker(void *ptr)
                }
        }
 
+       free(buffer);
        close(fd);
 }
 
@@ -84,15 +91,22 @@ int
 test_main(void)
 {
        int i, fd, ret;
-       char buffer[PAGE_SIZE];
+       char *buffer = NULL;
        pthread_t threads[THREADS_NUM];
 
+       page_size = sysconf(_SC_PAGESIZE);
+       assert(page_size >= 1);
+
+       ret = posix_memalign((void **)&buffer, page_size, page_size);
+       assert(ret == 0);
+       assert(buffer != NULL);
+
        fd = open(FILENAME, O_CREAT|O_TRUNC|O_APPEND|O_RDWR, S_IRUSR|S_IWUSR);
        assert(fd != -1);
 
-       memset(buffer, FILEPATTERN, PAGE_SIZE);
-       ret = write(fd, buffer, PAGE_SIZE);
-       assert(ret == PAGE_SIZE);
+       memset(buffer, FILEPATTERN, page_size);
+       ret = write(fd, buffer, page_size);
+       assert(ret == page_size);
        close(fd);
 
        for (i = 0; i < THREADS_NUM; i++) {