Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp239720ybi; Wed, 29 May 2019 20:26:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqymCqJ6ttmbOyJDIjkn3Jf0XaBaCiSJBeK545ts7ZHDCkOMarQ+Ip/hLmPblqsiFEbeVe/+ X-Received: by 2002:a17:90a:344c:: with SMTP id o70mr1378639pjb.21.1559186759946; Wed, 29 May 2019 20:25:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559186759; cv=none; d=google.com; s=arc-20160816; b=e7Mhe7lYRo9Vrn2FJYoZ0awWGOV2jU5h7G6rlaLEhTngaKsnpmviAqCIZpHuqJJ7Mu cxfFy9sLn2y7CD+AcuCYVeXBZV+nzG+b6Lxh5cmdFHYopxxjLDdTwXZGOwGFAB9cCczS dLEwmYkBeJx5n+Pzbevr7uVxMYDwJwxibby174n9z5I7JHgF83YgfNOwuYITa8NenUMH Bq0yObHdIv5btfDaP4qO79eW+8D2ZCrgbKLIV7UpGFJtcmJ4XrXy6e7E9CV7IBOlNHXw nDI+rU1VFqCjp3JByNl9ccVLuHeXJdGPQaFjmtwyI3M7GdKBFRljZP2FMRge6kwWmQSc gr5g== 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=1kn7+TskKUeldkGJuwvN6MZoroBF7aTpKnDjjgWB8Cw=; b=QXdmSoqYL11Qd51CjaCLvnuEj52/hf+lgOxsAC86YX4NmWJ5/dHR0rK6lfvZyt168B Vk0LLeMteBYsWqH9Z2uwacgK3r9Sn+g+CN/T+Y4jgCH1eZ/O3El948cjenHOCix/x1UH E1d+rLGy/oJPB8l0PNp88yUOXhcAXNwcd6jw+n/MrYfY4LoRSYf6U+E5DfRkSCzsteVa QOab+dai8Q2X3ZpXiWwGpru1nldkty+Xb33E43Jg3r0Fx4bhpvD5Zer51cQTWL9SPphq iR8YpNVmmJulziiD8HAuL8O913RObuid4rSyvMqkilKhxnzKHwmgzfRuyGv4Jo18i2pS MoMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=0oceNEOg; 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 z33si1888906pgk.516.2019.05.29.20.25.43; Wed, 29 May 2019 20:25:59 -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=0oceNEOg; 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 S1732879AbfE3DWl (ORCPT + 99 others); Wed, 29 May 2019 23:22:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:44526 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730880AbfE3DQ7 (ORCPT ); Wed, 29 May 2019 23:16:59 -0400 Received: from localhost (ip67-88-213-2.z213-88-67.customer.algx.net [67.88.213.2]) (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 B69EB24645; Thu, 30 May 2019 03:16:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559186218; bh=pRR8xyc7V7a1apafxT/GTH2wc5m69MgW/7XbEafPfXs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0oceNEOgDN5liLjUfkpxXB1CI7HwfO/AUaldN8FZY/78Z/utV9dGVljCSz2EP9J++ iPxN3xjzH25uLGAjriVoiMPdWZ+9WMFaLgxy7xcF64IW0iKwXFr78aEyQI2ckFHTEa dhk4RZtbmXr21S9MgfQMCKQgcLXDvuP0/G2Cnfag= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Farhan Ali , Eric Farman , Pierre Morel , Cornelia Huck , Sasha Levin Subject: [PATCH 4.19 108/276] vfio-ccw: Do not call flush_workqueue while holding the spinlock Date: Wed, 29 May 2019 20:04:26 -0700 Message-Id: <20190530030532.775058200@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190530030523.133519668@linuxfoundation.org> References: <20190530030523.133519668@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 cea5dde42a83b5f0a039da672f8686455936b8d8 ] Currently we call flush_workqueue while holding the subchannel spinlock. But flush_workqueue function can go to sleep, so do not call the function while holding the spinlock. Fixes the following bug: [ 285.203430] BUG: scheduling while atomic: bash/14193/0x00000002 [ 285.203434] INFO: lockdep is turned off. .... [ 285.203485] Preemption disabled at: [ 285.203488] [<000003ff80243e5c>] vfio_ccw_sch_quiesce+0xbc/0x120 [vfio_ccw] [ 285.203496] CPU: 7 PID: 14193 Comm: bash Tainted: G W .... [ 285.203504] Call Trace: [ 285.203510] ([<0000000000113772>] show_stack+0x82/0xd0) [ 285.203514] [<0000000000b7a102>] dump_stack+0x92/0xd0 [ 285.203518] [<000000000017b8be>] __schedule_bug+0xde/0xf8 [ 285.203524] [<0000000000b95b5a>] __schedule+0x7a/0xc38 [ 285.203528] [<0000000000b9678a>] schedule+0x72/0xb0 [ 285.203533] [<0000000000b9bfbc>] schedule_timeout+0x34/0x528 [ 285.203538] [<0000000000b97608>] wait_for_common+0x118/0x1b0 [ 285.203544] [<0000000000166d6a>] flush_workqueue+0x182/0x548 [ 285.203550] [<000003ff80243e6e>] vfio_ccw_sch_quiesce+0xce/0x120 [vfio_ccw] [ 285.203556] [<000003ff80245278>] vfio_ccw_mdev_reset+0x38/0x70 [vfio_ccw] [ 285.203562] [<000003ff802458b0>] vfio_ccw_mdev_remove+0x40/0x78 [vfio_ccw] [ 285.203567] [<000003ff801a499c>] mdev_device_remove_ops+0x3c/0x80 [mdev] [ 285.203573] [<000003ff801a4d5c>] mdev_device_remove+0xc4/0x130 [mdev] [ 285.203578] [<000003ff801a5074>] remove_store+0x6c/0xa8 [mdev] [ 285.203582] [<000000000046f494>] kernfs_fop_write+0x14c/0x1f8 [ 285.203588] [<00000000003c1530>] __vfs_write+0x38/0x1a8 [ 285.203593] [<00000000003c187c>] vfs_write+0xb4/0x198 [ 285.203597] [<00000000003c1af2>] ksys_write+0x5a/0xb0 [ 285.203601] [<0000000000b9e270>] system_call+0xdc/0x2d8 Signed-off-by: Farhan Ali Reviewed-by: Eric Farman Reviewed-by: Pierre Morel Message-Id: <626bab8bb2958ae132452e1ddaf1b20882ad5a9d.1554756534.git.alifm@linux.ibm.com> Signed-off-by: Cornelia Huck Signed-off-by: Sasha Levin --- drivers/s390/cio/vfio_ccw_drv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/s390/cio/vfio_ccw_drv.c b/drivers/s390/cio/vfio_ccw_drv.c index fabd9798e4c47..0e0a743aeaf69 100644 --- a/drivers/s390/cio/vfio_ccw_drv.c +++ b/drivers/s390/cio/vfio_ccw_drv.c @@ -54,9 +54,9 @@ int vfio_ccw_sch_quiesce(struct subchannel *sch) wait_for_completion_timeout(&completion, 3*HZ); - spin_lock_irq(sch->lock); private->completion = NULL; flush_workqueue(vfio_ccw_work_q); + spin_lock_irq(sch->lock); ret = cio_cancel_halt_clear(sch, &iretry); }; -- 2.20.1