diff --git a/android/GKI_VERSION b/android/GKI_VERSION
index 0735418fed1f..5bf5856b8bc6 100644
--- a/android/GKI_VERSION
+++ b/android/GKI_VERSION
@@ -1 +1 @@
-LTS_5.4.61_9c7cbdf8b4cf
+LTS_5.4.61_e0b1644a472e
diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml
index 41eb6b5ddfae..77fd73d8c10c 100644
--- a/android/abi_gki_aarch64.xml
+++ b/android/abi_gki_aarch64.xml
@@ -2682,6 +2682,7 @@
+
@@ -11459,6 +11460,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -14468,23 +14486,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -16008,7 +16009,7 @@
-
+
@@ -16078,18 +16079,18 @@
-
+
-
+
-
+
@@ -16097,7 +16098,7 @@
-
+
@@ -37764,7 +37765,6 @@
-
@@ -54745,25 +54745,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -56042,7 +56023,7 @@
-
+
@@ -56067,8 +56048,8 @@
-
-
+
+
@@ -56096,20 +56077,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -63854,7 +63821,7 @@
-
+
@@ -63863,7 +63830,7 @@
-
+
@@ -67901,6 +67868,10 @@
+
+
+
+
@@ -72944,6 +72915,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -73522,22 +73509,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -89134,23 +89105,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -89497,14 +89451,6 @@
-
-
-
-
-
-
-
-
@@ -89953,7 +89899,7 @@
-
+
@@ -91372,7 +91318,7 @@
-
+
@@ -91571,7 +91517,7 @@
-
+
@@ -91717,17 +91663,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -93397,14 +93332,14 @@
-
+
-
-
+
+
-
+
@@ -93413,69 +93348,69 @@
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -108981,240 +108916,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -109367,18 +109071,7 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -109567,13 +109260,6 @@
-
-
-
-
-
-
-
@@ -109581,10 +109267,6 @@
-
-
-
-
@@ -109799,7 +109481,7 @@
-
+
@@ -110505,6 +110187,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -113848,25 +113541,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -115836,6 +115510,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -118561,7 +118254,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -118645,6 +118599,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -118708,7 +118673,6 @@
-
@@ -123290,6 +123254,14 @@
+
+
+
+
+
+
+
+
@@ -124597,6 +124569,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -125347,9 +125360,10 @@
+
-
+
@@ -130921,6 +130935,6 @@
diff --git a/android/abi_gki_aarch64_d6430e6763.xml b/android/abi_gki_aarch64_d6430e6763.xml
index 9e395e56f806..3612f4152f77 100644
--- a/android/abi_gki_aarch64_d6430e6763.xml
+++ b/android/abi_gki_aarch64_d6430e6763.xml
@@ -1530,6 +1530,7 @@
+
@@ -1667,6 +1668,7 @@
+
@@ -7671,39 +7673,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -7814,6 +7784,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8388,6 +8376,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8401,6 +8403,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11400,44 +11422,44 @@
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
@@ -13168,17 +13190,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -16036,7 +16047,7 @@
-
+
@@ -18046,7 +18057,7 @@
-
+
@@ -20889,6 +20900,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -22395,6 +22417,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -24176,6 +24209,7 @@
+
@@ -24215,7 +24249,7 @@
-
+
@@ -24321,7 +24355,7 @@
-
+
@@ -24359,7 +24393,7 @@
-
+
@@ -24487,7 +24521,7 @@
-
+
@@ -27073,7 +27107,7 @@
-
+
@@ -28020,7 +28054,7 @@
-
+
@@ -29410,6 +29444,7 @@
+
@@ -33238,8 +33273,14 @@
+
+
+
+
+
+
@@ -33395,6 +33436,10 @@
+
+
+
+
@@ -36203,6 +36248,10 @@
+
+
+
+
@@ -39236,14 +39285,6 @@
-
-
-
-
-
-
-
-
@@ -43424,7 +43465,7 @@
-
+
@@ -43477,6 +43518,14 @@
+
+
+
+
+
+
+
+
@@ -48767,6 +48816,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -48796,17 +48856,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -53917,7 +53966,7 @@
-
+
@@ -54615,14 +54664,6 @@
-
-
-
-
-
-
-
-
@@ -54690,6 +54731,14 @@
+
+
+
+
+
+
+
+
@@ -55107,7 +55156,7 @@
-
+
@@ -55297,7 +55346,7 @@
-
+
@@ -57153,7 +57202,7 @@
-
+
@@ -66412,7 +66461,7 @@
-
+
@@ -67687,7 +67736,7 @@
-
+
@@ -67942,7 +67991,7 @@
-
+
@@ -70241,7 +70290,7 @@
-
+
@@ -70736,8 +70785,6 @@
-
-
@@ -83159,75 +83206,75 @@
-
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -83658,17 +83705,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -90578,11 +90614,6 @@
-
-
-
-
-
@@ -91070,22 +91101,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -91182,12 +91197,275 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -91250,7 +91528,7 @@
-
+
@@ -91325,75 +91603,14 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -91472,32 +91689,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -91613,23 +91804,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -91704,23 +91881,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -91854,154 +92014,14 @@
-
+
-
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -92040,16 +92060,14 @@
-
-
-
+
@@ -92061,7 +92079,7 @@
-
+
@@ -92144,107 +92162,99 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom
index bb024bf3a5d1..00e48da5d33a 100644
--- a/android/abi_gki_aarch64_qcom
+++ b/android/abi_gki_aarch64_qcom
@@ -1468,6 +1468,7 @@
netlink_unicast
net_ratelimit
new_inode
+ nf_conntrack_destroy
nla_memcpy
__nla_parse
nla_put_64bit
@@ -1665,6 +1666,7 @@
pci_walk_bus
pci_write_config_dword
pci_write_config_word
+ pci_dev_present
PDE_DATA
__per_cpu_offset
perf_trace_buf_alloc
diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig
index f121a388508e..77e707f79064 100644
--- a/arch/x86/configs/gki_defconfig
+++ b/arch/x86/configs/gki_defconfig
@@ -19,6 +19,7 @@ CONFIG_UCLAMP_TASK=y
CONFIG_CGROUPS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
+CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_SCHED=y
# CONFIG_FAIR_GROUP_SCHED is not set
CONFIG_UCLAMP_TASK_GROUP=y
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index 79d8b75310a8..34c14810f4b3 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -84,8 +84,7 @@ static void dma_buf_release(struct dentry *dentry)
int dtor_ret = 0;
dmabuf = dentry->d_fsdata;
-
- if (!dmabuf)
+ if (unlikely(!dmabuf))
return;
msm_dma_buf = to_msm_dma_buf(dmabuf);
diff --git a/kernel/kthread.c b/kernel/kthread.c
index 1e9bf63a30de..ec0bdcc79ef9 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -806,14 +807,15 @@ static void kthread_insert_work_sanity_check(struct kthread_worker *worker,
/* insert @work before @pos in @worker */
static void kthread_insert_work(struct kthread_worker *worker,
struct kthread_work *work,
- struct list_head *pos)
+ struct list_head *pos,
+ struct wake_q_head *wake_q)
{
kthread_insert_work_sanity_check(worker, work);
list_add_tail(&work->node, pos);
work->worker = worker;
if (!worker->current_work && likely(worker->task))
- wake_up_process(worker->task);
+ wake_q_add(wake_q, worker->task);
}
/**
@@ -831,15 +833,19 @@ static void kthread_insert_work(struct kthread_worker *worker,
bool kthread_queue_work(struct kthread_worker *worker,
struct kthread_work *work)
{
- bool ret = false;
+ DEFINE_WAKE_Q(wake_q);
unsigned long flags;
+ bool ret = false;
raw_spin_lock_irqsave(&worker->lock, flags);
if (!queuing_blocked(worker, work)) {
- kthread_insert_work(worker, work, &worker->work_list);
+ kthread_insert_work(worker, work, &worker->work_list, &wake_q);
ret = true;
}
raw_spin_unlock_irqrestore(&worker->lock, flags);
+
+ wake_up_q(&wake_q);
+
return ret;
}
EXPORT_SYMBOL_GPL(kthread_queue_work);
@@ -857,6 +863,7 @@ void kthread_delayed_work_timer_fn(struct timer_list *t)
struct kthread_delayed_work *dwork = from_timer(dwork, t, timer);
struct kthread_work *work = &dwork->work;
struct kthread_worker *worker = work->worker;
+ DEFINE_WAKE_Q(wake_q);
unsigned long flags;
/*
@@ -873,15 +880,18 @@ void kthread_delayed_work_timer_fn(struct timer_list *t)
/* Move the work from worker->delayed_work_list. */
WARN_ON_ONCE(list_empty(&work->node));
list_del_init(&work->node);
- kthread_insert_work(worker, work, &worker->work_list);
+ kthread_insert_work(worker, work, &worker->work_list, &wake_q);
raw_spin_unlock_irqrestore(&worker->lock, flags);
+
+ wake_up_q(&wake_q);
}
EXPORT_SYMBOL(kthread_delayed_work_timer_fn);
static void __kthread_queue_delayed_work(struct kthread_worker *worker,
struct kthread_delayed_work *dwork,
- unsigned long delay)
+ unsigned long delay,
+ struct wake_q_head *wake_q)
{
struct timer_list *timer = &dwork->timer;
struct kthread_work *work = &dwork->work;
@@ -897,7 +907,7 @@ static void __kthread_queue_delayed_work(struct kthread_worker *worker,
* on that there's no such delay when @delay is 0.
*/
if (!delay) {
- kthread_insert_work(worker, work, &worker->work_list);
+ kthread_insert_work(worker, work, &worker->work_list, wake_q);
return;
}
@@ -930,17 +940,21 @@ bool kthread_queue_delayed_work(struct kthread_worker *worker,
unsigned long delay)
{
struct kthread_work *work = &dwork->work;
+ DEFINE_WAKE_Q(wake_q);
unsigned long flags;
bool ret = false;
raw_spin_lock_irqsave(&worker->lock, flags);
if (!queuing_blocked(worker, work)) {
- __kthread_queue_delayed_work(worker, dwork, delay);
+ __kthread_queue_delayed_work(worker, dwork, delay, &wake_q);
ret = true;
}
raw_spin_unlock_irqrestore(&worker->lock, flags);
+
+ wake_up_q(&wake_q);
+
return ret;
}
EXPORT_SYMBOL_GPL(kthread_queue_delayed_work);
@@ -969,6 +983,7 @@ void kthread_flush_work(struct kthread_work *work)
KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
COMPLETION_INITIALIZER_ONSTACK(fwork.done),
};
+ DEFINE_WAKE_Q(wake_q);
struct kthread_worker *worker;
bool noop = false;
@@ -981,15 +996,18 @@ void kthread_flush_work(struct kthread_work *work)
WARN_ON_ONCE(work->worker != worker);
if (!list_empty(&work->node))
- kthread_insert_work(worker, &fwork.work, work->node.next);
+ kthread_insert_work(worker, &fwork.work,
+ work->node.next, &wake_q);
else if (worker->current_work == work)
kthread_insert_work(worker, &fwork.work,
- worker->work_list.next);
+ worker->work_list.next, &wake_q);
else
noop = true;
raw_spin_unlock_irq(&worker->lock);
+ wake_up_q(&wake_q);
+
if (!noop)
wait_for_completion(&fwork.done);
}
@@ -1067,6 +1085,7 @@ bool kthread_mod_delayed_work(struct kthread_worker *worker,
unsigned long delay)
{
struct kthread_work *work = &dwork->work;
+ DEFINE_WAKE_Q(wake_q);
unsigned long flags;
int ret = false;
@@ -1085,9 +1104,12 @@ bool kthread_mod_delayed_work(struct kthread_worker *worker,
ret = __kthread_cancel_work(work, true, &flags);
fast_queue:
- __kthread_queue_delayed_work(worker, dwork, delay);
+ __kthread_queue_delayed_work(worker, dwork, delay, &wake_q);
out:
raw_spin_unlock_irqrestore(&worker->lock, flags);
+
+ wake_up_q(&wake_q);
+
return ret;
}
EXPORT_SYMBOL_GPL(kthread_mod_delayed_work);
diff --git a/mm/memblock.c b/mm/memblock.c
index 2b94c94cf97a..6cd835034785 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -1630,6 +1630,7 @@ phys_addr_t __init_memblock memblock_end_of_DRAM(void)
return (memblock.memory.regions[idx].base + memblock.memory.regions[idx].size);
}
+EXPORT_SYMBOL_GPL(memblock_end_of_DRAM);
static phys_addr_t __init_memblock __find_max_addr(phys_addr_t limit)
{