]> git.baikalelectronics.ru Git - kernel.git/commitdiff
selftests/powerpc: Use req_max_processed_len from sysfs NX capabilities
authorHaren Myneni <haren@linux.ibm.com>
Wed, 23 Jun 2021 05:17:46 +0000 (22:17 -0700)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 25 Jun 2021 04:47:19 +0000 (14:47 +1000)
On PowerVM, the hypervisor defines the maximum buffer length for
each NX request and the kernel exported this value via sysfs.

This patch reads this value if the sysfs entry is available and
is used to limit the request length.

Signed-off-by: Haren Myneni <haren@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/ed908341b1eb7ca0183c028a4ed4a0cf48bfe0f6.camel@linux.ibm.com
tools/testing/selftests/powerpc/nx-gzip/Makefile
tools/testing/selftests/powerpc/nx-gzip/gzfht_test.c

index 640fad6cc2c79c43f6706e81cc584685c4903982..0785c2e99d407e91d0d411ba9779912fc1d15ce2 100644 (file)
@@ -1,8 +1,8 @@
-CFLAGS = -O3 -m64 -I./include
+CFLAGS = -O3 -m64 -I./include -I../include
 
 TEST_GEN_FILES := gzfht_test gunz_test
 TEST_PROGS := nx-gzip-test.sh
 
 include ../../lib.mk
 
-$(TEST_GEN_FILES): gzip_vas.c
+$(TEST_GEN_FILES): gzip_vas.c ../utils.c
index b099753b50e4af4cf6fea2aa2ef4c915013eb7d3..095195a25687e7837f98bf55d4bf3a4901e04870 100644 (file)
@@ -60,6 +60,7 @@
 #include <assert.h>
 #include <errno.h>
 #include <signal.h>
+#include "utils.h"
 #include "nxu.h"
 #include "nx.h"
 
@@ -70,6 +71,8 @@ FILE *nx_gzip_log;
 #define FNAME_MAX 1024
 #define FEXT ".nx.gz"
 
+#define SYSFS_MAX_REQ_BUF_PATH "devices/vio/ibm,compression-v1/nx_gzip_caps/req_max_processed_len"
+
 /*
  * LZ counts returned in the user supplied nx_gzip_crb_cpb_t structure.
  */
@@ -244,6 +247,7 @@ int compress_file(int argc, char **argv, void *handle)
        struct nx_gzip_crb_cpb_t *cmdp;
        uint32_t pagelen = 65536;
        int fault_tries = NX_MAX_FAULTS;
+       char buf[32];
 
        cmdp = (void *)(uintptr_t)
                aligned_alloc(sizeof(struct nx_gzip_crb_cpb_t),
@@ -263,8 +267,17 @@ int compress_file(int argc, char **argv, void *handle)
        assert(NULL != (outbuf = (char *)malloc(outlen)));
        nxu_touch_pages(outbuf, outlen, pagelen, 1);
 
-       /* Compress piecemeal in smallish chunks */
-       chunk = 1<<22;
+       /*
+        * On PowerVM, the hypervisor defines the maximum request buffer
+        * size is defined and this value is available via sysfs.
+        */
+       if (!read_sysfs_file(SYSFS_MAX_REQ_BUF_PATH, buf, sizeof(buf))) {
+               chunk = atoi(buf);
+       } else {
+               /* sysfs entry is not available on PowerNV */
+               /* Compress piecemeal in smallish chunks */
+               chunk = 1<<22;
+       }
 
        /* Write the gzip header to the stream */
        num_hdr_bytes = gzip_header_blank(outbuf);