# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

description     "mount cgroups on /sys/fs/cgroup"
author          "chromium-os-dev@chromium.org"

start on starting boot-services
task

script
  log() {
    logger -t "${UPSTART_JOB}" "failed to mount cgroup susbsystem $1"
  }

  default_mount_opts="noexec,nosuid,nodev"

  mount -t tmpfs -o mode=755,${default_mount_opts} none /sys/fs/cgroup

  for subsys in cpu freezer devices cpuacct cpuset schedtune; do
    # Verify that the subsystem is available on our kernel.
    grep -q ${subsys} /proc/cgroups || continue

    mkdir -p /sys/fs/cgroup/${subsys}
    mount_opts="${default_mount_opts}"
    if [ "${subsys}" = "cpuset" ]; then
      # To be compatible with how Android container mounts cpusets
      # we mount without prefix (so "cpuset.cpus" turns into "cpus").
      mount_opts="${mount_opts},noprefix"
    fi
    mount -t cgroup cgroup /sys/fs/cgroup/${subsys} \
          -o ${subsys},${mount_opts} || log ${subsys}
    mkdir -p /sys/fs/cgroup/${subsys}/session_manager_containers
    if id -u android-root 2>/dev/null; then
      chown android-root:android-root \
          /sys/fs/cgroup/${subsys}/session_manager_containers
    fi
    if id -u user-containers 2>/dev/null; then
      mkdir -p /sys/fs/cgroup/${subsys}/user_containers
      chown user-containers:user-containers \
            /sys/fs/cgroup/${subsys}/user_containers
    fi
    mkdir -p /sys/fs/cgroup/${subsys}/chronos_containers
    chown chronos:chronos /sys/fs/cgroup/${subsys}/chronos_containers
  done

  # Create and set up Chrome cpusets with default settings
  # (all cpus, all mems).
  cpuset_root_dir="/sys/fs/cgroup/cpuset"
  if [ -d "${cpuset_root_dir}" ]; then
    cpuset_root_cpus=$(cat "${cpuset_root_dir}/cpus")
    cpuset_root_mems=$(cat "${cpuset_root_dir}/mems")
    for cset in chrome chrome/urgent chrome/non-urgent; do
      cset_dir="${cpuset_root_dir}/${cset}"
      mkdir -p "${cset_dir}"
      chown chronos:chronos "${cset_dir}/tasks"
      echo "${cpuset_root_cpus}" > "${cset_dir}/cpus"
      echo "${cpuset_root_mems}" > "${cset_dir}/mems"
    done

    # Adjust cpusets of the rest of the created containers to
    # also have all available cpus and all mems.
    for cset in session_manager_containers chronos_containers user_containers;
    do
      cset_dir="${cpuset_root_dir}/${cset}"
      if [ -d "${cset_dir}" ]; then
        echo "${cpuset_root_cpus}" > "${cset_dir}/cpus"
        echo "${cpuset_root_mems}" > "${cset_dir}/mems"
      fi
    done
  fi

  schedtune_root_dir="/sys/fs/cgroup/schedtune"
  if [ -d "${schedtune_root_dir}" ]; then
    for cset in chrome chrome/urgent; do
      cset_dir="${schedtune_root_dir}/${cset}"
      mkdir -p "${cset_dir}"
      chown chronos:chronos "${cset_dir}/tasks"
    done
  fi

end script
