2015년 8월 15일 토요일

[Linux Kernel] 114주차(2015.08.15) group_init_early()

ARM10C : 114 주차
일시 : 2015.08.15 (114 주차 스터디 진행)
모임명 : NAVER_개발자커뮤니티지원_10차ARM-C
장소 : 토즈 타워점
장소지원 : NAVER 개발자 커뮤니티 지원 프로그램
참여인원 : 3명

114 주차 진도

  • start_kernel 1 ~/kernel/iamroot/linux-stable/init/main.c
    • cgroup_init_early 634 ~/kernel/iamroot/linux-stable/init/main.c
      • init_task 5239 RCU_INIT_POINTER(init_task.cgroups, &init_css_set);

main.c::start_kernel()

// ARM10C 20130824
// asmlinkage의 의미
// http://www.spinics.net/lists/arm-kernel/msg87677.html
asmlinkage void __init start_kernel(void)
{
    char * command_line;
    extern const struct kernel_param __start___param[], __stop___param[];
    // ATAG,DTB 정보로 사용

    /*
     * Need to run as early as possible, to initialize the
     * lockdep hash:
     */
    lockdep_init();
    smp_setup_processor_id();
    debug_objects_early_init();

    /*
     * Set up the the initial canary ASAP:
     */
    boot_init_stack_canary();

    cgroup_init_early();

cgroup.c::cgroup_init_early()

  • call: start_kernel()->cgroup_init_early()
    • cgroup_init_early()
// ARM10C 20150808
int __init cgroup_init_early(void)
{
    struct cgroup_subsys *ss;
    int i;

    atomic_set(&init_css_set.refcount, 1);

    // atomic_set에서 한일:
    // init_css_set.refcount: 1

    INIT_LIST_HEAD(&init_css_set.cgrp_links);

    // INIT_LIST_HEAD에서 한일:
    // (&init_css_set.cgrp_links)->next: &init_css_set.cgrp_links
    // (&init_css_set.cgrp_links)->prev: &init_css_set.cgrp_links

    INIT_LIST_HEAD(&init_css_set.tasks);

    // INIT_LIST_HEAD에서 한일:
    // (&init_css_set.tasks)->next: &init_css_set.tasks
    // (&init_css_set.tasks)->prev: &init_css_set.tasks

    INIT_HLIST_NODE(&init_css_set.hlist);

    // INIT_HLIST_NODE에서 한일:
    // (&init_css_set.hlist)->next: NULL
    // (&init_css_set.hlist)->pprev: NULL

    css_set_count = 1;
    // css_set_count: 1

    init_cgroup_root(&cgroup_dummy_root);

    // init_cgroup_root에서 한일:
    // (&(&cgroup_dummy_root)->subsys_list)->next: &(&cgroup_dummy_root)->subsys_list
    // (&(&cgroup_dummy_root)->subsys_list)->prev: &(&cgroup_dummy_root)->subsys_list
    // (&(&cgroup_dummy_root)->root_list)->next: &(&cgroup_dummy_root)->root_list
    // (&(&cgroup_dummy_root)->root_list)->prev: &(&cgroup_dummy_root)->root_list
    // (&(&(&cgroup_dummy_root)->top_cgroup)->sibling)->next: &(&(&cgroup_dummy_root)->top_cgroup)->sibling
    // (&(&(&cgroup_dummy_root)->top_cgroup)->sibling)->prev: &(&(&cgroup_dummy_root)->top_cgroup)->sibling
    // (&(&(&cgroup_dummy_root)->top_cgroup)->children)->next: &(&(&cgroup_dummy_root)->top_cgroup)->children
    // (&(&(&cgroup_dummy_root)->top_cgroup)->children)->prev: &(&(&cgroup_dummy_root)->top_cgroup)->children
    // (&(&(&cgroup_dummy_root)->top_cgroup)->files)->next: &(&(&cgroup_dummy_root)->top_cgroup)->files
    // (&(&(&cgroup_dummy_root)->top_cgroup)->files)->prev: &(&(&cgroup_dummy_root)->top_cgroup)->files
    // (&(&(&cgroup_dummy_root)->top_cgroup)->cset_links)->next: &(&(&cgroup_dummy_root)->top_cgroup)->cset_links
    // (&(&(&cgroup_dummy_root)->top_cgroup)->cset_links)->prev: &(&(&cgroup_dummy_root)->top_cgroup)->cset_links
    // (&(&(&cgroup_dummy_root)->top_cgroup)->release_list)->next: &(&(&cgroup_dummy_root)->top_cgroup)->release_list
    // (&(&(&cgroup_dummy_root)->top_cgroup)->release_list)->prev: &(&(&cgroup_dummy_root)->top_cgroup)->release_list
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlists)->next: &(&(&cgroup_dummy_root)->top_cgroup)->pidlists
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlists)->prev: &(&(&cgroup_dummy_root)->top_cgroup)->pidlists
    // (&(&(&cgroup_dummy_root)->top_cgroup)->event_list)->next: &(&(&cgroup_dummy_root)->top_cgroup)->event_list
    // (&(&(&cgroup_dummy_root)->top_cgroup)->event_list)->prev: &(&(&cgroup_dummy_root)->top_cgroup)->event_list
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->count: 1
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->wait_lock)->rlock)->raw_lock: { { 0 } }
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->wait_lock)->rlock)->magic: 0xdead4ead
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->wait_lock)->rlock)->owner: 0xffffffff
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->wait_lock)->rlock)->owner_cpu: 0xffffffff
    // (&(&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->wait_list)->next: &(&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->wait_list
    // (&(&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->wait_list)->prev: &(&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->wait_list
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->onwer: NULL
    // (&(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex)->magic: &(&(&cgroup_dummy_root)->top_cgroup)->pidlist_mutex
    // (&(&(&cgroup_dummy_root)->top_cgroup)->event_list_lock)->raw_lock: { { 0 } }
    // (&(&(&cgroup_dummy_root)->top_cgroup)->event_list_lock)->magic: 0xdead4ead
    // (&(&(&cgroup_dummy_root)->top_cgroup)->event_list_lock)->owner: 0xffffffff
    // (&(&(&cgroup_dummy_root)->top_cgroup)->event_list_lock)->owner_cpu: 0xffffffff
    // (&(&(&(&cgroup_dummy_root)->top_cgroup)->xattrs)->head)->next: &(&(&(&cgroup_dummy_root)->top_cgroup)->xattrs)->head
    // (&(&(&(&cgroup_dummy_root)->top_cgroup)->xattrs)->head)->prev: &(&(&(&cgroup_dummy_root)->top_cgroup)->xattrs)->head
    // (&(&(&(&cgroup_dummy_root)->top_cgroup)->xattrs)->lock)->raw_lock: { { 0 } }
    // (&(&(&(&cgroup_dummy_root)->top_cgroup)->xattrs)->lock)->magic: 0xdead4ead
    // (&(&(&(&cgroup_dummy_root)->top_cgroup)->xattrs)->lock)->owner: 0xffffffff
    // (&(&(&(&cgroup_dummy_root)->top_cgroup)->xattrs)->lock)->owner_cpu: 0xffffffff
    //
    // (&(&cgroup_dummy_root)->top_cgroup)->dummy_css.cgroup: &(&cgroup_dummy_root)->top_cgroup
    // (&(&cgroup_dummy_root)->top_cgroup)->root: &cgroup_dummy_root
    // (&(&cgroup_dummy_root)->top_cgroup)->name: (struct cgroup_name *)(&root_cgroup_name)
    // (&cgroup_dummy_root)->number_of_cgroups: 1
    //
    // (&cgroup_dummy_root)->cgroup_idr의 맵버값을 0으로 초기화 수행
    // (&(&(&cgroup_dummy_root)->cgroup_idr)->lock)->raw_lock: { { 0 } }
    // (&(&(&cgroup_dummy_root)->cgroup_idr)->lock)->magic: 0xdead4ead
    // (&(&(&cgroup_dummy_root)->cgroup_idr)->lock)->owner: 0xffffffff
    // (&(&(&cgroup_dummy_root)->cgroup_idr)->lock)->owner_cpu: 0xffffffff

    cgroup_root_count = 1;
    // cgroup_root_count: 1

    RCU_INIT_POINTER(init_task.cgroups, &init_css_set);

    // RCU_INIT_POINTER에서 한일:
    // (&(&cgroup_dummy_root)->top_cgroup)->name: (struct cgroup_name *)(&root_cgroup_name)

