diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index 5f6b090b93e30..268835bc8a386 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -1,6 +1,9 @@ CONFIG_UAPI_HEADER_TEST=y CONFIG_AUDIT=y CONFIG_NO_HZ=y +CONFIG_SYSCTL=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y CONFIG_HIGH_RES_TIMERS=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y @@ -29,10 +32,14 @@ CONFIG_CGROUP_SCHED=y CONFIG_UCLAMP_TASK_GROUP=y CONFIG_CGROUP_FREEZER=y CONFIG_CPUSETS=y +CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_BPF=y CONFIG_NAMESPACES=y -# CONFIG_PID_NS is not set +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_PID_NS=y +CONFIG_MNT_NS=y CONFIG_RT_SOFTIRQ_AWARE_SCHED=y # CONFIG_RD_BZIP2 is not set # CONFIG_RD_LZMA is not set @@ -310,7 +317,10 @@ CONFIG_PCIE_DW_PLAT_EP=y CONFIG_PCIE_QCOM=y CONFIG_PCIE_KIRIN=y CONFIG_PCI_ENDPOINT=y +CONFIG_DEVTMPFS=y +CONFIG_FW_LOADER=y CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_COMPRESS=y # CONFIG_FW_CACHE is not set # CONFIG_BRCMSTB_GISB_ARB is not set # CONFIG_SUN50I_DE2_BUS is not set diff --git a/arch/arm64/configs/gs201_defconfig b/arch/arm64/configs/gs201_defconfig index 766c6a6076585..b891d7f857c27 100644 --- a/arch/arm64/configs/gs201_defconfig +++ b/arch/arm64/configs/gs201_defconfig @@ -3,6 +3,9 @@ CONFIG_LOCALVERSION="-Sultan" CONFIG_IRQ_SBALANCE=y CONFIG_SBALANCE_EXCLUDE_CPUS="3,5,7" CONFIG_NO_HZ=y +CONFIG_SYSCTL=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y CONFIG_HIGH_RES_TIMERS=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y @@ -29,11 +32,15 @@ CONFIG_CGROUP_SCHED=y CONFIG_UCLAMP_TASK_GROUP=y CONFIG_CGROUP_FREEZER=y CONFIG_CPUSETS=y +CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y +CONFIG_MEMCG=y CONFIG_CGROUP_BPF=y CONFIG_NAMESPACES=y -# CONFIG_UTS_NS is not set -# CONFIG_PID_NS is not set +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_PID_NS=y +CONFIG_MNT_NS=y CONFIG_SCHED_CASS=y CONFIG_RT_SOFTIRQ_AWARE_SCHED=y # CONFIG_RD_GZIP is not set @@ -321,7 +328,10 @@ CONFIG_PCI_IOV=y CONFIG_PCI_HOST_GENERIC=y CONFIG_PCIE_DW_PLAT_EP=y CONFIG_PCI_ENDPOINT=y +CONFIG_DEVTMPFS=y +CONFIG_FW_LOADER=y CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_COMPRESS=y # CONFIG_FW_CACHE is not set CONFIG_ARM_SCMI_PROTOCOL=y # CONFIG_ARM_SCMI_POWER_DOMAIN is not set @@ -845,3 +855,4 @@ CONFIG_TRUSTY=m # CONFIG_TRUSTY_TEST is not set CONFIG_TRUSTY_DMA_BUF_FFA_TAG=y CONFIG_TRUSTY_CRASH_IS_PANIC=y +CONFIG_PSI=y diff --git a/arch/arm64/configs/zuma_defconfig b/arch/arm64/configs/zuma_defconfig index fe125724c342f..cb4f723432c47 100644 --- a/arch/arm64/configs/zuma_defconfig +++ b/arch/arm64/configs/zuma_defconfig @@ -3,6 +3,9 @@ CONFIG_LOCALVERSION="-Sultan" CONFIG_IRQ_SBALANCE=y CONFIG_SBALANCE_EXCLUDE_CPUS="3,7,8" CONFIG_NO_HZ=y +CONFIG_SYSCTL=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y CONFIG_HIGH_RES_TIMERS=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y @@ -30,10 +33,14 @@ CONFIG_UCLAMP_TASK_GROUP=y CONFIG_CGROUP_FREEZER=y CONFIG_CPUSETS=y CONFIG_CGROUP_CPUACCT=y +CONFIG_MEMCG=y +CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_BPF=y CONFIG_NAMESPACES=y -# CONFIG_UTS_NS is not set -# CONFIG_PID_NS is not set +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_PID_NS=y +CONFIG_MNT_NS=y CONFIG_SCHED_CASS=y CONFIG_RT_SOFTIRQ_AWARE_SCHED=y # CONFIG_RD_GZIP is not set @@ -314,7 +321,10 @@ CONFIG_PCI_IOV=y CONFIG_PCI_HOST_GENERIC=y CONFIG_PCIE_DW_PLAT_EP=y CONFIG_PCI_ENDPOINT=y +CONFIG_DEVTMPFS=y +CONFIG_FW_LOADER=y CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_COMPRESS=y # CONFIG_FW_CACHE is not set CONFIG_ARM_SCMI_PROTOCOL=y # CONFIG_ARM_SCMI_POWER_DOMAIN is not set @@ -846,3 +856,4 @@ CONFIG_TRUSTY=m # CONFIG_TRUSTY_TEST is not set CONFIG_TRUSTY_DMA_BUF_FFA_TAG=y CONFIG_TRUSTY_CRASH_IS_PANIC=y +CONFIG_PSI=y diff --git a/arch/arm64/configs/zumapro_defconfig b/arch/arm64/configs/zumapro_defconfig index 87af8eae236e2..2479bde916afd 100644 --- a/arch/arm64/configs/zumapro_defconfig +++ b/arch/arm64/configs/zumapro_defconfig @@ -3,6 +3,9 @@ CONFIG_LOCALVERSION="-Sultan" CONFIG_IRQ_SBALANCE=y CONFIG_SBALANCE_EXCLUDE_CPUS="3,6,7" CONFIG_NO_HZ=y +CONFIG_SYSCTL=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y CONFIG_HIGH_RES_TIMERS=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y @@ -29,10 +32,14 @@ CONFIG_UCLAMP_TASK_GROUP=y CONFIG_CGROUP_FREEZER=y CONFIG_CPUSETS=y CONFIG_CGROUP_CPUACCT=y +CONFIG_MEMCG=y +CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_BPF=y CONFIG_NAMESPACES=y -# CONFIG_UTS_NS is not set -# CONFIG_PID_NS is not set +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_PID_NS=y +CONFIG_MNT_NS=y CONFIG_SCHED_CASS=y CONFIG_RT_SOFTIRQ_AWARE_SCHED=y # CONFIG_RD_GZIP is not set @@ -315,7 +322,10 @@ CONFIG_PCI_IOV=y CONFIG_PCI_HOST_GENERIC=y CONFIG_PCIE_DW_PLAT_EP=y CONFIG_PCI_ENDPOINT=y +CONFIG_DEVTMPFS=y +CONFIG_FW_LOADER=y CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_COMPRESS=y # CONFIG_FW_CACHE is not set CONFIG_ARM_SCMI_PROTOCOL=y # CONFIG_ARM_SCMI_POWER_DOMAIN is not set @@ -850,3 +860,4 @@ CONFIG_BACKLIGHT_RT4539_GS=m CONFIG_QCOM_QBT_HANDLER=m CONFIG_LINK_DEVICE_PCIE_SOC_EXYNOS=y CONFIG_CP_PMIC=m +CONFIG_PSI=y diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index ec4d0ec3c810b..96b1e315468b6 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -485,7 +485,12 @@ static const char * const fw_path[] = { "/lib/firmware/updates/" UTS_RELEASE, "/lib/firmware/updates", "/lib/firmware/" UTS_RELEASE, - "/lib/firmware" + "/lib/firmware", + "/image", + "/vendor/firmware", + "/vendor/firmware/image", + "/odm/firmware", + "/odm/firmware/image" }; static char strpath[PATH_SIZE * CUSTOM_FW_PATH_COUNT]; diff --git a/mm/vmscan.c b/mm/vmscan.c index 9dc481c588161..520cda8abd589 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -211,8 +211,7 @@ static void set_task_reclaim_state(struct task_struct *task, } 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 free_prealloced_shrinker(struct shrinker *shrinker) 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 @@ void unregister_shrinker(struct shrinker *shrinker) * 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); @@ -1040,29 +1035,35 @@ unsigned long shrink_slab(gfp_t gfp_mask, int nid, 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_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; - read_unlock(&shrinker_rwlock); + 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; + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) + ret = 0; + freed += ret; - read_lock(&shrinker_rwlock); - up_read(&shrinker->del_rwsem); + if (!down_read_trylock(&shrinker_rwsem)) { + up_read(&shrinker->del_rwsem); + goto out; + } + up_read(&shrinker->del_rwsem); + } + + up_read(&shrinker_rwsem); } - read_unlock(&shrinker_rwlock); +out: cond_resched(); return freed; }