Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp434381yba; Wed, 15 May 2019 04:03:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqypgRHM2vQBGVY969HbL1CqTwozOmzmtHGoY63odb1e3XDooJwUuFXLbB/ihya1ZanxkFEk X-Received: by 2002:a17:902:b407:: with SMTP id x7mr44421653plr.28.1557918208354; Wed, 15 May 2019 04:03:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557918208; cv=none; d=google.com; s=arc-20160816; b=z5fhcdvPG4L6TTyWwzJwt9+VP6xfFg8xadmHx1zQpNQFGrzSC2UWXizgoR1vpqzi5h 5OdDW2Ea6xvNT81mgoYrDhc0OIJBKpRXZdXvDOflCY27cv3gGdGh+yWzULlcsdH3ALZy ZicwpK8PzSJL5gC4n4vg0/M6s/nl20zxl3r9F1/N77G+yFJiUBhnU8VDuw3nMzjtTtYr DHRj7KeODt/aR6sD7aZoBUKY++/uimhAsaGn5sPOpz7cXVyI/XX+cEPNjvjA/ffj4FWW vWnoSUuiGLLf0Goz2uQpBQy2xTK7D9iXpgGAV/j0t4MovgVOIUAv86Gjcdqr1jV7/jGR Ekqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=TUxJ1D+vAI5QrUALhEswhdUzkZuDP2JK/lHPVkrA7gc=; b=e58Pf5Gtm5lDPcH/6XfsYfpf78RAYSE/phCtlxAfJUDPgOGzRZr/tF8MZgV5iTNQj7 PrtmR6c9+QFzk5fC/RJmLiUUhlnhneh8Tl+wYNHzGp38kZBx+t016Tn8MYKQ7dt59qND Mklbl8Qu9CWGF3TJ7+stoNlk7ufehDRnBAAwcg0AOQzcOuthzYUlqXFCnSgBRphLyd2F fg1k5OhvsRFaNhxlpofka/BdqOuivIukgfowFXhNd6x+g5gwZ5uLrccO2hWYEPVwkDu3 4RUYuBSryuijMv7voOvphhIq/lgCgizcrlbe40KOqbwuJpxgM8fW1fnEmvxaIYE6stOm wW6A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="ahRImfG/"; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r204si1812997pfc.263.2019.05.15.04.03.01; Wed, 15 May 2019 04:03:28 -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=@kernel.org header.s=default header.b="ahRImfG/"; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727493AbfEOLAj (ORCPT + 99 others); Wed, 15 May 2019 07:00:39 -0400 Received: from mail.kernel.org ([198.145.29.99]:57418 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727478AbfEOLAg (ORCPT ); Wed, 15 May 2019 07:00:36 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 811E420881; Wed, 15 May 2019 11:00:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557918035; bh=gSSQmBRI6nvMk0tr05rFxMnd4OWB3zZ9q6geY4N9qY8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ahRImfG/2Q37g3osU/XT5iVxZRyolNX4d1VM6WbyflmVFLSpJwUToT7/mm9d26hp8 J3ExXsnrAYBf/+rYQzVx6BLc0OLbyIqAYmsS7P1GuRa/gBsK7oA1dw6DS4cKc5Bx03 0ZMBEtrMd/TihEIKFSeam2D7OVW5NmrJme72a4Bc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Martin Schwidefsky , Sasha Levin Subject: [PATCH 3.18 68/86] s390/3270: fix lockdep false positive on view->lock Date: Wed, 15 May 2019 12:55:45 +0200 Message-Id: <20190515090654.831421645@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190515090642.339346723@linuxfoundation.org> References: <20190515090642.339346723@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit 5712f3301a12c0c3de9cc423484496b0464f2faf ] The spinlock in the raw3270_view structure is used by con3270, tty3270 and fs3270 in different ways. For con3270 the lock can be acquired in irq context, for tty3270 and fs3270 the highest context is bh. Lockdep sees the view->lock as a single class and if the 3270 driver is used for the console the following message is generated: WARNING: inconsistent lock state 5.1.0-rc3-05157-g5c168033979d #12 Not tainted -------------------------------- inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. swapper/0/1 [HC0[0]:SC1[1]:HE1:SE0] takes: (____ptrval____) (&(&view->lock)->rlock){?.-.}, at: tty3270_update+0x7c/0x330 Introduce a lockdep subclass for the view lock to distinguish bh from irq locks. Signed-off-by: Martin Schwidefsky Signed-off-by: Sasha Levin --- drivers/s390/char/con3270.c | 2 +- drivers/s390/char/fs3270.c | 3 ++- drivers/s390/char/raw3270.c | 3 ++- drivers/s390/char/raw3270.h | 4 +++- drivers/s390/char/tty3270.c | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c index 7c511add5aa7d..84b6c5080a790 100644 --- a/drivers/s390/char/con3270.c +++ b/drivers/s390/char/con3270.c @@ -622,7 +622,7 @@ con3270_init(void) (void (*)(unsigned long)) con3270_read_tasklet, (unsigned long) condev->read); - raw3270_add_view(&condev->view, &con3270_fn, 1); + raw3270_add_view(&condev->view, &con3270_fn, 1, RAW3270_VIEW_LOCK_IRQ); INIT_LIST_HEAD(&condev->freemem); for (i = 0; i < CON3270_STRING_PAGES; i++) { diff --git a/drivers/s390/char/fs3270.c b/drivers/s390/char/fs3270.c index 71e9747380149..f0c86bcbe3161 100644 --- a/drivers/s390/char/fs3270.c +++ b/drivers/s390/char/fs3270.c @@ -463,7 +463,8 @@ fs3270_open(struct inode *inode, struct file *filp) init_waitqueue_head(&fp->wait); fp->fs_pid = get_pid(task_pid(current)); - rc = raw3270_add_view(&fp->view, &fs3270_fn, minor); + rc = raw3270_add_view(&fp->view, &fs3270_fn, minor, + RAW3270_VIEW_LOCK_BH); if (rc) { fs3270_free_view(&fp->view); goto out; diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c index 220acb4cbee52..9c350e6d75bf7 100644 --- a/drivers/s390/char/raw3270.c +++ b/drivers/s390/char/raw3270.c @@ -956,7 +956,7 @@ raw3270_deactivate_view(struct raw3270_view *view) * Add view to device with minor "minor". */ int -raw3270_add_view(struct raw3270_view *view, struct raw3270_fn *fn, int minor) +raw3270_add_view(struct raw3270_view *view, struct raw3270_fn *fn, int minor, int subclass) { unsigned long flags; struct raw3270 *rp; @@ -978,6 +978,7 @@ raw3270_add_view(struct raw3270_view *view, struct raw3270_fn *fn, int minor) view->cols = rp->cols; view->ascebc = rp->ascebc; spin_lock_init(&view->lock); + lockdep_set_subclass(&view->lock, subclass); list_add(&view->list, &rp->view_list); rc = 0; spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); diff --git a/drivers/s390/char/raw3270.h b/drivers/s390/char/raw3270.h index e1e41c2861fbb..5ae54317857a0 100644 --- a/drivers/s390/char/raw3270.h +++ b/drivers/s390/char/raw3270.h @@ -155,6 +155,8 @@ struct raw3270_fn { struct raw3270_view { struct list_head list; spinlock_t lock; +#define RAW3270_VIEW_LOCK_IRQ 0 +#define RAW3270_VIEW_LOCK_BH 1 atomic_t ref_count; struct raw3270 *dev; struct raw3270_fn *fn; @@ -163,7 +165,7 @@ struct raw3270_view { unsigned char *ascebc; /* ascii -> ebcdic table */ }; -int raw3270_add_view(struct raw3270_view *, struct raw3270_fn *, int); +int raw3270_add_view(struct raw3270_view *, struct raw3270_fn *, int, int); int raw3270_activate_view(struct raw3270_view *); void raw3270_del_view(struct raw3270_view *); void raw3270_deactivate_view(struct raw3270_view *); diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c index e96fc7fd94984..ab95d24b991b4 100644 --- a/drivers/s390/char/tty3270.c +++ b/drivers/s390/char/tty3270.c @@ -937,7 +937,8 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty) return PTR_ERR(tp); rc = raw3270_add_view(&tp->view, &tty3270_fn, - tty->index + RAW3270_FIRSTMINOR); + tty->index + RAW3270_FIRSTMINOR, + RAW3270_VIEW_LOCK_BH); if (rc) { tty3270_free_view(tp); return rc; -- 2.20.1