// 2015/08/08 종료
// 2015/08/15 시작
    init_cgrp_cset_link.cset = &init_css_set;
    // init_cgrp_cset_link.cset: &init_css_set

    // cgroup_dummy_top: &cgroup_dummy_root.top_cgroup
    init_cgrp_cset_link.cgrp = cgroup_dummy_top;
    // init_cgrp_cset_link.cgrp: &cgroup_dummy_root.top_cgroup

    list_add(&init_cgrp_cset_link.cset_link, &cgroup_dummy_top->cset_links);

    // list_add에서 한일:
    // list의 HEAD인 &cgroup_dummy_top->cset_links에 &init_cgrp_cset_link.cset_link 추가
    //
    // (&cgroup_dummy_top->cset_links)->prev: &init_cgrp_cset_link.cset_link
    // (&init_cgrp_cset_link.cset_link)->next: &cgroup_dummy_top->cset_links
    // (&init_cgrp_cset_link.cset_link)->prev: &cgroup_dummy_top->cset_links
    // (&cgroup_dummy_top->cset_links)->next: &init_cgrp_cset_link.cset_link

    list_add(&init_cgrp_cset_link.cgrp_link, &init_css_set.cgrp_links);

    // list_add에서 한일:
    // list의 HEAD인 &init_css_set.cgrp_links에 &init_cgrp_cset_link.cgrp_link 추가
    //
    // (&init_css_set.cgrp_links)->prev: &init_cgrp_cset_link.cgrp_link
    // (&init_cgrp_cset_link.cgrp_link)->next: &init_css_set.cgrp_links
    // (&init_cgrp_cset_link.cgrp_link)->prev: &init_css_set.cgrp_links
    // (&init_css_set.cgrp_links)->next: &init_cgrp_cset_link.cgrp_link

