[KERNEL][3.4.110][LP-5.1][ION] K^Kernel 3.4.110 v4.0 for LP 5.1 [24/01/2016][EOL]

Search This thread

Christopher83

Inactive Recognized Developer
Sep 2, 2012
1,446
12,703
Milan
attachment.php


In this thread you may find my customized kernel 3.4.x for LP-5.1 rom (CM 12.1 and derivatives) that use ION+PMEM ADSP memory allocations.
Of course, your feedback, as always, are welcome and certainly valuable.


The main features are the following:
- Kernel 3.4.x
- Kernel based on more updated kk_2.7-stable branch of CAF (Code Aurora Forum)
- Sources synched with cm-12.1 repo branch of DevCon Team
- Built with my custom Linaro GCC 5.2.1-2015.11 toolchain optimized for Cortex-A
- Built with Cortex-A8 and NEON VFP optimization flags (both kernel and modules)
- Built with -O3 optimization flag (both kernel and modules)
- CPU overclockable up to 1824 MHz
- CPU frequencies undervolted (UV version) or extremely undervolted (EXUV version)
- CPU voltage control VDD sys interface (click for more details)
- Dynamic memory allocation of ION heaps through CMA (Contiguous Memory Allocator)
- Dynamic memory allocation of PMEM ADSP heap through CMA (Contiguous Memory Allocator)
- Approximately 426MB of free RAM
- Init.d support
- Fast Charge support (default disabled, click for more details)
- Battery Life eXtender support (default disabled, click for more details)
- Ram Console support (click for more details)
- Backlight Notification v10 (BLNv10) (click for more details)
- USB OTG support (if also implemented on rom side)
- Customizable vibration intensity (click for more details)
- Lowered display panel voltage
- Lowered touchscreen voltage
- Lowered wifi voltage
- Lowered swappiness (60 -> 45)
- Increased CPU frequency during boot
- Optimized AES and SHA1 routines for ARM cpu architecture
- Fixed 100% battery notification after charger unplug
- Increased audio volume on board side
- Con Kolivas' CK3 Tweaks
- Optimized SLUB memory allocator
- Optimized ARM RWSEM (read/write semaphore) algorithm
- Optimized asynchronous I/O latency on solid state disks
- Disabled Gentle Fair Sleepers for better UI performance
- CIFS support on boot
- Memory compaction
- Dynamic compression of clean pagecache pages
- New display drivers from Samsung Galaxy SII
- Updated light sensor driver and display driver light sensor changes
- Updated sensor drivers
- Phantom key presses filter (click for more details)
- Dynamic FSync v1.2 (click for more details)
- Dynamic dirty page writebacks (click for more details)
- VM tweaks for performance and less battery consumption
- Customizable timeout for touchkeys backlight after a key press or touchscreen press (click for more details)
- Customizable activation status of touchkeys backlight on touchscreen press (click for more details)
- Timer slack controller (click for more details)
- Dynamic management of the minimal timer slack value during suspend/resume (click for more details)
- LowMemoryKiller management of not killable processes (click for more details)
- F2FS and exFAT support
- Additional TCP Congestion algorithms
- Updated ZRam, ZSMalloc, ZCache built-in modules

Available CPU governors:
- Adaptive
- BrazilianWax
- Conservative
- Hyper
- Intellidemand
- Interactive
- InteractiveX
- LionHeart
- LulzActive
- OnDemand (default)
- OnDemandX
- Performance
- Powersave
- SmartAssV2

Available I/O schedulers:
- BFQ
- CFQ
- Deadline
- Fiops
- Noop
- ROW (default)
- SIO
- V(R)


Kernel Downloads for LP-5.1 ION+PMEM ADSP:

K^Kernel LP-5.1 Mediafire Folder
[QRCODE]https://www.mediafire.com/folder/gp4g7m9dz5v9v[/QRCODE]
- v4.0 -
for ADC CM 12.1
and the other roms based on it
Note: You must use the TWRP recovery with new partition assignments you may find inside ADC CM 12.1 thread



Howto install the kernel:
1) Download the preferred kernel zip file to sdcard or external sdcard
2) Reboot to recovery mode
3) Flash the kernel zip file
4) Reboot the system


Kernel sources (on GitHub):



Useful info:
- Special features and sysfs settings
- Frequently asked questions



Tables:

attachment.php




Changelog:
Code:
[B]24/01/2016 - K^Kernel 3.4 v4.0 for LP-5.1 ION+PMEM ADSP[/B]
- Kernel 3.4.110
- Built with my latest custom Linaro 5.2.1-2015.11 toolchain optimized for Cortex-A
- mm: vmpressure: fix backport (credits to Dave Daynard)
- block: bfq: Squashed update from BFQ-v7r5 to BFQ-v7r8 (credits to Michael Bestas)
- ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h (credits to Behan Webster)
- msm: kgsl: Use static methods for iommu sync lock and unlock (credits to Christopher83)
- arm: crypto: Squashed reverts of crypto optimizations (credits to Christopher83)

[B]12/08/2015 - K^Kernel 3.4 v3.0 for LP-5.1 ION+PMEM ADSP[/B]
- Kernel 3.4.108
- Built with my latest custom Linaro 4.9.4-2015.06 toolchain optimized for Cortex-A8
- mm, oom: make dump_tasks public (credits to Liam Mark)
- mm: vmpressure: allow in-kernel clients to subscribe for events (credits to Vinayak Menon)
- mm: Add notifier framework for showing memory (credits to Laura Abbott)
- android/lowmemorykiller: Account for total_swapcache_pages (credits to Liam Mark)
- lowmemorykiller: Don't count swap cache pages twice (credits to Liam Mark)
- lowmemorykiller: use for_each_thread instead of buggy while_each_thread (credits to Vinayak Menon)
- lowmemorykiller: enhance debug information (credits to Liam Mark)
- lowmemorykiller: Dump out slab state information (credits to Laura Abbott)
- lowmemorykiller: Run the lowmemory notifier when killing (credits to Laura Abbott)
- lowmemorykiller: Do proper NULL checks (credits to Susheel Khiani)
- lowmemorykiller: adapt to vmpressure (credits to Vinayak Menon)

