aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Markgraf <steve@steve-m.de>2019-07-16 23:45:57 +0200
committerSteve Markgraf <steve@steve-m.de>2019-07-16 23:49:48 +0200
commit81833a1cf6288fee93a9157c0f60cafb5ec340b9 (patch)
tree6f1824e3b7b895e25a1e9314ec0fa13747ad0a71
parentbe1d1206bfb6e6c41f7d91b20b77e20f929fa6a7 (diff)
lib: disable usbfs zero-copy support by default
Although we added a detection mechanism for the presence of the Kernel bug earlier, reading from the incorrectly mapped memory might cause a bus error on some ARM systems. With the overall performance benefit being rather minimal for the data rates of rtl-sdr, disable zero-copy by default.
-rw-r--r--CMakeLists.txt8
-rw-r--r--configure.ac6
-rw-r--r--src/librtlsdr.c2
3 files changed, 15 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index abc8f9b..57a1c2e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -126,6 +126,14 @@ else (DETACH_KERNEL_DRIVER)
message (STATUS "Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON to enable")
endif (DETACH_KERNEL_DRIVER)
+option(ENABLE_ZEROCOPY "Enable usbfs zero-copy support" OFF)
+if (ENABLE_ZEROCOPY)
+ message (STATUS "Building with usbfs zero-copy support enabled")
+ add_definitions(-DENABLE_ZEROCOPY=1)
+else (ENABLE_ZEROCOPY)
+ message (STATUS "Building with usbfs zero-copy support disabled, use -DENABLE_ZEROCOPY=ON to enable")
+endif (ENABLE_ZEROCOPY)
+
########################################################################
# Add subdirectories
########################################################################
diff --git a/configure.ac b/configure.ac
index 5b94828..1afbfbd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -101,6 +101,12 @@ AC_ARG_ENABLE(driver-detach,
CFLAGS="$CFLAGS -DDETACH_KERNEL_DRIVER"
fi])
+AC_ARG_ENABLE(zerocopy,
+[ --enable-zerocopy Enable usbfs zero-copy support (disabled by default)],
+[if test x$enableval = xyes; then
+ CFLAGS="$CFLAGS -DENABLE_ZEROCOPY"
+fi])
+
dnl Generate the output
AC_CONFIG_HEADER(config.h)
diff --git a/src/librtlsdr.c b/src/librtlsdr.c
index d72a0f5..213e96c 100644
--- a/src/librtlsdr.c
+++ b/src/librtlsdr.c
@@ -1751,7 +1751,7 @@ static int _rtlsdr_alloc_async_buffers(rtlsdr_dev_t *dev)
dev->xfer_buf = malloc(dev->xfer_buf_num * sizeof(unsigned char *));
memset(dev->xfer_buf, 0, dev->xfer_buf_num * sizeof(unsigned char *));
-#if defined (__linux__) && LIBUSB_API_VERSION >= 0x01000105
+#if defined(ENABLE_ZEROCOPY) && defined (__linux__) && LIBUSB_API_VERSION >= 0x01000105
fprintf(stderr, "Allocating %d zero-copy buffers\n", dev->xfer_buf_num);
dev->use_zerocopy = 1;