Merge branch 'android11-5.4' into 'android11-5.4-lts'

Sync up with android11-5.4 for the following commits:

0821bcfb48 UPSTREAM: mm/cma.c: remove redundant cma_mutex lock
2d5e3ef632 ANDROID: ABI: update allowed list for galaxy
e3e60153a4 BACKPORT: remoteproc: core: Remove casting to rproc_handle_resource_t
046c52c95b UPSTREAM: scsi: ufs: ufs-mediatek: Correct operator & -> &&
0475956802 UPSTREAM: kbuild: do not include include/config/auto.conf from adjust_autoksyms.sh
24797c44c3 UPSTREAM: udp: ipv4: manipulate network header of NATed UDP GRO fraglist
550b2c0dce UPSTREAM: net: fix use-after-free when UDP GRO with shared fraglist
e7e2f8329c UPSTREAM: scsi: ufs: Fix possible power drain during system suspend
2e09274b7c UPSTREAM: scsi: ufs: Re-enable WriteBooster after device reset
b55ed54016 UPSTREAM: driver: core: Fix list corruption after device_del()
d9d13f4b76 UPSTREAM: f2fs: fix double free of unicode map
be192b51bf UPSTREAM: sched/fair: Prefer prev cpu in asymmetric wakeup path
3f54d632a6 UPSTREAM: scsi: ufshcd: Fix missing destroy_workqueue()
e6d3c97bac UPSTREAM: xfrm/compat: Translate by copying XFRMA_UNSPEC attribute
957e971ed9 UPSTREAM: xfrm/compat: memset(0) 64-bit padding at right place
ee97d20c7e UPSTREAM: xfrm/compat: Don't allocate memory with __GFP_ZERO
a9cedd3032 BACKPORT: scsi: ufs: Fix missing brace warning for old compilers
dee5558ec9 UPSTREAM: net: xfrm: fix memory leak in xfrm_user_policy()
7db1c96c2d BACKPORT: net: ethtool: add missing NETIF_F_GSO_FRAGLIST feature string
305c5f5486 UPSTREAM: mac80211_hwsim: use GFP_ATOMIC under spin lock
48ffcbf0b9 FROMGIT: kbuild: update config_data.gz only when the content of .config is changed
c8cd528e75 ANDROID: ABI: add pm_system_cancel_wakeup symbol
ff320df3e0 ANDROID: power: export pm_system_cancel_wakeup
dd2e0a80f1 ANDROID: ABI: Update allowed list for QCOM
fad2655cb7 ANDROID: Incremental fs: Set credentials before reading/writing
a035201d12 Revert "ANDROID: Incremental fs: Fix memory leak on closing file"
dbee4e7bc4 Revert "ANDROID: Incremental fs: Set credentials before reading/writing"
b6221e3495 Revert "ANDROID: Incremental fs: Fix selinux issues"
0ade8c4105 ANDROID: ABI: update allowed list for QCOM
ccdcd307cf ANDROID: Update the KMI for virtual platform modules
b3f4130630 ANDROID: ABI: Update symbol list for imx
67e9dbddb5 ANDROID: clang: update to 12.0.5
91d8a13f43 FROMGIT: virt_wifi: Return micros for BSS TSF values

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I30c2b4a86d0dfc93b4db35b9c135d0c25c4b5acb
This commit is contained in:
Greg Kroah-Hartman 2021-05-11 09:34:28 +02:00
commit f240fdcff5
28 changed files with 3313 additions and 3226 deletions

1
kernel/.gitignore vendored
View file

@ -1,6 +1,7 @@
#
# Generated files
#
config_data
kheaders.md5
timeconst.h
hz.bc

View file

