Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit d66e916

Browse files
Carlos LlamasTreehugger Robot
authored andcommitted
ANDROID: fix ABI-break in struct cgroup_root
Fix the ABI issues introduced by commit dd9542a ("cgroup: Make operations on the cgroup root_list RCU safe"). Use _some_ of the bits reserved in cgroup_root for the new root->rcu member. This new offset restricts the usage of kfree_rcu() though, so this call has replaced with call_rcu() instead. Update the stg file with this update: type 'struct cgroup_root' changed member 'u8 android_backport_reserved1[28]' was removed member 'union { struct callback_head rcu; struct { u8 android_backport_reserved1[28]; }; union { }; }' was added Bug: 379227997 Suggested-by: T.J. Mercier <[email protected]> Change-Id: I3e76ca05ee6d68f7167bf487348f438cd2a00d5f Signed-off-by: Carlos Llamas <[email protected]>
1 parent a3937e3 commit d66e916

File tree

4 files changed

+41
-6
lines changed

4 files changed

+41
-6
lines changed

android/abi_gki_aarch64.stg

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42307,6 +42307,10 @@ member {
4230742307
id: 0x2ef635de
4230842308
type_id: 0x34f6a768
4230942309
}
42310+
member {
42311+
id: 0x2efe0273
42312+
type_id: 0x34d679de
42313+
}
4231042314
member {
4231142315
id: 0x2f1819a7
4231242316
type_id: 0x334e168e
@@ -43924,6 +43928,11 @@ member {
4392443928
type_id: 0x73b9d605
4392543929
offset: 256
4392643930
}
43931+
member {
43932+
id: 0x3f2a640d
43933+
type_id: 0x7387dd81
43934+
offset: 49472
43935+
}
4392743936
member {
4392843937
id: 0x3f2df7ff
4392943938
type_id: 0x7399b0f3
@@ -49772,10 +49781,9 @@ member {
4977249781
type_id: 0x92233392
4977349782
}
4977449783
member {
49775-
id: 0xb2e8fb7e
49784+
id: 0xb2e8f417
4977649785
name: "android_backport_reserved1"
4977749786
type_id: 0x1159eb36
49778-
offset: 49472
4977949787
}
4978049788
member {
4978149789
id: 0x71aeb2cd
@@ -222059,6 +222067,14 @@ struct_union {
222059222067
member_id: 0x39ff19b6
222060222068
}
222061222069
}
222070+
struct_union {
222071+
id: 0x34d679de
222072+
kind: STRUCT
222073+
definition {
222074+
bytesize: 32
222075+
member_id: 0xb2e8f417
222076+
}
222077+
}
222062222078
struct_union {
222063222079
id: 0x34ed11d4
222064222080
kind: STRUCT
@@ -226230,6 +226246,16 @@ struct_union {
226230226246
member_id: 0x92478c56
226231226247
}
226232226248
}
226249+
struct_union {
226250+
id: 0x7387dd81
226251+
kind: UNION
226252+
definition {
226253+
bytesize: 32
226254+
member_id: 0x95dac977
226255+
member_id: 0x2efe0273
226256+
member_id: 0x36752b74
226257+
}
226258+
}
226233226259
struct_union {
226234226260
id: 0x7399b0f3
226235226261
kind: UNION
@@ -231813,7 +231839,7 @@ struct_union {
231813231839
member_id: 0x2d2d08b0
231814231840
member_id: 0xe8e1b772
231815231841
member_id: 0x0de6d95b
231816-
member_id: 0xb2e8fb7e
231842+
member_id: 0x3f2a640d
231817231843
}
231818231844
}
231819231845
struct_union {

android/abi_gki_aarch64.stg.allowed_breaks

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,7 @@ type 'enum ftrace_dump_mode' changed
8282

8383
1 variable symbol(s) removed
8484
'struct tracepoint __tracepoint_android_vh_suitable_migration_target_bypass'
85+
86+
type 'struct cgroup_root' changed
87+
member 'u8 android_backport_reserved1[28]' was removed
88+
member 'union { struct callback_head rcu; struct { u8 android_backport_reserved1[28]; }; union { }; }' was added

include/linux/cgroup-defs.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,6 @@ struct cgroup_root {
575575

576576
/* A list running through the active hierarchies */
577577
struct list_head root_list;
578-
struct rcu_head rcu;
579578

580579
/* Hierarchy-specific flags */
581580
unsigned int flags;
@@ -586,7 +585,8 @@ struct cgroup_root {
586585
/* The name for this hierarchy - may be empty */
587586
char name[MAX_CGROUP_ROOT_NAMELEN];
588587

589-
ANDROID_BACKPORT_RESERVE_ARRAY(1, CGROUP_SUBSYS_COUNT * sizeof(atomic_t));
588+
ANDROID_BACKPORT_USE_ARRAY(1, CGROUP_SUBSYS_COUNT * sizeof(atomic_t),
589+
struct rcu_head rcu);
590590
};
591591

592592
/*

kernel/cgroup/cgroup.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1315,9 +1315,14 @@ static void cgroup_exit_root_id(struct cgroup_root *root)
13151315
idr_remove(&cgroup_hierarchy_idr, root->hierarchy_id);
13161316
}
13171317

1318+
static void __cgroup_free_root(struct rcu_head *rcu)
1319+
{
1320+
kfree(container_of(rcu, struct cgroup_root, rcu));
1321+
}
1322+
13181323
void cgroup_free_root(struct cgroup_root *root)
13191324
{
1320-
kfree_rcu(root, rcu);
1325+
call_rcu(&root->rcu, __cgroup_free_root);
13211326
}
13221327

13231328
static void cgroup_destroy_root(struct cgroup_root *root)

0 commit comments

Comments
 (0)