All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org,
	Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	Tejun Heo <tj@kernel.org>,
	akpm@linux-foundation.org, linux-mm@kvack.org,
	Cong Wang <xiyou.wangcong@gmail.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Mel Gorman <mgorman@suse.de>, Michal Hocko <mhocko@kernel.org>,
	Vlastimil Babka <vbabka@suse.cz>,
	Peter Zijlstra <peterz@infradead.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Jan Kara <jack@suse.cz>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Byungchul Park <byungchul.park@lge.com>,
	Pavel Machek <pavel@ucw.cz>,
	"Steven Rostedt (VMware)" <rostedt@goodmis.org>,
	Petr Mladek <pmladek@suse.com>, Sasha Levin <sashal@kernel.org>
Subject: [PATCH 4.14 82/89] printk: Never set console_may_schedule in console_trylock()
Date: Fri, 14 Dec 2018 13:00:35 +0100	[thread overview]
Message-ID: <20181214115733.737137210@linuxfoundation.org> (raw)
In-Reply-To: <20181214115729.658859279@linuxfoundation.org>

4.14-stable review patch.  If anyone has any objections, please let me know.

------------------

[ Upstream commit fd5f7cde1b85d4c8e09ca46ce948e008a2377f64 ]

This patch, basically, reverts commit 6b97a20d3a79 ("printk:
set may_schedule for some of console_trylock() callers").
That commit was a mistake, it introduced a big dependency
on the scheduler, by enabling preemption under console_sem
in printk()->console_unlock() path, which is rather too
critical. The patch did not significantly reduce the
possibilities of printk() lockups, but made it possible to
stall printk(), as has been reported by Tetsuo Handa [1].

Another issues is that preemption under console_sem also
messes up with Steven Rostedt's hand off scheme, by making
it possible to sleep with console_sem both in console_unlock()
and in vprintk_emit(), after acquiring the console_sem
ownership (anywhere between printk_safe_exit_irqrestore() in
console_trylock_spinning() and printk_safe_enter_irqsave()
in console_unlock()). This makes hand off less likely and,
at the same time, may result in a significant amount of
pending logbuf messages. Preempted console_sem owner makes
it impossible for other CPUs to emit logbuf messages, but
does not make it impossible for other CPUs to append new
messages to the logbuf.

Reinstate the old behavior and make printk() non-preemptible.
Should any printk() lockup reports arrive they must be handled
in a different way.

[1] http://lkml.kernel.org/r/201603022101.CAH73907.OVOOMFHFFtQJSL%20()%20I-love%20!%20SAKURA%20!%20ne%20!%20jp
Fixes: 6b97a20d3a79 ("printk: set may_schedule for some of console_trylock() callers")
Link: http://lkml.kernel.org/r/20180116044716.GE6607@jagdpanzerIV
To: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: akpm@linux-foundation.org
Cc: linux-mm@kvack.org
Cc: Cong Wang <xiyou.wangcong@gmail.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jan Kara <jack@suse.cz>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Byungchul Park <byungchul.park@lge.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Reported-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 kernel/printk/printk.c | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 2d1c2700bd85..2f654a79f80b 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -1902,6 +1902,12 @@ asmlinkage int vprintk_emit(int facility, int level,
 
 	/* If called from the scheduler, we can not call up(). */
 	if (!in_sched) {
+		/*
+		 * Disable preemption to avoid being preempted while holding
+		 * console_sem which would prevent anyone from printing to
+		 * console
+		 */
+		preempt_disable();
 		/*
 		 * Try to acquire and then immediately release the console
 		 * semaphore.  The release will print out buffers and wake up
@@ -1909,6 +1915,7 @@ asmlinkage int vprintk_emit(int facility, int level,
 		 */
 		if (console_trylock_spinning())
 			console_unlock();
+		preempt_enable();
 	}
 
 	return printed_len;
@@ -2225,20 +2232,7 @@ int console_trylock(void)
 		return 0;
 	}
 	console_locked = 1;
-	/*
-	 * When PREEMPT_COUNT disabled we can't reliably detect if it's
-	 * safe to schedule (e.g. calling printk while holding a spin_lock),
-	 * because preempt_disable()/preempt_enable() are just barriers there
-	 * and preempt_count() is always 0.
-	 *
-	 * RCU read sections have a separate preemption counter when
-	 * PREEMPT_RCU enabled thus we must take extra care and check
-	 * rcu_preempt_depth(), otherwise RCU read sections modify
-	 * preempt_count().
-	 */
-	console_may_schedule = !oops_in_progress &&
-			preemptible() &&
-			!rcu_preempt_depth();
+	console_may_schedule = 0;
 	return 1;
 }
 EXPORT_SYMBOL(console_trylock);