[B]08/06/2015 - K^Kernel 3.4 v2.0 for LP-5.1 ION+PMEM ADSP[/B]
- Revert "epoll: use freezable blocking call" (credits to Rafael J. Wysocki)
- suspend: Return error when pending wakeup source is found. (credits to Ruchi Kandoi)
- subsystem: CPU FREQUENCY DRIVERS- Set cpu_load calculation on current frequency (credits to rahul.khandelwal)
- cfg80211: add space after the b/w in db.txt (credits to Mihir Shete)
- usb: ks_bridge: Ignore completion error in RX path (credits to ChandanaKishori Chiluveru)
- ipv4: Missing sk_nulls_node_init() in ping_unhash(). (credits to David S. Miller)
- msm: msm_fb: wait for VSYNC instead of DMA_P for LCDC (credits to Justin Philip)
- msm: Kconfig: Disable SPARSEMEM for msm7x30 targets (credits to mikeioannina)
- video: msm: Tone down logging (credits to mikeioannina)
- Update defconfigs (credits to arco68)

[B]17/05/2015 - K^Kernel 3.4 v1.5 for LP-5.1 ION+PMEM ADSP[/B]
- ZRam reduced from 256MB to 128MB
- Ramdisk updates

[B]02/05/2015 - K^Kernel 3.4 v1.0 for LP-5.1 ION+PMEM ADSP[/B]
- Kernel 3.4.107
- Built with my latest custom Linaro 4.9.3-2015.03 toolchain optimized for Cortex-A8


Credits and Thanks to:
arco68, CastagnaIT and ivendor for their awesome work and their kernel sources
Ezekeel, Doomlord, Faux123, Stratosk, Tegrak, ErasmuX, Imoseyon, Blefish, mikeioannina and other devs I'm surely missing
CyanogenMod, Kernel.org, Code Aurora Forum, Google, Linaro GCC developers
KTulu84, Rhonin86, Smeroni68, XeLLaR* for their support in testing
Sament83, B1tt1, Dellup, Pierm, Leonbeson, Cippoz89, Marco Z., Rhonin86, modog, Ludovic D. for their donations

XDA:DevDB Information
[GT-I9001][ION] K^Kernel 3.4 for LP 5.1 ION+PMEM ADSP, Kernel for the Samsung Galaxy S Plus I9001

Contributors
Christopher83
Source Code: https://github.com/Christopher83/samsung-kernel-msm7x30/tree/cm-12.1

Kernel Special Features: Customized kernel 3.4.x for LP 5.1 rom (CM 12.1 and derivatives) with ION memory allocations

Version Information
Status: Stable
Current Stable Version: v4.0
Stable Release Date: 2016-01-24

Created 2015-05-02
Last Updated 2016-01-30
 

Attachments

  • KKernel_3.4.x_LP-5.1_ION.png
    KKernel_3.4.x_LP-5.1_ION.png
    25 KB · Views: 27,231
Last edited:

Christopher83

Inactive Recognized Developer
Sep 2, 2012
1,446
12,703
Milan
Special features and sysfs settings (Part 1):

Here you can find some useful scripts that can be used with the following described features:

Phantom Key Presses filter
This feature is an attempt to workaround a well known hardware bug of some Samsung devices.
Pratically, the high activity of the radio hardware, in particular the antenna, could cause interference on Melfas chip, which is located very close to the antenna.
This interference could induce bad interrupts that are seen by the chip as possible HOME, MENU or BACK key presses.
These phantom key presses are happening expecially in 2G mode.

The solution includes a new device module (phantom_kp_filter), which also allows the filtering parameters customization, and various changes to cypress-touchkey and pmic8xxx-keypad modules.
The phantom key presses filtering is enabled by default for incoming MENU and BACK touch keys, because for these keys is simpler to recognize a bad interrupt or an invalid key press, instead it's disabled for incoming HOME key (read the next howto infos to enable it).

I also developed a new app to better manage the filtering status and the filtering parameters customization, you can find it on this thread:

How to enable/disable the feauture and customize the filtering parameters:

The new device module allows to show the number of ignored key presses and to customize the filtering parameters by means of a sysfs interface, at the following system path: /sys/class/misc/phantom_kp_filter

The interface exposes these files:
  • home_enabled: show/edit the enable status of the phantom HOME key presses filtering (0 = disabled and 1 = enabled, disabled by default)
  • home_allowed_irqs: show/edit the allowed max number of incoming interrupts to consider a HOME key press as valid (from 1 to 32, default = 4), a lower value allows to have a more aggressive filtering, instead a higher value allows to have a more permissive filtering
  • home_report_wait: show/edit the wait time in ms before report the collected HOME key presses (from 5 to 25 ms, default = 12 ms), the key presses during this wait time are collected and reported only if the system received a number of interrupts less than or equal to the allowed max number of incoming interrupts (home_allowed_irqs parameter)
  • home_ignored_kp: show the ignored possible phantom HOME key presses
  • menuback_enabled: show/edit the enable status of the phantom MENU and BACK key presses filtering (0 = disabled, 1 = enabled, enabled by default)
  • menuback_interrupt_checks: show/edit the number of interrupt checks to be performed for the incoming MENU and BACK key presses (from 1 to 10, default = 10), a lower value is more permissive, a higher value securely avoids most of the bad interrupts
  • menuback_first_err_wait: show/edit the time in ms to wait after the first error on MENU or BACK keys if there are many invalid key errors in rapid sequence (from 50 to 1000 ms, default = 500 ms), the default value is optimal and well tested
  • menuback_last_err_wait: show/edit the time in ms to wait after the last error on MENU or BACK keys if there are many invalid key errors in rapid sequence (from 50 to 1000 ms, default = 100 ms), the default value is optimal and well tested
  • menuback_ignored_kp: show the ignored possible phantom MENU and BACK key presses
  • version: show the module version


To change the filtering parameters:
1) By downloading and using my new app PkfManager
2) By using a customized init.d script (the custom value will be always restored after a reboot, if you don't format the system partition)
- Download the script named 05pkf_alt
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Edit the file by setting your preferred filtering parameters (the downloaded script has the default filtering parameter values and enables the phantom HOME key presses filtering)
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot
3) By directly editing the files inside /sys/class/misc/phantom_kp_filter (the values you set will be lost after a reboot/shutdown)
4) By using Terminal Emulator (note that set values will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run these commands
Code:
su
echo [COLOR="Blue"][I]value[/I][/COLOR] > /sys/class/misc/phantom_kp_filter/[COLOR="Green"][I]parameter_name[/I][/COLOR]
where value is the value you want to set and parameter_name is one of the previously described editable parameters

For example, these commands will enable phantom HOME key presses filtering:
Code:
su
echo 1 > /sys/class/misc/phantom_kp_filter/home_enabled

To show the number of ignored key presses (possible phantom key presses):
1) By directly opening the files /sys/class/misc/phantom_kp_filter/home_ignored_kp and /sys/class/misc/phantom_kp_filter/menuback_ignored_kp
2) By using Terminal Emulator
- Open Terminal Emulator
- Run these commands
Code:
su
cat /sys/class/misc/phantom_kp_filter/home_ignored_kp
cat /sys/class/misc/phantom_kp_filter/menuback_ignored_kp

