struct list { struct list *next, *prev; }; static inline void list_init(struct list *list) { list->next = list; list->prev = list; } static inline int list_empty(struct list *list) { return list->next == list; } static inline void list_insert(struct list *link, struct list *new_link) { new_link->prev = link->prev; new_link->next = link; new_link->prev->next = new_link; new_link->next->prev = new_link; } static inline void list_append(struct list *list, struct list *new_link) { list_insert((struct list *)list, new_link); } static inline void list_prepend(struct list *list, struct list *new_link) { list_insert(list->next, new_link); } static inline void list_remove(struct list *link) { link->prev->next = link->next; link->next->prev = link->prev; } #define list_entry(link, type, member) \ ((type *)((char *)(link)-(unsigned long)(&((type *)0)->member))) #define list_head(list, type, member) \ list_entry((list)->next, type, member) #define list_tail(list, type, member) \ list_entry((list)->prev, type, member) #define list_next(elm, member) \ list_entry((elm)->member.next, typeof(*elm), member) #define list_for_each_entry(pos, list, member) \ for (pos = list_head(list, typeof(*pos), member); \ &pos->member != (list); \ pos = list_next(pos, member)) loop-back'>packet-loop-back net-next plumbingsTobias Klauser
summaryrefslogtreecommitdiff
path: root/sound/soc/codecs/rt5659.h
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2017-01-26 16:47:28 -0500
committerTejun Heo <tj@kernel.org>2017-01-26 16:47:28 -0500
commit07cd12945551b63ecb1a349d50a6d69d1d6feb4a (patch)
tree75f65eba7eac9277971082a2d5a4cf1370562c0c /sound/soc/codecs/rt5659.h
parent7ce7d89f48834cefece7804d38fc5d85382edf77 (diff)
cgroup: don't online subsystems before cgroup_name/path() are operational
While refactoring cgroup creation, a5bca2152036 ("cgroup: factor out cgroup_create() out of cgroup_mkdir()") incorrectly onlined subsystems before the new cgroup is associated with it kernfs_node. This is fine for cgroup proper but cgroup_name/path() depend on the associated kernfs_node and if a subsystem makes the new cgroup_subsys_state visible, which they're allowed to after onlining, it can lead to NULL dereference. The current code performs cgroup creation and subsystem onlining in cgroup_create() and cgroup_mkdir() makes the cgroup and subsystems visible afterwards. There's no reason to online the subsystems early and we can simply drop cgroup_apply_control_enable() call from cgroup_create() so that the subsystems are onlined and made visible at the same time. Signed-off-by: Tejun Heo <tj@kernel.org> Reported-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Fixes: a5bca2152036 ("cgroup: factor out cgroup_create() out of cgroup_mkdir()") Cc: stable@vger.kernel.org # v4.6+
Diffstat (limited to 'sound/soc/codecs/rt5659.h')