-- 
2.19.1




  parent reply	other threads:[~2018-12-14 12:29 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-14 11:59 [PATCH 4.14 00/89] 4.14.89-stable review Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 01/89] ipv4: ipv6: netfilter: Adjust the frag mem limit when truesize changes Greg Kroah-Hartman
2018-12-15 19:50   ` jwiesner
2018-12-14 11:59 ` [PATCH 4.14 02/89] ipv6: Check available headroom in ip6_xmit() even without options Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 03/89] neighbour: Avoid writing before skb->head in neigh_hh_output() Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 04/89] ipv6: sr: properly initialize flowi6 prior passing to ip6_route_output Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 05/89] net: 8139cp: fix a BUG triggered by changing mtu with network traffic Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 06/89] net/mlx4_core: Correctly set PFC param if global pause is turned off Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 07/89] net/mlx4_en: Change min MTU size to ETH_MIN_MTU Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 08/89] net: phy: dont allow __set_phy_supported to add unsupported modes Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 09/89] net: Prevent invalid access to skb->prev in __qdisc_drop_all Greg Kroah-Hartman
2018-12-14 15:52   ` Christoph Paasch
2018-12-14 15:54     ` Christoph Paasch
2018-12-14 16:28       ` Eric Dumazet
2018-12-14 19:05     ` David Miller
2018-12-14 19:11       ` Christoph Paasch
2018-12-14 11:59 ` [PATCH 4.14 10/89] rtnetlink: ndo_dflt_fdb_dump() only work for ARPHRD_ETHER devices Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 11/89] sctp: kfree_rcu asoc Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 12/89] tcp: Do not underestimate rwnd_limited Greg Kroah-Hartman
2018-12-14 14:03   ` Sudip Mukherjee
2018-12-14 14:26     ` Greg Kroah-Hartman
     [not found]       ` <CANn89iKnuwQAybYEtXwvRFfQ8Rp8VihO16bVucAjDn1GRBtv9w@mail.gmail.com>
2018-12-14 14:36         ` Greg Kroah-Hartman
2018-12-14 19:03           ` David Miller
2018-12-14 19:07             ` Greg KH
2018-12-14 18:58       ` David Miller
2018-12-14 11:59 ` [PATCH 4.14 13/89] tcp: fix NULL ref in tail loss probe Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 14/89] tun: forbid iface creation with rtnl ops Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 15/89] virtio-net: keep vnet header zeroed after processing XDP Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 16/89] ARM: OMAP2+: prm44xx: Fix section annotation on omap44xx_prm_enable_io_wakeup Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 17/89] ASoC: rsnd: fixup clock start checker Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 18/89] staging: rtl8723bs: Fix the return value in case of error in rtw_wx_read32() Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 19/89] ARM: dts: logicpd-somlv: Fix interrupt on mmc3_dat1 Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 20/89] ARM: OMAP1: ams-delta: Fix possible use of uninitialized field Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 21/89] sysv: return err instead of 0 in __sysv_write_inode Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 22/89] selftests: add script to stress-test nft packet path vs. control plane Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 23/89] netfilter: nf_tables: fix use-after-free when deleting compat expressions Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 24/89] hwmon (ina2xx) Fix NULL id pointer in probe() Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 25/89] ASoC: wm_adsp: Fix dma-unsafe read of scratch registers Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 26/89] s390/cpum_cf: Reject request for sampling in event initialization Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 27/89] hwmon: (ina2xx) Fix current value calculation Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 28/89] ASoC: omap-abe-twl6040: Fix missing audio card caused by deferred probing Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 29/89] ASoC: dapm: Recalculate audio map forcely when card instantiated Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 30/89] iio/hid-sensors: Fix IIO_CHAN_INFO_RAW returning wrong values for signed numbers Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 31/89] netfilter: xt_hashlimit: fix a possible memory leak in htable_create() Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 32/89] hwmon: (w83795) temp4_type has writable permission Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 33/89] perf tools: Restore proper cwd on return from mnt namespace Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 34/89] PCI: imx6: Fix link training status detection in link up check Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 35/89] objtool: Fix double-free in .cold detection error path Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 36/89] objtool: Fix segfault in .cold detection with -ffunction-sections Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 37/89] ARM: dts: at91: sama5d2: use the divided clock for SMC Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 38/89] Btrfs: send, fix infinite loop due to directory rename dependencies Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 39/89] RDMA/mlx5: Fix fence type for IB_WR_LOCAL_INV WR Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 40/89] RDMA/rdmavt: Fix rvt_create_ah function signature Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 41/89] ASoC: omap-mcbsp: Fix latency value calculation for pm_qos Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 42/89] ASoC: omap-mcpdm: Add pm_qos handling to avoid under/overruns with CPU_IDLE Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 43/89] ASoC: omap-dmic: Add pm_qos handling to avoid overruns " Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 44/89] exportfs: do not read dentry after free Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 45/89] bpf: fix check of allowed specifiers in bpf_trace_printk Greg Kroah-Hartman
2018-12-14 11:59 ` [PATCH 4.14 46/89] ipvs: call ip_vs_dst_notifier earlier than ipv6_dev_notf Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 47/89] USB: omap_udc: use devm_request_irq() Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 48/89] USB: omap_udc: fix crashes on probe error and module removal Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 49/89] USB: omap_udc: fix omap_udc_start() on 15xx machines Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 50/89] USB: omap_udc: fix USB gadget functionality on Palm Tungsten E Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 51/89] USB: omap_udc: fix rejection of out transfers when DMA is used Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 52/89] drm/meson: add support for 1080p25 mode Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 53/89] netfilter: ipv6: Preserve link scope traffic original oif Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 54/89] IB/mlx5: Fix page fault handling for MW Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 55/89] KVM: x86: fix empty-body warnings Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 56/89] x86/kvm/vmx: fix old-style function declaration Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 57/89] net: thunderx: fix NULL pointer dereference in nic_remove Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 58/89] usb: gadget: u_ether: fix unsafe list iteration Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 59/89] netfilter: nf_tables: deactivate expressions in rule replecement routine Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 60/89] cachefiles: Fix page leak in cachefiles_read_backing_file while vmscan is active Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 61/89] igb: fix uninitialized variables Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 62/89] ixgbe: recognize 1000BaseLX SFP modules as 1Gbps Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 63/89] net: hisilicon: remove unexpected free_netdev Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 64/89] drm/amdgpu: Add delay after enable RLC ucode Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 65/89] drm/ast: fixed reading monitor EDID not stable issue Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 66/89] xen: xlate_mmu: add missing header to fix W=1 warning Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 67/89] Revert "xen/balloon: Mark unallocated host memory as UNUSABLE" Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 68/89] pstore/ram: Correctly calculate usable PRZ bytes Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 69/89] fscache: fix race between enablement and dropping of object Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 70/89] fscache, cachefiles: remove redundant variable cache Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 71/89] nvme: flush namespace scanning work just before removing namespaces Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 72/89] ACPI/IORT: Fix iort_get_platform_device_domain() uninitialized pointer value Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 73/89] ocfs2: fix deadlock caused by ocfs2_defrag_extent() Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 74/89] mm/page_alloc.c: fix calculation of pgdat->nr_zones Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 75/89] hfs: do not free node before using Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 76/89] hfsplus: " Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 77/89] debugobjects: avoid recursive calls with kmemleak Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 78/89] ocfs2: fix potential use after free Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 79/89] Revert "printk: Never set console_may_schedule in console_trylock()" Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 80/89] printk: Add console owner and waiter logic to load balance console writes Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 81/89] printk: Hide console waiter logic into helpers Greg Kroah-Hartman
2018-12-14 12:00 ` Greg Kroah-Hartman [this message]
2018-12-14 12:00 ` [PATCH 4.14 83/89] printk: Wake klogd when passing console_lock owner Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 84/89] lib/rbtree-test: lower default params Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 85/89] flexfiles: enforce per-mirror stateid only for v4 DSes Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 86/89] staging: speakup: Replace strncpy with memcpy Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 87/89] ALSA: fireface: fix reference to wrong register for clock configuration Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 88/89] ALSA: hda/realtek - Fixed headphone issue for ALC700 Greg Kroah-Hartman
2018-12-14 12:00 ` [PATCH 4.14 89/89] IB/hfi1: Fix an out-of-bounds access in get_hw_stats Greg Kroah-Hartman
2018-12-14 17:33 ` [PATCH 4.14 00/89] 4.14.89-stable review kernelci.org bot
2018-12-14 20:12 ` shuah
2018-12-15  2:07 ` Guenter Roeck
2018-12-15 16:52 ` Dan Rue

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181214115733.737137210@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=byungchul.park@lge.com \
    --cc=dave.hansen@intel.com \
    --cc=hannes@cmpxchg.org \
    --cc=jack@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mgorman@suse.de \
    --cc=mhocko@kernel.org \
    --cc=pavel@ucw.cz \
    --cc=penguin-kernel@I-love.SAKURA.ne.jp \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=sashal@kernel.org \
    --cc=sergey.senozhatsky@gmail.com \
    --cc=stable@vger.kernel.org \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=vbabka@suse.cz \
    --cc=xiyou.wangcong@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.