Customizable timeout of touchkeys backlight after press
This feature allows to set a customized timeout of touchkeys backlight after a key press or touchscreen press. The default value is 1600 ms.

How to set the timeout of touchkeys backlight:

1) By using the related setting inside System -> Advanced -> Backlight Timeout
2) By using a customized init.d script (the custom value will be always restored after a reboot, if you don't format the system partition)
- Download the script named 20backlight_timeout
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Edit the file by setting your preferred timeout (the downloaded script will set the status to 0 = disabled)
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot
3) By directly editing the file /sys/class/misc/notification/bl_timeout (the value you set will be lost after a reboot/shutdown)
4) By using Terminal Emulator (note that set values will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run these commands to set the timeout of touchkeys backlight to 1000 ms (1 second)
Code:
su
echo 1000 > /sys/class/misc/notification/bl_timeout

Customizable activation status of touchkeys backlight on touchscreen press
This feature allows to enable/disable the touchkeys backlight after a touchscreen press.

How to set the status of touchkeys backlight on touchscreen press:

1) By using the related setting inside System -> Advanced -> Backlight on Touchscreen Press
2) By using a customized init.d script (the custom value will be always restored after a reboot, if you don't format the system partition)
- Download the script named 25touchlight_status
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Edit the file by setting your preferred status(the downloaded script will set the status to 0 = disabled)
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot
3) By directly editing the file /sys/class/misc/notification/touchlight_enabled (the value you set will be lost after a reboot/shutdown)
4) By using Terminal Emulator (note that set values will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run these commands to disable the touchkeys backlight on touchscreen press
Code:
su
echo 0 > /sys/class/misc/notification/touchlight_enabled
- Or run these commands to enable the touchkeys backlight on touchscreen press
Code:
su
echo 1 > /sys/class/misc/notification/touchlight_enabled

CPU voltage control VDD sys interface
This feature allows to customize the voltage assumed by each cpu scaling frequency.
It could be useful if you'd like to decrease one or more voltages for battery saving purposes (undervolting), or to increase/adjust them to prevent phone freezes (overvolting).

How to customize the voltages:

1) By downloading and using Trickster MOD or IncrediControl and changing the voltages table inside the SVS tab
2) By using customized init.d scripts (the custom values will be always restored after a reboot, if you don't format the system partition)
- Download one of the script named 01vdd_levels*
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Edit the file by setting your customized voltages, where each line has this syntax
Code:
echo "[I][B][COLOR="Blue"]cpu_freq_HZ[/COLOR][/B][/I] [I][COLOR="SeaGreen"][B]mV[/B][/COLOR][/I]" > /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels
cpu_freq_HZ is the cpu frequency in Hz you'd like to change
mV is the voltage you want to set

For example, the following line means that when the cpu frequency is 1516800 Hz = 1516 MHz, the voltage used will be 1175 mV
Code:
echo "1516800 1175" > /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot
3) By using Terminal Emulator (note that the values you set will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run these commands
Code:
su
# Run a command for each cpu frequency voltage you'd like to change
echo "[I][B][COLOR="Blue"]cpu_freq_HZ[/COLOR][/B][/I] [I][COLOR="SeaGreen"][B]mV[/B][/COLOR][/I]" > /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels
cpu_freq_HZ is the cpu frequency in Hz you'd like to change
mV is the voltage you want to set

For example, the following line means that when the cpu frequency is 1516800 Hz = 1516 MHz, the voltage used will be 1175 mV
Code:
echo "1516800 1175" > /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels

Alternative Extreme Undervolted (ExUV) settings
If after overclocking your I9001 you noticed some freezes when on ExUV kernel builds, you may use an alternative extremely undervolted setting with the init.d script you can find here: 01vdd_levels_alt_exuv
- Download the script
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot


Customized vibration intensity
This feature has been developed by CastagnaIT and allows to set a customized vibration intensity (121 is the default stock value).
It could be useful if you don't like the stock vibration intensity and you'd like to have a lower / stronger vibration.
The setting will affect the haptic feedback and the notification vibration intensity.

How to set a customized vibration intensity:

1) By using the related setting inside System->Advanced->Vibration (only on CM 10 Beta 4 and next releases)
2) By using a customized init.d script (the custom value will be always restored after a reboot, if you don't format the system partition)
- Download the script named 10vibetonz
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Edit the file by setting your preferred vibration intensity (the downloaded script will set the vibration intensity to 70)
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot
3) By directly editing the file /sys/class/vibetonz/immDuty/pwmvalue_intensity (the value you set will be lost after a reboot/shutdown)
4) By using Terminal Emulator (note that set values will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run these commands (changing the intensity value = 70 with the preferred one)
Code:
su
echo 70 > /sys/class/vibetonz/immDuty/pwmvalue_intensity

Backlight Notification V10 (BLNv10)
This feature allows to notify you of missing calls, messages, emails, etc... by lighting up or blinking the Menu and Back buttons.
With BLNv10 enabled you don't need to unlock the screen to see if you have new notifications.

How to configure the BLNv10:

1) By using new AriesParts (Advanced Settings) or by downloading and using BLN Control Free, BLN Control Pro or NsTools
2) By directly editing the file /sys/class/misc/backlightnotification/enabled and setting 1 to enable the feature, 0 to disable it (note that set value will be lost after a reboot/shutdown)
3) By using Terminal Emulator (note that set value will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run this command to enable the feature
Code:
su
echo 1 > /sys/class/misc/backlightnotification/enabled
- Run, instead, this command to disable the feature
Code:
su
echo 0 > /sys/class/misc/backlightnotification/enabled

Work in progress (init.d, blinking and other settings)...


Force Fast Charge
This feature allows you to force AC charging for any charger that is detected as USB (eg. PC USB ports, USB Car Chargers) and pull the full current the charger can support, in such a way as to speed up the time required for a complete battery recharge.
By enabling this feature, the USB / ADB data transfers will be disabled (security limitation to protect your data).

How to enable/disable the Force Fast Charge:

1) By using the related setting inside System->Advanced->Force Fast Charge (only on CM 10 Beta 3 and next releases)
2) By downloading and using Trickster MOD or IncrediControl or NsTools
2) By directly editing the file /sys/kernel/fast_charge/force_fast_charge and setting 1 to enable the force charge, 0 to disable it (note that set value will be lost after a reboot/shutdown)
3) By using Terminal Emulator (note that set value will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run this command to enable the force fast charge feature
Code:
su
echo 1 > /sys/kernel/fast_charge/force_fast_charge
- Then, when you want to restore the normal status, run this command to disable the force fast charge feature
Code:
su
echo 0 > /sys/kernel/fast_charge/force_fast_charge
4) By using a customized init.d script, but I don't recommend it because you have to remember to disable the feature every time you want to connect your device to a pc for data transfering after every reboot

