# vim: set ft=kconfig
menu "Qualcomm IPQ Options"

comment "Kernel build options"

choice KERNEL_IPQ_MEM_PROFILE
	prompt "IPQ memory profile"
	default IPQ_MEM_PROFILE_1024

	config IPQ_MEM_PROFILE_1024
			bool "1024"
	config IPQ_MEM_PROFILE_512
			bool "512"
	config IPQ_MEM_PROFILE_256
			bool "256"
endchoice

config KERNEL_IPQ_MEM_PROFILE
	int
	default 1024 if IPQ_MEM_PROFILE_1024
	default 512 if IPQ_MEM_PROFILE_512
	default 256 if IPQ_MEM_PROFILE_256

	help
	  This option select memory profile to used, which defines
	  the reserved memory configuration used in device tree

config KERNEL_SKB_RECYCLER
	bool "Generic SKB recycling"
	default y if KERNEL_IPQ_MEM_PROFILE > 256

choice KERNEL_SKB_RECYCLE_SIZE
	prompt "SKB recycler size"
	default SKB_RECYCLE_SIZE_2304
	default SKB_RECYCLE_SIZE_1856 if KERNEL_IPQ_MEM_PROFILE < 1024

	depends on KERNEL_SKB_RECYCLER
	config SKB_RECYCLE_SIZE_1856
			bool "1856"
	config SKB_RECYCLE_SIZE_2304
			bool "2304"
endchoice

config KERNEL_SKB_RECYCLE_SIZE
	int
	depends on KERNEL_SKB_RECYCLER
	default 2304 if SKB_RECYCLE_SIZE_2304
	default 1856 if SKB_RECYCLE_SIZE_1856

	help
	  SKB recycler default size

config KERNEL_SKB_RECYCLER_MULTI_CPU
	bool "Cross-CPU recycling for CPU-locked workloads"
	depends on KERNEL_SKB_RECYCLER
	default y

config KERNEL_SKB_RECYCLER_PREALLOC
	bool "Enable preallocation of SKBs (For SFE not NSS)"
	depends on KERNEL_SKB_RECYCLER
	default n
	help
	  NOTE: This is primarily for platforms utilizing SFE (Shortcut Forwarding Engine)
	  and not NSS (Network Subsystem) offload.

	  NSS offload platforms mostly utilize the SKB recycling feature when managing memory.
	  Mostly when to "reclaim" it.

	  This option enables preallocation of SKBs.
	  The default is '16384' which means 16384 x 4096 (Size of SKB) = 64MB.

config KERNEL_SKB_RECYCLE_MAX_PREALLOC_SKBS
	int "Number of SKBs to be preallocated"
	depends on KERNEL_SKB_RECYCLER_PREALLOC
	default 16384

config KERNEL_SKB_FIXED_SIZE_2K
	bool "SKB size fixed at 2K"
	default n
	default y if KERNEL_IPQ_MEM_PROFILE < 512
	help
	  SKB size fixed at 2K. Primarily for platforms with less than 512MB memory.

config KERNEL_ALLOC_SKB_PAGE_FRAG_DISABLE
	depends on KERNEL_SKB_RECYCLER
	bool "Disable alloc skb page frag"
	default n

choice KERNEL_PREEMPTION
	prompt "Kernel preemption level"
	default KERNEL_PREEMPT

config KERNEL_PREEMPT_NONE
	bool "No Forced Preemption (Server)"
	help
	  This is the traditional Linux preemption model, geared towards
	  throughput. It will still provide good latencies most of the time,
	  but there are no guarantees and occasional longer delays are
	  possible.

	  Select this option if you are building a kernel for a server or
	  scientific/computation system, or if you want to maximize the
	  raw processing power of the kernel, irrespective of scheduling
	  latencies.

config KERNEL_PREEMPT_NONE_BUILD
	depends on KERNEL_PREEMPT_NONE
	bool
	default y

config KERNEL_PREEMPT
	bool "Preemptible Kernel (Low-Latency)"
	help
	  This option reduces the latency of the kernel by making
	  all kernel code (that is not executing in a critical section)
	  preemptible.  This allows reaction to interactive events by
	  permitting a low priority process to be preempted involuntarily
	  even if it is in kernel mode executing a system call and would
	  otherwise not be about to reach a natural preemption point.
	  This allows applications to run more 'smoothly' even when the
	  system is under load, at the cost of slightly lower throughput
	  and a slight runtime overhead to kernel code.

	  Select this if you are building a kernel for a desktop or
	  embedded system with latency requirements in the milliseconds
	  range.

if KERNEL_PREEMPT
	config KERNEL_PREEMPT_RCU
	bool "Preemptible RCU"
	default y
	select KERNEL_PREEMPT_COUNT
	help
	  This option selects the RCU implementation that is
	  designed for very large SMP systems with hundreds or
	  thousands of CPUs, but for which real-time response
	  is also required.  It also scales down nicely to
	  smaller systems.

	  Select this option if you are unsure.

endif
endchoice

endmenu
