The huge page size can vary across architectures. This will
ensure that the correct huge page size is used when accessing
the hugetlb controls under sysfs. Instead of using a hardcoded
page size (i.e. 2MB), this now uses the HPAGE_SIZE macro which
is arch-specific.

Signed-off-by: Sandipan Das <sandi...@linux.ibm.com>
---
 tools/testing/selftests/vm/protection_keys.c | 23 ++++++++++++++------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/tools/testing/selftests/vm/protection_keys.c 
b/tools/testing/selftests/vm/protection_keys.c
index 9cc82b65f828..535e464e27e9 100644
--- a/tools/testing/selftests/vm/protection_keys.c
+++ b/tools/testing/selftests/vm/protection_keys.c
@@ -739,12 +739,15 @@ void *malloc_pkey_anon_huge(long size, int prot, u16 pkey)
 }
 
 int hugetlb_setup_ok;
+#define SYSFS_FMT_NR_HUGE_PAGES 
"/sys/kernel/mm/hugepages/hugepages-%ldkB/nr_hugepages"
 #define GET_NR_HUGE_PAGES 10
 void setup_hugetlbfs(void)
 {
        int err;
        int fd;
-       char buf[] = "123";
+       char buf[256];
+       long hpagesz_kb;
+       long hpagesz_mb;
 
        if (geteuid() != 0) {
                fprintf(stderr, "WARNING: not run as root, can not do hugetlb 
test\n");
@@ -755,11 +758,16 @@ void setup_hugetlbfs(void)
 
        /*
         * Now go make sure that we got the pages and that they
-        * are 2M pages.  Someone might have made 1G the default.
+        * are PMD-level pages. Someone might have made PUD-level
+        * pages the default.
         */
-       fd = open("/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages", 
O_RDONLY);
+       hpagesz_kb = HPAGE_SIZE / 1024;
+       hpagesz_mb = hpagesz_kb / 1024;
+       sprintf(buf, SYSFS_FMT_NR_HUGE_PAGES, hpagesz_kb);
+       fd = open(buf, O_RDONLY);
        if (fd < 0) {
-               perror("opening sysfs 2M hugetlb config");
+               fprintf(stderr, "opening sysfs %ldM hugetlb config: %s\n",
+                       hpagesz_mb, strerror(errno));
                return;
        }
 
@@ -767,13 +775,14 @@ void setup_hugetlbfs(void)
        err = read(fd, buf, sizeof(buf)-1);
        close(fd);
        if (err <= 0) {
-               perror("reading sysfs 2M hugetlb config");
+               fprintf(stderr, "reading sysfs %ldM hugetlb config: %s\n",
+                       hpagesz_mb, strerror(errno));
                return;
        }
 
        if (atoi(buf) != GET_NR_HUGE_PAGES) {
-               fprintf(stderr, "could not confirm 2M pages, got: '%s' expected 
%d\n",
-                       buf, GET_NR_HUGE_PAGES);
+               fprintf(stderr, "could not confirm %ldM pages, got: '%s' 
expected %d\n",
+                       hpagesz_mb, buf, GET_NR_HUGE_PAGES);
                return;
        }
 
-- 
2.17.1

Reply via email to