Received: by 10.192.165.148 with SMTP id m20csp3881216imm; Mon, 30 Apr 2018 07:58:56 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrBKXw4WZ4eIgUSPg1LI/4d9N54Bpaoo+1WzOyQTY3XMtWY9FpsM6rE8TBHenYNcuTXazf2 X-Received: by 2002:a17:902:aa94:: with SMTP id d20-v6mr13115658plr.323.1525100336698; Mon, 30 Apr 2018 07:58:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525100336; cv=none; d=google.com; s=arc-20160816; b=uWZG0wn5C0uFXsPtFka/nZPXyg+Txl41md7OLj5WBG3oMddx4i9tPhfTjDgGhcLRpI fUSdHPpjiJxGnJLO49vGeyppFtOvwD6JY/5fj8m8ZHX/GKeVSma3EhBw/Tig5vhjWSxj I1GUB2mnAQYVTOa78UDPijlXYDxiyHmn1CECa8mykDFgI/lLZlf87R4bjoeCKGS9RFrg J/FJciIhLn4fXGT8s9v9/j5HdQjxI6ywduMxFQoehA1qp0LLB/HW80p+YC/S8Qy8KQtE lc0lwasu/MvISXimBbgju3GCj0SZtswrkrVAo/eIvNAc4KXE64zYG14GgeQjGF8w79vT D5Aw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=+IU9OuKDo/5/9ugzSvyn0R1pJSCZ7KdQ+KLiU89lKWk=; b=kwok4uCLsUaR4zGL1tvDlTkxe65uMwnPMXIMfSF/wQA/m59mIQ2YO7O2WzA/hEbmZW q9WAcxYPZ+S/pACejEg7aYRPmVU3mTkp1jGMwwMBjbBwz79PDAVDjIdEzTerA0kIOJ+M rFS3/sOG0S480iqdW7rRxj09p0nvUOxF2sRCLhrva3ntTa1ZG41F029EZEs+VeFf9cG2 y6teYnHR9KMiWMn5sAbOwtA1kZgU9IWdhSOAC81VqqYfMC1rNhn00WPrZGr3VqxsxGDq lr0nBp9ij56cpsqiWz/JuyoIi9MK1hfcLgoYpWeIquOowUE2NY9EwVg3rsBngteBnbcZ 9KLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cbNhWRUl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d9-v6si7563888plj.573.2018.04.30.07.58.42; Mon, 30 Apr 2018 07:58:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cbNhWRUl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754795AbeD3O6D (ORCPT + 99 others); Mon, 30 Apr 2018 10:58:03 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:43923 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754474AbeD3O4z (ORCPT ); Mon, 30 Apr 2018 10:56:55 -0400 Received: by mail-pg0-f68.google.com with SMTP id k11-v6so5364766pgo.10 for ; Mon, 30 Apr 2018 07:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+IU9OuKDo/5/9ugzSvyn0R1pJSCZ7KdQ+KLiU89lKWk=; b=cbNhWRUlkzLELsKB4r87ycVBeq016uYqKZMDPmpOfcDOz0purcYF/DjVwtRqU/uKOF ajU/YS/UZPOjTRxi4A/lfdvw33T4P98uJQigGv3qvue7gxntGQlQEvxbrVjBVaufhjhv DV3SO31LJwAFhIaxwUQPwArS8/mQhgHfuFfXBqua+uaH7p4G2dv2uS6SFRyvYzkaQxke 3cH2Nc4yzkj7JolJi2Ml9edLZeDYadH4BTXC8uln3Ew9PPiIkQYEftTuZBjWtVOU0P3W GApO89NzXfvqYeTrkxztbsUGD+1eZGRtByZ0z7vMZB+ZiiUvvJjdF1FMtinx8FPlwpqE VCnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+IU9OuKDo/5/9ugzSvyn0R1pJSCZ7KdQ+KLiU89lKWk=; b=hZL3UFYBsYvaQqVao9SfB12S+bPl1rWhBA/GArNhG5M8YDuMs6SLXkXfpBwLV4ZpY/ 9lU7nweWN6CAhCAYxWwHJlmz0WAfF7gEhPL9JZGuR+OhL45cbBf567CfmSy/MGrDbwsG ZM88qpA0feuh1e+Ghpp+BdJP9FkhK1+/NYvYqwyBR3No1HR5kATNeQphv6Ix3HpTu+rz oYGVosV7JzfrLUU79tvp/Mfw5/Qb3Lb7pNU8qvn22ooLDPqfqabDNqIZi+gSbVJSZrbz YHGWdyWNk0ptULj4k1HkyML4Z8LWu91sYXRV3ulP1z79q8ThjqUFZqyb0JHRsL1eEdzM 0IQQ== X-Gm-Message-State: ALQs6tBjxsdXikZwENmW8Ex5Zr1bKsvCpazj1Q9pcIQkHKLIgaV4NBGN CIjpnAgrbgu9XUKKDWuo5MQ= X-Received: by 2002:a63:b80a:: with SMTP id p10-v6mr10215924pge.250.1525100214588; Mon, 30 Apr 2018 07:56:54 -0700 (PDT) Received: from roar.au.ibm.com (59-102-70-78.tpgi.com.au. [59.102.70.78]) by smtp.gmail.com with ESMTPSA id a12sm19132534pfe.78.2018.04.30.07.56.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 30 Apr 2018 07:56:53 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Cc: Nicholas Piggin , Benjamin Herrenschmidt , Greg Kroah-Hartman , Jiri Slaby , linux-kernel@vger.kernel.org Subject: [PATCH 12/15] tty: hvc: hvc_poll may sleep Date: Tue, 1 May 2018 00:55:55 +1000 Message-Id: <20180430145558.4308-13-npiggin@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180430145558.4308-1-npiggin@gmail.com> References: <20180430145558.4308-1-npiggin@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Introduce points where hvc_poll drops the lock, enables interrupts, and reschedules. Signed-off-by: Nicholas Piggin --- drivers/tty/hvc/hvc_console.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c index 745ac220fce8..2abfc0b15fbb 100644 --- a/drivers/tty/hvc/hvc_console.c +++ b/drivers/tty/hvc/hvc_console.c @@ -589,7 +589,7 @@ static u32 timeout = MIN_TIMEOUT; #define HVC_POLL_READ 0x00000001 #define HVC_POLL_WRITE 0x00000002 -int hvc_poll(struct hvc_struct *hp) +static int __hvc_poll(struct hvc_struct *hp, bool may_sleep) { struct tty_struct *tty; int i, n, count, poll_mask = 0; @@ -611,6 +611,12 @@ int hvc_poll(struct hvc_struct *hp) timeout = (written_total) ? 0 : MIN_TIMEOUT; } + if (may_sleep) { + spin_unlock_irqrestore(&hp->lock, flags); + cond_resched(); + spin_lock_irqsave(&hp->lock, flags); + } + /* No tty attached, just skip */ tty = tty_port_tty_get(&hp->port); if (tty == NULL) @@ -698,6 +704,11 @@ int hvc_poll(struct hvc_struct *hp) return poll_mask; } + +int hvc_poll(struct hvc_struct *hp) +{ + return __hvc_poll(hp, false); +} EXPORT_SYMBOL_GPL(hvc_poll); /** @@ -736,7 +747,8 @@ static int khvcd(void *unused) if (!cpus_are_in_xmon()) { mutex_lock(&hvc_structs_mutex); list_for_each_entry(hp, &hvc_structs, next) { - poll_mask |= hvc_poll(hp); + poll_mask |= __hvc_poll(hp, true); + cond_resched(); } mutex_unlock(&hvc_structs_mutex); } else -- 2.17.0