diff --git a/SOURCES/tuned-2.9.0-use-online-cpus.patch b/SOURCES/tuned-2.9.0-use-online-cpus.patch
new file mode 100644
index 0000000..3165038
--- /dev/null
+++ b/SOURCES/tuned-2.9.0-use-online-cpus.patch
@@ -0,0 +1,104 @@
+diff --git a/profiles/cpu-partitioning/tuned.conf b/profiles/cpu-partitioning/tuned.conf
+index 3c52215..1821b74 100644
+--- a/profiles/cpu-partitioning/tuned.conf
++++ b/profiles/cpu-partitioning/tuned.conf
+@@ -19,13 +19,13 @@ tmpdir=${f:strip:${f:exec:/usr/bin/mktemp:-d}}
+ isolated_cores_expanded=${f:cpulist_unpack:${isolated_cores}}
+ isolated_cpumask=${f:cpulist2hex:${isolated_cores_expanded}}
+ not_isolated_cores_expanded=${f:cpulist_invert:${isolated_cores_expanded}}
+-isolated_cores_present_expanded=${f:cpulist_present:${isolated_cores}}
+-not_isolated_cores_present_expanded=${f:cpulist_present:${not_isolated_cores_expanded}}
++isolated_cores_online_expanded=${f:cpulist_online:${isolated_cores}}
++not_isolated_cores_online_expanded=${f:cpulist_online:${not_isolated_cores_expanded}}
+ not_isolated_cpumask=${f:cpulist2hex:${not_isolated_cores_expanded}}
+ no_balance_cores_expanded=${f:cpulist_unpack:${no_balance_cores}}
+ 
+-# Fail if isolated_cores contains CPUs which are not present
+-assert2=${f:assertion:isolated_cores contains present CPU(s):${isolated_cores_expanded}:${isolated_cores_present_expanded}}
++# Fail if isolated_cores contains CPUs which are not online
++assert2=${f:assertion:isolated_cores contains online CPU(s):${isolated_cores_expanded}:${isolated_cores_online_expanded}}
+ 
+ [sysctl]
+ kernel.hung_task_timeout_secs = 600
+diff --git a/profiles/realtime-virtual-guest/tuned.conf b/profiles/realtime-virtual-guest/tuned.conf
+index cf349ef..05cf783 100644
+--- a/profiles/realtime-virtual-guest/tuned.conf
++++ b/profiles/realtime-virtual-guest/tuned.conf
+@@ -15,10 +15,10 @@ isolated_cores_assert_check = \\${isolated_cores}
+ assert1=${f:assertion_non_equal:isolated_cores are set:${isolated_cores}:${isolated_cores_assert_check}}
+ 
+ isolated_cores_expanded=${f:cpulist_unpack:${isolated_cores}}
+-isolated_cores_present_expanded=${f:cpulist_present:${isolated_cores}}
++isolated_cores_online_expanded=${f:cpulist_online:${isolated_cores}}
+ 
+-# Fail if isolated_cores contains CPUs which are not present
+-assert2=${f:assertion:isolated_cores contains present CPU(s):${isolated_cores_expanded}:${isolated_cores_present_expanded}}
++# Fail if isolated_cores contains CPUs which are not online
++assert2=${f:assertion:isolated_cores contains online CPU(s):${isolated_cores_expanded}:${isolated_cores_online_expanded}}
+ 
+ [scheduler]
+ # group.group_name=rule_priority:scheduler_policy:scheduler_priority:core_affinity_in_hex:process_name_regex
+diff --git a/profiles/realtime-virtual-host/tuned.conf b/profiles/realtime-virtual-host/tuned.conf
+index 828e519..f64e22a 100644
+--- a/profiles/realtime-virtual-host/tuned.conf
++++ b/profiles/realtime-virtual-host/tuned.conf
+@@ -32,10 +32,10 @@ isolated_cores_assert_check = \\${isolated_cores}
+ assert1=${f:assertion_non_equal:isolated_cores are set:${isolated_cores}:${isolated_cores_assert_check}}
+ 
+ isolated_cores_expanded=${f:cpulist_unpack:${isolated_cores}}
+-isolated_cores_present_expanded=${f:cpulist_present:${isolated_cores}}
++isolated_cores_online_expanded=${f:cpulist_online:${isolated_cores}}
+ 
+-# Fail if isolated_cores contains CPUs which are not present
+-assert2=${f:assertion:isolated_cores contains present CPU(s):${isolated_cores_expanded}:${isolated_cores_present_expanded}}
++# Fail if isolated_cores contains CPUs which are not online
++assert2=${f:assertion:isolated_cores contains online CPU(s):${isolated_cores_expanded}:${isolated_cores_online_expanded}}
+ 
+ [scheduler]
+ # group.group_name=rule_priority:scheduler_policy:scheduler_priority:core_affinity_in_hex:process_name_regex
+diff --git a/profiles/realtime/tuned.conf b/profiles/realtime/tuned.conf
+index 6feee3f..6b3676b 100644
+--- a/profiles/realtime/tuned.conf
++++ b/profiles/realtime/tuned.conf
+@@ -18,10 +18,10 @@ assert1=${f:assertion_non_equal:isolated_cores are set:${isolated_cores}:${isola
+ # Non-isolated cores cpumask including offline cores
+ not_isolated_cpumask = ${f:cpulist2hex_invert:${isolated_cores}}
+ isolated_cores_expanded=${f:cpulist_unpack:${isolated_cores}}
+-isolated_cores_present_expanded=${f:cpulist_present:${isolated_cores}}
++isolated_cores_online_expanded=${f:cpulist_online:${isolated_cores}}
+ 
+-# Fail if isolated_cores contains CPUs which are not present
+-assert2=${f:assertion:isolated_cores contains present CPU(s):${isolated_cores_expanded}:${isolated_cores_present_expanded}}
++# Fail if isolated_cores contains CPUs which are not online
++assert2=${f:assertion:isolated_cores contains online CPU(s):${isolated_cores_expanded}:${isolated_cores_online_expanded}}
+ 
+ [sysctl]
+ kernel.hung_task_timeout_secs = 600
+diff --git a/tuned/profiles/functions/function_cpulist_invert.py b/tuned/profiles/functions/function_cpulist_invert.py
+index 2a3c9ea..52f8270 100644
+--- a/tuned/profiles/functions/function_cpulist_invert.py
++++ b/tuned/profiles/functions/function_cpulist_invert.py
+@@ -8,7 +8,7 @@ log = tuned.logs.get()
+ class cpulist_invert(base.Function):
+ 	"""
+ 	Inverts list of CPUs (makes its complement). For the complement it
+-	gets number of present CPUs from the /sys/devices/system/cpu/present,
++	gets number of present CPUs from the /sys/devices/system/cpu/online,
+ 	e.g. system with 4 CPUs (0-3), the inversion of list "0,2,3" will be
+ 	"1"
+ 	"""
+diff --git a/tuned/utils/commands.py b/tuned/utils/commands.py
+index f8e393f..3299f4c 100644
+--- a/tuned/utils/commands.py
++++ b/tuned/utils/commands.py
+@@ -355,8 +355,8 @@ class commands:
+ 	# Inverts CPU list (i.e. makes its complement)
+ 	def cpulist_invert(self, l):
+ 		cpus = self.cpulist_unpack(l)
+-		present = self.cpulist_unpack(self.read_file("/sys/devices/system/cpu/present"))
+-		return list(set(present) - set(cpus))
++		online = self.cpulist_unpack(self.read_file("/sys/devices/system/cpu/online"))
++		return list(set(online) - set(cpus))
+ 
+ 	# Converts CPU list to hexadecimal CPU mask
+ 	def cpulist2hex(self, l):
diff --git a/SPECS/tuned.spec b/SPECS/tuned.spec
index 6567ec5..d22bf31 100644
--- a/SPECS/tuned.spec
+++ b/SPECS/tuned.spec
@@ -7,7 +7,7 @@
 Summary: A dynamic adaptive system tuning daemon
 Name: tuned
 Version: 2.9.0
-Release: 1%{?prerel1}%{?dist}.1
+Release: 1%{?prerel1}%{?dist}.2
 License: GPLv2+
 Source: https://github.com/redhat-performance/%{name}/archive/v%{version}%{?prerel2}.tar.gz#/%{name}-%{version}%{?prerel1}.tar.gz
 URL: http://www.tuned-project.org/
@@ -23,6 +23,7 @@ Requires: util-linux, python-perf, dbus, polkit, python-linux-procfs
 Requires: python-schedutils
 Patch0: tuned-2.8.0-gtk-3.8.patch
 Patch1: tuned-2.9.0-scheduler-blacklist-thread-names.patch
+Patch2: tuned-2.9.0-use-online-cpus.patch
 
 %description
 The tuned package contains a daemon that tunes system settings dynamically.
@@ -151,6 +152,7 @@ It can be also used to fine tune your system for specific scenarios.
 %setup -q -n %{name}-%{version}%{?prerel2}
 %patch0 -p1
 %patch1 -p1
+%patch2 -p1
 
 
 %build
@@ -396,6 +398,10 @@ fi
 %{_mandir}/man7/tuned-profiles-compat.7*
 
 %changelog
+* Wed Aug  8 2018 Jaroslav Škarvada <jskarvad@redhat.com> - 2.9.0-1.2
+- use online CPUs for cpusets calculations instead of present CPUs
+  resolves: rhbz#1613951
+
 * Wed Jul  4 2018 Jaroslav Škarvada <jskarvad@redhat.com> - 2.9.0-1.1
 - plugin_scheduler: whitelist/blacklist processed also for thread names
   resolves: rhbz#1598031