Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
270 changes: 251 additions & 19 deletions .github/workflows/sultan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,26 +53,20 @@ jobs:
- name: Set CONFIG Environment Variable
run: |
CONFIG="android_kernel_google_tensynos"

# Set CONFIG as an environment variable for future steps
echo "CONFIG=$CONFIG" >> $GITHUB_ENV

echo "CONFIG set to: $CONFIG"

- name: Clone AnyKernel3 and Other Dependencies
run: |
echo "Cloning AnyKernel3 and other dependencies..."

ANYKERNEL_BRANCH="sultan-${{ inputs.codename }}"

# Debug print the branches
echo "Using branch for AnyKernel3: $ANYKERNEL_BRANCH"

# Clone repositories using the branch names
git clone https://github.com/TheWildJames/AnyKernel3.git -b "$ANYKERNEL_BRANCH"
git clone https://github.com/TheWildJames/kernel_patches.git
#git clone https://github.com/kerneltoast/${{ inputs.repo }}
git clone https://github.com/kerneltoast/android_kernel_google_tensynos

if [ "${{ matrix.variant }}" != "WKSU" ]; then
SUSFS_BRANCH="gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}"
echo "Using branch for SUSFS: $SUSFS_BRANCH"
Expand All @@ -83,7 +77,6 @@ jobs:
run: |
echo "Changing to configuration directory: $CONFIG..."
cd "$CONFIG"

echo "Adding KernelSU..."
curl -LSs "https://raw.githubusercontent.com/WildKernels/Wild_KSU/wild/kernel/setup.sh" | bash -s wild

Expand All @@ -92,28 +85,24 @@ jobs:
run: |
echo "Changing to configuration directory: $CONFIG..."
cd "$CONFIG"

SUSFS_VERSION="2.0.0"

echo "Applying SUSFS patches..."

