spi: loopback-test: fix compile error on x86
[sfrench/cifs-2.6.git] / drivers / spi / spi-loopback-test.c
index 50e620f4e8fe2ae29c655358e38d771c464ec01d..4e7843ec8aac8af5f486199f18b0c0e7a18b3809 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/module.h>
 #include <linux/of_device.h>
 #include <linux/printk.h>
+#include <linux/vmalloc.h>
 #include <linux/spi/spi.h>
 
 #include "spi-test.h"
@@ -55,6 +56,18 @@ module_param(run_only_test, int, 0);
 MODULE_PARM_DESC(run_only_test,
                 "only run the test with this number (0-based !)");
 
+/* use vmalloc'ed buffers */
+int use_vmalloc;
+module_param(use_vmalloc, int, 0644);
+MODULE_PARM_DESC(use_vmalloc,
+                "use vmalloc'ed buffers instead of kmalloc'ed");
+
+/* check rx ranges */
+int check_ranges = 1;
+module_param(check_ranges, int, 0644);
+MODULE_PARM_DESC(check_ranges,
+                "checks rx_buffer pattern are valid");
+
 /* the actual tests to execute */
 static struct spi_test spi_tests[] = {
        {
@@ -492,9 +505,11 @@ static int spi_test_check_loopback_result(struct spi_device *spi,
        int ret;
 
        /* checks rx_buffer pattern are valid with loopback or without */
-       ret = spi_check_rx_ranges(spi, msg, rx);
-       if (ret)
-               return ret;
+       if (check_ranges) {
+               ret = spi_check_rx_ranges(spi, msg, rx);
+               if (ret)
+                       return ret;
+       }
 
        /* if we run without loopback, then return now */
        if (!loopback)
@@ -965,13 +980,19 @@ int spi_test_run_tests(struct spi_device *spi,
        /* allocate rx/tx buffers of 128kB size without devm
         * in the hope that is on a page boundary
         */
-       rx = kzalloc(SPI_TEST_MAX_SIZE_PLUS, GFP_KERNEL);
+       if (use_vmalloc)
+               rx = vmalloc(SPI_TEST_MAX_SIZE_PLUS);
+       else
+               rx = kzalloc(SPI_TEST_MAX_SIZE_PLUS, GFP_KERNEL);
        if (!rx) {
                ret = -ENOMEM;
                goto out;
        }
 
-       tx = kzalloc(SPI_TEST_MAX_SIZE_PLUS, GFP_KERNEL);
+       if (use_vmalloc)
+               tx = vmalloc(SPI_TEST_MAX_SIZE_PLUS);
+       else
+               tx = kzalloc(SPI_TEST_MAX_SIZE_PLUS, GFP_KERNEL);
        if (!tx) {
                ret = -ENOMEM;
                goto out;
@@ -999,8 +1020,8 @@ int spi_test_run_tests(struct spi_device *spi,
        }
 
 out:
-       kfree(rx);
-       kfree(tx);
+       kvfree(rx);
+       kvfree(tx);
        return ret;
 }
 EXPORT_SYMBOL_GPL(spi_test_run_tests);