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.
This commit is contained in:
Steve Markgraf 2019-07-16 23:45:57 +02:00
parent be1d1206bf
commit 81833a1cf6
3 changed files with 15 additions and 1 deletions

View File

@ -126,6 +126,14 @@ else (DETACH_KERNEL_DRIVER)
message (STATUS "Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON to enable") message (STATUS "Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON to enable")
endif (DETACH_KERNEL_DRIVER) 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 # Add subdirectories
######################################################################## ########################################################################

View File

@ -101,6 +101,12 @@ AC_ARG_ENABLE(driver-detach,
CFLAGS="$CFLAGS -DDETACH_KERNEL_DRIVER" CFLAGS="$CFLAGS -DDETACH_KERNEL_DRIVER"
fi]) 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 dnl Generate the output
AC_CONFIG_HEADER(config.h) AC_CONFIG_HEADER(config.h)

View File

@ -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 *)); dev->xfer_buf = malloc(dev->xfer_buf_num * sizeof(unsigned char *));
memset(dev->xfer_buf, 0, 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); fprintf(stderr, "Allocating %d zero-copy buffers\n", dev->xfer_buf_num);
dev->use_zerocopy = 1; dev->use_zerocopy = 1;