[OnePlus 7 Pro ROMs, Kernels, Recoveries, & Other D] Freak07:
Update to 1.1.3_R

Hey guys and girls,

so here´s the next update. It includes the Source Code OnePlus pushed a few days ago, that was included in 1.1.2_R, which was uploaded without a release post a few posts above following this link.

1.1.3_R includes latest linux-stable upstream to 4.14.229.

1.1.1_R has the fingerprint sensor fixed for the OnePlus 7T. I´ll include the changelog of 1.1.0_R again to this post as I´m sure not everybody has updated to the first version of the kernel.

So if you haven´t read the release post of 1.1.0_R I suggest to read the following section! :)

New Things in the Android 11 Update

Here´s the update for Android 11. This will be a longer post. It would be nice if you took the time reading and not head straight to the download button.

OnePlus Source Code "Situation"

Apparently OnePlus pushed some of the missing code to their github by now. That´s great, but it should never have been missing in the first place. It´s no secret by now that the source they push is not the actual source they work on, but an edited one. That´s not a bad thing in itself, but if multiple times the wrong source gets pushed, a broken source or a source that´s simply incomplete that´s not acceptable.

As it was already suggested by other people in the OP7/Pro Forums on XDA, the source code OnePlus pushed to github for Android 11 on the OnePlus 7 series is incomplete and does not resemble the stock kernel.

@LuK1337 began to work on the lineage kernel based on the A11 OP 7/Pro source and ported some of the missing stuff from the OnePlus 8 pro. Since his work is made for a source-built custom rom, it´s not a problem to disable most vendor/OnePlus specific implementations in the kernel since Lineage OS´s framework does not rely on them. A big thanks to him for porting some missing code that was very helpful for my project!

However OOS does rely on exactly these changes, that can be removed for Lineage. OOS either fails to boot completely (like described here)or the framework complains about missing stuff in the kernel. That´s also the reason why I never removed the OnePlus specific additions in the Android 10 kernels. (like described there)

The framework complaining can be silenced by "spoofing" the removed values to the framework. The problem with this approach is, that while the kernel is open source, the framework is not. So it´s not clear what will be happening when spoofing these values.

This is a battle I chose to not fight, even if I don´t like some of those vendor/OnePlus specific changes in various parts of the kernel.

The missing code was ported by comparing the OP7 Pro A10 source with the OP8 Pro A11 source. The OnePlus specific code that was not missing in the OP7 A11 source was (almost) identical to the OP8 A11 source.

A lot of people (more than I expected) PMed me offering to test the kernel alongside me. So far nobody complained about anything not working properly and I´m pretty sure this is a very good base to start.

I´ll push several branches to my kernel repo so other developers have a good point to start as well. I hope this helps in getting development started for A11 kernels.

Still, if other developers decide to wait for a proper source code from OnePlus I can also understand that. What OnePlus is doing is violating the GPL.

There´s no longer any doubt that the source they push is not the actual source. There is code missing everywhere.

Even if they maintain a seperate repo for public source code and the private code they actually work with, these discrepancies are no longer tolerable. (not that they ever were)

The reason I decided to go that route now, is the course of events this all is taking. Despite several updates on the OP8 Pro for example, they didn´t push a new source for months on OOS 11 there.

Source code updates get published less timely the more time goes by, starting with A10 on the OP7 Pro last year.

I hope they will fix all of this and get back on track, but at the moment I don´t have much hope.

I´m not in the developer program from OnePlus, but I´m sure that many developers that are part of this are upset about this situation as well and tried to talk to OnePlus.

I don´t have any contact at OnePlus so this is the only thing I could do.

At this point I want to say a huge thanks to all my testers that PMed me! I really appreciate their dedication. Without it this would not be possible and the kernel wouldn´t be where it is.

Remember that I only have a OnePlus 7 Pro to test. That´s why the kernel is posted in the OnePlus 7 Pro section. One of the tester uses the kernel without issues on the OnePlus 7T Pro. So that is confirmed working as well.

New Features and Update for OOS 11

But lets get to the features and the update. I learned a thing or two during the previous years. I waited for the OP7 Pro A11 for a long time now, to start from scratch and implement what I learned and did for other devices.

The way I did the bringup for A10 last year, didn´t really allow for this without starting from scratch. That´s why I decided to wait for A11 to start from scratch and do a new bringup.

I´d advise everybody to re-read the whole OP. It´s updated and contains all the most important changes. I´ll include a few snippets to this post.