// 2015/08/15 종료

log

  • 1st log
0943280..851984e  master     -> origin/master
Updating 0943280..851984e
Fast-forward
arch/arm/include/asm/atomic.h    |   3 +
arch/arm/include/asm/processor.h |   1 +
fs/file.c                        |   1 +
fs/fs_struct.c                   |   1 +
include/asm-generic/param.h      |   1 +
include/linux/bitmap.h           |   2 +
include/linux/cgroup.h           |   5 +
include/linux/compiler.h         |   2 +
include/linux/cpumask.h          |  16 ++-
include/linux/ftrace.h           |   7 +-
include/linux/idr.h              |   2 +
include/linux/init_task.h        | 304 +++++++++++++++++++++++++++++++++++++--
include/linux/irqflags.h         |   3 +-
include/linux/list.h             |  82 +++++++++++
include/linux/lockdep.h          |   4 +-
include/linux/mutex-debug.h      |   2 +
include/linux/pid.h              |   4 +
include/linux/plist.h            |  13 ++
include/linux/rcupdate.h         |   7 +
include/linux/sched.h            |   2 +
include/linux/sched/rt.h         |   4 +
include/linux/spinlock.h         |   6 +
include/linux/spinlock_types.h   |  20 +++
include/linux/threads.h          |   1 +
include/linux/types.h            |   2 +
include/linux/xattr.h            |  15 ++
include/uapi/linux/sched.h       |   1 +
init/init_task.c                 | 112 +++++++++++++++
init/main.c                      |   1 +
kernel/cgroup.c                  | 263 +++++++++++++++++++++++++++++++++
kernel/locking/mutex.c           |   2 +
kernel/nsproxy.c                 |   1 +
lib/idr.c                        |  14 ++
mm/init-mm.c                     |   1 +
34 files changed, 891 insertions(+), 14 deletions(-)
  • 2nd log
851984e..a8f6f9b  master     -> origin/master
Updating 851984e..a8f6f9b
Fast-forward
kernel/cgroup.c | 2 ++
1 file changed, 2 insertions(+)

댓글 없음:

댓글 쓰기