mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 05:29:04 -04:00
Merge branch 'android11-5.4' into android11-5.4-lts
Sync up with android11-5.4 for the following commits: *b86f2ce54fMerge tag 'android11-5.4.233_r00' into android11-5.4 *5ccb6ea4bcUPSTREAM: ext4: fix another off-by-one fsmap error on 1k block filesystems *f756dbba7bUPSTREAM: ext4: refuse to create ea block when umounted *aefbae5b92UPSTREAM: ext4: optimize ea_inode block expansion *7431096bfdUPSTREAM: ext4: allocate extended attribute value in vmalloc area *7cfbc7501bBACKPORT: FROMGIT: cgroup: Use separate src/dst nodes when preloading css_sets for migration *b62f2af118ANDROID: fs/f2fs: fixup __f2fs_cluster_blocks with F2FS_FS_COMPRESSION *9f71ba69cdUPSTREAM: usb: gadget: f_fs: Ensure ep0req is dequeued before free_request *62b8ef0458UPSTREAM: KVM: VMX: Execute IBPB on emulated VM-exit when guest has IBRS *2af3bdf293UPSTREAM: ext4: add inode table check in __ext4_get_inode_loc to aovid possible infinite loop *9adb062d06UPSTREAM: net_sched: reject TCF_EM_SIMPLE case for complex ematch module *5a1412b39bUPSTREAM: ipv6: ensure sane device mtu in tunnels *2490e55ff4BACKPORT: iommu: Avoid races around device probe *3daec397eeBACKPORT: mac80211_hwsim: notify wmediumd of used MAC addresses *b6a441d634FROMGIT: mac80211_hwsim: add concurrent channels scanning support over virtio *1866ee1a90ANDROID: ABI: Cuttlefish Symbol update *e55bdca2cbUPSTREAM: media: dvb-core: Fix UAF due to refcount races at releasing *d72fdcc709ANDROID: abi_gki_aarch64_qcom: Add hrtimer_sleeper_start_expires *b63a7aff8aUPSTREAM: ALSA: pcm: Move rwsem lock inside snd_ctl_elem_read to prevent UAF Update the .xml file with the new symbols being tracked now: 2 Added functions: [A] 'function void hrtimer_sleeper_start_expires(hrtimer_sleeper*, hrtimer_mode)' [A] 'function bool ieee80211_tx_prepare_skb(ieee80211_hw*, ieee80211_vif*, sk_buff*, int, ieee80211_sta**)' Change-Id: Ida9475b812bf2e4b2f80bff6c554df60b288d2e7 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
b6d6caabaf
10 changed files with 5216 additions and 4992 deletions
|
|
@ -735,25 +735,28 @@ EXPORT_SYMBOL_GPL(of_css);
|
|||
* reference-counted, to improve performance when child cgroups
|
||||
* haven't been created.
|
||||
*/
|
||||
struct css_set init_css_set = {
|
||||
.refcount = REFCOUNT_INIT(1),
|
||||
.dom_cset = &init_css_set,
|
||||
.tasks = LIST_HEAD_INIT(init_css_set.tasks),
|
||||
.mg_tasks = LIST_HEAD_INIT(init_css_set.mg_tasks),
|
||||
.dying_tasks = LIST_HEAD_INIT(init_css_set.dying_tasks),
|
||||
.task_iters = LIST_HEAD_INIT(init_css_set.task_iters),
|
||||
.threaded_csets = LIST_HEAD_INIT(init_css_set.threaded_csets),
|
||||
.cgrp_links = LIST_HEAD_INIT(init_css_set.cgrp_links),
|
||||
.mg_preload_node = LIST_HEAD_INIT(init_css_set.mg_preload_node),
|
||||
.mg_node = LIST_HEAD_INIT(init_css_set.mg_node),
|
||||
|
||||
/*
|
||||
* The following field is re-initialized when this cset gets linked
|
||||
* in cgroup_init(). However, let's initialize the field
|
||||
* statically too so that the default cgroup can be accessed safely
|
||||
* early during boot.
|
||||
*/
|
||||
.dfl_cgrp = &cgrp_dfl_root.cgrp,
|
||||
struct ext_css_set init_ext_css_set = {
|
||||
.cset = {
|
||||
.refcount = REFCOUNT_INIT(1),
|
||||
.dom_cset = &init_css_set,
|
||||
.tasks = LIST_HEAD_INIT(init_css_set.tasks),
|
||||
.mg_tasks = LIST_HEAD_INIT(init_css_set.mg_tasks),
|
||||
.dying_tasks = LIST_HEAD_INIT(init_css_set.dying_tasks),
|
||||
.task_iters = LIST_HEAD_INIT(init_css_set.task_iters),
|
||||
.threaded_csets = LIST_HEAD_INIT(init_css_set.threaded_csets),
|
||||
.cgrp_links = LIST_HEAD_INIT(init_css_set.cgrp_links),
|
||||
.mg_preload_node = LIST_HEAD_INIT(init_css_set.mg_preload_node),
|
||||
.mg_node = LIST_HEAD_INIT(init_css_set.mg_node),
|
||||
/*
|
||||
* The following field is re-initialized when this cset gets linked
|
||||
* in cgroup_init(). However, let's initialize the field
|
||||
* statically too so that the default cgroup can be accessed safely
|
||||
* early during boot.
|
||||
*/
|
||||
.dfl_cgrp = &cgrp_dfl_root.cgrp,
|
||||
},
|
||||
.mg_src_preload_node = LIST_HEAD_INIT(init_ext_css_set.mg_src_preload_node),
|
||||
.mg_dst_preload_node = LIST_HEAD_INIT(init_ext_css_set.mg_dst_preload_node),
|
||||
};
|
||||
|
||||
static int css_set_count = 1; /* 1 for init_css_set */
|
||||
|
|
@ -1181,6 +1184,7 @@ static struct css_set *find_css_set(struct css_set *old_cset,
|
|||
struct cgroup *cgrp)
|
||||
{
|
||||
struct cgroup_subsys_state *template[CGROUP_SUBSYS_COUNT] = { };
|
||||
struct ext_css_set *ext_cset;
|
||||
struct css_set *cset;
|
||||
struct list_head tmp_links;
|
||||
struct cgrp_cset_link *link;
|
||||
|
|
@ -1201,9 +1205,10 @@ static struct css_set *find_css_set(struct css_set *old_cset,
|
|||
if (cset)
|
||||
return cset;
|
||||
|
||||
cset = kzalloc(sizeof(*cset), GFP_KERNEL);
|
||||
if (!cset)
|
||||
ext_cset = kzalloc(sizeof(*ext_cset), GFP_KERNEL);
|
||||
if (!ext_cset)
|
||||
return NULL;
|
||||
cset = &ext_cset->cset;
|
||||
|
||||
/* Allocate all the cgrp_cset_link objects that we'll need */
|
||||
if (allocate_cgrp_cset_links(cgroup_root_count, &tmp_links) < 0) {
|
||||
|
|
@ -1221,6 +1226,8 @@ static struct css_set *find_css_set(struct css_set *old_cset,
|
|||
INIT_HLIST_NODE(&cset->hlist);
|
||||
INIT_LIST_HEAD(&cset->cgrp_links);
|
||||
INIT_LIST_HEAD(&cset->mg_preload_node);
|
||||
INIT_LIST_HEAD(&ext_cset->mg_src_preload_node);
|
||||
INIT_LIST_HEAD(&ext_cset->mg_dst_preload_node);
|
||||
INIT_LIST_HEAD(&cset->mg_node);
|
||||
|
||||
/* Copy the set of subsystem state objects generated in
|
||||
|
|
@ -2671,22 +2678,28 @@ int cgroup_migrate_vet_dst(struct cgroup *dst_cgrp)
|
|||
*/
|
||||
void cgroup_migrate_finish(struct cgroup_mgctx *mgctx)
|
||||
{
|
||||
LIST_HEAD(preloaded);
|
||||
struct css_set *cset, *tmp_cset;
|
||||
struct ext_css_set *cset, *tmp_cset;
|
||||
|
||||
lockdep_assert_held(&cgroup_mutex);
|
||||
|
||||
spin_lock_irq(&css_set_lock);
|
||||
|
||||
list_splice_tail_init(&mgctx->preloaded_src_csets, &preloaded);
|
||||
list_splice_tail_init(&mgctx->preloaded_dst_csets, &preloaded);
|
||||
list_for_each_entry_safe(cset, tmp_cset, &mgctx->preloaded_src_csets,
|
||||
mg_src_preload_node) {
|
||||
cset->cset.mg_src_cgrp = NULL;
|
||||
cset->cset.mg_dst_cgrp = NULL;
|
||||
cset->cset.mg_dst_cset = NULL;
|
||||
list_del_init(&cset->mg_src_preload_node);
|
||||
put_css_set_locked(&cset->cset);
|
||||
}
|
||||
|
||||
list_for_each_entry_safe(cset, tmp_cset, &preloaded, mg_preload_node) {
|
||||
cset->mg_src_cgrp = NULL;
|
||||
cset->mg_dst_cgrp = NULL;
|
||||
cset->mg_dst_cset = NULL;
|
||||
list_del_init(&cset->mg_preload_node);
|
||||
put_css_set_locked(cset);
|
||||
list_for_each_entry_safe(cset, tmp_cset, &mgctx->preloaded_dst_csets,
|
||||
mg_dst_preload_node) {
|
||||
cset->cset.mg_src_cgrp = NULL;
|
||||
cset->cset.mg_dst_cgrp = NULL;
|
||||
cset->cset.mg_dst_cset = NULL;
|
||||
list_del_init(&cset->mg_dst_preload_node);
|
||||
put_css_set_locked(&cset->cset);
|
||||
}
|
||||
|
||||
spin_unlock_irq(&css_set_lock);
|
||||
|
|
@ -2713,6 +2726,7 @@ void cgroup_migrate_add_src(struct css_set *src_cset,
|
|||
struct cgroup_mgctx *mgctx)
|
||||
{
|
||||
struct cgroup *src_cgrp;
|
||||
struct ext_css_set *ext_src_cset;
|
||||
|
||||
lockdep_assert_held(&cgroup_mutex);
|
||||
lockdep_assert_held(&css_set_lock);
|
||||
|
|
@ -2726,8 +2740,9 @@ void cgroup_migrate_add_src(struct css_set *src_cset,
|
|||
return;
|
||||
|
||||
src_cgrp = cset_cgroup_from_root(src_cset, dst_cgrp->root);
|
||||
ext_src_cset = container_of(src_cset, struct ext_css_set, cset);
|
||||
|
||||
if (!list_empty(&src_cset->mg_preload_node))
|
||||
if (!list_empty(&ext_src_cset->mg_src_preload_node))
|
||||
return;
|
||||
|
||||
WARN_ON(src_cset->mg_src_cgrp);
|
||||
|
|
@ -2738,7 +2753,7 @@ void cgroup_migrate_add_src(struct css_set *src_cset,
|
|||
src_cset->mg_src_cgrp = src_cgrp;
|
||||
src_cset->mg_dst_cgrp = dst_cgrp;
|
||||
get_css_set(src_cset);
|
||||
list_add_tail(&src_cset->mg_preload_node, &mgctx->preloaded_src_csets);
|
||||
list_add_tail(&ext_src_cset->mg_src_preload_node, &mgctx->preloaded_src_csets);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2757,20 +2772,23 @@ void cgroup_migrate_add_src(struct css_set *src_cset,
|
|||
*/
|
||||
int cgroup_migrate_prepare_dst(struct cgroup_mgctx *mgctx)
|
||||
{
|
||||
struct css_set *src_cset, *tmp_cset;
|
||||
struct ext_css_set *ext_src_set, *tmp_cset;
|
||||
|
||||
lockdep_assert_held(&cgroup_mutex);
|
||||
|
||||
/* look up the dst cset for each src cset and link it to src */
|
||||
list_for_each_entry_safe(src_cset, tmp_cset, &mgctx->preloaded_src_csets,
|
||||
mg_preload_node) {
|
||||
list_for_each_entry_safe(ext_src_set, tmp_cset, &mgctx->preloaded_src_csets,
|
||||
mg_src_preload_node) {
|
||||
struct css_set *src_cset = &ext_src_set->cset;
|
||||
struct css_set *dst_cset;
|
||||
struct ext_css_set *ext_dst_cset;
|
||||
struct cgroup_subsys *ss;
|
||||
int ssid;
|
||||
|
||||
dst_cset = find_css_set(src_cset, src_cset->mg_dst_cgrp);
|
||||
if (!dst_cset)
|
||||
return -ENOMEM;
|
||||
ext_dst_cset = container_of(dst_cset, struct ext_css_set, cset);
|
||||
|
||||
WARN_ON_ONCE(src_cset->mg_dst_cset || dst_cset->mg_dst_cset);
|
||||
|
||||
|
|
@ -2782,7 +2800,7 @@ int cgroup_migrate_prepare_dst(struct cgroup_mgctx *mgctx)
|
|||
if (src_cset == dst_cset) {
|
||||
src_cset->mg_src_cgrp = NULL;
|
||||
src_cset->mg_dst_cgrp = NULL;
|
||||
list_del_init(&src_cset->mg_preload_node);
|
||||
list_del_init(&ext_src_set->mg_src_preload_node);
|
||||
put_css_set(src_cset);
|
||||
put_css_set(dst_cset);
|
||||
continue;
|
||||
|
|
@ -2790,8 +2808,8 @@ int cgroup_migrate_prepare_dst(struct cgroup_mgctx *mgctx)
|
|||
|
||||
src_cset->mg_dst_cset = dst_cset;
|
||||
|
||||
if (list_empty(&dst_cset->mg_preload_node))
|
||||
list_add_tail(&dst_cset->mg_preload_node,
|
||||
if (list_empty(&ext_dst_cset->mg_dst_preload_node))
|
||||
list_add_tail(&ext_dst_cset->mg_dst_preload_node,
|
||||
&mgctx->preloaded_dst_csets);
|
||||
else
|
||||
put_css_set(dst_cset);
|
||||
|
|
@ -3010,7 +3028,7 @@ static int cgroup_update_dfl_csses(struct cgroup *cgrp)
|
|||
DEFINE_CGROUP_MGCTX(mgctx);
|
||||
struct cgroup_subsys_state *d_css;
|
||||
struct cgroup *dsct;
|
||||
struct css_set *src_cset;
|
||||
struct ext_css_set *ext_src_set;
|
||||
bool has_tasks;
|
||||
int ret;
|
||||
|
||||
|
|
@ -3041,11 +3059,12 @@ static int cgroup_update_dfl_csses(struct cgroup *cgrp)
|
|||
goto out_finish;
|
||||
|
||||
spin_lock_irq(&css_set_lock);
|
||||
list_for_each_entry(src_cset, &mgctx.preloaded_src_csets, mg_preload_node) {
|
||||
list_for_each_entry(ext_src_set, &mgctx.preloaded_src_csets,
|
||||
mg_src_preload_node) {
|
||||
struct task_struct *task, *ntask;
|
||||
|
||||
/* all tasks in src_csets need to be migrated */
|
||||
list_for_each_entry_safe(task, ntask, &src_cset->tasks, cg_list)
|
||||
list_for_each_entry_safe(task, ntask, &ext_src_set->cset.tasks, cg_list)
|
||||
cgroup_migrate_add_task(task, &mgctx);
|
||||
}
|
||||
spin_unlock_irq(&css_set_lock);
|
||||
|
|
|
|||
Loading…
Reference in a new issue