This project aims to keep most of the subsystems updated, way ahead of the stock kernel, thereby improving security and performance, while keeping stability as the foucs during testing! This includes Linux-Stable, CAF-Upstream and kernel/common.

Kernel Control Flow Integrity (Kernel-CFI), which is achieved by linking the kernel with LLD and Link Time Optimization (LTO), more precisely ThinLTO, are quite unique security features.

The only kernels made by OEMs offering this security feature by default are the ones for the Pixel 3, 4 and 5 devices.

Kirisakura-Kernel for the OnePlus 8 Pro was featured on the XDA-Portal due to the inclusion of CFI. The featured article explains CFI in great details, is easy to understand and definitely worth to read.

If possible the latest Kirisakura-Kernel releases for various devices aim to include CFI in enforcing mode so users can benefit from this security features. So far CFI found its way to the ROG 2, the ROG 3, the OnePlus 7 Pro and the Zenfone 6 as well.

Another security feature is Shadow Call Stack (SCS). Similar to CFI, only the Pixel 3, 4 and 5 kernels use this security feature.

SCS is another security patchset that is aimed at preventing attacks via return oriented programming (ROP).

ROP is a technique where the attacker gains control of the kernel stack to overwrite function return addresses and redirect execution to carefully selected parts of existing kernel code.

If you´re interested here are a few good links:

Google Security Blog explaining SCS.

LLVM doc about SCS

Android DOCs documenting SCS

If reading about upstream in the paragraph above got you curious,have a read about Linux-Stable and why it is important here. The stable-process is not the same for every subsystem, but the general idea, rule of thumb and benefits are applicable for other subsystems as well.

Quick explanation of CAF-Upstream. CAF is short for Codeaurora-Forums. This is the place where development from Qualcomm for their SoCs happens. This includes the Snapdragon 855/+ that´s built into the different SKUs of the OP7/T/Pro.

The kernel-bases available on the Codeaurora-Forums, are basically the foundations OEMs use, to build their own kernel additions on top for devices featuring Qualcomm SoCs.

The Qualcomm developers push regular updates to the bases of the different SoCs, a bit similar to how Linux-Upstream works. Most OEMs usually stop updating the initial base after the phone is released, and only cherry-pick certain commits to be in line with the android security bulletin.

This kernel focuses amongst the other features to merge CAF-Updates in a regular manner, to provide updates, improvements and enhancements for SoC specific drivers and subsystems! This might take a while, because a lot of device specific testing is done on my end to ensure stability.

The EAS implementation from 4.19 CAF (sd865/+) was ported to this kernel. There are several interesting mechanisms qcom worked on. The basic layout of the soc architecture ( 4xLittle- , 3xBig- and 1x Prime-Core(s)) has not changed from SD855 to SD865. That means instead of revolution there was a very nice evolution the scheduler underwent.

Changelog:

Since I don´t have the time to create a changelog specific for this release, lets take the updated feature list from the first post as a changelog!

Main Features:

- Based on latest kernel sources from OnePlus for Android 11

- Upstreamed against latest CAF

- Linux-Stable-Upstream included to latest 4.14.229

- compiled with Clang 12.0.4 prebuilt from Google

- built with -O3 speed optimizations

- Link-Time-Optimization (ThinLTO)

- Kernel Control-Flow-Integration (CFI)

- Shadow Call Stack (SCS) Security-Feature

- Use ThinLTO which was first used in the Pixel 4 XL Android R-Preview Kernel instead of full LTO for full program visibility (needed by CFI)

- fix CFI-Violations found in various subsystems like OnePlus/device specific drivers and qualcomm drivers

- Link the kernel with LLD and use RELR-Relocation

- include important fixes/improvements from kernel/common

- Flashing the kernel will keep root!

- Anykernel zip is based on the Anykernel3 repo from @osm0sis

- include vDSO 32 patches to improve 32-bit performance

- disable various debugging configs, that are not needed in a perf build kernel according to google.

- Removed RTB(interrupt) logging entirely

- disable selinux auditing (we don´t have to adress selinux denials running a stock rom)

- fix several coding issues detected by newer Clang-Toolchains

EAS related features:

- EAS scheduler backported from 4.19 CAF

- disable autogroups and use cgroups for more efficient task placement!

- updates from kernel/common

- scheduler updates from Googles Pixel kernel

CPU related features:

- Power saving workingqueues enabled by default (toggleable in EXKM)

have a read here: https://lwn.net/Articles/731052/

