#!/bin/sh

# Copyright 2016 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.

set -e

# Setup drm log tracing if available. This will allow us to access more verbose
# logs to debug display connectivity issues when they arise. The traces are
# accessible via chrome://system and included in feedback/crash reports.
#
# As configured, we won't have a lot of volume in these traces, they will only
# be written in cases where the display configuration changes, or an error
# occurs. As such, there is no performance impact during steady-state operation.
#
# TODO(seanpaul): Once we've finished moving over to the upstream tracefs
#                 implementation, remove the block initializing the downstream
#                 debugfs code. Tracked in b/163580546.
DRM_TRACE_DIR="/sys/kernel/debug/dri"
DRM_TRACE_MASK="${DRM_TRACE_DIR}/trace_mask"
if [ -w "${DRM_TRACE_MASK}" ]; then
  # 64kB per-cpu of drm logs.
  echo 64 > "${DRM_TRACE_DIR}/trace_size_kb"
  # 0x106 corresponds to (DRM_UT_DRIVER | DRM_UT_KMS | DRM_UT_DP).
  echo 0x106 > "${DRM_TRACE_MASK}"
fi
DRM_TRACEFS_INSTANCE="/sys/kernel/debug/tracing/instances/drm"
DRM_TRACEFS_BUF_SIZE="${DRM_TRACEFS_INSTANCE}/buffer_size_kb"
if [ -w "${DRM_TRACEFS_BUF_SIZE}" ]; then
  # 64kB per-cpu of drm logs.
  echo 64 > "${DRM_TRACEFS_BUF_SIZE}"
fi

mkdir -p "${UI_LOG_DIR}"
ln -sf ui.$(date +%Y%m%d-%H%M%S) "${UI_LOG_DIR}/${UI_LOG_FILE}"

mkdir -p "${CONTAINER_ROOT_DIR}"

# Create a top-level cpu cgroup for ui tasks.  This will be used to share cpu
# resources with tasks not managed by the UI.  Android will be placed in a
# parallel cgroup allowing priority to be given to one or the other depending
# on what the user is doing at the time.
if [ ! -d "${UI_CPU_CGROUP_DIR}" ]; then
  mkdir -p "${UI_CPU_CGROUP_DIR}"
fi

# Set up cgroups for chrome. We create two task groups, one for at most one
# foreground renderer and one for all the background renderers and set the
# background group to a very low priority. We specifically do not set it to
# the lowest "2" such that other processes like the update-engine can be even
# lower. The default value is 1024.
CHROME_CPU_CGROUP_DIR=/sys/fs/cgroup/cpu/chrome_renderers
if [ ! -d "${CHROME_CPU_CGROUP_DIR}" ]; then
  mkdir -p "${CHROME_CPU_CGROUP_DIR}/foreground"
  mkdir -p "${CHROME_CPU_CGROUP_DIR}/background"
  echo "10" > "${CHROME_CPU_CGROUP_DIR}/background/cpu.shares"
  chown -R chronos "${CHROME_CPU_CGROUP_DIR}"
fi

# Set up a folder on the stateful partition for ephemeral encrypted swap
# files.
USERSPACE_SWAP_DIR=/mnt/stateful_partition/unencrypted/userspace_swap.tmp/
if [ ! -d "${USERSPACE_SWAP_DIR}" ]; then
  mkdir -p "${USERSPACE_SWAP_DIR}"
  chown -R chronos "${USERSPACE_SWAP_DIR}"
fi

# Set up the renderer freezer.  This is used during the suspend/resume cycle
# to freeze all the chrome renderers so that they don't take up a lot of power
# when the system comes up in dark resume
if [ ! -d "${CHROME_FREEZER_CGROUP_DIR}" ]; then
  mkdir -p "${CHROME_FREEZER_CGROUP_DIR}"
  mkdir -p "${CHROME_FREEZER_CGROUP_DIR}/to_be_frozen"
  chown -R chronos "${CHROME_FREEZER_CGROUP_DIR}"
fi

# Set up a cgroup for containers(Android) started by session manager.  To
# start, limit the cpu shares of Android.  This will be reset to the default
# once the user clicks on an Android app.  Keeping the usage low prevents
# Android boot from slowing the login process.
CONTAINER_CGROUP_DIR=/sys/fs/cgroup/cpu/session_manager_containers
if [ -d "${CONTAINER_CGROUP_DIR}" ]; then
  echo "32" > "${CONTAINER_CGROUP_DIR}/cpu.shares"
  echo "-1" > "${CONTAINER_CGROUP_DIR}/cpu.cfs_quota_us"
fi

if crossystem "cros_debug?1"; then
  # Set up the alt-syscall kernel module (on systems with kernel 3.14 or later)
  # to allow developer mode only system calls to be exposed to Android
  # containers (and potentially other containers) when the system is in
  # developer mode.
  DEVMODE_SYSCALL=/proc/sys/kernel/chromiumos/alt_syscall/allow_devmode_syscalls
  if [ -e "${DEVMODE_SYSCALL}" ]; then
    echo "1" > "${DEVMODE_SYSCALL}"
  fi

  # /proc/sys/kernel/perf_event_paranoid controls the use of kernel perf events
  # system by users without the CAP_SYS_ADMIN capability (see
  # kernel/Documentation/sysctl/kernel.txt for details). On systems with kernel
  # 3.14 or later, we enable CONFIG_SECURITY_PERF_EVENTS_RESTRICT in kernel,
  # which sets the default value of perf_event_paranoid to a more restrictive
  # level "3", instead of "1". As alt-syscall exposes perf_event_open() to
  # Android containers when the system is in developer mode, restore
  # perf_event_paranoid to the less restrictive level "1".
  PERF_EVENT_PARANOID=/proc/sys/kernel/perf_event_paranoid
  if [ -e "${PERF_EVENT_PARANOID}" ]; then
    echo "1" > "${PERF_EVENT_PARANOID}"
  fi
fi

# Set up the lucid sleep debug flag.  This file only exists on devices that
# use kernel 3.14.  When this sysfs entry is set to 1, the kernel will treat
# all resumes as dark resumes, relying on chrome and powerd to detect any user
# activity and to transition out of dark resume into regular resume.  Since we
# are currently unable to distinguish the source that woke up the system, this
# is a temporary workaround to allow for apps and extensions to test lucid
# sleep functionality.  Chrome will write 1 to this file only if the
# wake-on-packets flag is set.
#
# TODO(chirantan): Remove this once the firmware change and corresponding
# kernel change for querying the wakeup source is ready (crbug.com/414949).
DARK_RESUME_ALWAYS_FILE=/sys/power/dark_resume_always
if [ -e "${DARK_RESUME_ALWAYS_FILE}" ]; then
  chown chronos "${DARK_RESUME_ALWAYS_FILE}"
fi