Battery life extender (BLX)
This feature has been developed by Ezekeel and allows to set a customized battery charging limit (100% is the default stock value, if you want, you can set a lower value).
As Ezekeel said, it is commonly accepted that both very low and very high charge states accelerate the degradation of the battery capacity (that is why you should store Li-Ion batteries at around 40% charge).
If you set a charging limit equal to 100, this feature will be disabled.

How to activate this feature and set a customized charging limit:

1) By downloading and using Trickster MOD or NsTools by setting the customized battery life extender charging limit
2) By using a customized init.d script (the custom value will be always restored after a reboot, if you don't format the system partition)
- Download the script named 15blx
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Edit the file by setting your preferred charging limit (the downloaded script will set the charging limit to 95%)
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot
3) By directly editing the file /sys/class/misc/batterylifeextender/charging_limit (the value you set will be lost after a reboot/shutdown)
4) By using Terminal Emulator (note that set value will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run these commands (changing the charging limit = 95 with the preferred one)
Code:
su
echo 95 > /sys/class/misc/batterylifeextender/charging_limit

LowMemoryKiller
The LowMemoryKiller driver is used to kill a selected process and free the memory when it is under one of the defined thresholds.
The tuning of the driver could be achieved by means of two parameters exposed by the kernel module via sysfs interface:

- /sys/module/lowmemorykiller/parameters/minfree
This file includes a comma separated array of the threshold numbers for minfree memory size (in page units).
- /sys/module/lowmemorykiller/parameters/adj
This file includes the comma separated array of oomadj factors, if the corresponding minfree threshold has been reached, one of the process with an oomadj greater than this number will be killed.
The oomadj factor is a property associated to each process, its value is in a range from -17 to +15, the processes with a higher oomadj factor will be the first to be killed when a specific minfree threshold has been reached.

RAM Console
This feature is useful expecially for development and debugging purposes, when occurs kernel panic / unexpected shutdowns or reboots. Pratically, the kernel messages are also stored inside a little RAM portion and restored during reboot after a kernel panic, inside the file /proc/last_kmsg.


Dynamic FSync
This feature has been developed by Faux123 and allows to dynamically manage the synchronous writes performed on file system (FSync).
It uses asynchronous writes when the screen is on, instead of synchronous writes, to have better performance and a slightly lower battery drain, while when the screen is off the synchronous writes are re-enabled to flush all the outstanding writes and prevent possible data loss.

How to enable/disable the Dynamic FSync (default enabled):

1) By downloading and using Trickster MOD
2) By directly editing the file /sys/kernel/dyn_fsync/Dyn_fsync_active and setting 1 to enable the dynamic fsync, 0 to disable it (note that set value will be lost after a reboot/shutdown)
3) By using Terminal Emulator (note that set value will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run this command to disable the dynamic fsync feature
Code:
su
echo 0 > /sys/kernel/dyn_fsync/Dyn_fsync_active
- Or run this command to re-enable the dynamic fsync feature
Code:
su
echo 1 > /sys/kernel/dyn_fsync/Dyn_fsync_active

Dynamic dirty page writebacks
This feature has been developed by me and allows to dynamically manage the dirty page writebacks with two different intervals, one when the screen is on and another when the screen is off.
It is based on a commit of Francisco Franco, but instead of using hard coded values and of disabling at all the dirty page writebacks while the screen is on (possibility of data loss), I preferred to use a customizable higher dirty page writebacks interval (15 seconds) than the default one (5 seconds) while the screen is on and a customizable default interval (5 seconds) when the screen is off.
By using a higher interval we have better performance and less battery consumption, with a very low risk of data loss.

How to customize the dynamic dirty page writebacks feature (default enabled):

Three new procfs parameters are exposed inside /proc/sys/vm path:
- dynamic_dirty_writeback is the activation status of this feature, set 1 to enable it, set 0 to disable it and use the standard behaviour
- dirty_writeback_active_centisecs is the interval for the dirty page writebacks when the system is active (screen on), the default value is 1500 centisecs (15 seconds)
- dirty_writeback_suspend_centisecs is the interval for the dirty page writebacks when the system is suspended (screen off), the default value is 500 centisecs (5 seconds)

In my kernel builds, during boot, I set other customized values:
- an interval of 30 seconds while the screen is on
- an interval of 10 seconds when the screen is off

1) By directly editing one of the file written above inside /proc/sys/vm and setting the preferred value (note that set value will be lost after a reboot/shutdown)
2) By using Terminal Emulator (note that set value will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run this command to disable the dynamic dirty page writebacks feature
Code:
su
echo 0 > /proc/sys/vm/dynamic_dirty_writeback
- Or run this command to re-enable the dynamic dirty page writebacks feature
Code:
su
echo 1 > /proc/sys/vm/dynamic_dirty_writeback
- Run this command to set customize the two intervals (30 seconds while the screen is on, 10 seconds when the screen is off)
Code:
su
echo "3000" > /proc/sys/vm/dirty_writeback_active_centisecs
echo "1000" > /proc/sys/vm/dirty_writeback_suspend_centisecs
 
Last edited:

Christopher83

Inactive Recognized Developer
Sep 2, 2012
1,446
12,703
Milan
Special features and sysfs settings (Part 2):

Timer slack controller and dynamic management of the minimal timer slack value
The timer slack controller is a feature developed by Kirill Shutemov and it allows to set the minimal timer slack value for every process contained within a control group (cgroup).
A timer slack allows the kernel to manage processes wakeup requests at some future time.
Thanks to this feature, the kernel can set a specific timer slack for the involved processes, minimizing the number of wakeups and allowing a lower system's power consumption.
For further info: Timer slack for slacker developers

I also implemented a new feature in addition to the above one that allows the dynamic management of the minimal timer slack value.
So, it's possible to use different minimal timer slack value when the system is active and when has been suspended.

How to customize the dynamic timer slack controller feature:

Three new cgroup parameters are exposed inside each processes hierarchy contained in /dev/cpuctl path:
- timer_slack.min_slack_ns is the timer slack used when the system is active for the current processes hierarchy
- timer_slack.min_slack_suspend_ns is the timer slack used when the system is suspended for the current processes hierarchy
- timer_slack.effective_slack_suspend_ns is the timer slack currently used

At the moment, the values chosen and used by K^Kernel are the following:
- core processes (/dev/cpuctl), 0 ns when the system is active, 50000 ns when the system is suspended
- foreground apps/processes (/dev/cpuctl/apps), 0 ns when the system is active, 250000 ns when the system is suspended
- background non interactive apps/processes (/dev/cpuctl/apps/bg_non_interactive), 100000000 ns when the system is active, 250000000 ns when the system is suspended

1) By directly editing one of the file written above inside /dev/cpuctl and inside each hierarchy subfolder, by setting the preferred value (note that set value will be lost after a reboot/shutdown)
2) By using Terminal Emulator (note that set value will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run these commands to set the minimal timer slack for generic and core apps/processes
Code:
su
echo 0 > /dev/cpuctl/timer_slack.min_slack_ns
echo 50000 > /dev/cpuctl/timer_slack.min_slack_suspend_ns
- Run these commands to set the minimal timer slack for apps/processes in foreground
Code:
su
echo 0 > /dev/cpuctl/apps/timer_slack.min_slack_ns
echo 100000 > /dev/cpuctl/apps/timer_slack.min_slack_suspend_ns
- Run these commands to set the minimal timer slack for apps/processes in background and non interactive
Code:
su
echo 100000000 > /dev/cpuctl/apps/bg_non_interactive/timer_slack.min_slack_ns
echo 250000000 > /dev/cpuctl/apps/bg_non_interactive/timer_slack.min_slack_suspend_ns

LowMemoryKiller management of not killable processes
This feature allows to define processes and system processes white-lists filled with the preferred process names and to not be killed by lowmemorykiller, unless it is absolutely necessary.

This feature exposes four new lowmemorykiller parameters:
- donotkill_proc, is the flag to enable / disable this feature for the processes chosen by the user
- donotkill_sysproc, is the flag to enable / disable this feature for the system processes chosen by the user
- donotkill_proc_names, is the list of process names (comma separated) chosen by the user to be preserved from killing
- donotkill_sysproc_names, is the list of user system process names (comma separated) chosen by the user to be preserved from killing

When the lowmemorykiller needs to free ram, it will first kill the processes not included inside the two process name lists chosen by the user.
If there are no more standard killable processes, then it will be necessary to kill one of the processes included inside one of the two white-lists, to prevent system hangs, slowdowns, etc.

How to customize the white lists of processes to preserve from killing:

On K^Kernel the feature is enabled by default and the provided processes white lists are the following:
- donotkill_proc_names = "com.cyanogenmod.trebuchet,com.anddoes.launcher,com.teslacoilsw.launcher,org.adwfreak.launcher,gtp.nextlauncher,android.inputmethod.latin,com.touchtype.swiftkey"
this means that Trebuchet Launcher, Apex Launcher, Nova Launcher, ADW Launcher, Next Launcher, stock keyboard and SwiftKey keyboard will be preserved from killing
- donotkill_sysproc_names = "android.process.acore,com.android.phone,com.bel.android.dspmanager"
this means that the system process, the phone process and DSP Manager will be preserved from killing

1) By using a customized init.d script (the custom value will be always restored after a reboot, if you don't format the system partition)
- Download the script named 80dnkp
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Edit the file by setting your preferred status and processes list
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot
2) By directly editing the files inside /sys/module/lowmemorykiller/parameters (note that set values will be lost after a reboot/shutdown)
3) By using Terminal Emulator (note that set values will be lost after a reboot/shutdown)
- Open Terminal Emulator
- Run these commands if you want to enable the feature
Code:
# To enable this feature for the processes chosen by the user
echo 1 > /sys/module/lowmemorykiller/parameters/donotkill_proc
# To enable this feature for the system processes chosen by the user
echo 1 > /sys/module/lowmemorykiller/parameters/donotkill_sysproc
- Run these commands if you want to disable the feature
Code:
# To disable this feature for the processes chosen by the user
echo 0 > /sys/module/lowmemorykiller/parameters/donotkill_proc
# To disable this feature for the system processes chosen by the user
echo 0 > /sys/module/lowmemorykiller/parameters/donotkill_sysproc
- Run this command if you want to add, for example, Trebuchet Launcher (CM default launcher) and the default keyboard to the processes white list
Code:
echo "com.cyanogenmod.trebuchet,android.inputmethod.latin" > /sys/module/lowmemorykiller/parameters/donotkill_proc_names
- Run this command if you want to add, for example, the system process, the phone process and DSP Manager to the system processes white list
Code:
echo "android.process.acore,com.android.phone,com.bel.android.dspmanager" > /sys/module/lowmemorykiller/parameters/donotkill_sysproc_names