this complements EAS in general

- Change various drivers ( MM, audio) to user power efficient workingqueues. This should work well in conjunction with EAS

- include cpuidle patches from CAF

- improvements to cpufreq/times/stats

- improve memory allocations in binder driver

- vdso32 patches as found on Google Pixel devices (brief documentation here)

- arm64: lse: Prefetch operands to speed up atomic operations

- improve bluetooth performance

- improve /proc performance

- remove VLA-usage (info)

- option to disable touchboost in msm_performance

File System related features:

- improve memory allocations in sdcardfs

- improve memory allocations in kernfs

- writeback: hardcode dirty_expire_centisecs=3000 based on this commit

- ufs improvements from pixel 4/ pixel 5 kernel

- default IO scheduler to CFQ and readahead to 128

Usability related features:

- High Brightness Mode for increasing backlight level related to brightness accessible via EXKM app

- Vibration Intensity adjustable via EXKM app

- DC Dimming setting now fully functional

- add support for steam controller

- add support for nintendo switch controller

Display related features:

- KCAL to control the display

- KLAPSE integrated

- KCAL/KLAPSE: changes safety measures -> allow completely disabling two RGB values (this was requested to, for example, only have red values on night dimming)

- display tweaks to save power on statically rendered images (taken from samsung galaxy source, which uses a very similar panel)

- improve memory allocation

GPU related features:

- Ability to use the new 675mhz GPU step officially introduced by CAF (OP7/Pro is set to only use 585mhz as max)

more information and benches in the 1.2.0 release post

- add low_prio_worker thread for gpu driver (Improves performance when tearing down processes (eg, via LMK) and not blocking currently running UI from submitting work to the GPU

- remove debugging tracing from GPU driver

- improve memory allocation

Network related features:

- Wireguard Support (Details)

- advanced TCP algorithms enabled

- includes new bbr and bbrv2 (default to bbr as advised by @kdrag0n )

Memory related features:

- Memory Management patches from mainline kernel

- Speculative Page Faults (1. 2) (CAF-default)

- Fix various memory leaks in different subsystems

- allow ZRAM to use higher swappiness values than 100

- default ZRAM algorithm set to lz4 (fastest compression/decompression speeds)

- possibility to use lzo-rle as default ZRAM compression algorithm (more information here and there )

- possibility to use zstd as default ZRAM compression algorithm ( higher compression ratio, slightly lower compression decompression speed, more information and benchmarks here)

- free up memory by removing unused memory regions from dts

Security related features:

- Control-Flow-Integration (CFI) and Link-Time-Optimization (LTO) ported from 4.19 kernel/common and Pixel 4/XL Kernel

- Use ThinLTO which was first used in the Pixel 4 XL Android R-Kernel instead of full LTO

- Shadow Call Stack (SCS) Security-Feature

- fix various CFI-Violations found in various subsystems like Asus/device specific drivers and qualcomm drivers

- enable init_on_alloc for even more security, more information can be found in the commit message

WLAN Driver:

- use CAF wlan driver and compile it inline, the only way to ensure working wlan with this kernel

- the kernel cannot even force load prebuilt WLAN module as the kernel base is way to far from stock!

- do no longer rely on the pre compiled wlan driver module

- removed debugging from wlan driver

- removed logging from wlan driver

Scheduler Setup and Kernel Settings:

- kernel setting get automatically applied at boot

- no magisk module is necessary on OOS 11

Misc Features:

Wakelock Blocker:

- advanced wakelock blocker with the ability to block any wakelocks (dangerous, use with caution)

- please read [URL="https://arstechnica.com/gadgets/2018/08/p-is-for-power-how-google-tests-tracks-and-improves-android-battery-life/"]this for further info

- blocking a kernel wakelock should only be done in case of firmware incompatabilities (WiFi network at work (can´t be changed) causes deep sleep to not work on the phone.) That´s the only use case I see for this feature. The kernel does not features this to improve battery life!

Download:

Downloads for : -Android- Generic Device/Other | AndroidFileHost.com | Download GApps, Roms, Kernels, Themes, Firmware and more. Free file hosting for all Android developers.

Download GApps, Roms, Kernels, Themes, Firmware, and more. Free file hosting for all Android developers.

www.androidfilehost.com

Instructions can be found in the OP!

But look at this post too :)

Have fun, enjoy the kernel and your phone.

Donations are not mandatory but very welcome.

If you like my work and want to buy me a coffee/green tea to keep development going: http://paypal.me/freak07