# Copy SUSFS patches
cp ../susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}.patch ./
cp ../susfs4ksu/kernel_patches/fs/* ./fs/
cp ../susfs4ksu/kernel_patches/include/linux/* ./include/linux/

# Change to common directory and apply SUSFS patch
# Apply patches
patch -p1 < 50_add_susfs_in_gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}.patch || true
cp ../kernel_patches/sultan/sys.c_fix.patch ./
patch -p1 < sys.c_fix.patch

cp ../kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a14-6.1/base.c.patch ./
patch -p1 < base.c.patch

- name: Configure KernelSU
run: |
cd "$CONFIG"
# KernelSU Configuration
echo "# KernelSU Configuration" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_KSU=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
if [ "${{ matrix.variant }}" != "WKSU" ]; then
Expand All @@ -125,15 +114,13 @@ jobs:
- name: Configure Mountify Support
run: |
cd "$CONFIG"
# Mountify Support
echo "# Mountify Support" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_TMPFS_XATTR=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig

- name: Configure Networking
run: |
cd "$CONFIG"
# Networking Configuration
echo "# Networking Configuration" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_IP_NF_TARGET_TTL=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_IP6_NF_TARGET_HL=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
Expand All @@ -142,7 +129,6 @@ jobs:
- name: Configure TCP Congestion Control
run: |
cd "$CONFIG"
# BBR TCP Congestion Control
echo "# BBR TCP Congestion Control" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_TCP_CONG_BBR=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
Expand All @@ -154,7 +140,6 @@ jobs:
- name: Configure IPSet Support
run: |
cd "$CONFIG"
# IPSet support
echo "# IPSet Support" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_IP_SET=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_IP_SET_MAX=65534" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
Expand All @@ -175,14 +160,261 @@ jobs:
echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig
echo "CONFIG_IP_SET_LIST_SET=y" >> ./arch/arm64/configs/${{ inputs.codename }}_defconfig

- name: Run sed and perl Commands
- name: Configure Droidspaces and Ubuntu Chroot Support
run: |
cd "$CONFIG"
CONFIG_FILE="./arch/arm64/configs/${{ inputs.codename }}_defconfig"

echo "" >> $CONFIG_FILE
echo "# Droidspaces & Ubuntu Chroot Support (Merged)" >> $CONFIG_FILE

# IPC & Core (Droidspaces + Ubuntu)
echo "CONFIG_SYSCTL=y" >> $CONFIG_FILE
echo "CONFIG_SYSVIPC=y" >> $CONFIG_FILE
echo "CONFIG_POSIX_MQUEUE=y" >> $CONFIG_FILE
echo "CONFIG_NAMESPACES=y" >> $CONFIG_FILE
echo "CONFIG_PID_NS=y" >> $CONFIG_FILE
echo "CONFIG_UTS_NS=y" >> $CONFIG_FILE
echo "CONFIG_IPC_NS=y" >> $CONFIG_FILE
echo "CONFIG_MNT_NS=y" >> $CONFIG_FILE

# Control Groups (Droidspaces + Ubuntu)
echo "CONFIG_CGROUPS=y" >> $CONFIG_FILE
echo "CONFIG_CGROUP_DEVICE=y" >> $CONFIG_FILE
echo "CONFIG_MEMCG=y" >> $CONFIG_FILE
echo "CONFIG_CGROUP_CPUACCT=y" >> $CONFIG_FILE
echo "CONFIG_CGROUP_SCHED=y" >> $CONFIG_FILE
echo "CONFIG_CGROUP_FREEZER=y" >> $CONFIG_FILE
echo "CONFIG_CGROUP_PIDS=y" >> $CONFIG_FILE
echo "CONFIG_MEMCG_SWAP=y" >> $CONFIG_FILE

# Filesystems & Device Mgmt
echo "CONFIG_DEVTMPFS=y" >> $CONFIG_FILE
echo "CONFIG_DEVTMPFS_MOUNT=y" >> $CONFIG_FILE
echo "CONFIG_PROC_FS=y" >> $CONFIG_FILE
echo "CONFIG_SYSFS=y" >> $CONFIG_FILE
echo "CONFIG_TMPFS=y" >> $CONFIG_FILE
echo "CONFIG_EXT4_FS=y" >> $CONFIG_FILE
echo "CONFIG_EXT4_FS_POSIX_ACL=y" >> $CONFIG_FILE
echo "CONFIG_EXT4_FS_SECURITY=y" >> $CONFIG_FILE
echo "CONFIG_OVERLAY_FS=y" >> $CONFIG_FILE
echo "CONFIG_FUSE_FS=y" >> $CONFIG_FILE
echo "CONFIG_BLK_DEV_LOOP=y" >> $CONFIG_FILE
# Note: CONFIG_TMPFS_XATTR and CONFIG_TMPFS_POSIX_ACL are already in Mountify step

# Executables & QEMU
echo "CONFIG_BINFMT_MISC=y" >> $CONFIG_FILE
echo "CONFIG_BINFMT_SCRIPT=y" >> $CONFIG_FILE
echo "CONFIG_BINFMT_ELF=y" >> $CONFIG_FILE

# Terminal & PTY
echo "CONFIG_UNIX98_PTYS=y" >> $CONFIG_FILE
echo "CONFIG_TTY=y" >> $CONFIG_FILE
echo "CONFIG_DEVPTS_FS=y" >> $CONFIG_FILE
echo "CONFIG_LEGACY_PTYS=y" >> $CONFIG_FILE
echo "CONFIG_LEGACY_PTY_COUNT=256" >> $CONFIG_FILE

# Networking
echo "CONFIG_NET=y" >> $CONFIG_FILE
echo "CONFIG_INET=y" >> $CONFIG_FILE
echo "CONFIG_UNIX=y" >> $CONFIG_FILE
echo "CONFIG_IPV6=y" >> $CONFIG_FILE
echo "CONFIG_PACKET=y" >> $CONFIG_FILE

# System & Security
echo "CONFIG_FUTEX=y" >> $CONFIG_FILE
echo "CONFIG_FILE_LOCKING=y" >> $CONFIG_FILE
echo "CONFIG_EPOLL=y" >> $CONFIG_FILE
echo "CONFIG_EVENTFD=y" >> $CONFIG_FILE
echo "CONFIG_SIGNALFD=y" >> $CONFIG_FILE
echo "CONFIG_TIMERFD=y" >> $CONFIG_FILE
echo "CONFIG_INOTIFY_USER=y" >> $CONFIG_FILE
echo "CONFIG_SECCOMP=y" >> $CONFIG_FILE
echo "CONFIG_SECCOMP_FILTER=y" >> $CONFIG_FILE
echo "CONFIG_AIO=y" >> $CONFIG_FILE
echo "CONFIG_PROC_SYSCTL=y" >> $CONFIG_FILE
echo "CONFIG_SYSVIPC_SYSCTL=y" >> $CONFIG_FILE
echo "CONFIG_PSI=y" >> $CONFIG_FILE

# Firmware
echo "CONFIG_FW_LOADER=y" >> $CONFIG_FILE
echo "CONFIG_FW_LOADER_USER_HELPER=y" >> $CONFIG_FILE
echo "CONFIG_FW_LOADER_COMPRESS=y" >> $CONFIG_FILE

- name: Run sed and Patching
run: |
echo "Changing to configuration directory: $CONFIG..."
cd "$CONFIG"

echo "Running sed commands..."
echo "Running sed commands for localversion..."
sed -i 's/CONFIG_LOCALVERSION="-Sultan"/CONFIG_LOCALVERSION="-Sultan-Wild"/' ./arch/arm64/configs/${{ inputs.codename }}_defconfig

echo "Applying vmscan shrinker lock fix..."
cat <<'EOF' > vmscan_shrinker.patch
--- mm/vmscan.c
+++ mm/vmscan.c
@@ -211,8 +211,7 @@
}

static LIST_HEAD(shrinker_list);
-static DEFINE_SPINLOCK(shrinker_lock);
-static DEFINE_RWLOCK(shrinker_rwlock);
+static DECLARE_RWSEM(shrinker_rwsem);

#ifdef CONFIG_MEMCG
static int shrinker_nr_max;
@@ -719,12 +718,12 @@
void register_shrinker_prepared(struct shrinker *shrinker)
{
init_rwsem(&shrinker->del_rwsem);
- spin_lock(&shrinker_lock);
+ down_write(&shrinker_rwsem);
/* Use the RCU list mutation primitive to allow concurrent iteration */
list_add_tail_rcu(&shrinker->list, &shrinker_list);
shrinker->flags |= SHRINKER_REGISTERED;
shrinker_debugfs_add(shrinker);
- spin_unlock(&shrinker_lock);
+ up_write(&shrinker_rwsem);
}

