# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/zbi/kernel_cmdline.gni")

kernel_cmdline("serial-legacy") {
  args = [ "kernel.serial=legacy" ]
  deps = [ "//build/validate:non_production_tag" ]
}

kernel_cmdline("pmm-checker") {
  args = [
    # Enable PMM checker to detect certain kinds of buffer overrun and
    # use-after-free bugs.
    "kernel.pmm-checker.enable=true",

    # Use a small fill size to minimize performance impact.  In practice,
    # corruption tends to happen at the start of a page so filling/checking only
    # the first 16 bytes provides decent coverage without sacrificing
    # performance.
    "kernel.pmm-checker.fill-size=16",
  ]
}

kernel_cmdline("toulouse") {
  args = [
    # Fuchsia does not have a deterministic ordering for bringing up PCI devices, so the
    # /dev/class/ethernet/xxx paths have no well-defined mapping to the ports on the front of the
    # device.
    # In order for netbooting and loglistener to work, we need to let netsvc know which path corresponds
    # to the left-most ethernet port.
    "kernel.serial=legacy",
    "netsvc.interface=/dev/sys/pci/00:1f.6/e1000/ethernet",
  ]
}

kernel_cmdline("x64-reduced-perf-variation") {
  args = [
    # Disable Intel Turbo Boost. Turbo Boost provides a significant speed-up to
    # many workloads, but — because CPU frequencies vary based on previous work,
    # work in other cores, system temperature, etc — makes performance of systems
    # less predictable. We prefer stability in our performance comparison
    # benchmarks.
    "kernel.x86.turbo=false",

    # Set the Intel HWP performance profile to be "stable", trying to keep the
    # CPU clock rate stable. With turbo boost disabled, this has only a small
    # effect, but helps ensure that wake ups from idle are fixed.
    "kernel.x86.hwp_policy=stable-performance",

    # Disable hyper-threading. Hyper-threading reduces predictability of
    # benchmarks, because the performance of a thread is significantly affected
    # by other threads on the core.
    "kernel.smp.ht=false",

    # Disable spectre mitigations. Spectre mitigations have significant
    # performance impact, but are currently only carried out on a subset of the
    # NUC fleet. This means that different devices have significantly different
    # performance characteristics, meaning that benchmark results vary
    # significantly based on the device running it.
    #
    # TODO(fxbug.dev/33161): Ideally, we should load microcode during Zircon boot,
    # which should bring all devices to the same patch level, removing the
    # performance differences when spectre mitigations are in place.
    "kernel.x86.disable_spec_mitigations=true",

    # Disable page scanning in all its forms. Page scanning is intended to
    # provide a memory benefit to final systems, but the operation of the scanner
    # and its unpredictable de-duplication or eviction  of memory in use by
    # benchmarks could cause noticable variation.
    "kernel.page-scanner.start-at-boot=false",
    "kernel.page-scanner.zero-page-scans-per-second=0",
    "kernel.page-scanner.enable-eviction=false",
  ]
}

kernel_cmdline("gce") {
  args = [ "kernel.serial=legacy" ]
}

kernel_cmdline("vs680") {
  args = [ "kernel.bypass-debuglog=true" ]
}

kernel_cmdline("c18") {
  args = [ "kernel.bypass-debuglog=true" ]
}

kernel_cmdline("vim3") {
  deps = [ ":pmm-checker" ]
  args = [
    # Prefer using the built-in NIC to the CDC-ether interface.
    "netsvc.interface=/dev/dwmac/dwmac/Designware-MAC/ethernet",
  ]
}
