Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Oct 2010 02:04:36 +0000 (19:04 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Oct 2010 02:04:36 +0000 (19:04 -0700)
* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx: (48 commits)
  DMAENGINE: move COH901318 to arch_initcall
  dma: imx-dma: fix signedness bug
  dma/timberdale: simplify conditional
  ste_dma40: remove channel_type
  ste_dma40: remove enum for endianess
  ste_dma40: remove TIM_FOR_LINK option
  ste_dma40: move mode_opt to separate config
  ste_dma40: move channel mode to a separate field
  ste_dma40: move priority to separate field
  ste_dma40: add variable to indicate valid dma_cfg
  async_tx: make async_tx channel switching opt-in
  move async raid6 test to lib/Kconfig.debug
  dmaengine: Add Freescale i.MX1/21/27 DMA driver
  intel_mid_dma: change the slave interface
  intel_mid_dma: fix the WARN_ONs
  intel_mid_dma: Add sg list support to DMA driver
  intel_mid_dma: Allow DMAC2 to share interrupt
  intel_mid_dma: Allow IRQ sharing
  intel_mid_dma: Add runtime PM support
  DMAENGINE: define a dummy filter function for ste_dma40
  ...

1  2 
arch/arm/mach-ux500/devices-db8500.c
arch/arm/plat-nomadik/include/plat/ste_dma40.h
drivers/dma/coh901318.c
lib/Kconfig.debug

@@@ -110,82 -110,6 +110,82 @@@ struct platform_device u8500_i2c4_devic
        .num_resources  = ARRAY_SIZE(u8500_i2c4_resources),
  };
  
 +/*
 + * SD/MMC
 + */
 +
 +struct amba_device u8500_sdi0_device = {
 +      .dev            = {
 +              .init_name = "sdi0",
 +      },
 +      .res            = {
 +              .start  = U8500_SDI0_BASE,
 +              .end    = U8500_SDI0_BASE + SZ_4K - 1,
 +              .flags  = IORESOURCE_MEM,
 +      },
 +      .irq            = {IRQ_DB8500_SDMMC0, NO_IRQ},
 +};
 +
 +struct amba_device u8500_sdi1_device = {
 +      .dev            = {
 +              .init_name = "sdi1",
 +      },
 +      .res            = {
 +              .start  = U8500_SDI1_BASE,
 +              .end    = U8500_SDI1_BASE + SZ_4K - 1,
 +              .flags  = IORESOURCE_MEM,
 +      },
 +      .irq            = {IRQ_DB8500_SDMMC1, NO_IRQ},
 +};
 +
 +struct amba_device u8500_sdi2_device = {
 +      .dev            = {
 +              .init_name = "sdi2",
 +      },
 +      .res            = {
 +              .start  = U8500_SDI2_BASE,
 +              .end    = U8500_SDI2_BASE + SZ_4K - 1,
 +              .flags  = IORESOURCE_MEM,
 +      },
 +      .irq            = {IRQ_DB8500_SDMMC2, NO_IRQ},
 +};
 +
 +struct amba_device u8500_sdi3_device = {
 +      .dev            = {
 +              .init_name = "sdi3",
 +      },
 +      .res            = {
 +              .start  = U8500_SDI3_BASE,
 +              .end    = U8500_SDI3_BASE + SZ_4K - 1,
 +              .flags  = IORESOURCE_MEM,
 +      },
 +      .irq            = {IRQ_DB8500_SDMMC3, NO_IRQ},
 +};
 +
 +struct amba_device u8500_sdi4_device = {
 +      .dev            = {
 +              .init_name = "sdi4",
 +      },
 +      .res            = {
 +              .start  = U8500_SDI4_BASE,
 +              .end    = U8500_SDI4_BASE + SZ_4K - 1,
 +              .flags  = IORESOURCE_MEM,
 +      },
 +      .irq            = {IRQ_DB8500_SDMMC4, NO_IRQ},
 +};
 +
 +struct amba_device u8500_sdi5_device = {
 +      .dev            = {
 +              .init_name = "sdi5",
 +      },
 +      .res            = {
 +              .start  = U8500_SDI5_BASE,
 +              .end    = U8500_SDI5_BASE + SZ_4K - 1,
 +              .flags  = IORESOURCE_MEM,
 +      },
 +      .irq            = {IRQ_DB8500_SDMMC5, NO_IRQ},
 +};
 +
  static struct resource dma40_resources[] = {
        [0] = {
                .start = U8500_DMA_BASE,
  
  /* Default configuration for physcial memcpy */
  struct stedma40_chan_cfg dma40_memcpy_conf_phy = {
-       .channel_type = (STEDMA40_CHANNEL_IN_PHY_MODE |
-                        STEDMA40_LOW_PRIORITY_CHANNEL |
-                        STEDMA40_PCHAN_BASIC_MODE),
+       .mode = STEDMA40_MODE_PHYSICAL,
        .dir = STEDMA40_MEM_TO_MEM,
  
-       .src_info.endianess = STEDMA40_LITTLE_ENDIAN,
        .src_info.data_width = STEDMA40_BYTE_WIDTH,
        .src_info.psize = STEDMA40_PSIZE_PHY_1,
        .src_info.flow_ctrl = STEDMA40_NO_FLOW_CTRL,
  
-       .dst_info.endianess = STEDMA40_LITTLE_ENDIAN,
        .dst_info.data_width = STEDMA40_BYTE_WIDTH,
        .dst_info.psize = STEDMA40_PSIZE_PHY_1,
        .dst_info.flow_ctrl = STEDMA40_NO_FLOW_CTRL,
  };
  /* Default configuration for logical memcpy */
  struct stedma40_chan_cfg dma40_memcpy_conf_log = {
-       .channel_type = (STEDMA40_CHANNEL_IN_LOG_MODE |
-                        STEDMA40_LOW_PRIORITY_CHANNEL |
-                        STEDMA40_LCHAN_SRC_LOG_DST_LOG |
-                        STEDMA40_NO_TIM_FOR_LINK),
        .dir = STEDMA40_MEM_TO_MEM,
  
-       .src_info.endianess = STEDMA40_LITTLE_ENDIAN,
        .src_info.data_width = STEDMA40_BYTE_WIDTH,
        .src_info.psize = STEDMA40_PSIZE_LOG_1,
        .src_info.flow_ctrl = STEDMA40_NO_FLOW_CTRL,
  
-       .dst_info.endianess = STEDMA40_LITTLE_ENDIAN,
        .dst_info.data_width = STEDMA40_BYTE_WIDTH,
        .dst_info.psize = STEDMA40_PSIZE_LOG_1,
        .dst_info.flow_ctrl = STEDMA40_NO_FLOW_CTRL,
   * Mapping between destination event lines and physical device address.
   * The event line is tied to a device and therefor the address is constant.
   */
 -static const dma_addr_t dma40_tx_map[STEDMA40_NR_DEV];
 +static const dma_addr_t dma40_tx_map[DB8500_DMA_NR_DEV];
  
  /* Mapping between source event lines and physical device address */
 -static const dma_addr_t dma40_rx_map[STEDMA40_NR_DEV];
 +static const dma_addr_t dma40_rx_map[DB8500_DMA_NR_DEV];
  
  /* Reserved event lines for memcpy only */
  static int dma40_memcpy_event[] = {
 -      STEDMA40_MEMCPY_TX_0,
 -      STEDMA40_MEMCPY_TX_1,
 -      STEDMA40_MEMCPY_TX_2,
 -      STEDMA40_MEMCPY_TX_3,
 -      STEDMA40_MEMCPY_TX_4,
 -      STEDMA40_MEMCPY_TX_5,
 +      DB8500_DMA_MEMCPY_TX_0,
 +      DB8500_DMA_MEMCPY_TX_1,
 +      DB8500_DMA_MEMCPY_TX_2,
 +      DB8500_DMA_MEMCPY_TX_3,
 +      DB8500_DMA_MEMCPY_TX_4,
 +      DB8500_DMA_MEMCPY_TX_5,
  };
  
  static struct stedma40_platform_data dma40_plat_data = {
 -      .dev_len = STEDMA40_NR_DEV,
 +      .dev_len = DB8500_DMA_NR_DEV,
        .dev_rx = dma40_rx_map,
        .dev_tx = dma40_tx_map,
        .memcpy = dma40_memcpy_event,
        .memcpy_len = ARRAY_SIZE(dma40_memcpy_event),
        .memcpy_conf_phy = &dma40_memcpy_conf_phy,
        .memcpy_conf_log = &dma40_memcpy_conf_log,
-       .llis_per_log = 8,
        .disabled_channels = {-1},
  };
  
@@@ -292,23 -205,3 +281,23 @@@ void dma40_u8500ed_fixup(void
        dma40_resources[1].start = U8500_DMA_LCPA_BASE_ED;
        dma40_resources[1].end = U8500_DMA_LCPA_BASE_ED + 2 * SZ_1K - 1;
  }
 +
 +struct resource keypad_resources[] = {
 +      [0] = {
 +              .start = U8500_SKE_BASE,
 +              .end = U8500_SKE_BASE + SZ_4K - 1,
 +              .flags = IORESOURCE_MEM,
 +      },
 +      [1] = {
 +              .start = IRQ_DB8500_KB,
 +              .end = IRQ_DB8500_KB,
 +              .flags = IORESOURCE_IRQ,
 +      },
 +};
 +
 +struct platform_device ux500_ske_keypad_device = {
 +      .name = "nmk-ske-keypad",
 +      .id = -1,
 +      .num_resources = ARRAY_SIZE(keypad_resources),
 +      .resource = keypad_resources,
 +};
@@@ -1,10 -1,8 +1,8 @@@
  /*
-  * arch/arm/plat-nomadik/include/plat/ste_dma40.h
-  *
-  * Copyright (C) ST-Ericsson 2007-2010
+  * Copyright (C) ST-Ericsson SA 2007-2010
+  * Author: Per Forlin <per.forlin@stericsson.com> for ST-Ericsson
+  * Author: Jonas Aaberg <jonas.aberg@stericsson.com> for ST-Ericsson
   * License terms: GNU General Public License (GPL) version 2
-  * Author: Per Friden <per.friden@stericsson.com>
-  * Author: Jonas Aaberg <jonas.aberg@stericsson.com>
   */
  
  
  #include <linux/dmaengine.h>
  #include <linux/workqueue.h>
  #include <linux/interrupt.h>
 -#include <linux/dmaengine.h>
  
  /* dev types for memcpy */
  #define STEDMA40_DEV_DST_MEMORY (-1)
  #define       STEDMA40_DEV_SRC_MEMORY (-1)
  
- /*
-  * Description of bitfields of channel_type variable is available in
-  * the info structure.
-  */
+ enum stedma40_mode {
+       STEDMA40_MODE_LOGICAL = 0,
+       STEDMA40_MODE_PHYSICAL,
+       STEDMA40_MODE_OPERATION,
+ };
  
- /* Priority */
- #define STEDMA40_INFO_PRIO_TYPE_POS 2
- #define STEDMA40_HIGH_PRIORITY_CHANNEL (0x1 << STEDMA40_INFO_PRIO_TYPE_POS)
- #define STEDMA40_LOW_PRIORITY_CHANNEL (0x2 << STEDMA40_INFO_PRIO_TYPE_POS)
- /* Mode  */
- #define STEDMA40_INFO_CH_MODE_TYPE_POS 6
- #define STEDMA40_CHANNEL_IN_PHY_MODE (0x1 << STEDMA40_INFO_CH_MODE_TYPE_POS)
- #define STEDMA40_CHANNEL_IN_LOG_MODE (0x2 << STEDMA40_INFO_CH_MODE_TYPE_POS)
- #define STEDMA40_CHANNEL_IN_OPER_MODE (0x3 << STEDMA40_INFO_CH_MODE_TYPE_POS)
- /* Mode options */
- #define STEDMA40_INFO_CH_MODE_OPT_POS 8
- #define STEDMA40_PCHAN_BASIC_MODE (0x1 << STEDMA40_INFO_CH_MODE_OPT_POS)
- #define STEDMA40_PCHAN_MODULO_MODE (0x2 << STEDMA40_INFO_CH_MODE_OPT_POS)
- #define STEDMA40_PCHAN_DOUBLE_DST_MODE (0x3 << STEDMA40_INFO_CH_MODE_OPT_POS)
- #define STEDMA40_LCHAN_SRC_PHY_DST_LOG (0x1 << STEDMA40_INFO_CH_MODE_OPT_POS)
- #define STEDMA40_LCHAN_SRC_LOG_DST_PHS (0x2 << STEDMA40_INFO_CH_MODE_OPT_POS)
- #define STEDMA40_LCHAN_SRC_LOG_DST_LOG (0x3 << STEDMA40_INFO_CH_MODE_OPT_POS)
- /* Interrupt */
- #define STEDMA40_INFO_TIM_POS 10
- #define STEDMA40_NO_TIM_FOR_LINK (0x0 << STEDMA40_INFO_TIM_POS)
- #define STEDMA40_TIM_FOR_LINK (0x1 << STEDMA40_INFO_TIM_POS)
- /* End of channel_type configuration */
+ enum stedma40_mode_opt {
+       STEDMA40_PCHAN_BASIC_MODE = 0,
+       STEDMA40_LCHAN_SRC_LOG_DST_LOG = 0,
+       STEDMA40_PCHAN_MODULO_MODE,
+       STEDMA40_PCHAN_DOUBLE_DST_MODE,
+       STEDMA40_LCHAN_SRC_PHY_DST_LOG,
+       STEDMA40_LCHAN_SRC_LOG_DST_PHY,
+ };
  
  #define STEDMA40_ESIZE_8_BIT  0x0
  #define STEDMA40_ESIZE_16_BIT 0x1
  #define STEDMA40_PSIZE_LOG_8  STEDMA40_PSIZE_PHY_8
  #define STEDMA40_PSIZE_LOG_16 STEDMA40_PSIZE_PHY_16
  
+ /* Maximum number of possible physical channels */
+ #define STEDMA40_MAX_PHYS 32
  enum stedma40_flow_ctrl {
        STEDMA40_NO_FLOW_CTRL,
        STEDMA40_FLOW_CTRL,
  };
  
- enum stedma40_endianess {
-       STEDMA40_LITTLE_ENDIAN,
-       STEDMA40_BIG_ENDIAN
- };
  enum stedma40_periph_data_width {
        STEDMA40_BYTE_WIDTH = STEDMA40_ESIZE_8_BIT,
        STEDMA40_HALFWORD_WIDTH = STEDMA40_ESIZE_16_BIT,
        STEDMA40_DOUBLEWORD_WIDTH = STEDMA40_ESIZE_64_BIT
  };
  
- struct stedma40_half_channel_info {
-       enum stedma40_endianess endianess;
-       enum stedma40_periph_data_width data_width;
-       int psize;
-       enum stedma40_flow_ctrl flow_ctrl;
- };
  enum stedma40_xfer_dir {
-       STEDMA40_MEM_TO_MEM,
+       STEDMA40_MEM_TO_MEM = 1,
        STEDMA40_MEM_TO_PERIPH,
        STEDMA40_PERIPH_TO_MEM,
        STEDMA40_PERIPH_TO_PERIPH
  };
  
  
+ /**
+  * struct stedma40_chan_cfg - dst/src channel configuration
+  *
+  * @big_endian: true if the src/dst should be read as big endian
+  * @data_width: Data width of the src/dst hardware
+  * @p_size: Burst size
+  * @flow_ctrl: Flow control on/off.
+  */
+ struct stedma40_half_channel_info {
+       bool big_endian;
+       enum stedma40_periph_data_width data_width;
+       int psize;
+       enum stedma40_flow_ctrl flow_ctrl;
+ };
  /**
   * struct stedma40_chan_cfg - Structure to be filled by client drivers.
   *
   * @dir: MEM 2 MEM, PERIPH 2 MEM , MEM 2 PERIPH, PERIPH 2 PERIPH
-  * @channel_type: priority, mode, mode options and interrupt configuration.
+  * @high_priority: true if high-priority
+  * @mode: channel mode: physical, logical, or operation
+  * @mode_opt: options for the chosen channel mode
   * @src_dev_type: Src device type
   * @dst_dev_type: Dst device type
   * @src_info: Parameters for dst half channel
   * @dst_info: Parameters for dst half channel
-  * @pre_transfer_data: Data to be passed on to the pre_transfer() function.
-  * @pre_transfer: Callback used if needed before preparation of transfer.
-  * Only called if device is set. size of bytes to transfer
-  * (in case of multiple element transfer size is size of the first element).
   *
   *
   * This structure has to be filled by the client drivers.
   */
  struct stedma40_chan_cfg {
        enum stedma40_xfer_dir                   dir;
-       unsigned int                             channel_type;
+       bool                                     high_priority;
+       enum stedma40_mode                       mode;
+       enum stedma40_mode_opt                   mode_opt;
        int                                      src_dev_type;
        int                                      dst_dev_type;
        struct stedma40_half_channel_info        src_info;
        struct stedma40_half_channel_info        dst_info;
-       void                                    *pre_transfer_data;
-       int (*pre_transfer)                     (struct dma_chan *chan,
-                                                void *data,
-                                                int size);
  };
  
  /**
   * @memcpy_len: length of memcpy
   * @memcpy_conf_phy: default configuration of physical channel memcpy
   * @memcpy_conf_log: default configuration of logical channel memcpy
-  * @llis_per_log: number of max linked list items per logical channel
   * @disabled_channels: A vector, ending with -1, that marks physical channels
   * that are for different reasons not available for the driver.
   */
@@@ -158,23 -141,10 +140,10 @@@ struct stedma40_platform_data 
        u32                              memcpy_len;
        struct stedma40_chan_cfg        *memcpy_conf_phy;
        struct stedma40_chan_cfg        *memcpy_conf_log;
-       unsigned int                     llis_per_log;
-       int                              disabled_channels[8];
+       int                              disabled_channels[STEDMA40_MAX_PHYS];
  };
  
- /**
-  * setdma40_set_psize() - Used for changing the package size of an
-  * already configured dma channel.
-  *
-  * @chan: dmaengine handle
-  * @src_psize: new package side for src. (STEDMA40_PSIZE*)
-  * @src_psize: new package side for dst. (STEDMA40_PSIZE*)
-  *
-  * returns 0 on ok, otherwise negative error number.
-  */
- int stedma40_set_psize(struct dma_chan *chan,
-                      int src_psize,
-                      int dst_psize);
+ #ifdef CONFIG_STE_DMA40
  
  /**
   * stedma40_filter() - Provides stedma40_chan_cfg to the
@@@ -237,4 -207,21 +206,21 @@@ dma_async_tx_descriptor *stedma40_slave
                                                  direction, flags);
  }
  
+ #else
+ static inline bool stedma40_filter(struct dma_chan *chan, void *data)
+ {
+       return false;
+ }
+ static inline struct
+ dma_async_tx_descriptor *stedma40_slave_mem(struct dma_chan *chan,
+                                           dma_addr_t addr,
+                                           unsigned int size,
+                                           enum dma_data_direction direction,
+                                           unsigned long flags)
+ {
+       return NULL;
+ }
+ #endif
  #endif
diff --combined drivers/dma/coh901318.c
@@@ -157,7 -157,6 +157,7 @@@ static const struct file_operations coh
        .owner          = THIS_MODULE,
        .open           = coh901318_debugfs_open,
        .read           = coh901318_debugfs_read,
 +      .llseek         = default_llseek,
  };
  
  
@@@ -1610,7 -1609,7 +1610,7 @@@ int __init coh901318_init(void
  {
        return platform_driver_probe(&coh901318_driver, coh901318_probe);
  }
subsys_initcall(coh901318_init);
arch_initcall(coh901318_init);
  
  void __exit coh901318_exit(void)
  {
diff --combined lib/Kconfig.debug
@@@ -317,14 -317,6 +317,14 @@@ config DEBUG_OBJECTS_RCU_HEA
        help
          Enable this to turn on debugging of RCU list heads (call_rcu() usage).
  
 +config DEBUG_OBJECTS_PERCPU_COUNTER
 +      bool "Debug percpu counter objects"
 +      depends on DEBUG_OBJECTS
 +      help
 +        If you say Y here, additional code will be inserted into the
 +        percpu counter routines to track the life time of percpu counter
 +        objects and validate the percpu counter operations.
 +
  config DEBUG_OBJECTS_ENABLE_DEFAULT
        int "debug_objects bootup default value (0-1)"
          range 0 1
@@@ -361,7 -353,7 +361,7 @@@ config SLUB_DEBUG_O
  config SLUB_STATS
        default n
        bool "Enable SLUB performance statistics"
 -      depends on SLUB && SLUB_DEBUG && SYSFS
 +      depends on SLUB && SYSFS
        help
          SLUB statistics are useful to debug SLUBs allocation behavior in
          order find ways to optimize the allocator. This should never be
  config DEBUG_KMEMLEAK
        bool "Kernel memory leak detector"
        depends on DEBUG_KERNEL && EXPERIMENTAL && !MEMORY_HOTPLUG && \
 -              (X86 || ARM || PPC || S390 || SPARC64 || SUPERH || MICROBLAZE)
 +              (X86 || ARM || PPC || S390 || SPARC64 || SUPERH || MICROBLAZE || TILE)
  
        select DEBUG_FS if SYSFS
        select STACKTRACE if STACKTRACE_SUPPORT
@@@ -469,15 -461,6 +469,15 @@@ config DEBUG_MUTEXE
         This feature allows mutex semantics violations to be detected and
         reported.
  
 +config BKL
 +      bool "Big Kernel Lock" if (SMP || PREEMPT)
 +      default y
 +      help
 +        This is the traditional lock that is used in old code instead
 +        of proper locking. All drivers that use the BKL should depend
 +        on this symbol.
 +        Say Y here unless you are working on removing the BKL.
 +
  config DEBUG_LOCK_ALLOC
        bool "Lock debugging: detect incorrect freeing of live locks"
        depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
@@@ -499,7 -482,6 +499,7 @@@ config PROVE_LOCKIN
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
        select DEBUG_LOCK_ALLOC
 +      select TRACE_IRQFLAGS
        default n
        help
         This feature enables the kernel to prove that all locking
@@@ -557,23 -539,6 +557,23 @@@ config PROVE_RCU_REPEATEDL
         disabling, allowing multiple RCU-lockdep warnings to be printed
         on a single reboot.
  
 +       Say Y to allow multiple RCU-lockdep warnings per boot.
 +
 +       Say N if you are unsure.
 +
 +config SPARSE_RCU_POINTER
 +      bool "RCU debugging: sparse-based checks for pointer usage"
 +      default n
 +      help
 +       This feature enables the __rcu sparse annotation for
 +       RCU-protected pointers.  This annotation will cause sparse
 +       to flag any non-RCU used of annotated pointers.  This can be
 +       helpful when debugging RCU usage.  Please note that this feature
 +       is not intended to enforce code cleanliness; it is instead merely
 +       a debugging aid.
 +
 +       Say Y to make sparse flag questionable use of RCU-protected pointers
 +
         Say N if you are unsure.
  
  config LOCKDEP
@@@ -614,10 -579,11 +614,10 @@@ config DEBUG_LOCKDE
          of more runtime overhead.
  
  config TRACE_IRQFLAGS
 -      depends on DEBUG_KERNEL
        bool
 -      default y
 -      depends on TRACE_IRQFLAGS_SUPPORT
 -      depends on PROVE_LOCKING
 +      help
 +        Enables hooks to interrupt enabling and disabling for
 +        either tracing or lock debugging.
  
  config DEBUG_SPINLOCK_SLEEP
        bool "Spinlock debugging: sleep-inside-spinlock checking"
@@@ -748,15 -714,6 +748,15 @@@ config DEBUG_LIS
  
          If unsure, say N.
  
 +config TEST_LIST_SORT
 +      bool "Linked list sorting test"
 +      depends on DEBUG_KERNEL
 +      help
 +        Enable this to turn on 'list_sort()' function test. This test is
 +        executed only once during system boot, so affects only boot time.
 +
 +        If unsure, say N.
 +
  config DEBUG_SG
        bool "Debug SG table operations"
        depends on DEBUG_KERNEL
@@@ -875,30 -832,6 +875,30 @@@ config RCU_CPU_STALL_DETECTO
  
          Say Y if you are unsure.
  
 +config RCU_CPU_STALL_TIMEOUT
 +      int "RCU CPU stall timeout in seconds"
 +      depends on RCU_CPU_STALL_DETECTOR
 +      range 3 300
 +      default 60
 +      help
 +        If a given RCU grace period extends more than the specified
 +        number of seconds, a CPU stall warning is printed.  If the
 +        RCU grace period persists, additional CPU stall warnings are
 +        printed at more widely spaced intervals.
 +
 +config RCU_CPU_STALL_DETECTOR_RUNNABLE
 +      bool "RCU CPU stall checking starts automatically at boot"
 +      depends on RCU_CPU_STALL_DETECTOR
 +      default y
 +      help
 +        If set, start checking for RCU CPU stalls immediately on
 +        boot.  Otherwise, RCU CPU stall checking must be manually
 +        enabled.
 +
 +        Say Y if you are unsure.
 +
 +        Say N if you wish to suppress RCU CPU stall checking during boot.
 +
  config RCU_CPU_STALL_VERBOSE
        bool "Print additional per-task information for RCU_CPU_STALL_DETECTOR"
        depends on RCU_CPU_STALL_DETECTOR && TREE_PREEMPT_RCU
@@@ -1217,6 -1150,19 +1217,19 @@@ config ATOMIC64_SELFTES
  
          If unsure, say N.
  
+ config ASYNC_RAID6_TEST
+       tristate "Self test for hardware accelerated raid6 recovery"
+       depends on ASYNC_RAID6_RECOV
+       select ASYNC_MEMCPY
+       ---help---
+         This is a one-shot self test that permutes through the
+         recovery of all the possible two disk failure scenarios for a
+         N-disk array.  Recovery is performed with the asynchronous
+         raid6 recovery routines, and will optionally use an offload
+         engine if one is available.
+         If unsure, say N.
  source "samples/Kconfig"
  
  source "lib/Kconfig.kgdb"