static int __register_shrinker(struct shrinker *shrinker)
@@ -780,15 +779,11 @@
* Wait until the shrinker list is no longer in use (shrinker_rwlock)
*/
down_write(&shrinker->del_rwsem);
- spin_lock(&shrinker_lock);
- write_lock(&shrinker_rwlock);
- list_del(&shrinker->list);
+ down_write(&shrinker_rwsem);
+ list_del_rcu(&shrinker->list);
shrinker->flags &= ~SHRINKER_REGISTERED;
- if (shrinker->flags & SHRINKER_MEMCG_AWARE)
- unregister_memcg_shrinker(shrinker);
debugfs_entry = shrinker_debugfs_remove(shrinker);
- write_unlock(&shrinker_rwlock);
- spin_unlock(&shrinker_lock);
+ up_write(&shrinker_rwsem);
up_write(&shrinker->del_rwsem);

debugfs_remove_recursive(debugfs_entry);
@@ -954,7 +949,24 @@
!(shrinker->flags & SHRINKER_NONSLAB))
continue;

+ if (!down_read_trylock(&shrinker->del_rwsem))
+ continue;
+
+ up_read(&shrinker_rwsem);
+
ret = do_shrink_slab(&sc, shrinker, priority);
+
+ if (!down_read_trylock(&shrinker_rwsem)) {
+ up_read(&shrinker->del_rwsem);
+ return freed;
+ }
+
+ info = shrinker_info_protected(memcg, nid);
+ if (unlikely(!info)) {
+ up_read(&shrinker->del_rwsem);
+ goto unlock;
+ }
+
if (ret == SHRINK_EMPTY) {
clear_bit(i, info->map);
/*
@@ -973,13 +985,28 @@
* set_bit() do_shrink_slab()
*/
smp_mb__after_atomic();
+
+ up_read(&shrinker_rwsem);
ret = do_shrink_slab(&sc, shrinker, priority);
+
+ if (!down_read_trylock(&shrinker_rwsem)) {
+ up_read(&shrinker->del_rwsem);
+ return freed;
+ }
+
+ info = shrinker_info_protected(memcg, nid);
+ if (unlikely(!info)) {
+ up_read(&shrinker->del_rwsem);
+ goto unlock;
+ }
+
if (ret == SHRINK_EMPTY)
ret = 0;
else
set_shrinker_bit(memcg, nid, i);
}
freed += ret;
+ up_read(&shrinker->del_rwsem);

if (rwsem_is_contended(&shrinker_rwsem)) {
freed = freed ? : 1;
@@ -1040,29 +1067,35 @@
if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg))
return shrink_slab_memcg(gfp_mask, nid, memcg, priority);

- read_lock(&shrinker_rwlock);
- /* Use the RCU list iteration primitive to allow concurrent additions */
- list_for_each_entry_rcu(shrinker, &shrinker_list, list) {
- struct shrink_control sc = {
- .gfp_mask = gfp_mask,
- .nid = nid,
- .memcg = memcg,
- };
-
- if (!down_read_trylock(&shrinker->del_rwsem))
- continue;
- read_unlock(&shrinker_rwlock);
-
- ret = do_shrink_slab(&sc, shrinker, priority);
- if (ret == SHRINK_EMPTY)
- ret = 0;
- freed += ret;
-
- read_lock(&shrinker_rwlock);
- up_read(&shrinker->del_rwsem);
- }
- read_unlock(&shrinker_rwlock);
-
+ if (down_read_trylock(&shrinker_rwsem)) {
+ /* Use the RCU list iteration primitive to allow concurrent additions */
+ list_for_each_entry_rcu(shrinker, &shrinker_list, list) {
+ struct shrink_control sc = {
+ .gfp_mask = gfp_mask,
+ .nid = nid,
+ .memcg = memcg,
+ };
+
+ if (!down_read_trylock(&shrinker->del_rwsem))
+ continue;
+ up_read(&shrinker_rwsem);
+
+ ret = do_shrink_slab(&sc, shrinker, priority);
+ if (ret == SHRINK_EMPTY)
+ ret = 0;
+ freed += ret;
+
+ if (!down_read_trylock(&shrinker_rwsem)) {
+ up_read(&shrinker->del_rwsem);
+ goto out;
+ }
+ up_read(&shrinker->del_rwsem);
+ }
+
+ up_read(&shrinker_rwsem);
+ }
+
+out:
cond_resched();
return freed;
}
EOF

# Apply the patch (ignore whitespace to handle tab/space issues in workflow dispatch)
patch -p0 -l < vmscan_shrinker.patch || echo "Patch failed, checking reject files..."

- name: Build the Kernel
run: |
echo "Changing to configuration directory: $CONFIG..."
Expand Down