summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Calianu <adrian.calianu@enea.com>2017-09-27 10:37:36 +0200
committerAdrian Calianu <adrian.calianu@enea.com>2017-09-27 10:37:36 +0200
commitad4d4e5cbad3ad875eaa59e0a919c014dfb6a39e (patch)
tree9f4ec55e714e2be67dab4b775775b704af454f74
parent7579efbdb49529f36652b69d4630c6c43907f77b (diff)
downloadenea-kernel-cache-ad4d4e5cbad3ad875eaa59e0a919c014dfb6a39e.tar.gz
add guest features from yocto branch
Signed-off-by: Adrian Calianu <adrian.calianu@enea.com>
-rw-r--r--6lowpan/6lowpan_n.cfg1
-rw-r--r--6lowpan/6lowpan_n.scc5
-rw-r--r--a.sh96
-rw-r--r--bcma/bcma_n.cfg9
-rw-r--r--bcma/bcma_n.scc4
-rw-r--r--btrfs/btrfs_n.cfg8
-rw-r--r--btrfs/btrfs_n.scc4
-rw-r--r--compilechecks/compilechecks_n.cfg6
-rw-r--r--compilechecks/compilechecks_n.scc4
-rw-r--r--cpu_freq/cpu_freq_n.cfg1
-rw-r--r--cpu_freq/cpu_freq_n.scc5
-rw-r--r--dmiid/dmiid_n.cfg1
-rw-r--r--dmiid/dmiid_n.scc5
-rw-r--r--features/netdevices/netdevices_n.cfg5
-rw-r--r--features/powermanagement/powermanagement_n.cfg1
-rw-r--r--hwmon/hwmon_n.cfg1
-rw-r--r--hwmon/hwmon_n.scc5
-rw-r--r--i2csupport/i2csupport_n.cfg80
-rw-r--r--i2csupport/i2csupport_n.scc4
-rw-r--r--intel-e1xxxx/e100_n.cfg1
-rw-r--r--intel-e1xxxx/e100_n.scc5
-rw-r--r--intel-e1xxxx/e1xxxx_m.cfg3
-rw-r--r--intel-e1xxxx/e1xxxx_m.scc5
-rw-r--r--intel-e1xxxx/e1xxxx_n.cfg3
-rw-r--r--intel-e1xxxx/e1xxxx_n.scc5
-rw-r--r--isdn/isdn_n.cfg4
-rw-r--r--isdn/isdn_n.scc4
-rw-r--r--ixgbevf/ixgbevf_y.cfg1
-rw-r--r--ixgbevf/ixgbevf_y.scc4
-rw-r--r--kvm/guest_kvm_y.cfg12
-rw-r--r--kvm/guest_kvm_y.scc4
-rw-r--r--kvm/guest_n.cfg4
-rw-r--r--kvm/guest_n.scc5
-rw-r--r--kvm/host_n.cfg2
-rw-r--r--kvm/host_n.scc5
-rw-r--r--kvm/qemu-kvm_m.cfg30
-rw-r--r--kvm/qemu-kvm_m.scc4
-rw-r--r--kvm/virtFS_y.cfg4
-rw-r--r--kvm/virtFS_y.scc4
-rw-r--r--kvm/virtio_balloon_y.cfg2
-rw-r--r--kvm/virtio_balloon_y.scc4
-rw-r--r--kvm/virtio_caif_y.cfg5
-rw-r--r--kvm/virtio_caif_y.scc4
-rw-r--r--kvm/virtio_input_y.cfg2
-rw-r--r--kvm/virtio_input_y.scc4
-rw-r--r--kvm/virtio_pci_legacy_y.cfg3
-rw-r--r--kvm/virtio_pci_legacy_y.scc4
-rw-r--r--kvm/virtio_y.cfg28
-rw-r--r--kvm/virtio_y.scc4
-rw-r--r--loopdev/loopdev_n.cfg2
-rw-r--r--loopdev/loopdev_n.scc4
-rw-r--r--msdos_fat_nt_fs/msdos_fat_nt_fs_n.cfg12
-rw-r--r--msdos_fat_nt_fs/msdos_fat_nt_fs_n.scc4
-rw-r--r--netblkdev/netblkdev_n.cfg1
-rw-r--r--netblkdev/netblkdev_n.scc4
-rw-r--r--netconsole/netconsole_n.cfg3
-rw-r--r--netconsole/netconsole_n.scc4
-rw-r--r--netfilter/netfilter_n.cfg222
-rw-r--r--netfilter/netfilter_n.scc4
-rw-r--r--netfilter/netfilter_y.cfg10
-rw-r--r--netfilter/netfilter_y.scc4
-rw-r--r--nfs/nfs_n.cfg44
-rw-r--r--nfs/nfs_n.scc4
-rw-r--r--parport/parport_n.cfg8
-rw-r--r--parport/parport_n.scc4
-rw-r--r--patches/boot_time_opt_guest/0102-cpuidle-skip-synchronize_rcu-on-single-CPU-systems.patch34
-rw-r--r--patches/boot_time_opt_guest/0103-sysrq-skip-synchronize_rcu-if-there-is-no-old-op.patch38
-rw-r--r--patches/boot_time_opt_guest/0104-fbcon-enable-no-blink-by-default.patch26
-rw-r--r--patches/boot_time_opt_guest/0105-vmstats-wakeups.patch28
-rw-r--r--patches/boot_time_opt_guest/0106-pci-probe.patch123
-rw-r--r--patches/boot_time_opt_guest/0107-cgroup.patch107
-rw-r--r--patches/boot_time_opt_guest/0108-smpboot-reuse-timer-calibration.patch45
-rw-r--r--patches/boot_time_opt_guest/0109-perf.patch28
-rw-r--r--patches/boot_time_opt_guest/0110-pci-probe-identify-known-devices.patch190
-rw-r--r--patches/boot_time_opt_guest/0111-init-no-wait-for-the-known-devices.patch39
-rw-r--r--patches/boot_time_opt_guest/0112-ksm-wakeups.patch32
-rw-r--r--patches/boot_time_opt_guest/0113-init-do_mounts-recreate-dev-root.patch42
-rw-r--r--patches/boot_time_opt_guest/0114-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch56
-rw-r--r--patches/boot_time_opt_guest/0151-mm-Export-do_madvise.patch84
-rw-r--r--patches/boot_time_opt_guest/0152-x86-kvm-Notify-host-to-release-pages.patch180
-rw-r--r--patches/boot_time_opt_guest/0153-x86-Return-memory-from-guest-to-host-kernel.patch155
-rw-r--r--patches/boot_time_opt_guest/0154-sysctl-vm-Fine-grained-cache-shrinking.patch137
-rw-r--r--patches/boot_time_opt_guest/guest_boot_time_opt.scc19
-rw-r--r--pci/pci_iov_m.cfg1
-rw-r--r--pci/pci_iov_m.scc4
-rw-r--r--pci/pci_iov_y.cfg1
-rw-r--r--pci/pci_iov_y.scc4
-rw-r--r--pcimodules/pcimodules_n.cfg19
-rw-r--r--pcimodules/pcimodules_n.scc4
-rw-r--r--perf/perf_n.cfg2
-rw-r--r--perf/perf_n.scc4
-rw-r--r--power_supply/power_supply_n.cfg1
-rw-r--r--power_supply/power_supply_n.scc5
-rw-r--r--ppp/ppp_n.cfg10
-rw-r--r--ppp/ppp_n.scc4
-rw-r--r--prockcore/prockcore_n.cfg1
-rw-r--r--prockcore/prockcore_n.scc4
-rw-r--r--reduced_kernel_footprint_guest/reduced_kernel_footprint_guest.scc75
-rw-r--r--serio/serio_n.cfg15
-rw-r--r--serio/serio_n.scc4
-rw-r--r--slip/slip_n.cfg5
-rw-r--r--slip/slip_n.scc4
-rw-r--r--thermal/thermal_n.cfg4
-rw-r--r--thermal/thermal_n.scc5
-rw-r--r--udev/udev.cfg28
-rw-r--r--udev/udev.scc7
-rw-r--r--udev/udev_crypto.cfg3
-rw-r--r--udev/udev_crypto.scc4
-rw-r--r--udev/udev_n.cfg1
-rw-r--r--udev/udev_n.scc5
-rw-r--r--udev/udev_opt.cfg10
-rw-r--r--udev/udev_opt.scc4
-rw-r--r--udev/udev_uefi.cfg2
-rw-r--r--udev/udev_uefi.scc4
-rw-r--r--vga/vga_n.cfg1
-rw-r--r--vga/vga_n.scc5
-rw-r--r--watchdog/watchdog_n.cfg1
-rw-r--r--watchdog/watchdog_n.scc5
-rw-r--r--x86_platform/x86_platform_n.cfg1
-rw-r--r--x86_platform/x86_platform_n.scc5
120 files changed, 2373 insertions, 0 deletions
diff --git a/6lowpan/6lowpan_n.cfg b/6lowpan/6lowpan_n.cfg
new file mode 100644
index 0000000..1bf0778
--- /dev/null
+++ b/6lowpan/6lowpan_n.cfg
@@ -0,0 +1 @@
CONFIG_6LOWPAN=n
diff --git a/6lowpan/6lowpan_n.scc b/6lowpan/6lowpan_n.scc
new file mode 100644
index 0000000..826fdc2
--- /dev/null
+++ b/6lowpan/6lowpan_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable 6LoWPAN support"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware 6lowpan_n.cfg
diff --git a/a.sh b/a.sh
new file mode 100644
index 0000000..7fd0726
--- /dev/null
+++ b/a.sh
@@ -0,0 +1,96 @@
1A features/6lowpan/6lowpan_n.cfg
2A features/6lowpan/6lowpan_n.scc
3A features/bcma/bcma_n.cfg
4A features/bcma/bcma_n.scc
5A features/btrfs/btrfs_n.cfg
6A features/btrfs/btrfs_n.scc
7A features/compilechecks/compilechecks_n.cfg
8A features/compilechecks/compilechecks_n.scc
9A features/cpu_freq/cpu_freq_n.cfg
10A features/cpu_freq/cpu_freq_n.scc
11A features/dmiid/dmiid_n.cfg
12A features/dmiid/dmiid_n.scc
13A features/hwmon/hwmon_n.cfg
14A features/hwmon/hwmon_n.scc
15A features/i2csupport/i2csupport_n.cfg
16A features/i2csupport/i2csupport_n.scc
17A features/intel-e1xxxx/e100_n.cfg
18A features/intel-e1xxxx/e100_n.scc
19A features/intel-e1xxxx/e1xxxx_n.cfg
20A features/intel-e1xxxx/e1xxxx_n.scc
21A features/isdn/isdn_n.cfg
22A features/isdn/isdn_n.scc
23A features/ixgbevf/ixgbevf_y.cfg
24A features/ixgbevf/ixgbevf_y.scc
25A features/kvm/guest_kvm_y.cfg
26A features/kvm/guest_kvm_y.scc
27A features/kvm/host_n.cfg
28A features/kvm/host_n.scc
29A features/kvm/virtFS_y.cfg
30A features/kvm/virtFS_y.scc
31A features/kvm/virtio_balloon_y.cfg
32A features/kvm/virtio_balloon_y.scc
33A features/kvm/virtio_caif_y.cfg
34A features/kvm/virtio_caif_y.scc
35A features/kvm/virtio_input_y.cfg
36A features/kvm/virtio_input_y.scc
37A features/kvm/virtio_pci_legacy_y.cfg
38A features/kvm/virtio_pci_legacy_y.scc
39A features/kvm/virtio_y.cfg
40A features/kvm/virtio_y.scc
41A features/loopdev/loopdev_n.cfg
42A features/loopdev/loopdev_n.scc
43A features/msdos_fat_nt_fs/msdos_fat_nt_fs_n.cfg
44A features/msdos_fat_nt_fs/msdos_fat_nt_fs_n.scc
45A features/netblkdev/netblkdev_n.cfg
46A features/netblkdev/netblkdev_n.scc
47A features/netconsole/netconsole_n.cfg
48A features/netconsole/netconsole_n.scc
49A features/netfilter/netfilter_n.cfg
50A features/netfilter/netfilter_n.scc
51A features/nfs/nfs_n.cfg
52A features/nfs/nfs_n.scc
53A features/parport/parport_n.cfg
54A features/parport/parport_n.scc
55A features/pci/pci_iov_y.cfg
56A features/pci/pci_iov_y.scc
57A features/pcimodules/pcimodules_n.cfg
58A features/pcimodules/pcimodules_n.scc
59A features/perf/perf_n.cfg
60A features/perf/perf_n.scc
61A features/power_supply/power_supply_n.cfg
62A features/power_supply/power_supply_n.scc
63A features/ppp/ppp_n.cfg
64A features/ppp/ppp_n.scc
65A features/prockcore/prockcore_n.cfg
66A features/prockcore/prockcore_n.scc
67A features/reduced_kernel_footprint_guest/reduced_kernel_footprint_guest.scc
68A features/serio/serio_n.cfg
69A features/serio/serio_n.scc
70A features/slip/slip_n.cfg
71A features/slip/slip_n.scc
72A features/thermal/thermal_n.cfg
73A features/thermal/thermal_n.scc
74A features/udev/udev_n.cfg
75A features/udev/udev_n.scc
76A features/vga/vga_n.cfg
77A features/vga/vga_n.scc
78A features/watchdog/watchdog_n.cfg
79A features/watchdog/watchdog_n.scc
80A features/x86_platform/x86_platform_n.cfg
81A features/x86_platform/x86_platform_n.scc
82A patches/boot_time_opt/0102-cpuidle-skip-synchronize_rcu-on-single-CPU-systems.patch
83A patches/boot_time_opt/0103-sysrq-skip-synchronize_rcu-if-there-is-no-old-op.patch
84A patches/boot_time_opt/0104-fbcon-enable-no-blink-by-default.patch
85A patches/boot_time_opt/0105-vmstats-wakeups.patch
86A patches/boot_time_opt/0106-pci-probe.patch
87A patches/boot_time_opt/0107-cgroup.patch
88A patches/boot_time_opt/0108-smpboot-reuse-timer-calibration.patch
89A patches/boot_time_opt/0109-perf.patch
90A patches/boot_time_opt/0110-pci-probe-identify-known-devices.patch
91A patches/boot_time_opt/0111-init-no-wait-for-the-known-devices.patch
92A patches/boot_time_opt/0112-ksm-wakeups.patch
93A patches/boot_time_opt/0113-init-do_mounts-recreate-dev-root.patch
94A patches/boot_time_opt/0114-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch
95A patches/boot_time_opt/guest_boot_time_opt.scc
96A patches/kernel_startend_msg/0001-printk-add-Enea-Linux-guest-boot-start-end-messages.patch
diff --git a/bcma/bcma_n.cfg b/bcma/bcma_n.cfg
new file mode 100644
index 0000000..ad052a3
--- /dev/null
+++ b/bcma/bcma_n.cfg
@@ -0,0 +1,9 @@
1#
2# Broadcom specific AMBA
3#
4CONFIG_BCMA=n
5CONFIG_BCMA_HOST_PCI_POSSIBLE=n
6CONFIG_BCMA_HOST_PCI=n
7# CONFIG_BCMA_HOST_SOC is not set
8CONFIG_BCMA_DRIVER_PCI=n
9CONFIG_BCMA_DRIVER_GMAC_CMN=n
diff --git a/bcma/bcma_n.scc b/bcma/bcma_n.scc
new file mode 100644
index 0000000..9cd6a4b
--- /dev/null
+++ b/bcma/bcma_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable bcma support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware bcma_n.cfg
diff --git a/btrfs/btrfs_n.cfg b/btrfs/btrfs_n.cfg
new file mode 100644
index 0000000..7322f27
--- /dev/null
+++ b/btrfs/btrfs_n.cfg
@@ -0,0 +1,8 @@
1CONFIG_BTRFS_FS=n
2CONFIG_BTRFS_FS_POSIX_ACL=n
3# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
4# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
5# CONFIG_BTRFS_DEBUG is not set
6# CONFIG_BTRFS_ASSERT is not set
7CONFIG_XOR_BLOCKS=n
8CONFIG_RAID6_PQ=n
diff --git a/btrfs/btrfs_n.scc b/btrfs/btrfs_n.scc
new file mode 100644
index 0000000..638f87f
--- /dev/null
+++ b/btrfs/btrfs_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable btrfs support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware btrfs_n.cfg
diff --git a/compilechecks/compilechecks_n.cfg b/compilechecks/compilechecks_n.cfg
new file mode 100644
index 0000000..87263f0
--- /dev/null
+++ b/compilechecks/compilechecks_n.cfg
@@ -0,0 +1,6 @@
1CONFIG_ENABLE_WARN_DEPRECATED=n
2CONFIG_ENABLE_MUST_CHECK=n
3CONFIG_UNUSED_SYMBOLS=n
4CONFIG_DEBUG_FS=n
5CONFIG_SECTION_MISMATCH_WARN_ONLY=n
6CONFIG_FRAME_POINTER=n
diff --git a/compilechecks/compilechecks_n.scc b/compilechecks/compilechecks_n.scc
new file mode 100644
index 0000000..cd3c68a
--- /dev/null
+++ b/compilechecks/compilechecks_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable compile checks support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware compilechecks_n.cfg
diff --git a/cpu_freq/cpu_freq_n.cfg b/cpu_freq/cpu_freq_n.cfg
new file mode 100644
index 0000000..51a9713
--- /dev/null
+++ b/cpu_freq/cpu_freq_n.cfg
@@ -0,0 +1 @@
CONFIG_CPU_FREQ=n
diff --git a/cpu_freq/cpu_freq_n.scc b/cpu_freq/cpu_freq_n.scc
new file mode 100644
index 0000000..b38ee5f
--- /dev/null
+++ b/cpu_freq/cpu_freq_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable CPU frequency scaling"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware cpu_freq_n.cfg
diff --git a/dmiid/dmiid_n.cfg b/dmiid/dmiid_n.cfg
new file mode 100644
index 0000000..61c1980
--- /dev/null
+++ b/dmiid/dmiid_n.cfg
@@ -0,0 +1 @@
CONFIG_DMIID=n
diff --git a/dmiid/dmiid_n.scc b/dmiid/dmiid_n.scc
new file mode 100644
index 0000000..470d344
--- /dev/null
+++ b/dmiid/dmiid_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable DMIID support"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware dmiid_n.cfg
diff --git a/features/netdevices/netdevices_n.cfg b/features/netdevices/netdevices_n.cfg
index 2b4db2b..9413d2a 100644
--- a/features/netdevices/netdevices_n.cfg
+++ b/features/netdevices/netdevices_n.cfg
@@ -33,6 +33,11 @@ CONFIG_BNXT=n
33CONFIG_BNXT_SRIOV=n 33CONFIG_BNXT_SRIOV=n
34CONFIG_NET_VENDOR_BROCADE=n 34CONFIG_NET_VENDOR_BROCADE=n
35# CONFIG_BNA is not set 35# CONFIG_BNA is not set
36CONFIG_NET_VENDOR_CAVIUM=n
37# CONFIG_THUNDER_NIC_PF is not set
38# CONFIG_THUNDER_NIC_VF is not set
39# CONFIG_THUNDER_NIC_BGX is not set
40# CONFIG_THUNDER_NIC_RGX is not set
36# CONFIG_LIQUIDIO is not set 41# CONFIG_LIQUIDIO is not set
37CONFIG_NET_VENDOR_CHELSIO=n 42CONFIG_NET_VENDOR_CHELSIO=n
38# CONFIG_CHELSIO_T1 is not set 43# CONFIG_CHELSIO_T1 is not set
diff --git a/features/powermanagement/powermanagement_n.cfg b/features/powermanagement/powermanagement_n.cfg
index 6052f83..6248144 100644
--- a/features/powermanagement/powermanagement_n.cfg
+++ b/features/powermanagement/powermanagement_n.cfg
@@ -1,3 +1,4 @@
1CONFIG_PM=n
1CONFIG_SUSPEND=n 2CONFIG_SUSPEND=n
2CONFIG_SUSPEND_FREEZER=n 3CONFIG_SUSPEND_FREEZER=n
3CONFIG_PM_SLEEP=n 4CONFIG_PM_SLEEP=n
diff --git a/hwmon/hwmon_n.cfg b/hwmon/hwmon_n.cfg
new file mode 100644
index 0000000..617d8f5
--- /dev/null
+++ b/hwmon/hwmon_n.cfg
@@ -0,0 +1 @@
CONFIG_HWMON=n
diff --git a/hwmon/hwmon_n.scc b/hwmon/hwmon_n.scc
new file mode 100644
index 0000000..633a107
--- /dev/null
+++ b/hwmon/hwmon_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable hardware monitor support"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware hwmon_n.cfg
diff --git a/i2csupport/i2csupport_n.cfg b/i2csupport/i2csupport_n.cfg
new file mode 100644
index 0000000..30c4a3e
--- /dev/null
+++ b/i2csupport/i2csupport_n.cfg
@@ -0,0 +1,80 @@
1CONFIG_REGMAP=n
2CONFIG_REGMAP_I2C=n
3#
4# EEPROM support
5#
6CONFIG_EEPROM_AT24=n
7#
8# I2C support
9#
10CONFIG_I2C=n
11CONFIG_ACPI_I2C_OPREGION=n
12CONFIG_I2C_BOARDINFO=n
13CONFIG_I2C_COMPAT=n
14# CONFIG_I2C_CHARDEV is not set
15# CONFIG_I2C_MUX is not set
16CONFIG_I2C_HELPER_AUTO=n
17CONFIG_I2C_SMBUS=n
18
19#
20# I2C Hardware Bus support
21#
22
23#
24# PC SMBus host controller drivers
25#
26# CONFIG_I2C_ALI1535 is not set
27# CONFIG_I2C_ALI1563 is not set
28# CONFIG_I2C_ALI15X3 is not set
29# CONFIG_I2C_AMD756 is not set
30# CONFIG_I2C_AMD8111 is not set
31CONFIG_I2C_I801=n
32# CONFIG_I2C_ISCH is not set
33# CONFIG_I2C_ISMT is not set
34# CONFIG_I2C_PIIX4 is not set
35# CONFIG_I2C_NFORCE2 is not set
36# CONFIG_I2C_SIS5595 is not set
37# CONFIG_I2C_SIS630 is not set
38# CONFIG_I2C_SIS96X is not set
39# CONFIG_I2C_VIA is not set
40# CONFIG_I2C_VIAPRO is not set
41
42#
43# ACPI drivers
44#
45# CONFIG_I2C_SCMI is not set
46
47#
48# I2C system bus drivers (mostly embedded / system-on-chip)
49#
50# CONFIG_I2C_DESIGNWARE_PLATFORM is not set
51# CONFIG_I2C_DESIGNWARE_PCI is not set
52# CONFIG_I2C_EMEV2 is not set
53# CONFIG_I2C_OCORES is not set
54# CONFIG_I2C_PCA_PLATFORM is not set
55# CONFIG_I2C_PXA_PCI is not set
56# CONFIG_I2C_SIMTEC is not set
57# CONFIG_I2C_XILINX is not set
58
59#
60# External I2C/SMBus adapter drivers
61#
62# CONFIG_I2C_DIOLAN_U2C is not set
63# CONFIG_I2C_PARPORT_LIGHT is not set
64# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
65# CONFIG_I2C_TAOS_EVM is not set
66# CONFIG_I2C_TINY_USB is not set
67
68#
69# Other I2C/SMBus bus drivers
70#
71# CONFIG_I2C_STUB is not set
72# CONFIG_I2C_SLAVE is not set
73# CONFIG_I2C_DEBUG_CORE is not set
74# CONFIG_I2C_DEBUG_ALGO is not set
75# CONFIG_I2C_DEBUG_BUS is not set
76
77#
78# SPI RTC drivers
79#
80CONFIG_RTC_I2C_AND_SPI=n
diff --git a/i2csupport/i2csupport_n.scc b/i2csupport/i2csupport_n.scc
new file mode 100644
index 0000000..ca127b1
--- /dev/null
+++ b/i2csupport/i2csupport_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable i2c support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware i2csupport_n.cfg
diff --git a/intel-e1xxxx/e100_n.cfg b/intel-e1xxxx/e100_n.cfg
new file mode 100644
index 0000000..dab91be
--- /dev/null
+++ b/intel-e1xxxx/e100_n.cfg
@@ -0,0 +1 @@
CONFIG_E100=n
diff --git a/intel-e1xxxx/e100_n.scc b/intel-e1xxxx/e100_n.scc
new file mode 100644
index 0000000..bdf9995
--- /dev/null
+++ b/intel-e1xxxx/e100_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Build E100 support as a module"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware e100_n.cfg
diff --git a/intel-e1xxxx/e1xxxx_m.cfg b/intel-e1xxxx/e1xxxx_m.cfg
new file mode 100644
index 0000000..c05e8c6
--- /dev/null
+++ b/intel-e1xxxx/e1xxxx_m.cfg
@@ -0,0 +1,3 @@
1CONFIG_E1000=m
2CONFIG_E1000E=m
3CONFIG_E1000E_HWTS=m
diff --git a/intel-e1xxxx/e1xxxx_m.scc b/intel-e1xxxx/e1xxxx_m.scc
new file mode 100644
index 0000000..d8a8f16
--- /dev/null
+++ b/intel-e1xxxx/e1xxxx_m.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Build E1xxxx drivers as modules"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware e1xxxx_m.cfg
diff --git a/intel-e1xxxx/e1xxxx_n.cfg b/intel-e1xxxx/e1xxxx_n.cfg
new file mode 100644
index 0000000..d12c714
--- /dev/null
+++ b/intel-e1xxxx/e1xxxx_n.cfg
@@ -0,0 +1,3 @@
1CONFIG_E1000=n
2CONFIG_E1000E=n
3CONFIG_E1000E_HWTS=n
diff --git a/intel-e1xxxx/e1xxxx_n.scc b/intel-e1xxxx/e1xxxx_n.scc
new file mode 100644
index 0000000..3d2b0f1
--- /dev/null
+++ b/intel-e1xxxx/e1xxxx_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Build E1xxxx drivers as modules"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware e1xxxx_n.cfg
diff --git a/isdn/isdn_n.cfg b/isdn/isdn_n.cfg
new file mode 100644
index 0000000..d17ce70
--- /dev/null
+++ b/isdn/isdn_n.cfg
@@ -0,0 +1,4 @@
1CONFIG_ISDN=n
2# CONFIG_ISDN_I4L is not set
3CONFIG_ISDN_CAPI=n
4CONFIG_CAPI_TRACE=n
diff --git a/isdn/isdn_n.scc b/isdn/isdn_n.scc
new file mode 100644
index 0000000..53404e7
--- /dev/null
+++ b/isdn/isdn_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable isdn support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware isdn_n.cfg
diff --git a/ixgbevf/ixgbevf_y.cfg b/ixgbevf/ixgbevf_y.cfg
new file mode 100644
index 0000000..26ca642
--- /dev/null
+++ b/ixgbevf/ixgbevf_y.cfg
@@ -0,0 +1 @@
CONFIG_IXGBEVF=y
diff --git a/ixgbevf/ixgbevf_y.scc b/ixgbevf/ixgbevf_y.scc
new file mode 100644
index 0000000..4772d88
--- /dev/null
+++ b/ixgbevf/ixgbevf_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Enable virtual functions for Intel 10G ports"
2define KFEATURE_COMPATIBILITY board
3
4kconf hardware ixgbevf_y.cfg
diff --git a/kvm/guest_kvm_y.cfg b/kvm/guest_kvm_y.cfg
new file mode 100644
index 0000000..95dfb75
--- /dev/null
+++ b/kvm/guest_kvm_y.cfg
@@ -0,0 +1,12 @@
1HYPERVISOR_GUEST=y
2CONFIG_KVM_GUEST=y
3CONFIG_KVM_DEBUG_FS=n
4CONFIG_PARAVIRT_TIME_ACCOUNTING=y
5CONFIG_PARAVIRT_CLOCK=y
6CONFIG_PARAVIRT=y
7CONFIG_PARAVIRT_DEBUG=n
8CONFIG_PARAVIRT_SPINLOCKS=y
9CONFIG_QUEUED_LOCK_STAT=y
10
11CONFIG_SERIAL_8250=y
12CONFIG_SERIAL_8250_CONSOLE=y
diff --git a/kvm/guest_kvm_y.scc b/kvm/guest_kvm_y.scc
new file mode 100644
index 0000000..d95413f
--- /dev/null
+++ b/kvm/guest_kvm_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Enable KVM guest support"
2define KFEATURE_COMPATIBILITY board
3
4kconf non-hardware guest_kvm_y.cfg
diff --git a/kvm/guest_n.cfg b/kvm/guest_n.cfg
new file mode 100644
index 0000000..2a046f8
--- /dev/null
+++ b/kvm/guest_n.cfg
@@ -0,0 +1,4 @@
1HYPERVISOR_GUEST=n
2CONFIG_PARAVIRT=n
3CONFIG_KVM_GUEST=n
4CONFIG_VIRTIO=n
diff --git a/kvm/guest_n.scc b/kvm/guest_n.scc
new file mode 100644
index 0000000..71020d6
--- /dev/null
+++ b/kvm/guest_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable guest support"
2define KFEATURE_COMPATIBILITY board
3
4kconf non-hardware guest_n.cfg
5
diff --git a/kvm/host_n.cfg b/kvm/host_n.cfg
new file mode 100644
index 0000000..9c1302a
--- /dev/null
+++ b/kvm/host_n.cfg
@@ -0,0 +1,2 @@
1CONFIG_VIRTUALIZATION=n
2CONFIG_VHOST=n
diff --git a/kvm/host_n.scc b/kvm/host_n.scc
new file mode 100644
index 0000000..b4b3cde
--- /dev/null
+++ b/kvm/host_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable guest support"
2define KFEATURE_COMPATIBILITY board
3
4kconf non-hardware host_n.cfg
5
diff --git a/kvm/qemu-kvm_m.cfg b/kvm/qemu-kvm_m.cfg
new file mode 100644
index 0000000..14e6582
--- /dev/null
+++ b/kvm/qemu-kvm_m.cfg
@@ -0,0 +1,30 @@
1CONFIG_HIGH_RES_TIMERS=y
2CONFIG_HAVE_KVM=y
3CONFIG_VIRTUALIZATION=y
4CONFIG_PREEMPT_NOTIFIERS=y
5CONFIG_MMU_NOTIFIER=y
6CONFIG_ANON_INODES=y
7CONFIG_HAVE_KVM_IRQCHIP=y
8CONFIG_HAVE_KVM_IRQFD=y
9CONFIG_IRQ_BYPASS_MANAGER=y
10CONFIG_HAVE_KVM_IRQ_BYPASS=y
11CONFIG_HAVE_KVM_IRQ_ROUTING=y
12CONFIG_HAVE_KVM_EVENTFD=y
13CONFIG_KVM_ASYNC_PF=y
14CONFIG_USER_RETURN_NOTIFIER=y
15CONFIG_KVM_MMIO=y
16CONFIG_TASKSTATS=y
17CONFIG_TASK_DELAY_ACCT=y
18CONFIG_PERF_EVENTS=y
19CONFIG_HAVE_KVM_MSI=y
20CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
21CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
22CONFIG_KVM_VFIO=y
23CONFIG_SRCU=y
24
25CONFIG_KVM=m
26CONFIG_KVM_INTEL=m
27CONFIG_KVM_AMD=m
28CONFIG_KVM_MMU_AUDIT=n
29CONFIG_KVM_DEVICE_ASSIGNMENT=n
30
diff --git a/kvm/qemu-kvm_m.scc b/kvm/qemu-kvm_m.scc
new file mode 100644
index 0000000..ad21fa1
--- /dev/null
+++ b/kvm/qemu-kvm_m.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Enable KVM host support"
2define KFEATURE_COMPATIBILITY board
3
4kconf non-hardware qemu-kvm_m.cfg
diff --git a/kvm/virtFS_y.cfg b/kvm/virtFS_y.cfg
new file mode 100644
index 0000000..c9fefa1
--- /dev/null
+++ b/kvm/virtFS_y.cfg
@@ -0,0 +1,4 @@
1CONFIG_NET_9P=y
2CONFIG_NET_9P_VIRTIO=y
3CONFIG_9P_FS=y
4CONFIG_9P_FS_POSIX_ACL=y
diff --git a/kvm/virtFS_y.scc b/kvm/virtFS_y.scc
new file mode 100644
index 0000000..a3fd078
--- /dev/null
+++ b/kvm/virtFS_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Enable Plan 9 folder sharing over Virtio - I/O virtualization framework"
2define KFEATURE_COMPATIBILITY arch
3
4kconf non-hardware virtFS_y.cfg
diff --git a/kvm/virtio_balloon_y.cfg b/kvm/virtio_balloon_y.cfg
new file mode 100644
index 0000000..25119df
--- /dev/null
+++ b/kvm/virtio_balloon_y.cfg
@@ -0,0 +1,2 @@
1CONFIG_VIRTIO=y
2CONFIG_VIRTIO_BALLOON=y
diff --git a/kvm/virtio_balloon_y.scc b/kvm/virtio_balloon_y.scc
new file mode 100644
index 0000000..a4f0b97
--- /dev/null
+++ b/kvm/virtio_balloon_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "virtio support memory ballooning)"
2define KFEATURE_COMPATIBILITY arch
3
4kconf non-hardware virtio_balloon_y.cfg
diff --git a/kvm/virtio_caif_y.cfg b/kvm/virtio_caif_y.cfg
new file mode 100644
index 0000000..2af936b
--- /dev/null
+++ b/kvm/virtio_caif_y.cfg
@@ -0,0 +1,5 @@
1CONFIG_CAIF=y
2CONFIG_HAS_DMA=y
3CONFIG_VHOST_RING=y
4CONFIG_VIRTIO=y
5CONFIG_CAIF_VIRTIO=y
diff --git a/kvm/virtio_caif_y.scc b/kvm/virtio_caif_y.scc
new file mode 100644
index 0000000..04d5ac4
--- /dev/null
+++ b/kvm/virtio_caif_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "CAIF virtio transport driver"
2define KFEATURE_COMPATIBILITY arch
3
4kconf non-hardware guest_caif_y.cfg
diff --git a/kvm/virtio_input_y.cfg b/kvm/virtio_input_y.cfg
new file mode 100644
index 0000000..e83d993
--- /dev/null
+++ b/kvm/virtio_input_y.cfg
@@ -0,0 +1,2 @@
1CONFIG_VIRTIO=y
2CONFIG_VIRTIO_INPUT=y
diff --git a/kvm/virtio_input_y.scc b/kvm/virtio_input_y.scc
new file mode 100644
index 0000000..b3e3a9a
--- /dev/null
+++ b/kvm/virtio_input_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "virtio support for input(keyboard, mice...) devices"
2define KFEATURE_COMPATIBILITY arch
3
4kconf non-hardware virtio_input_y.cfg
diff --git a/kvm/virtio_pci_legacy_y.cfg b/kvm/virtio_pci_legacy_y.cfg
new file mode 100644
index 0000000..4df21c5
--- /dev/null
+++ b/kvm/virtio_pci_legacy_y.cfg
@@ -0,0 +1,3 @@
1CONFIG_VIRTIO=y
2CONFIG_VIRTIO_PCI=y
3CONFIG_VIRTIO_PCI_LEGACY=y
diff --git a/kvm/virtio_pci_legacy_y.scc b/kvm/virtio_pci_legacy_y.scc
new file mode 100644
index 0000000..fcdf9e4
--- /dev/null
+++ b/kvm/virtio_pci_legacy_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "virtio support for leagacy PCI devices"
2define KFEATURE_COMPATIBILITY arch
3
4kconf non-hardware virtio_pci_legacy_y.cfg
diff --git a/kvm/virtio_y.cfg b/kvm/virtio_y.cfg
new file mode 100644
index 0000000..ff97d75
--- /dev/null
+++ b/kvm/virtio_y.cfg
@@ -0,0 +1,28 @@
1CONFIG_VIRTIO=y
2
3CONFIG_VIRTIO_PCI=y
4CONFIG_VIRTIO_PCI_LEGACY=n
5CONFIG_MIPS_PCI_VIRTIO=n
6
7CONFIG_VIRTIO_NET=y
8CONFIG_VIRTIO_BLK=y
9CONFIG_SCSI_VIRTIO=y
10
11CONFIG_VIRTIO_CONSOLE=y
12
13CONFIG_VIRTIO_MMIO=y
14CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=n
15
16CONFIG_VIRTIO_BALLOON=n
17CONFIG_VIRTIO_INPUT=n
18
19CONFIG_HW_RANDOM_VIRTIO=m
20
21CONFIG_CAIF_VIRTIO=n
22CONFIG_RPMSG_VIRTIO=n
23
24CONFIG_VSOCKETS=m
25CONFIG_VIRTIO_VSOCKETS_COMMON=m
26CONFIG_VIRTIO_VSOCKETS=m
27
28CONFIG_DRM_VIRTIO_GPU=m
diff --git a/kvm/virtio_y.scc b/kvm/virtio_y.scc
new file mode 100644
index 0000000..a80cfa4
--- /dev/null
+++ b/kvm/virtio_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "virtio support (core,pci,ring,net,blk,mmio)"
2define KFEATURE_COMPATIBILITY arch
3
4kconf non-hardware virtio_y.cfg
diff --git a/loopdev/loopdev_n.cfg b/loopdev/loopdev_n.cfg
new file mode 100644
index 0000000..c8d2992
--- /dev/null
+++ b/loopdev/loopdev_n.cfg
@@ -0,0 +1,2 @@
1CONFIG_BLK_DEV_LOOP=n
2CONFIG_BLK_DEV_CRYPTOLOOP=n
diff --git a/loopdev/loopdev_n.scc b/loopdev/loopdev_n.scc
new file mode 100644
index 0000000..3446f2f
--- /dev/null
+++ b/loopdev/loopdev_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable loopdev support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware loopdev_n.cfg
diff --git a/msdos_fat_nt_fs/msdos_fat_nt_fs_n.cfg b/msdos_fat_nt_fs/msdos_fat_nt_fs_n.cfg
new file mode 100644
index 0000000..0b5ca51
--- /dev/null
+++ b/msdos_fat_nt_fs/msdos_fat_nt_fs_n.cfg
@@ -0,0 +1,12 @@
1#
2# DOS/FAT/NT Filesystems
3#
4CONFIG_FAT_FS=n
5CONFIG_MSDOS_FS=n
6CONFIG_VFAT_FS=n
7# CONFIG_VFAT_FS_NO_DUALNAMES is not set
8#CONFIG_FAT_DEFAULT_CODEPAGE=437
9#CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
10# CONFIG_VFAT_NO_CREATE_WITH_LONGNAMES is not set
11# CONFIG_FAT_DEFAULT_UTF8 is not set
12# CONFIG_NTFS_FS is not set
diff --git a/msdos_fat_nt_fs/msdos_fat_nt_fs_n.scc b/msdos_fat_nt_fs/msdos_fat_nt_fs_n.scc
new file mode 100644
index 0000000..49aecac
--- /dev/null
+++ b/msdos_fat_nt_fs/msdos_fat_nt_fs_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable msdos_fat_nt_fs support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware msdos_fat_nt_fs_n.cfg
diff --git a/netblkdev/netblkdev_n.cfg b/netblkdev/netblkdev_n.cfg
new file mode 100644
index 0000000..fb81129
--- /dev/null
+++ b/netblkdev/netblkdev_n.cfg
@@ -0,0 +1 @@
CONFIG_BLK_DEV_NBD=n
diff --git a/netblkdev/netblkdev_n.scc b/netblkdev/netblkdev_n.scc
new file mode 100644
index 0000000..e2efac9
--- /dev/null
+++ b/netblkdev/netblkdev_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable netblkdev support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware netblkdev_n.cfg
diff --git a/netconsole/netconsole_n.cfg b/netconsole/netconsole_n.cfg
new file mode 100644
index 0000000..f74f073
--- /dev/null
+++ b/netconsole/netconsole_n.cfg
@@ -0,0 +1,3 @@
1CONFIG_NETCONSOLE=n
2CONFIG_NETPOLL=n
3CONFIG_NET_POLL_CONTROLLER=n
diff --git a/netconsole/netconsole_n.scc b/netconsole/netconsole_n.scc
new file mode 100644
index 0000000..b6c54da
--- /dev/null
+++ b/netconsole/netconsole_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable netconsole support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware netconsole_n.cfg
diff --git a/netfilter/netfilter_n.cfg b/netfilter/netfilter_n.cfg
new file mode 100644
index 0000000..aebe7a9
--- /dev/null
+++ b/netfilter/netfilter_n.cfg
@@ -0,0 +1,222 @@
1CONFIG_IP_ROUTE_CLASSID=n
2CONFIG_NETFILTER=n
3# CONFIG_NETFILTER_DEBUG is not set
4CONFIG_NETFILTER_ADVANCED=n
5CONFIG_BRIDGE_NETFILTER=n
6
7#
8# Core Netfilter Configuration
9#
10CONFIG_NETFILTER_INGRESS=n
11CONFIG_NETFILTER_NETLINK=n
12# CONFIG_NETFILTER_NETLINK_ACCT is not set
13CONFIG_NETFILTER_NETLINK_QUEUE=n
14CONFIG_NETFILTER_NETLINK_LOG=n
15CONFIG_NF_CONNTRACK=n
16CONFIG_NF_CONNTRACK_MARK=n
17# CONFIG_NF_CONNTRACK_ZONES is not set
18CONFIG_NF_CONNTRACK_PROCFS=n
19# CONFIG_NF_CONNTRACK_EVENTS is not set
20# CONFIG_NF_CONNTRACK_TIMEOUT is not set
21# CONFIG_NF_CONNTRACK_TIMESTAMP is not set
22# CONFIG_NF_CT_PROTO_DCCP is not set
23CONFIG_NF_CT_PROTO_GRE=n
24CONFIG_NF_CT_PROTO_SCTP=n
25CONFIG_NF_CT_PROTO_UDPLITE=n
26CONFIG_NF_CONNTRACK_AMANDA=n
27CONFIG_NF_CONNTRACK_FTP=n
28CONFIG_NF_CONNTRACK_H323=n
29CONFIG_NF_CONNTRACK_IRC=n
30CONFIG_NF_CONNTRACK_BROADCAST=n
31CONFIG_NF_CONNTRACK_NETBIOS_NS=n
32# CONFIG_NF_CONNTRACK_SNMP is not set
33CONFIG_NF_CONNTRACK_PPTP=n
34CONFIG_NF_CONNTRACK_SANE=n
35CONFIG_NF_CONNTRACK_SIP=n
36CONFIG_NF_CONNTRACK_TFTP=n
37CONFIG_NF_CT_NETLINK=n
38# CONFIG_NF_CT_NETLINK_TIMEOUT is not set
39# CONFIG_NETFILTER_NETLINK_GLUE_CT is not set
40CONFIG_NF_NAT=n
41CONFIG_NF_NAT_NEEDED=n
42CONFIG_NF_NAT_PROTO_UDPLITE=n
43CONFIG_NF_NAT_PROTO_SCTP=n
44CONFIG_NF_NAT_AMANDA=n
45CONFIG_NF_NAT_FTP=n
46CONFIG_NF_NAT_IRC=n
47CONFIG_NF_NAT_SIP=n
48CONFIG_NF_NAT_TFTP=n
49# CONFIG_NF_NAT_REDIRECT is not set
50# CONFIG_NF_TABLES is not set
51CONFIG_NETFILTER_XTABLES=n
52
53#
54# Xtables combined modules
55#
56CONFIG_NETFILTER_XT_MARK=n
57CONFIG_NETFILTER_XT_CONNMARK=n
58
59#
60# Xtables targets
61#
62CONFIG_NETFILTER_XT_TARGET_CHECKSUM=n
63CONFIG_NETFILTER_XT_TARGET_CLASSIFY=n
64CONFIG_NETFILTER_XT_TARGET_CONNMARK=n
65CONFIG_NETFILTER_XT_TARGET_CT=n
66CONFIG_NETFILTER_XT_TARGET_DSCP=n
67CONFIG_NETFILTER_XT_TARGET_HL=n
68# CONFIG_NETFILTER_XT_TARGET_HMARK is not set
69# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
70# CONFIG_NETFILTER_XT_TARGET_LOG is not set
71CONFIG_NETFILTER_XT_TARGET_MARK=n
72CONFIG_NETFILTER_XT_NAT=n
73# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set
74CONFIG_NETFILTER_XT_TARGET_NFLOG=n
75CONFIG_NETFILTER_XT_TARGET_NFQUEUE=n
76CONFIG_NETFILTER_XT_TARGET_NOTRACK=n
77# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
78# CONFIG_NETFILTER_XT_TARGET_REDIRECT is not set
79# CONFIG_NETFILTER_XT_TARGET_TEE is not set
80# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set
81CONFIG_NETFILTER_XT_TARGET_TRACE=n
82CONFIG_NETFILTER_XT_TARGET_TCPMSS=n
83# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
84
85#
86# Xtables matches
87#
88CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=n
89# CONFIG_NETFILTER_XT_MATCH_BPF is not set
90# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set
91# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
92CONFIG_NETFILTER_XT_MATCH_COMMENT=n
93CONFIG_NETFILTER_XT_MATCH_CONNBYTES=n
94# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set
95CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=n
96CONFIG_NETFILTER_XT_MATCH_CONNMARK=n
97CONFIG_NETFILTER_XT_MATCH_CONNTRACK=n
98# CONFIG_NETFILTER_XT_MATCH_CPU is not set
99CONFIG_NETFILTER_XT_MATCH_DCCP=n
100# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set
101CONFIG_NETFILTER_XT_MATCH_DSCP=n
102CONFIG_NETFILTER_XT_MATCH_ECN=n
103CONFIG_NETFILTER_XT_MATCH_ESP=n
104CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=n
105CONFIG_NETFILTER_XT_MATCH_HELPER=n
106CONFIG_NETFILTER_XT_MATCH_HL=n
107# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set
108# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
109# CONFIG_NETFILTER_XT_MATCH_L2TP is not set
110CONFIG_NETFILTER_XT_MATCH_LENGTH=n
111CONFIG_NETFILTER_XT_MATCH_LIMIT=n
112CONFIG_NETFILTER_XT_MATCH_MAC=n
113CONFIG_NETFILTER_XT_MATCH_MARK=n
114CONFIG_NETFILTER_XT_MATCH_MULTIPORT=n
115# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set
116# CONFIG_NETFILTER_XT_MATCH_OSF is not set
117# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
118CONFIG_NETFILTER_XT_MATCH_POLICY=n
119# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
120CONFIG_NETFILTER_XT_MATCH_PKTTYPE=n
121CONFIG_NETFILTER_XT_MATCH_QUOTA=n
122# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
123CONFIG_NETFILTER_XT_MATCH_REALM=n
124# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
125CONFIG_NETFILTER_XT_MATCH_SCTP=n
126# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set
127CONFIG_NETFILTER_XT_MATCH_STATE=n
128CONFIG_NETFILTER_XT_MATCH_STATISTIC=n
129CONFIG_NETFILTER_XT_MATCH_STRING=n
130CONFIG_NETFILTER_XT_MATCH_TCPMSS=n
131# CONFIG_NETFILTER_XT_MATCH_TIME is not set
132CONFIG_NETFILTER_XT_MATCH_U32=n
133# CONFIG_IP_SET is not set
134# CONFIG_IP_VS is not set
135
136#
137# IP: Netfilter Configuration
138#
139CONFIG_NF_DEFRAG_IPV4=n
140CONFIG_NF_CONNTRACK_IPV4=n
141# CONFIG_NF_DUP_IPV4 is not set
142# CONFIG_NF_LOG_ARP is not set
143# CONFIG_NF_LOG_IPV4 is not set
144CONFIG_NF_REJECT_IPV4=n
145CONFIG_NF_NAT_IPV4=n
146CONFIG_NF_NAT_MASQUERADE_IPV4=n
147CONFIG_NF_NAT_PROTO_GRE=n
148CONFIG_NF_NAT_PPTP=n
149CONFIG_NF_NAT_H323=n
150CONFIG_IP_NF_IPTABLES=n
151CONFIG_IP_NF_MATCH_AH=n
152CONFIG_IP_NF_MATCH_ECN=n
153# CONFIG_IP_NF_MATCH_RPFILTER is not set
154CONFIG_IP_NF_MATCH_TTL=n
155CONFIG_IP_NF_FILTER=n
156CONFIG_IP_NF_TARGET_REJECT=n
157# CONFIG_IP_NF_TARGET_SYNPROXY is not set
158CONFIG_IP_NF_NAT=n
159CONFIG_IP_NF_TARGET_MASQUERADE=n
160# CONFIG_IP_NF_TARGET_NETMAP is not set
161# CONFIG_IP_NF_TARGET_REDIRECT is not set
162CONFIG_IP_NF_MANGLE=n
163CONFIG_IP_NF_TARGET_CLUSTERIP=n
164CONFIG_IP_NF_TARGET_ECN=n
165CONFIG_IP_NF_TARGET_TTL=n
166CONFIG_IP_NF_RAW=n
167# CONFIG_IP_NF_SECURITY is not set
168CONFIG_IP_NF_ARPTABLES=n
169CONFIG_IP_NF_ARPFILTER=n
170CONFIG_IP_NF_ARP_MANGLE=n
171
172#
173# IPv6: Netfilter Configuration
174#
175CONFIG_NF_DEFRAG_IPV6=n
176CONFIG_NF_CONNTRACK_IPV6=n
177# CONFIG_NF_DUP_IPV6 is not set
178# CONFIG_NF_REJECT_IPV6 is not set
179# CONFIG_NF_LOG_IPV6 is not set
180CONFIG_NF_NAT_IPV6=n
181CONFIG_NF_NAT_MASQUERADE_IPV6=n
182CONFIG_IP6_NF_IPTABLES=n
183# CONFIG_IP6_NF_MATCH_AH is not set
184CONFIG_IP6_NF_MATCH_EUI64=n
185CONFIG_IP6_NF_MATCH_FRAG=n
186CONFIG_IP6_NF_MATCH_OPTS=n
187CONFIG_IP6_NF_MATCH_HL=n
188CONFIG_IP6_NF_MATCH_IPV6HEADER=n
189# CONFIG_IP6_NF_MATCH_MH is not set
190# CONFIG_IP6_NF_MATCH_RPFILTER is not set
191CONFIG_IP6_NF_MATCH_RT=n
192# CONFIG_IP6_NF_TARGET_HL is not set
193CONFIG_IP6_NF_FILTER=n
194# CONFIG_IP6_NF_TARGET_REJECT is not set
195# CONFIG_IP6_NF_TARGET_SYNPROXY is not set
196CONFIG_IP6_NF_MANGLE=n
197CONFIG_IP6_NF_RAW=n
198# CONFIG_IP6_NF_SECURITY is not set
199CONFIG_IP6_NF_NAT=n
200CONFIG_IP6_NF_TARGET_MASQUERADE=n
201# CONFIG_IP6_NF_TARGET_NPT is not set
202CONFIG_BRIDGE_NF_EBTABLES=n
203CONFIG_BRIDGE_EBT_BROUTE=n
204CONFIG_BRIDGE_EBT_T_FILTER=n
205CONFIG_BRIDGE_EBT_T_NAT=n
206CONFIG_BRIDGE_EBT_802_3=n
207CONFIG_BRIDGE_EBT_AMONG=n
208CONFIG_BRIDGE_EBT_ARP=n
209CONFIG_BRIDGE_EBT_IP=n
210CONFIG_BRIDGE_EBT_IP6=n
211CONFIG_BRIDGE_EBT_LIMIT=n
212CONFIG_BRIDGE_EBT_MARK=n
213CONFIG_BRIDGE_EBT_PKTTYPE=n
214CONFIG_BRIDGE_EBT_STP=n
215CONFIG_BRIDGE_EBT_VLAN=n
216CONFIG_BRIDGE_EBT_ARPREPLY=n
217CONFIG_BRIDGE_EBT_DNAT=n
218CONFIG_BRIDGE_EBT_MARK_T=n
219CONFIG_BRIDGE_EBT_REDIRECT=n
220CONFIG_BRIDGE_EBT_SNAT=n
221CONFIG_BRIDGE_EBT_LOG=n
222CONFIG_BRIDGE_EBT_NFLOG=n
diff --git a/netfilter/netfilter_n.scc b/netfilter/netfilter_n.scc
new file mode 100644
index 0000000..279aa21
--- /dev/null
+++ b/netfilter/netfilter_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable netfilter and conn tracking"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware netfilter_n.cfg
diff --git a/netfilter/netfilter_y.cfg b/netfilter/netfilter_y.cfg
new file mode 100644
index 0000000..b1c310e
--- /dev/null
+++ b/netfilter/netfilter_y.cfg
@@ -0,0 +1,10 @@
1CONFIG_NF_CONNTRACK=y
2CONFIG_NF_CONNTRACK_IPV4=y
3CONFIG_NF_NAT=y
4CONFIG_NETFILTER_XTABLES=y
5CONFIG_NETFILTER_XT_NAT=y
6CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
7CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
8CONFIG_NF_DEFRAG_IPV4=y
9CONFIG_NF_CONNTRACK_IPV4=y
10CONFIG_NF_NAT_IPV4=y
diff --git a/netfilter/netfilter_y.scc b/netfilter/netfilter_y.scc
new file mode 100644
index 0000000..f0e2e01
--- /dev/null
+++ b/netfilter/netfilter_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Enable netfilter + conn tracking as built-in modules"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware netfilter_y.cfg
diff --git a/nfs/nfs_n.cfg b/nfs/nfs_n.cfg
new file mode 100644
index 0000000..a8e60a3
--- /dev/null
+++ b/nfs/nfs_n.cfg
@@ -0,0 +1,44 @@
1CONFIG_NETWORK_FILESYSTEMS=n
2CONFIG_NFS_FS=n
3CONFIG_NFS_V2=n
4#CONFIG_NFS_DEF_FILE_IO_SIZE=4096
5CONFIG_NFS_V3=n
6# CONFIG_NFS_V3_ACL is not set
7CONFIG_NFS_V4=n
8# CONFIG_NFS_SWAP is not set
9# CONFIG_NFS_V4_1 is not set
10CONFIG_ROOT_NFS=n
11# CONFIG_NFS_USE_LEGACY_DNS is not set
12CONFIG_NFS_USE_KERNEL_DNS=n
13CONFIG_NFSD=n
14CONFIG_NFSD_V3=n
15# CONFIG_NFSD_V3_ACL is not set
16CONFIG_NFSD_V4=n
17# CONFIG_NFSD_BLOCKLAYOUT is not set
18# CONFIG_NFSD_SCSILAYOUT is not set
19# CONFIG_NFSD_FLEXFILELAYOUT is not set
20# CONFIG_NFSD_V4_SECURITY_LABEL is not set
21# CONFIG_NFSD_FAULT_INJECTION is not set
22CONFIG_GRACE_PERIOD=n
23CONFIG_LOCKD=n
24CONFIG_LOCKD_V4=n
25CONFIG_NFS_COMMON=n
26CONFIG_SUNRPC=n
27CONFIG_SUNRPC_GSS=n
28CONFIG_RPCSEC_GSS_KRB5=n
29# CONFIG_SUNRPC_DEBUG is not set
30# CONFIG_CEPH_FS is not set
31CONFIG_CIFS=n
32# CONFIG_CIFS_STATS is not set
33# CONFIG_CIFS_WEAK_PW_HASH is not set
34# CONFIG_CIFS_UPCALL is not set
35CONFIG_CIFS_XATTR=n
36CONFIG_CIFS_POSIX=n
37# CONFIG_CIFS_ACL is not set
38CONFIG_CIFS_DEBUG=n
39# CONFIG_CIFS_DEBUG2 is not set
40# CONFIG_CIFS_DFS_UPCALL is not set
41# CONFIG_CIFS_SMB2 is not set
42# CONFIG_NCP_FS is not set
43# CONFIG_CODA_FS is not set
44# CONFIG_AFS_FS is not set
diff --git a/nfs/nfs_n.scc b/nfs/nfs_n.scc
new file mode 100644
index 0000000..4cec9a7
--- /dev/null
+++ b/nfs/nfs_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable nfs support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware nfs_n.cfg
diff --git a/parport/parport_n.cfg b/parport/parport_n.cfg
new file mode 100644
index 0000000..1e35578
--- /dev/null
+++ b/parport/parport_n.cfg
@@ -0,0 +1,8 @@
1CONFIG_PARPORT=n
2CONFIG_PARPORT_PC=n
3# CONFIG_PARPORT_SERIAL is not set
4# CONFIG_PARPORT_PC_FIFO is not set
5# CONFIG_PARPORT_PC_SUPERIO is not set
6# CONFIG_PARPORT_GSC is not set
7# CONFIG_PARPORT_AX88796 is not set
8# CONFIG_PARPORT_1284 is not set
diff --git a/parport/parport_n.scc b/parport/parport_n.scc
new file mode 100644
index 0000000..bed7632
--- /dev/null
+++ b/parport/parport_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable parport support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware parport_n.cfg
diff --git a/patches/boot_time_opt_guest/0102-cpuidle-skip-synchronize_rcu-on-single-CPU-systems.patch b/patches/boot_time_opt_guest/0102-cpuidle-skip-synchronize_rcu-on-single-CPU-systems.patch
new file mode 100644
index 0000000..1de2a6b
--- /dev/null
+++ b/patches/boot_time_opt_guest/0102-cpuidle-skip-synchronize_rcu-on-single-CPU-systems.patch
@@ -0,0 +1,34 @@
1From 6b0fb5b2a7a157c04d8ab6ad71b092034d0048bf Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Wed, 11 Feb 2015 16:19:26 -0600
4Subject: [PATCH 102/114] cpuidle: skip synchronize_rcu() on single CPU systems
5
6synchronize_rcu() is pretty expensive, and on single CPU systems we don't need
7it in this specific case, so skip it.
8
9Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
10Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
11---
12 drivers/cpuidle/cpuidle.c | 5 ++++-
13 1 file changed, 4 insertions(+), 1 deletion(-)
14
15diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
16index 62810ff3b00f..f1d110411098 100644
17--- a/drivers/cpuidle/cpuidle.c
18+++ b/drivers/cpuidle/cpuidle.c
19@@ -324,8 +324,11 @@ void cpuidle_uninstall_idle_handler(void)
20 /*
21 * Make sure external observers (such as the scheduler)
22 * are done looking at pointed idle states.
23+ * This is only relevant if there is more than one cpu,
24+ * if there is only one CPU, that is us... and we're
25+ * coherent to ourselves.
26 */
27- synchronize_rcu();
28+
29 }
30
31 /**
32--
332.11.1
34
diff --git a/patches/boot_time_opt_guest/0103-sysrq-skip-synchronize_rcu-if-there-is-no-old-op.patch b/patches/boot_time_opt_guest/0103-sysrq-skip-synchronize_rcu-if-there-is-no-old-op.patch
new file mode 100644
index 0000000..d3a20fb
--- /dev/null
+++ b/patches/boot_time_opt_guest/0103-sysrq-skip-synchronize_rcu-if-there-is-no-old-op.patch
@@ -0,0 +1,38 @@
1From 7be707833bb35c295eb702d13cf73ac9390e4b31 Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Wed, 11 Feb 2015 16:25:16 -0600
4Subject: [PATCH 103/114] sysrq: skip synchronize_rcu() if there is no old op
5
6synchronize_rcu() is expensive. Currently it is called as part of the sysrq
7registration/unregistration, which happens during boot several times.
8Now, the reason for the synchronize_rcu() is to allow an old registered
9operation to expire properly... which is pointless if the old operation
10is NULL...
11So we can save the common case of the old operation being NULL a lot of time
12by just checking for non-NULL prior to the synchronize_rcu()
13
14Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
15Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
16---
17 drivers/tty/sysrq.c | 4 +++-
18 1 file changed, 3 insertions(+), 1 deletion(-)
19
20diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
21index 701c085bb19b..c60c7ba57ad9 100644
22--- a/drivers/tty/sysrq.c
23+++ b/drivers/tty/sysrq.c
24@@ -1065,8 +1065,10 @@ static int __sysrq_swap_key_ops(int key, struct sysrq_key_op *insert_op_p,
25 * A concurrent __handle_sysrq either got the old op or the new op.
26 * Wait for it to go away before returning, so the code for an old
27 * op is not freed (eg. on module unload) while it is in use.
28+ * This is only relevant if the old op is not NULL of course.
29 */
30- synchronize_rcu();
31+ if (remove_op_p)
32+ synchronize_rcu();
33
34 return retval;
35 }
36--
372.11.1
38
diff --git a/patches/boot_time_opt_guest/0104-fbcon-enable-no-blink-by-default.patch b/patches/boot_time_opt_guest/0104-fbcon-enable-no-blink-by-default.patch
new file mode 100644
index 0000000..715c195
--- /dev/null
+++ b/patches/boot_time_opt_guest/0104-fbcon-enable-no-blink-by-default.patch
@@ -0,0 +1,26 @@
1From 5899ff79ed4e3514420e1530a3588a922832dae5 Mon Sep 17 00:00:00 2001
2From: Jose Carlos Venegas Munoz <jos.c.venegas.munoz@intel.com>
3Date: Mon, 13 Apr 2015 11:26:36 -0500
4Subject: [PATCH 104/114] fbcon: enable no blink by default
5
6Author: Arjan van de Ven <arjan@linux.intel.com>
7---
8 drivers/video/console/fbcon.c | 2 +-
9 1 file changed, 1 insertion(+), 1 deletion(-)
10
11diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
12index a44f5627b82a..95b73366b86f 100644
13--- a/drivers/video/console/fbcon.c
14+++ b/drivers/video/console/fbcon.c
15@@ -146,7 +146,7 @@ static const struct consw fb_con;
16
17 static int fbcon_set_origin(struct vc_data *);
18
19-static int fbcon_cursor_noblink;
20+static int fbcon_cursor_noblink = 1;
21
22 #define divides(a, b) ((!(a) || (b)%(a)) ? 0 : 1)
23
24--
252.11.1
26
diff --git a/patches/boot_time_opt_guest/0105-vmstats-wakeups.patch b/patches/boot_time_opt_guest/0105-vmstats-wakeups.patch
new file mode 100644
index 0000000..09b109a
--- /dev/null
+++ b/patches/boot_time_opt_guest/0105-vmstats-wakeups.patch
@@ -0,0 +1,28 @@
1From ff47b4e9be8113b4ba05d6f2afee3db6904bc10f Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Wed, 11 Feb 2015 16:47:20 -0600
4Subject: [PATCH 105/114] vmstats: wakeups
5
6Author: Arjan van de Ven <arjan@linux.intel.com>
7
8Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
9---
10 mm/vmstat.c | 2 +-
11 1 file changed, 1 insertion(+), 1 deletion(-)
12
13diff --git a/mm/vmstat.c b/mm/vmstat.c
14index 7c28df36f50f..efe1b6797139 100644
15--- a/mm/vmstat.c
16+++ b/mm/vmstat.c
17@@ -1549,7 +1549,7 @@ static const struct file_operations proc_vmstat_file_operations = {
18 #ifdef CONFIG_SMP
19 static struct workqueue_struct *vmstat_wq;
20 static DEFINE_PER_CPU(struct delayed_work, vmstat_work);
21-int sysctl_stat_interval __read_mostly = HZ;
22+int sysctl_stat_interval __read_mostly = 8 * HZ;
23
24 #ifdef CONFIG_PROC_FS
25 static void refresh_vm_stats(struct work_struct *work)
26--
272.11.1
28
diff --git a/patches/boot_time_opt_guest/0106-pci-probe.patch b/patches/boot_time_opt_guest/0106-pci-probe.patch
new file mode 100644
index 0000000..5045926
--- /dev/null
+++ b/patches/boot_time_opt_guest/0106-pci-probe.patch
@@ -0,0 +1,123 @@
1From b225caf8f743b9f5f9e84d0df711ee0c17e049ae Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Wed, 11 Feb 2015 16:53:08 -0600
4Subject: [PATCH 106/114] pci: probe
5
6Author: Arjan van de Ven <arjan@linux.intel.com>
7
8Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
9---
10 drivers/pci/probe.c | 43 ++++++++++++++++++++++++++++++++++++++++---
11 1 file changed, 40 insertions(+), 3 deletions(-)
12
13diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
14index 204960e70333..7399a06698da 100644
15--- a/drivers/pci/probe.c
16+++ b/drivers/pci/probe.c
17@@ -182,6 +182,10 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
18
19 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
20
21+ res->name = pci_name(dev);
22+
23+ printk("clr: Starting probe for %s\n", res->name);
24+
25 /* No printks while decoding is disabled! */
26 if (!dev->mmio_always_on) {
27 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
28@@ -191,8 +195,6 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
29 }
30 }
31
32- res->name = pci_name(dev);
33-
34 pci_read_config_dword(dev, pos, &l);
35 pci_write_config_dword(dev, pos, l | mask);
36 pci_read_config_dword(dev, pos, &sz);
37@@ -324,6 +326,8 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
38 if (dev->non_compliant_bars)
39 return;
40
41+ printk("clr: pci_read_bases start\n");
42+
43 for (pos = 0; pos < howmany; pos++) {
44 struct resource *res = &dev->resource[pos];
45 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
46@@ -332,11 +336,13 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
47
48 if (rom) {
49 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
50+ printk("clr: rom path\n");
51 dev->rom_base_reg = rom;
52 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
53 IORESOURCE_READONLY | IORESOURCE_SIZEALIGN;
54 __pci_read_base(dev, pci_bar_mem32, res, rom);
55 }
56+ printk("clr: pci_read_bases end\n");
57 }
58
59 static void pci_read_bridge_io(struct pci_bus *child)
60@@ -1311,6 +1317,28 @@ static void pci_msi_setup_pci_dev(struct pci_dev *dev)
61 pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
62 }
63
64+static int guess_bar_count(int class)
65+{
66+ if (class == 0x068000)
67+ return 0;
68+ if (class == 0x020000)
69+ return 2;
70+ if (class == 0x010000)
71+ return 2;
72+ if (class == 0x00ff00)
73+ return 1;
74+ return 6;
75+}
76+
77+static int has_rom(int class, int rom)
78+{
79+ if (class == 0x020000)
80+ return 0;
81+ if (class == 0x010000 || class == 0x00ff00)
82+ return 0;
83+ return rom;
84+}
85+
86 /**
87 * pci_setup_device - fill in class and map information of a device
88 * @dev: the device structure to fill
89@@ -1329,6 +1357,9 @@ int pci_setup_device(struct pci_dev *dev)
90 int pos = 0;
91 struct pci_bus_region region;
92 struct resource *res;
93+ int maxbar;
94+
95+ printk("clr: pci_setup_device start\n");
96
97 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
98 return -EIO;
99@@ -1383,7 +1414,11 @@ int pci_setup_device(struct pci_dev *dev)
100 if (class == PCI_CLASS_BRIDGE_PCI)
101 goto bad;
102 pci_read_irq(dev);
103- pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
104+
105+ maxbar = guess_bar_count(dev->class);
106+
107+ if (class != PCI_CLASS_STORAGE_IDE)
108+ pci_read_bases(dev, maxbar, has_rom(dev->class, PCI_ROM_ADDRESS));
109 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
110 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
111
112@@ -1468,6 +1503,8 @@ int pci_setup_device(struct pci_dev *dev)
113 dev->class = PCI_CLASS_NOT_DEFINED << 8;
114 }
115
116+ printk("clr: pci_setup_device end\n");
117+
118 /* We found a fine healthy device, go go go... */
119 return 0;
120 }
121--
1222.11.1
123
diff --git a/patches/boot_time_opt_guest/0107-cgroup.patch b/patches/boot_time_opt_guest/0107-cgroup.patch
new file mode 100644
index 0000000..d68c686
--- /dev/null
+++ b/patches/boot_time_opt_guest/0107-cgroup.patch
@@ -0,0 +1,107 @@
1From 0adc5bfd84939d11d3c172eab0a00bfab4aadb46 Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Fri, 28 Aug 2015 11:00:36 -0500
4Subject: [PATCH 107/114] cgroup
5
6Author: Arjan van de Ven <arjan@linux.intel.com>
7
8Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
9Signed-off-by: Jose Carlos Venegas Munoz <jos.c.venegas.munoz@intel.com>
10---
11 include/linux/cgroup-defs.h | 2 +-
12 kernel/cgroup.c | 24 ++++++++++++++----------
13 2 files changed, 15 insertions(+), 11 deletions(-)
14
15diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h
16index 861b4677fc5b..5d3c345ee60c 100644
17--- a/include/linux/cgroup-defs.h
18+++ b/include/linux/cgroup-defs.h
19@@ -137,7 +137,7 @@ struct cgroup_subsys_state {
20
21 /* percpu_ref killing and RCU release */
22 struct rcu_head rcu_head;
23- struct work_struct destroy_work;
24+ struct delayed_work destroy_work;
25 };
26
27 /*
28diff --git a/kernel/cgroup.c b/kernel/cgroup.c
29index 53bbca7c4859..6de39d8213ed 100644
30--- a/kernel/cgroup.c
31+++ b/kernel/cgroup.c
32@@ -73,7 +73,7 @@
33 * Expiring in the middle is a performance problem not a correctness one.
34 * 1 sec should be enough.
35 */
36-#define CGROUP_PIDLIST_DESTROY_DELAY HZ
37+#define CGROUP_PIDLIST_DESTROY_DELAY round_jiffies_relative(HZ)
38
39 #define CGROUP_FILE_NAME_MAX (MAX_CGROUP_TYPE_NAMELEN + \
40 MAX_CFTYPE_NAME + 2)
41@@ -4986,8 +4986,9 @@ static struct cftype cgroup_legacy_base_files[] = {
42 */
43 static void css_free_work_fn(struct work_struct *work)
44 {
45+ struct delayed_work *dwork = to_delayed_work(work);
46 struct cgroup_subsys_state *css =
47- container_of(work, struct cgroup_subsys_state, destroy_work);
48+ container_of(dwork, struct cgroup_subsys_state, destroy_work);
49 struct cgroup_subsys *ss = css->ss;
50 struct cgroup *cgrp = css->cgroup;
51
52@@ -5036,14 +5037,15 @@ static void css_free_rcu_fn(struct rcu_head *rcu_head)
53 struct cgroup_subsys_state *css =
54 container_of(rcu_head, struct cgroup_subsys_state, rcu_head);
55
56- INIT_WORK(&css->destroy_work, css_free_work_fn);
57- queue_work(cgroup_destroy_wq, &css->destroy_work);
58+ INIT_DELAYED_WORK(&css->destroy_work, css_free_work_fn);
59+ queue_delayed_work(cgroup_destroy_wq, &css->destroy_work, CGROUP_PIDLIST_DESTROY_DELAY);
60 }
61
62 static void css_release_work_fn(struct work_struct *work)
63 {
64+ struct delayed_work *dwork = to_delayed_work(work);
65 struct cgroup_subsys_state *css =
66- container_of(work, struct cgroup_subsys_state, destroy_work);
67+ container_of(dwork, struct cgroup_subsys_state, destroy_work);
68 struct cgroup_subsys *ss = css->ss;
69 struct cgroup *cgrp = css->cgroup;
70
71@@ -5088,8 +5090,9 @@ static void css_release(struct percpu_ref *ref)
72 struct cgroup_subsys_state *css =
73 container_of(ref, struct cgroup_subsys_state, refcnt);
74
75- INIT_WORK(&css->destroy_work, css_release_work_fn);
76- queue_work(cgroup_destroy_wq, &css->destroy_work);
77+ INIT_DELAYED_WORK(&css->destroy_work, css_release_work_fn);
78+ queue_delayed_work(cgroup_destroy_wq, &css->destroy_work, CGROUP_PIDLIST_DESTROY_DELAY);
79+
80 }
81
82 static void init_and_link_css(struct cgroup_subsys_state *css,
83@@ -5371,8 +5374,9 @@ static int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name,
84 */
85 static void css_killed_work_fn(struct work_struct *work)
86 {
87+ struct delayed_work *dwork = to_delayed_work(work);
88 struct cgroup_subsys_state *css =
89- container_of(work, struct cgroup_subsys_state, destroy_work);
90+ container_of(dwork, struct cgroup_subsys_state, destroy_work);
91
92 mutex_lock(&cgroup_mutex);
93
94@@ -5393,8 +5397,8 @@ static void css_killed_ref_fn(struct percpu_ref *ref)
95 container_of(ref, struct cgroup_subsys_state, refcnt);
96
97 if (atomic_dec_and_test(&css->online_cnt)) {
98- INIT_WORK(&css->destroy_work, css_killed_work_fn);
99- queue_work(cgroup_destroy_wq, &css->destroy_work);
100+ INIT_DELAYED_WORK(&css->destroy_work, css_killed_work_fn);
101+ queue_delayed_work(cgroup_destroy_wq, &css->destroy_work, CGROUP_PIDLIST_DESTROY_DELAY);
102 }
103 }
104
105--
1062.11.1
107
diff --git a/patches/boot_time_opt_guest/0108-smpboot-reuse-timer-calibration.patch b/patches/boot_time_opt_guest/0108-smpboot-reuse-timer-calibration.patch
new file mode 100644
index 0000000..48be94a
--- /dev/null
+++ b/patches/boot_time_opt_guest/0108-smpboot-reuse-timer-calibration.patch
@@ -0,0 +1,45 @@
1From 634947be6c24d844af5f6ecf59453f2ddc09e032 Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Wed, 11 Feb 2015 17:28:14 -0600
4Subject: [PATCH 108/114] smpboot: reuse timer calibration
5
6NO point recalibrating for known-constant tsc... saves 200ms+ of boot time.
7
8Author: Arjan van de Ven <arjan@linux.intel.com>
9
10Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
11---
12 arch/x86/kernel/smpboot.c | 2 +-
13 arch/x86/kernel/tsc.c | 3 +++
14 2 files changed, 4 insertions(+), 1 deletion(-)
15
16diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
17index 99b920d0e516..e17bb425bb52 100644
18--- a/arch/x86/kernel/smpboot.c
19+++ b/arch/x86/kernel/smpboot.c
20@@ -761,7 +761,7 @@ wakeup_secondary_cpu_via_init(int phys_apicid, unsigned long start_eip)
21 pr_debug("Waiting for send to finish...\n");
22 send_status = safe_apic_wait_icr_idle();
23
24- udelay(init_udelay);
25+ udelay(100);
26
27 pr_debug("Deasserting INIT\n");
28
29diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
30index 37e7cf544e51..e99be8a6a132 100644
31--- a/arch/x86/kernel/tsc.c
32+++ b/arch/x86/kernel/tsc.c
33@@ -1413,6 +1413,9 @@ unsigned long calibrate_delay_is_known(void)
34 if (!mask)
35 return 0;
36
37+ if (cpu !=0)
38+ return cpu_data(0).loops_per_jiffy;
39+
40 sibling = cpumask_any_but(mask, cpu);
41 if (sibling < nr_cpu_ids)
42 return cpu_data(sibling).loops_per_jiffy;
43--
442.11.1
45
diff --git a/patches/boot_time_opt_guest/0109-perf.patch b/patches/boot_time_opt_guest/0109-perf.patch
new file mode 100644
index 0000000..75f50f6
--- /dev/null
+++ b/patches/boot_time_opt_guest/0109-perf.patch
@@ -0,0 +1,28 @@
1From cce700dfbd5fdbf72b96e6479ca539ab4d880ce2 Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Wed, 4 Nov 2015 15:17:10 -0600
4Subject: [PATCH 109/114] perf
5
6Author: Arjan van de Ven <arjan@linux.intel.com>
7
8Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
9---
10 arch/x86/events/intel/core.c | 2 +-
11 1 file changed, 1 insertion(+), 1 deletion(-)
12
13diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
14index eb1484c86bb4..c13ea26ac066 100644
15--- a/arch/x86/events/intel/core.c
16+++ b/arch/x86/events/intel/core.c
17@@ -4040,7 +4040,7 @@ __init int intel_pmu_init(void)
18 */
19 if (x86_pmu.extra_regs) {
20 for (er = x86_pmu.extra_regs; er->msr; er++) {
21- er->extra_msr_access = check_msr(er->msr, 0x11UL);
22+ er->extra_msr_access = false;
23 /* Disable LBR select mapping */
24 if ((er->idx == EXTRA_REG_LBR) && !er->extra_msr_access)
25 x86_pmu.lbr_sel_map = NULL;
26--
272.11.1
28
diff --git a/patches/boot_time_opt_guest/0110-pci-probe-identify-known-devices.patch b/patches/boot_time_opt_guest/0110-pci-probe-identify-known-devices.patch
new file mode 100644
index 0000000..742a045
--- /dev/null
+++ b/patches/boot_time_opt_guest/0110-pci-probe-identify-known-devices.patch
@@ -0,0 +1,190 @@
1From c662d99134b67c58e63ecc17c2531588a3a51596 Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Sat, 14 Feb 2015 09:49:41 -0600
4Subject: [PATCH 110/114] pci: probe: identify known devices
5
6Author: Arjan van de Ven <arjan@linux.intel.com>
7Modify-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
8
9Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
10---
11 drivers/pci/probe.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++
12 1 file changed, 156 insertions(+)
13
14diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
15index 7399a06698da..4fb2d7fed4c5 100644
16--- a/drivers/pci/probe.c
17+++ b/drivers/pci/probe.c
18@@ -163,6 +163,159 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
19
20 #define PCI_COMMAND_DECODE_ENABLE (PCI_COMMAND_MEMORY | PCI_COMMAND_IO)
21
22+/* shortcut version of __pci_read_base where we know the sizes already */
23+int __pci_read_base_shortcut(struct pci_dev *dev, enum pci_bar_type type,
24+ struct resource *res, unsigned int pos, u32 sz_in, u32 sz2_in)
25+{
26+ u32 l, sz;
27+ u64 l64, sz64, mask64;
28+ struct pci_bus_region region, inverted_region;
29+
30+ res->name = pci_name(dev);
31+
32+ pci_read_config_dword(dev, pos, &l);
33+
34+ sz = sz_in;
35+
36+ /*
37+ * All bits set in sz means the device isn't working properly.
38+ * If the BAR isn't implemented, all bits must be 0. If it's a
39+ * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
40+ * 1 must be clear.
41+ * Here we set the size and is not 0xffffffff
42+ */
43+
44+ /*
45+ * I don't know how l can have all bits set. Copied from old code.
46+ * Maybe it fixes a bug on some ancient platform.
47+ */
48+ if (l == 0xffffffff)
49+ l = 0;
50+
51+ if (type == pci_bar_unknown) {
52+ res->flags = decode_bar(dev, l);
53+ res->flags |= IORESOURCE_SIZEALIGN;
54+ if (res->flags & IORESOURCE_IO) {
55+ l64 = l & PCI_BASE_ADDRESS_IO_MASK;
56+ sz64 = sz & PCI_BASE_ADDRESS_IO_MASK;
57+ mask64 = PCI_BASE_ADDRESS_IO_MASK & (u32)IO_SPACE_LIMIT;
58+ } else {
59+ l64 = l & PCI_BASE_ADDRESS_MEM_MASK;
60+ sz64 = sz & PCI_BASE_ADDRESS_MEM_MASK;
61+ mask64 = (u32)PCI_BASE_ADDRESS_MEM_MASK;
62+ }
63+ } else {
64+ res->flags |= (l & IORESOURCE_ROM_ENABLE);
65+ l64 = l & PCI_ROM_ADDRESS_MASK;
66+ sz64 = sz & PCI_ROM_ADDRESS_MASK;
67+ mask64 = (u32)PCI_ROM_ADDRESS_MASK;
68+ }
69+
70+ if (res->flags & IORESOURCE_MEM_64) {
71+ pci_read_config_dword(dev, pos + 4, &l);
72+ sz = sz2_in;
73+
74+ l64 |= ((u64)l << 32);
75+ sz64 |= ((u64)sz << 32);
76+ mask64 |= ((u64)~0 << 32);
77+ }
78+
79+ if (!sz64)
80+ goto fail;
81+
82+ sz64 = pci_size(l64, sz64, mask64);
83+ if (!sz64) {
84+ dev_info(&dev->dev, FW_BUG "reg 0x%x: invalid BAR (can't size)\n",
85+ pos);
86+ goto fail;
87+ }
88+
89+ if (res->flags & IORESOURCE_MEM_64) {
90+ if ((sizeof(dma_addr_t) < 8 || sizeof(resource_size_t) < 8) &&
91+ sz64 > 0x100000000ULL) {
92+ res->flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
93+ res->start = 0;
94+ res->end = 0;
95+ dev_err(&dev->dev, "reg 0x%x: can't handle BAR larger than 4GB (size %#010llx)\n",
96+ pos, (unsigned long long)sz64);
97+ goto out;
98+ }
99+
100+ if ((sizeof(dma_addr_t) < 8) && l) {
101+ /* Above 32-bit boundary; try to reallocate */
102+ res->flags |= IORESOURCE_UNSET;
103+ res->start = 0;
104+ res->end = sz64;
105+ dev_info(&dev->dev, "reg 0x%x: can't handle BAR above 4GB (bus address %#010llx)\n",
106+ pos, (unsigned long long)l64);
107+ goto out;
108+ }
109+ }
110+
111+ region.start = l64;
112+ region.end = l64 + sz64;
113+
114+ pcibios_bus_to_resource(dev->bus, res, &region);
115+ pcibios_resource_to_bus(dev->bus, &inverted_region, res);
116+
117+ /*
118+ * If "A" is a BAR value (a bus address), "bus_to_resource(A)" is
119+ * the corresponding resource address (the physical address used by
120+ * the CPU. Converting that resource address back to a bus address
121+ * should yield the original BAR value:
122+ *
123+ * resource_to_bus(bus_to_resource(A)) == A
124+ *
125+ * If it doesn't, CPU accesses to "bus_to_resource(A)" will not
126+ * be claimed by the device.
127+ */
128+ if (inverted_region.start != region.start) {
129+ res->flags |= IORESOURCE_UNSET;
130+ res->start = 0;
131+ res->end = region.end - region.start;
132+ dev_info(&dev->dev, "reg 0x%x: initial BAR value %#010llx invalid\n",
133+ pos, (unsigned long long)region.start);
134+ }
135+
136+ goto out;
137+
138+
139+fail:
140+ res->flags = 0;
141+out:
142+ if (res->flags)
143+ dev_printk(KERN_DEBUG, &dev->dev, "reg 0x%x: %pR\n", pos, res);
144+
145+ return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
146+}
147+
148+static int is_known_device(struct pci_dev *dev, int pos, int *sz)
149+{
150+ /* Red Hat, Inc : Virtio network device */
151+ if (dev->vendor == 0x1af4 && dev->device == 0x1000) {
152+ if (pos == 0x10) {
153+ *sz = 0xffffffe1;
154+ return 1;
155+ }
156+ if (pos == 0x14) {
157+ *sz = 0xfffff000;
158+ return 1;
159+ }
160+ }
161+ /* Red Hat, Inc : Virtio block device */
162+ if (dev->vendor == 0x1af4 && dev->device == 0x1001) {
163+ if (pos == 0x10) {
164+ *sz = 0xffffffc1;
165+ return 1;
166+ }
167+ if (pos == 0x14) {
168+ *sz = 0xfffff000;
169+ return 1;
170+ }
171+ }
172+ return 0;
173+}
174+
175 /**
176 * pci_read_base - read a PCI BAR
177 * @dev: the PCI device
178@@ -182,6 +335,9 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
179
180 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
181
182+ if (is_known_device(dev, pos, &sz))
183+ return __pci_read_base_shortcut(dev, type, res, pos, sz, 0);
184+
185 res->name = pci_name(dev);
186
187 printk("clr: Starting probe for %s\n", res->name);
188--
1892.11.1
190
diff --git a/patches/boot_time_opt_guest/0111-init-no-wait-for-the-known-devices.patch b/patches/boot_time_opt_guest/0111-init-no-wait-for-the-known-devices.patch
new file mode 100644
index 0000000..701a18d
--- /dev/null
+++ b/patches/boot_time_opt_guest/0111-init-no-wait-for-the-known-devices.patch
@@ -0,0 +1,39 @@
1From be2ab4809c6b5058fbf3cd54c0f59c56416e572c Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Mon, 22 Jun 2015 09:33:33 -0500
4Subject: [PATCH 111/114] init: no wait for the known devices
5
6No wait for the known devices to complete their probing
7
8Author: Arjan van de Ven <arjan@linux.intel.com>
9
10Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
11---
12 init/do_mounts.c | 4 +++-
13 1 file changed, 3 insertions(+), 1 deletion(-)
14
15diff --git a/init/do_mounts.c b/init/do_mounts.c
16index c2de5104aad2..40725f0f5fb3 100644
17--- a/init/do_mounts.c
18+++ b/init/do_mounts.c
19@@ -28,6 +28,7 @@
20 #include <linux/slab.h>
21 #include <linux/ramfs.h>
22 #include <linux/shmem_fs.h>
23+#include <linux/async.h>
24
25 #include <linux/nfs_fs.h>
26 #include <linux/nfs_fs_sb.h>
27@@ -563,7 +564,8 @@ void __init prepare_namespace(void)
28 * For example, it is not atypical to wait 5 seconds here
29 * for the touchpad of a laptop to initialize.
30 */
31- wait_for_device_probe();
32+ //wait_for_device_probe();
33+ async_synchronize_full();
34
35 md_run_setup();
36
37--
382.11.1
39
diff --git a/patches/boot_time_opt_guest/0112-ksm-wakeups.patch b/patches/boot_time_opt_guest/0112-ksm-wakeups.patch
new file mode 100644
index 0000000..b131e3f
--- /dev/null
+++ b/patches/boot_time_opt_guest/0112-ksm-wakeups.patch
@@ -0,0 +1,32 @@
1From 2dc48e4b5c651691b7028991b64c935047b41b19 Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Mon, 14 Mar 2016 11:06:46 -0600
4Subject: [PATCH 112/114] ksm-wakeups
5
6reduce wakeups in ksm
7---
8 mm/ksm.c | 8 ++++++--
9 1 file changed, 6 insertions(+), 2 deletions(-)
10
11diff --git a/mm/ksm.c b/mm/ksm.c
12index 9ae6011a41f8..eecd3ff669e2 100644
13--- a/mm/ksm.c
14+++ b/mm/ksm.c
15@@ -1725,8 +1725,12 @@ static int ksm_scan_thread(void *nothing)
16 try_to_freeze();
17
18 if (ksmd_should_run()) {
19- schedule_timeout_interruptible(
20- msecs_to_jiffies(ksm_thread_sleep_millisecs));
21+ if (ksm_thread_sleep_millisecs >= 1000)
22+ schedule_timeout_interruptible(
23+ msecs_to_jiffies(round_jiffies_relative(ksm_thread_sleep_millisecs)));
24+ else
25+ schedule_timeout_interruptible(
26+ msecs_to_jiffies(ksm_thread_sleep_millisecs));
27 } else {
28 wait_event_freezable(ksm_thread_wait,
29 ksmd_should_run() || kthread_should_stop());
30--
312.11.1
32
diff --git a/patches/boot_time_opt_guest/0113-init-do_mounts-recreate-dev-root.patch b/patches/boot_time_opt_guest/0113-init-do_mounts-recreate-dev-root.patch
new file mode 100644
index 0000000..047eddb
--- /dev/null
+++ b/patches/boot_time_opt_guest/0113-init-do_mounts-recreate-dev-root.patch
@@ -0,0 +1,42 @@
1From 179b7f41d5509f93cd297cc81c5d8da4a3123d9d Mon Sep 17 00:00:00 2001
2From: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
3Date: Fri, 20 Nov 2015 14:01:26 -0600
4Subject: [PATCH 113/114] init: do_mounts: recreate /dev/root
5
6Rootfs shows as is mounted in /dev/root, but this devices is not present in
7/dev directory.
8
9Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
10---
11 init/do_mounts.c | 8 ++++++++
12 1 file changed, 8 insertions(+)
13
14diff --git a/init/do_mounts.c b/init/do_mounts.c
15index 40725f0f5fb3..78b5b1dba8ca 100644
16--- a/init/do_mounts.c
17+++ b/init/do_mounts.c
18@@ -550,6 +550,7 @@ void __init mount_root(void)
19 void __init prepare_namespace(void)
20 {
21 int is_floppy;
22+ int err;
23
24 if (root_delay) {
25 printk(KERN_INFO "Waiting %d sec before mounting root device...\n",
26@@ -604,6 +605,13 @@ void __init prepare_namespace(void)
27 devtmpfs_mount("dev");
28 sys_mount(".", "/", NULL, MS_MOVE, NULL);
29 sys_chroot(".");
30+#ifdef CONFIG_BLOCK
31+ /* recreate the /dev/root */
32+ err = create_dev("/dev/root", ROOT_DEV);
33+
34+ if (err < 0)
35+ pr_emerg("Failed to create /dev/root: %d\n", err);
36+#endif
37 }
38
39 static bool is_tmpfs;
40--
412.11.1
42
diff --git a/patches/boot_time_opt_guest/0114-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch b/patches/boot_time_opt_guest/0114-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch
new file mode 100644
index 0000000..dee9058
--- /dev/null
+++ b/patches/boot_time_opt_guest/0114-xattr-allow-setting-user.-attributes-on-symlinks-by-.patch
@@ -0,0 +1,56 @@
1From 02fd2e6a7c708bf973209f9b238c5c61cbf15239 Mon Sep 17 00:00:00 2001
2From: Alan Cox <alan@linux.intel.com>
3Date: Thu, 10 Mar 2016 15:11:28 +0000
4Subject: [PATCH 114/114] xattr: allow setting user.* attributes on symlinks by
5 owner
6
7Kvmtool and clear containers supports using user attributes to label host
8files with the virtual uid/guid of the file in the container. This allows an
9end user to manage their files and a complete uid space without all the ugly
10namespace stuff.
11
12The one gap in the support is symlinks because an end user can change the
13ownership of a symbolic link. We support attributes on these files as you
14can already (as root) set security attributes on them.
15
16The current rules seem slightly over-paranoid and as we have a use case this
17patch enables updating the attributes on a symbolic link IFF you are the
18owner of the synlink (as permissions are not usually meaningful on the link
19itself).
20
21Signed-off-by: Alan Cox <alan@linux.intel.com>
22---
23 fs/xattr.c | 14 ++++++++------
24 1 file changed, 8 insertions(+), 6 deletions(-)
25
26diff --git a/fs/xattr.c b/fs/xattr.c
27index 7e3317cf4045..e005c30acb2c 100644
28--- a/fs/xattr.c
29+++ b/fs/xattr.c
30@@ -118,15 +118,17 @@ xattr_permission(struct inode *inode, const char *name, int mask)
31 }
32
33 /*
34- * In the user.* namespace, only regular files and directories can have
35- * extended attributes. For sticky directories, only the owner and
36- * privileged users can write attributes.
37+ * In the user.* namespace, only regular files, symbolic links, and
38+ * directories can have extended attributes. For symbolic links and
39+ * sticky directories, only the owner and privileged users can write
40+ * attributes.
41 */
42 if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) {
43- if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
44+ if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode) && !S_ISLNK(inode->i_mode))
45 return (mask & MAY_WRITE) ? -EPERM : -ENODATA;
46- if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) &&
47- (mask & MAY_WRITE) && !inode_owner_or_capable(inode))
48+ if (((S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX))
49+ || S_ISLNK(inode->i_mode)) && (mask & MAY_WRITE)
50+ && !inode_owner_or_capable(inode))
51 return -EPERM;
52 }
53
54--
552.11.1
56
diff --git a/patches/boot_time_opt_guest/0151-mm-Export-do_madvise.patch b/patches/boot_time_opt_guest/0151-mm-Export-do_madvise.patch
new file mode 100644
index 0000000..a6dbff7
--- /dev/null
+++ b/patches/boot_time_opt_guest/0151-mm-Export-do_madvise.patch
@@ -0,0 +1,84 @@
1From 99b4cdcce43ad0f706120bef26fef8c628c572cf Mon Sep 17 00:00:00 2001
2From: Sebastien Boeuf <sebastien.boeuf@intel.com>
3Date: Mon, 23 Jan 2017 15:03:52 -0800
4Subject: [PATCH 151/154] mm: Export do_madvise()
5
6Combined with some interesting flags madvise() system call
7allows to free memory more smartly and more efficiently than
8we could do with a simple free(). The issue is that is not
9available for kernel modules that could need it.
10
11In order to solve this lack of support, this patch exports
12do_madvise() so as to make it available to the entire kernel.
13The already existing madvise() system call is unchanged and
14now relies on this new do_madvise() function.
15
16Suggested-by: Arjan van de Ven <arjan.van.de.ven@intel.com>
17Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
18---
19 include/linux/mm.h | 2 ++
20 mm/madvise.c | 25 +++++++++++++++++++++----
21 2 files changed, 23 insertions(+), 4 deletions(-)
22
23diff --git a/include/linux/mm.h b/include/linux/mm.h
24index 0b5b2e4df14e..925ec25f99a8 100644
25--- a/include/linux/mm.h
26+++ b/include/linux/mm.h
27@@ -2450,5 +2450,7 @@ void __init setup_nr_node_ids(void);
28 static inline void setup_nr_node_ids(void) {}
29 #endif
30
31+extern int do_madvise(unsigned long start, size_t len_in, int behavior);
32+
33 #endif /* __KERNEL__ */
34 #endif /* _LINUX_MM_H */
35diff --git a/mm/madvise.c b/mm/madvise.c
36index 93fb63e88b5e..c8bbf93d4978 100644
37--- a/mm/madvise.c
38+++ b/mm/madvise.c
39@@ -618,9 +618,7 @@ madvise_behavior_valid(int behavior)
40 }
41
42 /*
43- * The madvise(2) system call.
44- *
45- * Applications can use madvise() to advise the kernel how it should
46+ * Kernel modules can use do_madvise() to advise the kernel how it should
47 * handle paging I/O in this VM area. The idea is to help the kernel
48 * use appropriate read-ahead and caching techniques. The information
49 * provided is advisory only, and can be safely disregarded by the
50@@ -673,7 +671,7 @@ madvise_behavior_valid(int behavior)
51 * -EBADF - map exists, but area maps something that isn't a file.
52 * -EAGAIN - a kernel resource was temporarily unavailable.
53 */
54-SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
55+int do_madvise(unsigned long start, size_t len_in, int behavior)
56 {
57 unsigned long end, tmp;
58 struct vm_area_struct *vma, *prev;
59@@ -767,3 +765,22 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
60
61 return error;
62 }
63+EXPORT_SYMBOL_GPL(do_madvise);
64+
65+/*
66+ * The madvise(2) system call.
67+ *
68+ * Applications can use madvise() system call to advise the kernel how
69+ * it should handle paging I/O in this VM area. The idea is to help
70+ * the kernel use appropriate read-ahead and caching techniques. The
71+ * information provided is advisory only, and can be safely disregarded
72+ * by the kernel without affecting the correct operation of the application.
73+ *
74+ * behavior values are the same than the ones defined in madvise()
75+ *
76+ * return values are the same than the ones defined in madvise()
77+ */
78+SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
79+{
80+ return do_madvise(start, len_in, behavior);
81+}
82--
832.12.1
84
diff --git a/patches/boot_time_opt_guest/0152-x86-kvm-Notify-host-to-release-pages.patch b/patches/boot_time_opt_guest/0152-x86-kvm-Notify-host-to-release-pages.patch
new file mode 100644
index 0000000..ff9d8c0
--- /dev/null
+++ b/patches/boot_time_opt_guest/0152-x86-kvm-Notify-host-to-release-pages.patch
@@ -0,0 +1,180 @@
1From d28921b5f797829e4e676f7968ae688ef96b7992 Mon Sep 17 00:00:00 2001
2From: Sebastien Boeuf <sebastien.boeuf@intel.com>
3Date: Mon, 23 Jan 2017 15:08:55 -0800
4Subject: [PATCH 152/154] x86: kvm: Notify host to release pages
5
6In context of hypervisors managing several virtual machines, we
7want those virtual machines to give the memory they used back to
8the host when they don't need it anymore.
9
10This patch introduces a new hypercall KVM_HC_RETURN_MEM, allowing
11the guest kernel to notify the host kernel when such event occurs.
12And relying on do_madvise() function that we have previously exported,
13it issues a call to this function when it receives the new hypercall.
14
15Use of do_madvise() with MADV_DONTNEED flag will allow the guest to
16ask for a new page without going through a new hypercall. Instead,
17it will be able to start using that memory again as it will get
18faulted back in as a fresh new page. That's why do_madvise() is more
19efficient than doing vm_unmap() to return some memory to the host.
20
21This patch introduces also a new sysctl kvm_madv_instant_free,
22allowing user to set MADV_FREE advice instead of MADV_DONTNEED.
23Indeed, MADV_FREE saves more performances than using MADV_DONTNEED
24because it does not zero the pages in case the memory has not been
25freed by the kernel. This can happen when there was no need for the
26kernel to get this memory back, meaning it was keeping those pages
27in the right state to be re-used by the same application.
28MADV_FREE being a very recent advice introduced in kernel 4.5, we
29only want to enable it through a sysctl in case the user want to
30use it.
31
32Suggested-by: Arjan van de Ven <arjan.van.de.ven@intel.com>
33Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
34---
35 arch/x86/kvm/x86.c | 17 +++++++++++++++++
36 include/linux/mm.h | 5 +++++
37 include/uapi/linux/kvm_para.h | 3 +++
38 kernel/sysctl.c | 7 +++++++
39 mm/Makefile | 2 +-
40 mm/kvm.c | 25 +++++++++++++++++++++++++
41 6 files changed, 58 insertions(+), 1 deletion(-)
42 create mode 100644 mm/kvm.c
43
44diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
45index 582c75311f95..683a94dd5f03 100644
46--- a/arch/x86/kvm/x86.c
47+++ b/arch/x86/kvm/x86.c
48@@ -46,6 +46,7 @@
49 #include <linux/user-return-notifier.h>
50 #include <linux/srcu.h>
51 #include <linux/slab.h>
52+#include <linux/mm.h>
53 #include <linux/perf_event.h>
54 #include <linux/uaccess.h>
55 #include <linux/hash.h>
56@@ -6019,6 +6020,19 @@ static void kvm_pv_kick_cpu_op(struct kvm *kvm, unsigned long flags, int apicid)
57 kvm_irq_delivery_to_apic(kvm, NULL, &lapic_irq, NULL);
58 }
59
60+static int kvm_pv_return_mem_op(struct kvm *kvm, gpa_t gpa, size_t len)
61+{
62+ unsigned long start = gfn_to_hva(kvm, gpa_to_gfn(gpa));
63+
64+ if (len > KVM_MAX_RET_MEM_SIZE)
65+ return KVM_EPERM;
66+
67+ if (kvm_is_error_hva(start + len))
68+ return KVM_EFAULT;
69+
70+ return do_madvise(start, len, kvm_ret_mem_advice);
71+}
72+
73 void kvm_vcpu_deactivate_apicv(struct kvm_vcpu *vcpu)
74 {
75 vcpu->arch.apicv_active = false;
76@@ -6065,6 +6079,9 @@ int kvm_emulate_hypercall(struct kvm_vcpu *vcpu)
77 kvm_pv_kick_cpu_op(vcpu->kvm, a0, a1);
78 ret = 0;
79 break;
80+ case KVM_HC_RETURN_MEM:
81+ ret = kvm_pv_return_mem_op(vcpu->kvm, a0, a1);
82+ break;
83 default:
84 ret = -KVM_ENOSYS;
85 break;
86diff --git a/include/linux/mm.h b/include/linux/mm.h
87index 925ec25f99a8..833f23d98baa 100644
88--- a/include/linux/mm.h
89+++ b/include/linux/mm.h
90@@ -2303,6 +2303,11 @@ extern bool process_shares_mm(struct task_struct *p, struct mm_struct *mm);
91 extern int sysctl_drop_caches;
92 int drop_caches_sysctl_handler(struct ctl_table *, int,
93 void __user *, size_t *, loff_t *);
94+extern int sysctl_kvm_madv_instant_free;
95+extern int kvm_ret_mem_advice;
96+int kvm_madv_instant_free_sysctl_handler(struct ctl_table *table, int write,
97+ void __user *buffer, size_t *length,
98+ loff_t *ppos);
99 #endif
100
101 void drop_slab(void);
102diff --git a/include/uapi/linux/kvm_para.h b/include/uapi/linux/kvm_para.h
103index bf6cd7d5cac2..7d90f77d87d0 100644
104--- a/include/uapi/linux/kvm_para.h
105+++ b/include/uapi/linux/kvm_para.h
106@@ -23,6 +23,9 @@
107 #define KVM_HC_MIPS_GET_CLOCK_FREQ 6
108 #define KVM_HC_MIPS_EXIT_VM 7
109 #define KVM_HC_MIPS_CONSOLE_OUTPUT 8
110+#define KVM_HC_RETURN_MEM 10
111+
112+#define KVM_MAX_RET_MEM_SIZE (1 << 22) // 4MiB
113
114 /*
115 * hypercalls use architecture specific
116diff --git a/kernel/sysctl.c b/kernel/sysctl.c
117index c1095cdc0fe2..d8ae774fa042 100644
118--- a/kernel/sysctl.c
119+++ b/kernel/sysctl.c
120@@ -1398,6 +1398,13 @@ static struct ctl_table vm_table[] = {
121 .extra1 = &one,
122 .extra2 = &four,
123 },
124+ {
125+ .procname = "kvm_madv_instant_free",
126+ .data = &sysctl_kvm_madv_instant_free,
127+ .maxlen = sizeof(int),
128+ .mode = 0644,
129+ .proc_handler = kvm_madv_instant_free_sysctl_handler,
130+ },
131 #ifdef CONFIG_COMPACTION
132 {
133 .procname = "compact_memory",
134diff --git a/mm/Makefile b/mm/Makefile
135index 295bd7a9f76b..651ce0aff140 100644
136--- a/mm/Makefile
137+++ b/mm/Makefile
138@@ -37,7 +37,7 @@ obj-y := filemap.o mempool.o oom_kill.o \
139 mm_init.o mmu_context.o percpu.o slab_common.o \
140 compaction.o vmacache.o \
141 interval_tree.o list_lru.o workingset.o \
142- prfile.o debug.o $(mmu-y)
143+ prfile.o debug.o kvm.o $(mmu-y)
144
145 obj-y += init-mm.o
146
147diff --git a/mm/kvm.c b/mm/kvm.c
148new file mode 100644
149index 000000000000..8945f6a311b9
150--- /dev/null
151+++ b/mm/kvm.c
152@@ -0,0 +1,25 @@
153+#include <linux/mman.h>
154+
155+int sysctl_kvm_madv_instant_free;
156+
157+int kvm_ret_mem_advice = MADV_DONTNEED;
158+EXPORT_SYMBOL_GPL(kvm_ret_mem_advice);
159+
160+int kvm_madv_instant_free_sysctl_handler(struct ctl_table *table, int write,
161+ void __user *buffer, size_t *length, loff_t *ppos)
162+{
163+ int ret;
164+
165+ ret = proc_dointvec(table, write, buffer, length, ppos);
166+ if (ret)
167+ return ret;
168+
169+#ifdef MADV_FREE
170+ if (sysctl_kvm_madv_instant_free > 0)
171+ kvm_ret_mem_advice = MADV_FREE;
172+ else
173+ kvm_ret_mem_advice = MADV_DONTNEED;
174+#endif
175+
176+ return 0;
177+}
178--
1792.12.1
180
diff --git a/patches/boot_time_opt_guest/0153-x86-Return-memory-from-guest-to-host-kernel.patch b/patches/boot_time_opt_guest/0153-x86-Return-memory-from-guest-to-host-kernel.patch
new file mode 100644
index 0000000..cdb876a
--- /dev/null
+++ b/patches/boot_time_opt_guest/0153-x86-Return-memory-from-guest-to-host-kernel.patch
@@ -0,0 +1,155 @@
1From 855ef164854307839c08c60688eaeac14f9a649e Mon Sep 17 00:00:00 2001
2From: Sebastien Boeuf <sebastien.boeuf@intel.com>
3Date: Mon, 23 Jan 2017 15:26:13 -0800
4Subject: [PATCH 153/154] x86: Return memory from guest to host kernel
5
6All virtual machines need memory to perform various tasks, but this
7memory is not released to the host after it is not used anymore. We
8have to wait for the termination of the virtual machine to get this
9memory back into the host.
10
11Ballooning mechanism is close but not designed for the same purpose.
12In case we hit memory limits of the system, the host predicts how much
13memory can be asked back from a guest, and it issues an hypercall to
14retrieve this memory.
15
16The solution proposed is different because it does not wait for host
17needs before to return memory, and it knows precisely how much memory
18it can return.
19
20The way to notify the host side about such a return is to rely on
21the new hypercall KVM_HC_RETURN_MEM. In order to avoid the CPU to be
22overloaded with too many hypercalls, we only return memory blocks of
23order 7 (512k blocks) and higher. This value has been found running
24memory tests using multiple threads allocating/freeing high amount
25of memory. Those tests were run for different order values, and 7 was
26the best tradeoff between the number of hypercalls issued and the
27amount of memory returned to the host.
28
29In order to limit performances impact related to this code addition,
30we check for blocks of order 7 or higher. This means it only costs an
31additional function call and a branch to perform this check.
32
33Furthermore, this code has been added to the "merge" codepath of the
34buddy allocator, which is not as sensitive as the "free" codepath.
35Not all blocks going through the "free" codepath will end up in the
36"merge" codepath because some of them won't find their free buddy.
37But this is a negligible amount since the kernel does not use many
38high order blocks directly. Instead, those bigger blocks are often
39broken into smaller chunks used as low order blocks. At the time
40those small blocks are released, they go through the merge path.
41
42Benchmarks such as ebizzy and will-it-scale have been run in order
43to make sure this patch does not affect kernel performances and no
44significant differences were observed.
45
46Suggested-by: Arjan van de Ven <arjan.van.de.ven@intel.com>
47Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
48---
49 arch/x86/include/asm/kvm_para.h | 22 ++++++++++++++++++++++
50 arch/x86/kernel/kvm.c | 10 ++++++++++
51 include/linux/mm-arch-hooks.h | 8 ++++++++
52 mm/page_alloc.c | 2 ++
53 4 files changed, 42 insertions(+)
54
55diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h
56index bc62e7cbf1b1..4a2f6d1adbd2 100644
57--- a/arch/x86/include/asm/kvm_para.h
58+++ b/arch/x86/include/asm/kvm_para.h
59@@ -92,6 +92,28 @@ void kvm_async_pf_task_wait(u32 token);
60 void kvm_async_pf_task_wake(u32 token);
61 u32 kvm_read_and_reset_pf_reason(void);
62 extern void kvm_disable_steal_time(void);
63+void kvm_arch_return_memory(struct page *page, unsigned int order);
64+
65+/*
66+ * This order has been found in an empirical way, running memory tests
67+ * through many iterations to assess the number of hypercalls issued
68+ * and the amount of memory returned. In case you change this order to
69+ * 6 or 8, it should not impact your performances significantly.
70+ *
71+ * Smaller values lead to less memory waste, but consume more CPU on
72+ * hypercalls. Larger values use less CPU, but do not as precisely
73+ * inform the hypervisor of which memory is free.
74+ */
75+#define RET_MEM_BUDDY_ORDER 7
76+
77+static inline void arch_buddy_merge(struct page *page, unsigned int order)
78+{
79+ if (order < RET_MEM_BUDDY_ORDER)
80+ return;
81+
82+ kvm_arch_return_memory(page, order);
83+}
84+#define arch_buddy_merge arch_buddy_merge
85
86 #ifdef CONFIG_PARAVIRT_SPINLOCKS
87 void __init kvm_spinlock_init(void);
88diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
89index edbbfc854e39..14167b3f6514 100644
90--- a/arch/x86/kernel/kvm.c
91+++ b/arch/x86/kernel/kvm.c
92@@ -552,6 +552,16 @@ static __init int activate_jump_labels(void)
93 }
94 arch_initcall(activate_jump_labels);
95
96+void kvm_arch_return_memory(struct page *page, unsigned int order)
97+{
98+ if (!kvm_para_available())
99+ return;
100+
101+ kvm_hypercall2(KVM_HC_RETURN_MEM,
102+ page_to_phys(page),
103+ PAGE_SIZE << order);
104+}
105+
106 #ifdef CONFIG_PARAVIRT_SPINLOCKS
107
108 /* Kick a cpu by its apicid. Used to wake up a halted vcpu */
109diff --git a/include/linux/mm-arch-hooks.h b/include/linux/mm-arch-hooks.h
110index 4efc3f56e6df..26eb3a05a8a3 100644
111--- a/include/linux/mm-arch-hooks.h
112+++ b/include/linux/mm-arch-hooks.h
113@@ -12,6 +12,7 @@
114 #define _LINUX_MM_ARCH_HOOKS_H
115
116 #include <asm/mm-arch-hooks.h>
117+#include <asm/kvm_para.h>
118
119 #ifndef arch_remap
120 static inline void arch_remap(struct mm_struct *mm,
121@@ -22,4 +23,11 @@ static inline void arch_remap(struct mm_struct *mm,
122 #define arch_remap arch_remap
123 #endif
124
125+#ifndef arch_buddy_merge
126+static inline void arch_buddy_merge(struct page *page, unsigned int order)
127+{
128+}
129+#define arch_buddy_merge arch_buddy_merge
130+#endif
131+
132 #endif /* _LINUX_MM_ARCH_HOOKS_H */
133diff --git a/mm/page_alloc.c b/mm/page_alloc.c
134index 1460e6ad5e14..5f6e6371bc6f 100644
135--- a/mm/page_alloc.c
136+++ b/mm/page_alloc.c
137@@ -64,6 +64,7 @@
138 #include <linux/page_owner.h>
139 #include <linux/kthread.h>
140 #include <linux/memcontrol.h>
141+#include <linux/mm-arch-hooks.h>
142
143 #include <asm/sections.h>
144 #include <asm/tlbflush.h>
145@@ -855,6 +856,7 @@ static inline void __free_one_page(struct page *page,
146 }
147
148 done_merging:
149+ arch_buddy_merge(page, order);
150 set_page_order(page, order);
151
152 /*
153--
1542.12.1
155
diff --git a/patches/boot_time_opt_guest/0154-sysctl-vm-Fine-grained-cache-shrinking.patch b/patches/boot_time_opt_guest/0154-sysctl-vm-Fine-grained-cache-shrinking.patch
new file mode 100644
index 0000000..07d4a83
--- /dev/null
+++ b/patches/boot_time_opt_guest/0154-sysctl-vm-Fine-grained-cache-shrinking.patch
@@ -0,0 +1,137 @@
1From 2c145b5233b504f5226a0f4bc44baeef33b444d8 Mon Sep 17 00:00:00 2001
2From: Sebastien Boeuf <sebastien.boeuf@intel.com>
3Date: Mon, 23 Jan 2017 15:32:39 -0800
4Subject: [PATCH 154/154] sysctl: vm: Fine-grained cache shrinking
5
6Lots of virtual machines are let in idle state for days until they
7are terminated, and they can keep a large amount of memory in their
8cache, meaning this memory cannot be used by other processes.
9
10We tried to release this memory using existing drop_caches sysctl,
11but it led to the complete cache loss while it could have been used
12whether the idle process wakes up. Indeed, the process can't find any
13available cached data and it directly affects performances to rebuild
14it from scratch.
15
16Instead, the solution we want is based on shrinking gradually system
17cache over time. This patch adds a new sysctl shrink_caches_mb so as
18to allow userspace applications indicating the kernel it should shrink
19system cache up to the amount (in MiB) specified.
20
21There is an application called "memshrinker" which uses this new
22mechanism. It runs in the background and periodically releases a
23specified amount of cache. This amount is based on the remaining
24cache on the system, and period is computed to follow a shrinking
25model. It results in saving a lot of memory for other processes
26running on the system.
27
28Suggested-by: Arjan van de Ven <arjan.van.de.ven@intel.com>
29Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
30---
31 fs/drop_caches.c | 25 +++++++++++++++++++++++++
32 include/linux/mm.h | 4 ++++
33 kernel/sysctl.c | 8 ++++++++
34 mm/vmscan.c | 2 --
35 4 files changed, 37 insertions(+), 2 deletions(-)
36
37diff --git a/fs/drop_caches.c b/fs/drop_caches.c
38index d72d52b90433..f564dfcc13a4 100644
39--- a/fs/drop_caches.c
40+++ b/fs/drop_caches.c
41@@ -8,10 +8,12 @@
42 #include <linux/writeback.h>
43 #include <linux/sysctl.h>
44 #include <linux/gfp.h>
45+#include <linux/swap.h>
46 #include "internal.h"
47
48 /* A global variable is a bit ugly, but it keeps the code simple */
49 int sysctl_drop_caches;
50+int sysctl_shrink_caches_mb;
51
52 static void drop_pagecache_sb(struct super_block *sb, void *unused)
53 {
54@@ -67,3 +69,26 @@ int drop_caches_sysctl_handler(struct ctl_table *table, int write,
55 }
56 return 0;
57 }
58+
59+int shrink_caches_sysctl_handler(struct ctl_table *table, int write,
60+ void __user *buffer, size_t *length, loff_t *ppos)
61+{
62+ int ret;
63+ unsigned long nr_to_reclaim, page_reclaimed;
64+
65+ ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
66+ if (ret)
67+ return ret;
68+
69+ nr_to_reclaim = sysctl_shrink_caches_mb * (1 << 20) / PAGE_SIZE;
70+ if (write) {
71+ page_reclaimed = shrink_all_memory(nr_to_reclaim);
72+ if (page_reclaimed > 0)
73+ lru_add_drain_all();
74+
75+ if (page_reclaimed != nr_to_reclaim)
76+ return page_reclaimed;
77+ }
78+
79+ return 0;
80+}
81diff --git a/include/linux/mm.h b/include/linux/mm.h
82index 833f23d98baa..0bb66c1c31c9 100644
83--- a/include/linux/mm.h
84+++ b/include/linux/mm.h
85@@ -2308,6 +2308,10 @@ extern int kvm_ret_mem_advice;
86 int kvm_madv_instant_free_sysctl_handler(struct ctl_table *table, int write,
87 void __user *buffer, size_t *length,
88 loff_t *ppos);
89+extern int sysctl_shrink_caches_mb;
90+int shrink_caches_sysctl_handler(struct ctl_table *table, int write,
91+ void __user *buffer, size_t *length,
92+ loff_t *ppos);
93 #endif
94
95 void drop_slab(void);
96diff --git a/kernel/sysctl.c b/kernel/sysctl.c
97index d8ae774fa042..5dc9a46ae212 100644
98--- a/kernel/sysctl.c
99+++ b/kernel/sysctl.c
100@@ -1405,6 +1405,14 @@ static struct ctl_table vm_table[] = {
101 .mode = 0644,
102 .proc_handler = kvm_madv_instant_free_sysctl_handler,
103 },
104+ {
105+ .procname = "shrink_caches_mb",
106+ .data = &sysctl_shrink_caches_mb,
107+ .maxlen = sizeof(int),
108+ .mode = 0644,
109+ .proc_handler = shrink_caches_sysctl_handler,
110+ .extra1 = &one,
111+ },
112 #ifdef CONFIG_COMPACTION
113 {
114 .procname = "compact_memory",
115diff --git a/mm/vmscan.c b/mm/vmscan.c
116index 30a88b945a44..1198e74d1860 100644
117--- a/mm/vmscan.c
118+++ b/mm/vmscan.c
119@@ -3525,7 +3525,6 @@ void wakeup_kswapd(struct zone *zone, int order, enum zone_type classzone_idx)
120 wake_up_interruptible(&pgdat->kswapd_wait);
121 }
122
123-#ifdef CONFIG_HIBERNATION
124 /*
125 * Try to free `nr_to_reclaim' of memory, system-wide, and return the number of
126 * freed pages.
127@@ -3564,7 +3563,6 @@ unsigned long shrink_all_memory(unsigned long nr_to_reclaim)
128
129 return nr_reclaimed;
130 }
131-#endif /* CONFIG_HIBERNATION */
132
133 /* It's optimal to keep kswapds on the same CPUs as their memory, but
134 not required for correctness. So if the last cpu in a node goes
135--
1362.12.1
137
diff --git a/patches/boot_time_opt_guest/guest_boot_time_opt.scc b/patches/boot_time_opt_guest/guest_boot_time_opt.scc
new file mode 100644
index 0000000..3636c01
--- /dev/null
+++ b/patches/boot_time_opt_guest/guest_boot_time_opt.scc
@@ -0,0 +1,19 @@
1define KFEATURE_DESCRIPTION "Boot time optimization changes ported from ClearLinux , https://github.com/clearlinux-pkgs/linux-kvm"
2define KFEATURE_COMPATIBILITY all
3
4patch 0103-sysrq-skip-synchronize_rcu-if-there-is-no-old-op.patch
5patch 0104-fbcon-enable-no-blink-by-default.patch
6patch 0105-vmstats-wakeups.patch
7# Remove patch because it causes ixgvbevf to not initialize correctly in the guest
8#patch 0106-pci-probe.patch
9patch 0107-cgroup.patch
10patch 0108-smpboot-reuse-timer-calibration.patch
11patch 0109-perf.patch
12patch 0110-pci-probe-identify-known-devices.patch
13patch 0111-init-no-wait-for-the-known-devices.patch
14patch 0112-ksm-wakeups.patch
15
16patch 0151-mm-Export-do_madvise.patch
17patch 0152-x86-kvm-Notify-host-to-release-pages.patch
18patch 0153-x86-Return-memory-from-guest-to-host-kernel.patch
19patch 0154-sysctl-vm-Fine-grained-cache-shrinking.patch
diff --git a/pci/pci_iov_m.cfg b/pci/pci_iov_m.cfg
new file mode 100644
index 0000000..c52af46
--- /dev/null
+++ b/pci/pci_iov_m.cfg
@@ -0,0 +1 @@
CONFIG_PCI_IOV=y
diff --git a/pci/pci_iov_m.scc b/pci/pci_iov_m.scc
new file mode 100644
index 0000000..1612c3c
--- /dev/null
+++ b/pci/pci_iov_m.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Enable PCI I/O access"
2define KFEATURE_COMPATIBILITY board
3
4kconf non-hardware pci_iov_m.cfg
diff --git a/pci/pci_iov_y.cfg b/pci/pci_iov_y.cfg
new file mode 100644
index 0000000..c52af46
--- /dev/null
+++ b/pci/pci_iov_y.cfg
@@ -0,0 +1 @@
CONFIG_PCI_IOV=y
diff --git a/pci/pci_iov_y.scc b/pci/pci_iov_y.scc
new file mode 100644
index 0000000..685f058
--- /dev/null
+++ b/pci/pci_iov_y.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Enable PCI I/O access"
2define KFEATURE_COMPATIBILITY board
3
4kconf non-hardware pci_iov_y.cfg
diff --git a/pcimodules/pcimodules_n.cfg b/pcimodules/pcimodules_n.cfg
new file mode 100644
index 0000000..48fa2a1
--- /dev/null
+++ b/pcimodules/pcimodules_n.cfg
@@ -0,0 +1,19 @@
1CONFIG_PCI_CNB20LE_QUIRK=n
2CONFIG_HOTPLUG_PCI_PCIE=n
3CONFIG_PCIEASPM_DEBUG=n
4CONFIG_PCI_DEBUG=n
5CONFIG_PCI_REALLOC_ENABLE_AUTO=n
6CONFIG_PCI_STUB=m
7CONFIG_PCI_PRI=n
8CONFIG_HOTPLUG_PCI=n
9CONFIG_HOTPLUG_PCI_ACPI=n
10# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
11CONFIG_HOTPLUG_PCI_CPCI=n
12# CONFIG_HOTPLUG_PCI_CPCI_ZT5550 is not set
13# CONFIG_HOTPLUG_PCI_CPCI_GENERIC is not set
14# CONFIG_HOTPLUG_PCI_SHPC is not set
15#
16# PCI host controller drivers
17#
18CONFIG_PCIE_DW_PLAT=n
19CONFIG_PCIE_DW=n
diff --git a/pcimodules/pcimodules_n.scc b/pcimodules/pcimodules_n.scc
new file mode 100644
index 0000000..6cad0c5
--- /dev/null
+++ b/pcimodules/pcimodules_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable pcimodules support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware pcimodules_n.cfg
diff --git a/perf/perf_n.cfg b/perf/perf_n.cfg
new file mode 100644
index 0000000..8392495
--- /dev/null
+++ b/perf/perf_n.cfg
@@ -0,0 +1,2 @@
1CONFIG_CGROUP_PERF=n
2CONFIG_PERF_EVENTS=n
diff --git a/perf/perf_n.scc b/perf/perf_n.scc
new file mode 100644
index 0000000..4c5ebaf
--- /dev/null
+++ b/perf/perf_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable options required for perf support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware perf_n.cfg
diff --git a/power_supply/power_supply_n.cfg b/power_supply/power_supply_n.cfg
new file mode 100644
index 0000000..92dec05
--- /dev/null
+++ b/power_supply/power_supply_n.cfg
@@ -0,0 +1 @@
ONFIG_POWER_SUPPLY=n
diff --git a/power_supply/power_supply_n.scc b/power_supply/power_supply_n.scc
new file mode 100644
index 0000000..81bce6b
--- /dev/null
+++ b/power_supply/power_supply_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable power supply support"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware power_supply_n.cfg
diff --git a/ppp/ppp_n.cfg b/ppp/ppp_n.cfg
new file mode 100644
index 0000000..04d84a8
--- /dev/null
+++ b/ppp/ppp_n.cfg
@@ -0,0 +1,10 @@
1CONFIG_PPP=n
2CONFIG_PPP_BSDCOMP=n
3CONFIG_PPP_DEFLATE=n
4CONFIG_PPP_FILTER=n
5# CONFIG_PPP_MPPE is not set
6CONFIG_PPP_MULTILINK=n
7CONFIG_PPPOE=n
8# CONFIG_PPTP is not set
9CONFIG_PPP_ASYNC=n
10CONFIG_PPP_SYNC_TTY=n
diff --git a/ppp/ppp_n.scc b/ppp/ppp_n.scc
new file mode 100644
index 0000000..3d6a8db
--- /dev/null
+++ b/ppp/ppp_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable ppp support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware ppp_n.cfg
diff --git a/prockcore/prockcore_n.cfg b/prockcore/prockcore_n.cfg
new file mode 100644
index 0000000..aa9e6a4
--- /dev/null
+++ b/prockcore/prockcore_n.cfg
@@ -0,0 +1 @@
CONFIG_PROC_KCORE=n
diff --git a/prockcore/prockcore_n.scc b/prockcore/prockcore_n.scc
new file mode 100644
index 0000000..a2651b5
--- /dev/null
+++ b/prockcore/prockcore_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable prockcore support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware prockcore_n.cfg
diff --git a/reduced_kernel_footprint_guest/reduced_kernel_footprint_guest.scc b/reduced_kernel_footprint_guest/reduced_kernel_footprint_guest.scc
new file mode 100644
index 0000000..7fae6cd
--- /dev/null
+++ b/reduced_kernel_footprint_guest/reduced_kernel_footprint_guest.scc
@@ -0,0 +1,75 @@
1# Add standard kernel configuration and XZ kernel compression
2include features/std_kernel/std_kernel_y.scc
3
4# Disable unnecessary modules
5include features/bcma/bcma_n.scc
6include features/btrfs/btrfs_n.scc
7include features/compilechecks/compilechecks_n.scc
8include features/i2csupport/i2csupport_n.scc
9include features/isdn/isdn_n.scc
10include features/loopdev/loopdev_n.scc
11include features/msdos_fat_nt_fs/msdos_fat_nt_fs_n.scc
12include features/netblkdev/netblkdev_n.scc
13include features/netconsole/netconsole_n.scc
14include features/netfilter/netfilter_n.scc
15include features/nfs/nfs_n.scc
16include features/parport/parport_n.scc
17include features/pcimodules/pcimodules_n.scc
18include features/ppp/ppp_n.scc
19include features/prockcore/prockcore_n.scc
20include features/serio/serio_n.scc
21include features/slip/slip_n.scc
22include features/bug_support/bug_support_n.scc
23include features/powermanagement/powermanagement_n.scc
24include features/acpi/acpi_n.scc
25include features/cpu_freq/cpu_freq_n.scc
26include features/bluetooth/bluetooth_n.scc
27include features/wireless/wireless_n.scc
28include features/rfkill/rfkill_n.scc
29include features/6lowpan/6lowpan_n.scc
30include features/netdevices/netdevices_n.scc
31include features/media/media_n.scc
32include features/nfc/nfc_n.scc
33include features/sound/sound_n.scc
34include features/usbnet/usbnet_n.scc
35include features/i2csupport/i2csupport_n.scc
36include features/serio/serio_n.scc
37include features/tablet/tablet_n.scc
38include features/mouse/mouse_n.scc
39include features/mousedev/mousedev_n.scc
40include features/keyboard/keyboard_n.scc
41include features/input/input_n.scc
42include features/wlan/wlan_n.scc
43include features/ftrace/ftrace_n.scc
44include features/debug/debug_kernel_n.scc
45include features/ata/ata_n.scc
46include features/cdrom/cdrom_n.scc
47include features/power_supply/power_supply_n.scc
48include features/hwmon/hwmon_n.scc
49include features/thermal/thermal_n.scc
50include features/usbsupport/usbsupport_n.scc
51include features/touchscreen/touchscreen_n.scc
52include features/udev/udev_n.scc
53include features/kprobes/kprobes_n.scc
54include features/acp/acp_n.scc
55include features/agp/agp_n.scc
56include features/backlight/backlight_n.scc
57include features/cdrom_fs/cdrom_fs_n.scc
58include features/cgroupdbg/cgroupdbg_n.scc
59include features/display/display_n.scc
60include features/drm/drm_n.scc
61include features/elf_core_support/elf_core_support_n.scc
62include features/framebuffer/framebuffer_n.scc
63include features/hdmi/hdmi_n.scc
64include features/hid/hid_n.scc
65include features/kprobes/kprobes_n.scc
66include features/mmc/mmc_n.scc
67include features/pcspkr/pcspkr_n.scc
68include features/watchdog/watchdog_n.scc
69include features/vga/vga_n.scc
70include features/intel-e1xxxx/e100_n.scc
71include features/x86_platform/x86_platform_n.scc
72include features/memorydbg/memorydbg_n.scc
73include features/perf/perf_n.cfg
74include features/kgdb/kgdb_n.cfg
75include features/dmiid/dmiid_n.cfg
diff --git a/serio/serio_n.cfg b/serio/serio_n.cfg
new file mode 100644
index 0000000..c505fdd
--- /dev/null
+++ b/serio/serio_n.cfg
@@ -0,0 +1,15 @@
1#
2# Hardware I/O ports
3#
4CONFIG_SERIO=n
5CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=n
6CONFIG_SERIO_I8042=n
7CONFIG_SERIO_SERPORT=n
8# CONFIG_SERIO_CT82C710 is not set
9# CONFIG_SERIO_PCIPS2 is not set
10# CONFIG_SERIO_LIBPS2 is not set
11# CONFIG_SERIO_RAW is not set
12# CONFIG_SERIO_ALTERA_PS2 is not set
13# CONFIG_SERIO_PS2MULT is not set
14# CONFIG_SERIO_ARC_PS2 is not set
15# CONFIG_USERIO is not set
diff --git a/serio/serio_n.scc b/serio/serio_n.scc
new file mode 100644
index 0000000..389bf1e
--- /dev/null
+++ b/serio/serio_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable serio support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware serio_n.cfg
diff --git a/slip/slip_n.cfg b/slip/slip_n.cfg
new file mode 100644
index 0000000..b5cbd33
--- /dev/null
+++ b/slip/slip_n.cfg
@@ -0,0 +1,5 @@
1CONFIG_SLIP=n
2CONFIG_SLHC=n
3CONFIG_SLIP_COMPRESSED=n
4CONFIG_SLIP_SMART=n
5CONFIG_SLIP_MODE_SLIP6=n
diff --git a/slip/slip_n.scc b/slip/slip_n.scc
new file mode 100644
index 0000000..27b54c8
--- /dev/null
+++ b/slip/slip_n.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Disable slip support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware slip_n.cfg
diff --git a/thermal/thermal_n.cfg b/thermal/thermal_n.cfg
new file mode 100644
index 0000000..faa4970
--- /dev/null
+++ b/thermal/thermal_n.cfg
@@ -0,0 +1,4 @@
1CONFIG_THERMAL=n
2CONFIG_THERMAL_WRITABLE_TRIPS=n
3CONFIG_THERMAL_GOV_USER_SPACE=n
4CONFIG_X86_PKG_TEMP_THERMAL=n
diff --git a/thermal/thermal_n.scc b/thermal/thermal_n.scc
new file mode 100644
index 0000000..cccc945
--- /dev/null
+++ b/thermal/thermal_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable thermal sysfs support"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware thermal_n.cfg
diff --git a/udev/udev.cfg b/udev/udev.cfg
new file mode 100644
index 0000000..08dc3b0
--- /dev/null
+++ b/udev/udev.cfg
@@ -0,0 +1,28 @@
1CONFIG_DEVTMPFS=y
2CONFIG_CGROUPS=y
3CONFIG_INOTIFY_USER=y
4CONFIG_SIGNALFD=y
5CONFIG_TIMERFD=y
6CONFIG_EPOLL=y
7CONFIG_NET=y
8CONFIG_SYSFS=y
9CONFIG_PROC_FS=y
10CONFIG_FHANDLE=y
11
12CONFIG_SYSFS_DEPRECATED=n
13
14CONFIG_UEVENT_HELPER_PATH=""
15
16CONFIG_FW_LOADER_USER_HELPER=n
17
18CONFIG_DMIID=y
19
20CONFIG_BLK_DEV_BSG=y
21
22CONFIG_NET_NS=y
23CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
24CONFIG_USER_NS=y
25
26CONFIG_CGROUP_SCHED=y
27CONFIG_FAIR_GROUP_SCHED=y
28CONFIG_CFS_BANDWIDTH=y
diff --git a/udev/udev.scc b/udev/udev.scc
new file mode 100644
index 0000000..089ca2e
--- /dev/null
+++ b/udev/udev.scc
@@ -0,0 +1,7 @@
1define KFEATURE_DESCRIPTION "UDEV specific kernel configs: https://github.com/systemd/systemd/blob/master/README"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware udev.cfg
5kconf non-hardware udev_crypto.cfg
6kconf non-hardware udev_uefi.cfg
7kconf non-hardware udev_opt.cfg
diff --git a/udev/udev_crypto.cfg b/udev/udev_crypto.cfg
new file mode 100644
index 0000000..1e0be79
--- /dev/null
+++ b/udev/udev_crypto.cfg
@@ -0,0 +1,3 @@
1CONFIG_CRYPTO_USER_API_HASH=y
2CONFIG_CRYPTO_HMAC=y
3CONFIG_CRYPTO_SHA256=y
diff --git a/udev/udev_crypto.scc b/udev/udev_crypto.scc
new file mode 100644
index 0000000..9c019a6
--- /dev/null
+++ b/udev/udev_crypto.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "UDEV kernels config to support crypto"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware udev_crypto.cfg
diff --git a/udev/udev_n.cfg b/udev/udev_n.cfg
new file mode 100644
index 0000000..ef9e6d4
--- /dev/null
+++ b/udev/udev_n.cfg
@@ -0,0 +1 @@
CONFIG_UEVENT_HELPER=n
diff --git a/udev/udev_n.scc b/udev/udev_n.scc
new file mode 100644
index 0000000..bfaa194
--- /dev/null
+++ b/udev/udev_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable udev support"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware udev_n.cfg
diff --git a/udev/udev_opt.cfg b/udev/udev_opt.cfg
new file mode 100644
index 0000000..d08e36a
--- /dev/null
+++ b/udev/udev_opt.cfg
@@ -0,0 +1,10 @@
1CONFIG_IPV6=y
2CONFIG_AUTOFS4_FS=y
3CONFIG_TMPFS_XATTR=y
4CONFIG_TMPFS_POSIX_ACL=y
5CONFIG_EXT4_POSIX_ACL=y
6CONFIG_XFS_ACL=y
7CONFIG_BTRFS_FS_POSIX_ACL=y
8CONFIG_SECCOMP=y
9CONFIG_SECCOMP_FILTER=y
10CONFIG_CHECKPOINT_RESTORE=y
diff --git a/udev/udev_opt.scc b/udev/udev_opt.scc
new file mode 100644
index 0000000..dc1b86a
--- /dev/null
+++ b/udev/udev_opt.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "Optional UDEV kernel configs"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware udev_opt.cfg
diff --git a/udev/udev_uefi.cfg b/udev/udev_uefi.cfg
new file mode 100644
index 0000000..ec2aa3e
--- /dev/null
+++ b/udev/udev_uefi.cfg
@@ -0,0 +1,2 @@
1CONFIG_EFIVAR_FS=y
2CONFIG_EFI_PARTITION=y
diff --git a/udev/udev_uefi.scc b/udev/udev_uefi.scc
new file mode 100644
index 0000000..bda289e
--- /dev/null
+++ b/udev/udev_uefi.scc
@@ -0,0 +1,4 @@
1define KFEATURE_DESCRIPTION "kernel configs for UDEV with UEFI support"
2define KFEATURE_COMPATIBILITY all
3
4kconf non-hardware udev_uefi.cfg
diff --git a/vga/vga_n.cfg b/vga/vga_n.cfg
new file mode 100644
index 0000000..cc679da
--- /dev/null
+++ b/vga/vga_n.cfg
@@ -0,0 +1 @@
CONFIG_VGA_ARB=n
diff --git a/vga/vga_n.scc b/vga/vga_n.scc
new file mode 100644
index 0000000..2b9e2c1
--- /dev/null
+++ b/vga/vga_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable VGA"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware vga_n.cfg
diff --git a/watchdog/watchdog_n.cfg b/watchdog/watchdog_n.cfg
new file mode 100644
index 0000000..3d103ce
--- /dev/null
+++ b/watchdog/watchdog_n.cfg
@@ -0,0 +1 @@
CONFIG_WATCHDOG=n
diff --git a/watchdog/watchdog_n.scc b/watchdog/watchdog_n.scc
new file mode 100644
index 0000000..d394a3d
--- /dev/null
+++ b/watchdog/watchdog_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable watchdog support"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware watchdog_n.cfg
diff --git a/x86_platform/x86_platform_n.cfg b/x86_platform/x86_platform_n.cfg
new file mode 100644
index 0000000..2a96aa9
--- /dev/null
+++ b/x86_platform/x86_platform_n.cfg
@@ -0,0 +1 @@
CONFIG_X86_PLATFORM_DEVICES=n
diff --git a/x86_platform/x86_platform_n.scc b/x86_platform/x86_platform_n.scc
new file mode 100644
index 0000000..a224808
--- /dev/null
+++ b/x86_platform/x86_platform_n.scc
@@ -0,0 +1,5 @@
1define KFEATURE_DESCRIPTION "Disable x86 platform devices"
2
3define KFEATURE_COMPATIBILITY all
4
5kconf hardware x86_platform_n.cfg