Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp485835yba; Wed, 15 May 2019 05:01:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqyMu+LRP63jJ6vBf3u9xN8tWVqBycnZ2MqQw4jMAIws9AaIEWmPjiYSKE3tIDNZIgZndlV/ X-Received: by 2002:a63:b1d:: with SMTP id 29mr43708050pgl.103.1557921670805; Wed, 15 May 2019 05:01:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557921670; cv=none; d=google.com; s=arc-20160816; b=GIr4XChE6eRc2BNJWzCrwwLHH+9ZfuYTXT8SjYlmGBHn/9jL1tv/Gf8GPX2lqW5Sd8 eTY1/NdFwBKxOJNdaZwLR4NXSPf1+CLahjxlDBAxgrLjiu7f9nN+VLq13sKJ90pepJfo htOHbS8Tz9B+IcZTFLwbQxogbZv/oebHYo+psCPSxt50qVs89VTzEzPWHKfc6YCnorQP gxKrt43Q5XUcklRW9OCLwHOnsLvlGQ7jA5p2NBoyuBlHx0kmOQZvtaPbeoYHKn/6xpe+ OU05IqgGSkFmBItFolO3YfnbM54XmRvY6vgD0X3ScLvyY8iZRkqvR94qKgcmjOiHcVgm 33fw== 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=n2s/sLBQs0MHlDufStkpy1eYs1CJPOnqZt60/7yBbKk=; b=Zr5VPsJa4qlpmeYr2yTHM0aCuhG7JANrBPY9zbCHzGGc5mUVtgiAu/3UP/es1X2FF8 RRYXLjXcIg4Y49gGRr/Hvy9w076DBejVeus2vUwwCtShzAWT28ZrEs5pLozQbe/uiOsl ovbloSKH05quOenouVSXkp/yfNUJe4WR97/3Pan2xX0rWMC62BT4W3Do2iQNtVGEgHCR ICf3VUMvPqVUl+YJFYxbiNf4MSEZ2y3S6Qoabbvsu7s/lKbZx0CDWRjGOhIrnHXgx5tZ VnBK+4GzIW8s7FY9DfguHUayo8WjBHMOxMu4OyJdC664edfN0x8ksiI1FBCp7exgftuk OfCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=0KwFk8Cr; 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 e37si1628913plb.10.2019.05.15.05.00.55; Wed, 15 May 2019 05:01:10 -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=0KwFk8Cr; 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 S1730004AbfEOLQM (ORCPT + 99 others); Wed, 15 May 2019 07:16:12 -0400 Received: from mail.kernel.org ([198.145.29.99]:52858 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730434AbfEOLQK (ORCPT ); Wed, 15 May 2019 07:16:10 -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 0762220862; Wed, 15 May 2019 11:16:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557918969; bh=qgZc3Z8zdzh1B2U9Bb7zVLAoHdp/V4YW9HmbOzLst04=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0KwFk8CrPMlnDUxvhCTswe5DnPr3vSP0lXu7By/eSy26ItgyO5d5s8447XrlKjqTD YzHyyZIN7qpZTXpdWFGDdfqnGz0H1EVv700ABTKMyIsW9b9tgcM3Oh7hO3ZJKHxvrD zYxQ3d5oMTetYnqm+jLedTM6YA7pgsHY+75cMa8g= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Martin Schwidefsky , Sasha Levin Subject: [PATCH 4.14 018/115] s390/3270: fix lockdep false positive on view->lock Date: Wed, 15 May 2019 12:54:58 +0200 Message-Id: <20190515090700.611806320@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190515090659.123121100@linuxfoundation.org> References: <20190515090659.123121100@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 be3e3c1206c24..1868ff803f439 100644 --- a/drivers/s390/char/con3270.c +++ b/drivers/s390/char/con3270.c @@ -629,7 +629,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 c4518168fd02c..4f73a38c7cbd2 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 5d4f053d7c38c..0f47fec35acc0 100644 --- a/drivers/s390/char/raw3270.c +++ b/drivers/s390/char/raw3270.c @@ -919,7 +919,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; @@ -941,6 +941,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 114ca7cbf8897..3afaa35f73513 100644 --- a/drivers/s390/char/raw3270.h +++ b/drivers/s390/char/raw3270.h @@ -150,6 +150,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; @@ -158,7 +160,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 e5ebe2fbee235..401688bf8fd37 100644 --- a/drivers/s390/char/tty3270.c +++ b/drivers/s390/char/tty3270.c @@ -978,7 +978,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