ZRAM module
As explained on Wikipedia, this feature, provided in this kernel as a standalone loadable module, increases performance by avoiding paging on disk and instead uses a compressed block device in RAM in which paging takes place until it is necessary to use the swap space on the hard disk drive.
In few words, the memory pages no more used and so to be swapped are sent to zRam device blocks, compressed and stored in memory instead of disk allowing better performance and also lower memory usage, on the other hand, a little higher amount of cpu is needed to perform compression and decompression of memory pages.
Since we have a device with a low amount of free memory, this feature could be useful to have more free ram.

How to change the size of zRam or to disable it (thanks to @ktulu84 for sharing these scripts):

To change the size of zRam (the custom value will be always restored after a reboot, if you don't format the system partition):
- Download the script named 60zram
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Edit the file by setting your preferred zRam size (change SIZE value, default is 100 MB)
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot

If you want to use default zRam size, simply remove the file placed inside /etc/init.d and reboot.

To disable zRam (the custom value will be always restored after a reboot, if you don't format the system partition):
- Download the script named 60disable_zram
- If the file has been saved with .txt extension (stock browser), rename it by removing the .txt extension
- Copy the new file inside /etc/init.d
- Give the rwxr-xr-x permissions to the file (read, write, execution for owner, read and execution for group users, read and execution for others)
- Reboot

If you want to re-enable zRam, simply remove the file placed inside /etc/init.d and reboot.
 
Last edited:

Christopher83

Inactive Recognized Developer
Sep 2, 2012
1,446
12,703
Milan
FAQ - Frequently asked questions:

Q: What are the differences between EXUV and UV kernel versions?
A: The EXUV kernel versions have extremely undervolted settings for the cpu frequencies, they allows to have a very low battery drain, instead the UV kernel versions have undervolted settings a bit higher than EXUV versions, but always lower than stock kernel settings.
The EXUV kernel versions could give some problems (freezes, shutdowns, huge lags) on some devices because the cpu doesn't support too low voltage settings.
For a lower battery consumption, I suggest you to try EXUV versions first and to switch to UV versions only if you encounter one of the above mentioned problems.

Q: How can I get the Performance and Developer Options entries inside Settings menu?
A: Go inside Settings -> About Phone -> Scroll down and tap 7 times on Build number (it's an Easter Egg).

Q: How can I get the log after an unexpected shutdown / reboot?
A: After an unexpected shutdown / reboot of the device, if the problem may be kernel related, you should have the /proc/last_kmsg, if so, send me that log and I'll check it to find the possible cause of the problem.

Q: How can I get the logs when I encounter strange system issues while it's running?
A: Check first if the problems could be related to an app you're using and if you changed something in the last days before facing those issues.
If the problem started after installing the kernel, then let me have you logcat and dmesg:
- Open Terminal Emulator and execute these commands:
Code:
su
dmesg > /sdcard/dmesg.txt
locat -v time -d > /sdcard/logcat.txt
- Open you preferred file manager and go inside the internal sd card partition /sdcard
- Send me the dmesg.txt and logcat.txt files, if you want zip them first

Q: What is F2FS file system?
F2FS (Flash-Friendly File System) is a new file system designed for delivering maximum file-system performance on flash-based storage devices. For more info: F2FS

Q: How can I switch to F2FS format type for /data partition without loosing data?
By switching from EXT4 to F2FS format type for /data partition, without performing any backup, you will surely lost all your user data files and internal sd content.
To avoid that, follow these steps:
- Perform a backup of your internal sd (/sdcard) by copying the /sdcard content inside a new folder on /external_sd or on your pc (through MTP)
- Reboot into recovery
- Install latest TWRP recovery with F2FS support
- Reboot -> Recovery to reboot inside the newly installed recovery
- Perform a full backup of your current configuration, inside Backup -> Flag all partitions -> Set a customized name if you want -> Set Micro SD card as storage -> Swipe to Backup
- After the backup process has completed, go inside Wipe -> Advanced Wipe -> Select Dalvik Cache, System, Cache -> Swipe to Wipe
- Always inside Wipe -> Advanced Wipe -> Select Data -> Repair or Change File System -> Change File System -> F2FS -> Swipe to Change
- Install new rom and gapps
- Restore your data partition from previously made backup, Restore -> Select latest backup -> Select Data only -> Swipe to Restore (don't care about ext4 warnings)
- Restore your /sdcard backup
- Reboot System
- Check if your data is using F2FS format type by running the following command inside Terminal Emulator or through ADB:
Code:
mount | grep f2fs
If everything is ok, you should get
Code:
/dev/block/mmcblk0p28 /data f2fs <various comma separated options>
Q: How can I mount a shared Windows folder with CIFS module?
1) By using Terminal Emulator
Code:
mount -o unc=\\\\[COLOR="DarkGreen"][I]ip[/I][/COLOR]\\[COLOR="Blue"][I]share[/I][/COLOR],noserverino,username=[I][COLOR="DarkOrange"]user[/COLOR][/I],password=[I][COLOR="Lime"]password[/COLOR][/I] -t cifs //[COLOR="DarkGreen"]ip[/COLOR]/[COLOR="Blue"]share[/COLOR] [I][COLOR="DarkSlateGray"]/mnt/cifs[/COLOR][/I]

2) Downloading and using CifsManager and configuring the new share as follow:
- Share Path = ip/share
- Mount Point = /mnt/cifs/share
- Username = username
- Password = password
- Options = unc=\\\\ip\\share,noserverino

Where:
ip is the ip address of your pc where the folder is shared
share is the shared folder name
user is the user name that can access the shared folder
password is the user password
/mnt/cifs is the mount point (must be created if you'd like to use the command approach with Terminal Emulator)
 
Last edited:

Hugo-PT

Senior Member
Jan 1, 2014
613
486
Matosinhos
I´m been using the EXUV version few days now, and I have to say what a masterpiece we have here :)
In my case, the lagg of callUi, practically disappeared. :D
Everything is working impeccably well :good:

Congratulations for this great work

Thank you so much Christopher83 for sharing your work with us :highfive:

Cheers,

Hugo
 

smitharro

Senior Member
Jan 2, 2012
2,629
1,712
Blokker
Ow! Such a great kernel for an even greater Rom! And yet so little comments... Guess not a lot of people use this device as a daily phone anymore. Pity, as it's running super on CM12.1 with this kernel...
 

NatiqPuri

Member
Apr 19, 2014
15
4
Please recommend

Ow! Such a great kernel for an even greater Rom! And yet so little comments... Guess not a lot of people use this device as a daily phone anymore. Pity, as it's running super on CM12.1 with this kernel...

I use this phone on for daily use. can you recommend this rom for daily use and with what setting. Call UI??? Installed cm 12 then returned to cm 11 because of lags and call UI.
 

smitharro

Senior Member
Jan 2, 2012
2,629
1,712
Blokker
I use this phone on for daily use. can you recommend this rom for daily use and with what setting. Call UI??? Installed cm 12 then returned to cm 11 because of lags and call UI.
I'm not using the phone myself, but my wife is using it. I just 'maintain' her phone...
CM12.1, together with this k^kernel, so that it's overclockable, runs really smooth! I never heard her complain about the call-ui. I know she usually makes her calls from out of her address book of from the recent calls list. I think she barely dials a number manually...
Don't expect miracles from this rom however. If you just use it to make calls, send text and Whatsapp messages, make photos, browse the Internet and occasionally listen to some music., then you're fine.
But heavy gaming is simply not possible!

Sent from my XT1068 using Tapatalk.
 

NatiqPuri

Member
Apr 19, 2014
15
4
thanks

I'm not using the phone myself, but my wife is using it. I just 'maintain' her phone...
CM12.1, together with this k^kernel, so that it's overclockable, runs really smooth! I never heard her complain about the call-ui. I know she usually makes her calls from out of her address book of from the recent calls list. I think she barely dials a number manually...
Don't expect miracles from this rom however. If you just use it to make calls, send text and Whatsapp messages, make photos, browse the Internet and occasionally listen to some music., then you're fine.
But heavy gaming is simply not possible!

Sent from my XT1068 using Tapatalk.

Thank You
 
  • Like
Reactions: smitharro

Top Liked Posts

  • There are no posts matching your filters.
  • 45
    attachment.php


    In this thread you may find my customized kernel 3.4.x for LP-5.1 rom (CM 12.1 and derivatives) that use ION+PMEM ADSP memory allocations.
    Of course, your feedback, as always, are welcome and certainly valuable.


    The main features are the following:
    - Kernel 3.4.x
    - Kernel based on more updated kk_2.7-stable branch of CAF (Code Aurora Forum)
    - Sources synched with cm-12.1 repo branch of DevCon Team
    - Built with my custom Linaro GCC 5.2.1-2015.11 toolchain optimized for Cortex-A
    - Built with Cortex-A8 and NEON VFP optimization flags (both kernel and modules)
    - Built with -O3 optimization flag (both kernel and modules)
    - CPU overclockable up to 1824 MHz
    - CPU frequencies undervolted (UV version) or extremely undervolted (EXUV version)
    - CPU voltage control VDD sys interface (click for more details)
    - Dynamic memory allocation of ION heaps through CMA (Contiguous Memory Allocator)
    - Dynamic memory allocation of PMEM ADSP heap through CMA (Contiguous Memory Allocator)
    - Approximately 426MB of free RAM
    - Init.d support
    - Fast Charge support (default disabled, click for more details)
    - Battery Life eXtender support (default disabled, click for more details)
    - Ram Console support (click for more details)
    - Backlight Notification v10 (BLNv10) (click for more details)
    - USB OTG support (if also implemented on rom side)
    - Customizable vibration intensity (click for more details)
    - Lowered display panel voltage
    - Lowered touchscreen voltage
    - Lowered wifi voltage
    - Lowered swappiness (60 -> 45)
    - Increased CPU frequency during boot
    - Optimized AES and SHA1 routines for ARM cpu architecture
    - Fixed 100% battery notification after charger unplug
    - Increased audio volume on board side
    - Con Kolivas' CK3 Tweaks
    - Optimized SLUB memory allocator
    - Optimized ARM RWSEM (read/write semaphore) algorithm
    - Optimized asynchronous I/O latency on solid state disks
    - Disabled Gentle Fair Sleepers for better UI performance
    - CIFS support on boot
    - Memory compaction
    - Dynamic compression of clean pagecache pages
    - New display drivers from Samsung Galaxy SII
    - Updated light sensor driver and display driver light sensor changes
    - Updated sensor drivers
    - Phantom key presses filter (click for more details)
    - Dynamic FSync v1.2 (click for more details)
    - Dynamic dirty page writebacks (click for more details)
    - VM tweaks for performance and less battery consumption
    - Customizable timeout for touchkeys backlight after a key press or touchscreen press (click for more details)
    - Customizable activation status of touchkeys backlight on touchscreen press (click for more details)
    - Timer slack controller (click for more details)
    - Dynamic management of the minimal timer slack value during suspend/resume (click for more details)
    - LowMemoryKiller management of not killable processes (click for more details)
    - F2FS and exFAT support
    - Additional TCP Congestion algorithms
    - Updated ZRam, ZSMalloc, ZCache built-in modules

    Available CPU governors:
    - Adaptive
    - BrazilianWax
    - Conservative
    - Hyper
    - Intellidemand
    - Interactive
    - InteractiveX
    - LionHeart
    - LulzActive
    - OnDemand (default)
    - OnDemandX
    - Performance
    - Powersave
    - SmartAssV2

    Available I/O schedulers:
    - BFQ
    - CFQ
    - Deadline
    - Fiops
    - Noop
    - ROW (default)
    - SIO
    - V(R)


    Kernel Downloads for LP-5.1 ION+PMEM ADSP:

    K^Kernel LP-5.1 Mediafire Folder
    [QRCODE]https://www.mediafire.com/folder/gp4g7m9dz5v9v[/QRCODE]
    - v4.0 -
    for ADC CM 12.1
    and the other roms based on it
    Note: You must use the TWRP recovery with new partition assignments you may find inside ADC CM 12.1 thread



    Howto install the kernel:
    1) Download the preferred kernel zip file to sdcard or external sdcard
    2) Reboot to recovery mode
    3) Flash the kernel zip file
    4) Reboot the system


    Kernel sources (on GitHub):



    Useful info:
    - Special features and sysfs settings
    - Frequently asked questions



    Tables:

    attachment.php




    Changelog:
    Code:
    [B]24/01/2016 - K^Kernel 3.4 v4.0 for LP-5.1 ION+PMEM ADSP[/B]
    - Kernel 3.4.110
    - Built with my latest custom Linaro 5.2.1-2015.11 toolchain optimized for Cortex-A
    - mm: vmpressure: fix backport (credits to Dave Daynard)
    - block: bfq: Squashed update from BFQ-v7r5 to BFQ-v7r8 (credits to Michael Bestas)
    - ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h (credits to Behan Webster)
    - msm: kgsl: Use static methods for iommu sync lock and unlock (credits to Christopher83)
    - arm: crypto: Squashed reverts of crypto optimizations (credits to Christopher83)
    
    [B]12/08/2015 - K^Kernel 3.4 v3.0 for LP-5.1 ION+PMEM ADSP[/B]
    - Kernel 3.4.108
    - Built with my latest custom Linaro 4.9.4-2015.06 toolchain optimized for Cortex-A8
    - mm, oom: make dump_tasks public (credits to Liam Mark)
    - mm: vmpressure: allow in-kernel clients to subscribe for events (credits to Vinayak Menon)
    - mm: Add notifier framework for showing memory (credits to Laura Abbott)
    - android/lowmemorykiller: Account for total_swapcache_pages (credits to Liam Mark)
    - lowmemorykiller: Don't count swap cache pages twice (credits to Liam Mark)
    - lowmemorykiller: use for_each_thread instead of buggy while_each_thread (credits to Vinayak Menon)
    - lowmemorykiller: enhance debug information (credits to Liam Mark)
    - lowmemorykiller: Dump out slab state information (credits to Laura Abbott)
    - lowmemorykiller: Run the lowmemory notifier when killing (credits to Laura Abbott)
    - lowmemorykiller: Do proper NULL checks (credits to Susheel Khiani)
    - lowmemorykiller: adapt to vmpressure (credits to Vinayak Menon)
    
    [B]08/06/2015 - K^Kernel 3.4 v2.0 for LP-5.1 ION+PMEM ADSP[/B]
    - Revert "epoll: use freezable blocking call" (credits to Rafael J. Wysocki)
    - suspend: Return error when pending wakeup source is found. (credits to Ruchi Kandoi)
    - subsystem: CPU FREQUENCY DRIVERS- Set cpu_load calculation on current frequency (credits to rahul.khandelwal)
    - cfg80211: add space after the b/w in db.txt (credits to Mihir Shete)
    - usb: ks_bridge: Ignore completion error in RX path (credits to ChandanaKishori Chiluveru)
    - ipv4: Missing sk_nulls_node_init() in ping_unhash(). (credits to David S. Miller)
    - msm: msm_fb: wait for VSYNC instead of DMA_P for LCDC (credits to Justin Philip)
    - msm: Kconfig: Disable SPARSEMEM for msm7x30 targets (credits to mikeioannina)
    - video: msm: Tone down logging (credits to mikeioannina)
    - Update defconfigs (credits to arco68)
    
    [B]17/05/2015 - K^Kernel 3.4 v1.5 for LP-5.1 ION+PMEM ADSP[/B]
    - ZRam reduced from 256MB to 128MB
    - Ramdisk updates
    
    [B]02/05/2015 - K^Kernel 3.4 v1.0 for LP-5.1 ION+PMEM ADSP[/B]
    - Kernel 3.4.107
    - Built with my latest custom Linaro 4.9.3-2015.03 toolchain optimized for Cortex-A8


    Credits and Thanks to:
    arco68, CastagnaIT and ivendor for their awesome work and their kernel sources
    Ezekeel, Doomlord, Faux123, Stratosk, Tegrak, ErasmuX, Imoseyon, Blefish, mikeioannina and other devs I'm surely missing
    CyanogenMod, Kernel.org, Code Aurora Forum, Google, Linaro GCC developers
    KTulu84, Rhonin86, Smeroni68, XeLLaR* for their support in testing
    Sament83, B1tt1, Dellup, Pierm, Leonbeson, Cippoz89, Marco Z., Rhonin86, modog, Ludovic D. for their donations

    XDA:DevDB Information
    [GT-I9001][ION] K^Kernel 3.4 for LP 5.1 ION+PMEM ADSP, Kernel for the Samsung Galaxy S Plus I9001

    Contributors
    Christopher83
    Source Code: https://github.com/Christopher83/samsung-kernel-msm7x30/tree/cm-12.1

    Kernel Special Features: Customized kernel 3.4.x for LP 5.1 rom (CM 12.1 and derivatives) with ION memory allocations

    Version Information
    Status: Stable
    Current Stable Version: v4.0
    Stable Release Date: 2016-01-24

    Created 2015-05-02
    Last Updated 2016-01-30
    27
    K^Kernel 3.4.108 v3.0 for LP 5.1

    Hi guys,
    I released v3.0 builds of the kernel:
    Code:
    - Kernel 3.4.108
    - Built with my latest custom Linaro 4.9.4-2015.06 toolchain optimized for Cortex-A8
    - mm, oom: make dump_tasks public (credits to Liam Mark)
    - mm: vmpressure: allow in-kernel clients to subscribe for events (credits to Vinayak Menon)
    - mm: Add notifier framework for showing memory (credits to Laura Abbott)
    - android/lowmemorykiller: Account for total_swapcache_pages (credits to Liam Mark)
    - lowmemorykiller: Don't count swap cache pages twice (credits to Liam Mark)
    - lowmemorykiller: use for_each_thread instead of buggy while_each_thread (credits to Vinayak Menon)
    - lowmemorykiller: enhance debug information (credits to Liam Mark)
    - lowmemorykiller: Dump out slab state information (credits to Laura Abbott)
    - lowmemorykiller: Run the lowmemory notifier when killing (credits to Laura Abbott)
    - lowmemorykiller: Do proper NULL checks (credits to Susheel Khiani)
    - lowmemorykiller: adapt to vmpressure (credits to Vinayak Menon)
    25
    K^Kernel 3.4.107 v2.0 for LP-5.1

    Hi guys,
    I released v2.0 builds of the kernel:
    Code:
    - Revert "epoll: use freezable blocking call" (credits to Rafael J. Wysocki)
    - suspend: Return error when pending wakeup source is found. (credits to Ruchi Kandoi)
    - subsystem: CPU FREQUENCY DRIVERS- Set cpu_load calculation on current frequency (credits to rahul.khandelwal)
    - cfg80211: add space after the b/w in db.txt (credits to Mihir Shete)
    - usb: ks_bridge: Ignore completion error in RX path (credits to ChandanaKishori Chiluveru)
    - ipv4: Missing sk_nulls_node_init() in ping_unhash(). (credits to David S. Miller)
    - msm: msm_fb: wait for VSYNC instead of DMA_P for LCDC (credits to Justin Philip)
    - msm: Kconfig: Disable SPARSEMEM for msm7x30 targets (credits to mikeioannina)
    - video: msm: Tone down logging (credits to mikeioannina)
    - Update defconfigs (credits to arco68)
    24
    K^Kernel 3.4.107 v1.5 for LP-5.1

    Hi guys,
    I released a little update of the kernel:
    Code:
    - ZRam reduced from 256MB to 128MB
    - Ramdisk updates
    21
    K^Kernel 3.4.110 v4.0 for LP 5.1

    Hi guys,
    I released v4.0 builds of the kernel:
    Code:
    - Kernel 3.4.110
    - Built with my latest custom Linaro 5.2.1-2015.11 toolchain optimized for Cortex-A
    - mm: vmpressure: fix backport (credits to Dave Daynard)
    - block: bfq: Squashed update from BFQ-v7r5 to BFQ-v7r8 (credits to Michael Bestas)
    - ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h (credits to Behan Webster)
    - msm: kgsl: Use static methods for iommu sync lock and unlock (credits to Christopher83)
    - arm: crypto: Squashed reverts of crypto optimizations (credits to Christopher83)