@ -127,10 +127,15 @@ KCOV_INSTRUMENT_stackleak.o := n
$(obj)/configs.o: $(obj)/config_data.gz
targets += config_data.gz
$(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE
targets += config_data config_data.gz
$(obj)/config_data.gz: $(obj)/config_data FORCE
$(call if_changed,gzip)
filechk_cat = cat $<
$(obj)/config_data: $(KCONFIG_CONFIG) FORCE
$(call filechk,cat)
$(obj)/kheaders.o: $(obj)/kheaders_data.tar.xz
quiet_cmd_genikh = CHK $(obj)/kheaders_data.tar.xz

View file

@ -6085,21 +6085,21 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int t
static int
select_idle_capacity(struct task_struct *p, struct sched_domain *sd, int target)
{
unsigned long best_cap = 0;
unsigned long task_util, best_cap = 0;
int cpu, best_cpu = -1;
struct cpumask *cpus;
sync_entity_load_avg(&p->se);
cpus = this_cpu_cpumask_var_ptr(select_idle_mask);
cpumask_and(cpus, sched_domain_span(sd), p->cpus_ptr);
task_util = uclamp_task_util(p);
for_each_cpu_wrap(cpu, cpus, target) {
unsigned long cpu_cap = capacity_of(cpu);
if (!available_idle_cpu(cpu) && !sched_idle_cpu(cpu))
continue;
if (task_fits_capacity(p, cpu_cap))
if (fits_capacity(task_util, cpu_cap))
return cpu;
if (cpu_cap > best_cap) {
@ -6111,14 +6111,60 @@ select_idle_capacity(struct task_struct *p, struct sched_domain *sd, int target)
return best_cpu;
}
static inline bool asym_fits_capacity(int task_util, int cpu)
{
if (static_branch_unlikely(&sched_asym_cpucapacity))
return fits_capacity(task_util, capacity_of(cpu));
return true;
}
/*
* Try and locate an idle core/thread in the LLC cache domain.
*/
static int select_idle_sibling(struct task_struct *p, int prev, int target)
{
struct sched_domain *sd;
unsigned long task_util;
int i, recent_used_cpu;
/*
* On asymmetric system, update task utilization because we will check
* that the task fits with cpu's capacity.
*/
if (static_branch_unlikely(&sched_asym_cpucapacity)) {
sync_entity_load_avg(&p->se);
task_util = uclamp_task_util(p);
}
if ((available_idle_cpu(target) || sched_idle_cpu(target)) &&
asym_fits_capacity(task_util, target))
return target;
/*
* If the previous CPU is cache affine and idle, don't be stupid:
*/
if (prev != target && cpus_share_cache(prev, target) &&
(available_idle_cpu(prev) || sched_idle_cpu(prev)) &&
asym_fits_capacity(task_util, prev))
return prev;
/* Check a recently used CPU as a potential idle candidate: */
recent_used_cpu = p->recent_used_cpu;
if (recent_used_cpu != prev &&
recent_used_cpu != target &&
cpus_share_cache(recent_used_cpu, target) &&
(available_idle_cpu(recent_used_cpu) || sched_idle_cpu(recent_used_cpu)) &&
cpumask_test_cpu(p->recent_used_cpu, p->cpus_ptr) &&
asym_fits_capacity(task_util, recent_used_cpu)) {
/*
* Replace recent_used_cpu with prev as it is a potential
* candidate for the next wake:
*/
p->recent_used_cpu = prev;
return recent_used_cpu;
}
/*
* For asymmetric CPU capacity systems, our domain of interest is
* sd_asym_cpucapacity rather than sd_llc.
@ -6133,37 +6179,10 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
* SD_ASYM_CPUCAPACITY. These should follow the usual symmetric
* capacity path.
*/
if (!sd)
goto symmetric;
i = select_idle_capacity(p, sd, target);
return ((unsigned)i < nr_cpumask_bits) ? i : target;
}
symmetric:
if (available_idle_cpu(target) || sched_idle_cpu(target))
return target;
/*
* If the previous CPU is cache affine and idle, don't be stupid:
*/
if (prev != target && cpus_share_cache(prev, target) &&
(available_idle_cpu(prev) || sched_idle_cpu(prev)))
return prev;
/* Check a recently used CPU as a potential idle candidate: */
recent_used_cpu = p->recent_used_cpu;
if (recent_used_cpu != prev &&
recent_used_cpu != target &&
cpus_share_cache(recent_used_cpu, target) &&
(available_idle_cpu(recent_used_cpu) || sched_idle_cpu(recent_used_cpu)) &&
cpumask_test_cpu(p->recent_used_cpu, p->cpus_ptr)) {
/*
* Replace recent_used_cpu with prev as it is a potential
* candidate for the next wake:
*/
p->recent_used_cpu = prev;
return recent_used_cpu;
if (sd) {
i = select_idle_capacity(p, sd, target);
return ((unsigned)i < nr_cpumask_bits) ? i : target;
}
}
sd = rcu_dereference(per_cpu(sd_llc, target));