Commit 0d2460ba authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

Merge branches 'doc.2021.01.06a', 'fixes.2021.01.04b',...

Merge branches 'doc.2021.01.06a', 'fixes.2021.01.04b', 'kfree_rcu.2021.01.04a', 'mmdumpobj.2021.01.22a', 'nocb.2021.01.06a', 'rt.2021.01.04a', 'stall.2021.01.06a', 'torture.2021.01.12a' and 'tortureall.2021.01.06a' into HEAD

doc.2021.01.06a: Documentation updates.
fixes.2021.01.04b: Miscellaneous fixes.
kfree_rcu.2021.01.04a: kfree_rcu() updates.
mmdumpobj.2021.01.22a: Dump allocation point for memory blocks.
nocb.2021.01.06a: RCU callback offload updates and cblist segment lengths.
rt.2021.01.04a: Real-time updates.
stall.2021.01.06a: RCU CPU stall warning updates.
torture.2021.01.12a: Torture-test updates and polling SRCU grace-period API.
tortureall.2021.01.06a: Torture-test script updates.
Loading
+18 −0
Original line number Diff line number Diff line
@@ -2598,6 +2598,24 @@ also includes DEFINE_SRCU(), DEFINE_STATIC_SRCU(), and
init_srcu_struct() APIs for defining and initializing
``srcu_struct`` structures.

More recently, the SRCU API has added polling interfaces:

#. start_poll_synchronize_srcu() returns a cookie identifying
   the completion of a future SRCU grace period and ensures
   that this grace period will be started.
#. poll_state_synchronize_srcu() returns ``true`` iff the
   specified cookie corresponds to an already-completed
   SRCU grace period.
#. get_state_synchronize_srcu() returns a cookie just like
   start_poll_synchronize_srcu() does, but differs in that
   it does nothing to ensure that any future SRCU grace period
   will be started.

These functions are used to avoid unnecessary SRCU grace periods in
certain types of buffer-cache algorithms having multi-stage age-out
mechanisms.  The idea is that by the time the block has aged completely
from the cache, an SRCU grace period will be very likely to have elapsed.

Tasks RCU
~~~~~~~~~

+22 −1
Original line number Diff line number Diff line
@@ -92,7 +92,9 @@ warnings:
	buggy timer hardware through bugs in the interrupt or exception
	path (whether hardware, firmware, or software) through bugs
	in Linux's timer subsystem through bugs in the scheduler, and,
	yes, even including bugs in RCU itself.
	yes, even including bugs in RCU itself.  It can also result in
	the ``rcu_.*timer wakeup didn't happen for`` console-log message,
	which will include additional debugging information.

-	A bug in the RCU implementation.

@@ -292,6 +294,25 @@ kthread is waiting for a short timeout, the "state" precedes value of the
task_struct ->state field, and the "cpu" indicates that the grace-period
kthread last ran on CPU 5.

If the relevant grace-period kthread does not wake from FQS wait in a
reasonable time, then the following additional line is printed::

	kthread timer wakeup didn't happen for 23804 jiffies! g7076 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402

The "23804" indicates that kthread's timer expired more than 23 thousand
jiffies ago.  The rest of the line has meaning similar to the kthread
starvation case.

Additionally, the following line is printed::

	Possible timer handling issue on cpu=4 timer-softirq=11142

Here "cpu" indicates that the grace-period kthread last ran on CPU 4,
where it queued the fqs timer.  The number following the "timer-softirq"
is the current ``TIMER_SOFTIRQ`` count on cpu 4.  If this value does not
change on successive RCU CPU stall warnings, there is further reason to
suspect a timer problem.


Multiple Warnings From One Stall
================================
+33 −0
Original line number Diff line number Diff line
@@ -4092,6 +4092,10 @@
			value, meaning that RCU_SOFTIRQ is used by default.
			Specify rcutree.use_softirq=0 to use rcuc kthreads.

			But note that CONFIG_PREEMPT_RT=y kernels disable
			this kernel boot parameter, forcibly setting it
			to zero.

	rcutree.rcu_fanout_exact= [KNL]
			Disable autobalancing of the rcu_node combining
			tree.  This is used by rcutorture, and might
@@ -4332,6 +4336,14 @@
			stress RCU, they don't participate in the actual
			test, hence the "fake".

	rcutorture.nocbs_nthreads= [KNL]
			Set number of RCU callback-offload togglers.
			Zero (the default) disables toggling.

	rcutorture.nocbs_toggle= [KNL]
			Set the delay in milliseconds between successive
			callback-offload toggling attempts.

	rcutorture.nreaders= [KNL]
			Set number of RCU readers.  The value -1 selects
			N-1, where N is the number of CPUs.  A value
@@ -4464,6 +4476,13 @@
			only normal grace-period primitives.  No effect
			on CONFIG_TINY_RCU kernels.

			But note that CONFIG_PREEMPT_RT=y kernels enables
			this kernel boot parameter, forcibly setting
			it to the value one, that is, converting any
			post-boot attempt at an expedited RCU grace
			period to instead use normal non-expedited
			grace-period processing.

	rcupdate.rcu_task_ipi_delay= [KNL]
			Set time in jiffies during which RCU tasks will
			avoid sending IPIs, starting with the beginning
@@ -4551,6 +4570,12 @@
	refscale.verbose= [KNL]
			Enable additional printk() statements.

	refscale.verbose_batched= [KNL]
			Batch the additional printk() statements.  If zero
			(the default) or negative, print everything.  Otherwise,
			print every Nth verbose statement, where N is the value
			specified.

	relax_domain_level=
			[KNL, SMP] Set scheduler's default relax_domain_level.
			See Documentation/admin-guide/cgroup-v1/cpusets.rst.
@@ -5325,6 +5350,14 @@
			are running concurrently, especially on systems
			with rotating-rust storage.

	torture.verbose_sleep_frequency= [KNL]
			Specifies how many verbose printk()s should be
			emitted between each sleep.  The default of zero
			disables verbose-printk() sleeping.

	torture.verbose_sleep_duration= [KNL]
			Duration of each verbose-printk() sleep in jiffies.

	tp720=		[HW,PS2]

	tpm_suspend_pcr=[HW,TPM]
+2 −0
Original line number Diff line number Diff line
@@ -111,6 +111,8 @@ static inline void cpu_maps_update_done(void)
#endif /* CONFIG_SMP */
extern struct bus_type cpu_subsys;

extern int lockdep_is_cpus_held(void);

#ifdef CONFIG_HOTPLUG_CPU
extern void cpus_write_lock(void);
extern void cpus_write_unlock(void);
+2 −0
Original line number Diff line number Diff line
@@ -3169,5 +3169,7 @@ unsigned long wp_shared_mapping_range(struct address_space *mapping,

extern int sysctl_nr_trim_pages;

void mem_dump_obj(void *object);

#endif /* __KERNEL__ */
#endif /* _LINUX_MM_H */
Loading