Commit a6f2bb0c authored by Chris Friedt's avatar Chris Friedt Committed by Johan Hedberg
Browse files

posix: do not rely on PAGE_SIZE being defined in limits.h

Since an implementation may omit definitions of runtime invariant values
in limits.h if the corresponding value is equal to or greater than the
minimum, is unspecified, and must be queried at runtime [1], do not rely
on PAGE_SIZE being declared in limits.h .

[1]
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/limits.h.html



Signed-off-by: default avatarChris Friedt <cfriedt@tenstorrent.com>
parent 6e040484
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
#include <zephyr/posix/sys/mman.h>
#include <zephyr/posix/unistd.h>

#define _page_size COND_CODE_1(CONFIG_MMU, (CONFIG_MMU_PAGE_SIZE), (PAGE_SIZE))
#define _page_size COND_CODE_1(CONFIG_MMU, (CONFIG_MMU_PAGE_SIZE), (CONFIG_POSIX_PAGE_SIZE))

int zvfs_ioctl(int fd, int cmd, va_list args);

+1 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
#include <zephyr/sys/fdtable.h>
#include <zephyr/sys/hash_function.h>

#define _page_size COND_CODE_1(CONFIG_MMU, (CONFIG_MMU_PAGE_SIZE), (PAGE_SIZE))
#define _page_size COND_CODE_1(CONFIG_MMU, (CONFIG_MMU_PAGE_SIZE), (CONFIG_POSIX_PAGE_SIZE))

static const struct fd_op_vtable shm_vtable;

+8 −6
Original line number Diff line number Diff line
@@ -13,6 +13,8 @@

#include <zephyr/ztest.h>

#define _page_size COND_CODE_1(CONFIG_MMU, (CONFIG_MMU_PAGE_SIZE), (CONFIG_POSIX_PAGE_SIZE))

#define SHM_SIZE 8

#define VALID_SHM_PATH     "/foo"
@@ -164,19 +166,19 @@ ZTEST(xsi_realtime, test_shm_mmap)

		if (i == 0) {
			/* cannot map shm of size zero */
			zassert_not_ok(mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,
			zassert_not_ok(mmap(NULL, _page_size, PROT_READ | PROT_WRITE, MAP_SHARED,
					    fd[0], 0));

			zassert_ok(ftruncate(fd[0], PAGE_SIZE));
			zassert_ok(ftruncate(fd[0], _page_size));
		}

		addr[i] = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[i], 0);
		addr[i] = mmap(NULL, _page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd[i], 0);
		zassert_not_equal(MAP_FAILED, addr[i], "mmap() failed: %d", errno);

		if ((i & 1) == 0) {
			memset(addr[0], i & 0xff, PAGE_SIZE);
			memset(addr[0], i & 0xff, _page_size);
		} else {
			zassert_mem_equal(addr[i], addr[i - 1], PAGE_SIZE);
			zassert_mem_equal(addr[i], addr[i - 1], _page_size);
		}
	}

@@ -185,7 +187,7 @@ ZTEST(xsi_realtime, test_shm_mmap)
	}

	for (size_t i = N; i > 0; --i) {
		zassert_ok(munmap(addr[i - 1], PAGE_SIZE));
		zassert_ok(munmap(addr[i - 1], _page_size));
		/*
		 * Note: for some reason, in Zephyr, unmapping a physical page once, removes all
		 * virtual mappings. When that behaviour changes, remove the break below and adjust