Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e201463 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull scheduler updates from Ingo Molnar:
 "The main updates in this cycle were:

   - Group balancing enhancements and cleanups (Brendan Jackman)

   - Move CPU isolation related functionality into its separate
     kernel/sched/isolation.c file, with related 'housekeeping_*()'
     namespace and nomenclature et al. (Frederic Weisbecker)

   - Improve the interactive/cpu-intense fairness calculation (Josef
     Bacik)

   - Improve the PELT code and related cleanups (Peter Zijlstra)

   - Improve the logic of pick_next_task_fair() (Uladzislau Rezki)

   - Improve the RT IPI based balancing logic (Steven Rostedt)

   - Various micro-optimizations:

   - better !CONFIG_SCHED_DEBUG optimizations (Patrick Bellasi)

   - better idle loop (Cheng Jian)

   - ... plus misc fixes, cleanups and updates"

* 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (54 commits)
  sched/core: Optimize sched_feat() for !CONFIG_SCHED_DEBUG builds
  sched/sysctl: Fix attributes of some extern declarations
  sched/isolation: Document isolcpus= boot parameter flags, mark it deprecated
  sched/isolation: Add basic isolcpus flags
  sched/isolation: Move isolcpus= handling to the housekeeping code
  sched/isolation: Handle the nohz_full= parameter
  sched/isolation: Introduce housekeeping flags
  sched/isolation: Split out new CONFIG_CPU_ISOLATION=y config from CONFIG_NO_HZ_FULL
  sched/isolation: Rename is_housekeeping_cpu() to housekeeping_cpu()
  sched/isolation: Use its own static key
  sched/isolation: Make the housekeeping cpumask private
  sched/isolation: Provide a dynamic off-case to housekeeping_any_cpu()
  sched/isolation, watchdog: Use housekeeping_cpumask() instead of ad-hoc version
  sched/isolation: Move housekeeping related code to its own file
  sched/idle: Micro-optimize the idle loop
  sched/isolcpus: Fix "isolcpus=" boot parameter handling when !CONFIG_CPUMASK_OFFSTACK
  x86/tsc: Append the 'tsc=' description for the 'tsc=unstable' boot parameter
  sched/rt: Simplify the IPI based RT balancing logic
  block/ioprio: Use a helper to check for RT prio
  sched/rt: Add a helper to test for a RT task
  ...
parents f2be8bd5 765cc3a4
Loading
Loading
Loading
Loading
+28 −12
Original line number Diff line number Diff line
@@ -1730,20 +1730,33 @@
	isapnp=		[ISAPNP]
			Format: <RDP>,<reset>,<pci_scan>,<verbosity>

	isolcpus=	[KNL,SMP] Isolate CPUs from the general scheduler.
			The argument is a cpu list, as described above.

			This option can be used to specify one or more CPUs
			to isolate from the general SMP balancing and scheduling
			algorithms. You can move a process onto or off an
			"isolated" CPU via the CPU affinity syscalls or cpuset.
	isolcpus=	[KNL,SMP] Isolate a given set of CPUs from disturbance.
			[Deprecated - use cpusets instead]
			Format: [flag-list,]<cpu-list>

			Specify one or more CPUs to isolate from disturbances
			specified in the flag list (default: domain):

			nohz
			  Disable the tick when a single task runs.
			domain
			  Isolate from the general SMP balancing and scheduling
			  algorithms. Note that performing domain isolation this way
			  is irreversible: it's not possible to bring back a CPU to
			  the domains once isolated through isolcpus. It's strongly
			  advised to use cpusets instead to disable scheduler load
			  balancing through the "cpuset.sched_load_balance" file.
			  It offers a much more flexible interface where CPUs can
			  move in and out of an isolated set anytime.

			  You can move a process onto or off an "isolated" CPU via
			  the CPU affinity syscalls or cpuset.
			  <cpu number> begins at 0 and the maximum value is
			  "number of CPUs in system - 1".

			This option is the preferred way to isolate CPUs. The
			alternative -- manually setting the CPU mask of all
			tasks in the system -- can cause problems and
			suboptimal load balancer performance.
			The format of <cpu-list> is described above.



	iucv=		[HW,NET]

@@ -4209,6 +4222,9 @@
			Used to run time disable IRQ_TIME_ACCOUNTING on any
			platforms where RDTSC is slow and this accounting
			can add overhead.
			[x86] unstable: mark the TSC clocksource as unstable, this
			marks the TSC unconditionally unstable at bootup and
			avoids any further wobbles once the TSC watchdog notices.

	turbografx.map[2|3]=	[HW,JOY]
			TurboGraFX parallel port interface
+10 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include <linux/cpufeature.h>
#include <linux/tick.h>
#include <linux/pm_qos.h>
#include <linux/sched/isolation.h>

#include "base.h"

@@ -271,8 +272,16 @@ static ssize_t print_cpus_isolated(struct device *dev,
				  struct device_attribute *attr, char *buf)
{
	int n = 0, len = PAGE_SIZE-2;
	cpumask_var_t isolated;

	n = scnprintf(buf, len, "%*pbl\n", cpumask_pr_args(cpu_isolated_map));
	if (!alloc_cpumask_var(&isolated, GFP_KERNEL))
		return -ENOMEM;

	cpumask_andnot(isolated, cpu_possible_mask,
		       housekeeping_cpumask(HK_FLAG_DOMAIN));
	n = scnprintf(buf, len, "%*pbl\n", cpumask_pr_args(isolated));

	free_cpumask_var(isolated);

	return n;
}
+3 −3
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@
#include <linux/tcp.h>
#include <linux/net_tstamp.h>
#include <linux/ptp_clock_kernel.h>
#include <linux/tick.h>
#include <linux/sched/isolation.h>

#include <asm/checksum.h>
#include <asm/homecache.h>
@@ -2270,8 +2270,8 @@ static int __init tile_net_init_module(void)
		tile_net_dev_init(name, mac);

	if (!network_cpus_init())
		cpumask_and(&network_cpus_map, housekeeping_cpumask(),
			    cpu_online_mask);
		cpumask_and(&network_cpus_map,
			    housekeeping_cpumask(HK_FLAG_MISC), cpu_online_mask);

	return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ static const char * const task_state_array[] = {
static inline const char *get_task_state(struct task_struct *tsk)
{
	BUILD_BUG_ON(1 + ilog2(TASK_REPORT_MAX) != ARRAY_SIZE(task_state_array));
	return task_state_array[__get_task_state(tsk)];
	return task_state_array[task_state_index(tsk)];
}

static inline int get_task_umask(struct task_struct *tsk)
+16 −0
Original line number Diff line number Diff line
@@ -131,6 +131,11 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
	return 0;
}

static inline unsigned int cpumask_last(const struct cpumask *srcp)
{
	return 0;
}

/* Valid inputs for n are -1 and 0. */
static inline unsigned int cpumask_next(int n, const struct cpumask *srcp)
{
@@ -179,6 +184,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
	return find_first_bit(cpumask_bits(srcp), nr_cpumask_bits);
}

/**
 * cpumask_last - get the last CPU in a cpumask
 * @srcp:	- the cpumask pointer
 *
 * Returns	>= nr_cpumask_bits if no CPUs set.
 */
static inline unsigned int cpumask_last(const struct cpumask *srcp)
{
	return find_last_bit(cpumask_bits(srcp), nr_cpumask_bits);
}

unsigned int cpumask_next(int n, const struct cpumask *srcp);

/**
Loading