From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Farhan Ali <alifm@linux.ibm.com>,
Alex Williamson <alex.williamson@redhat.com>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 4.14 45/81] vfio: Fix WARNING "do not call blocking ops when !TASK_RUNNING"
Date: Thu, 13 Jun 2019 10:33:28 +0200 [thread overview]
Message-ID: <20190613075652.609955264@linuxfoundation.org> (raw)
In-Reply-To: <20190613075649.074682929@linuxfoundation.org>
[ Upstream commit 41be3e2618174fdf3361e49e64f2bf530f40c6b0 ]
vfio_dev_present() which is the condition to
wait_event_interruptible_timeout(), will call vfio_group_get_device
and try to acquire the mutex group->device_lock.
wait_event_interruptible_timeout() will set the state of the current
task to TASK_INTERRUPTIBLE, before doing the condition check. This
means that we will try to acquire the mutex while already in a
sleeping state. The scheduler warns us by giving the following
warning:
[ 4050.264464] ------------[ cut here ]------------
[ 4050.264508] do not call blocking ops when !TASK_RUNNING; state=1 set at [<00000000b33c00e2>] prepare_to_wait_event+0x14a/0x188
[ 4050.264529] WARNING: CPU: 12 PID: 35924 at kernel/sched/core.c:6112 __might_sleep+0x76/0x90
....
4050.264756] Call Trace:
[ 4050.264765] ([<000000000017bbaa>] __might_sleep+0x72/0x90)
[ 4050.264774] [<0000000000b97edc>] __mutex_lock+0x44/0x8c0
[ 4050.264782] [<0000000000b9878a>] mutex_lock_nested+0x32/0x40
[ 4050.264793] [<000003ff800d7abe>] vfio_group_get_device+0x36/0xa8 [vfio]
[ 4050.264803] [<000003ff800d87c0>] vfio_del_group_dev+0x238/0x378 [vfio]
[ 4050.264813] [<000003ff8015f67c>] mdev_remove+0x3c/0x68 [mdev]
[ 4050.264825] [<00000000008e01b0>] device_release_driver_internal+0x168/0x268
[ 4050.264834] [<00000000008de692>] bus_remove_device+0x162/0x190
[ 4050.264843] [<00000000008daf42>] device_del+0x1e2/0x368
[ 4050.264851] [<00000000008db12c>] device_unregister+0x64/0x88
[ 4050.264862] [<000003ff8015ed84>] mdev_device_remove+0xec/0x130 [mdev]
[ 4050.264872] [<000003ff8015f074>] remove_store+0x6c/0xa8 [mdev]
[ 4050.264881] [<000000000046f494>] kernfs_fop_write+0x14c/0x1f8
[ 4050.264890] [<00000000003c1530>] __vfs_write+0x38/0x1a8
[ 4050.264899] [<00000000003c187c>] vfs_write+0xb4/0x198
[ 4050.264908] [<00000000003c1af2>] ksys_write+0x5a/0xb0
[ 4050.264916] [<0000000000b9e270>] system_call+0xdc/0x2d8
[ 4050.264925] 4 locks held by sh/35924:
[ 4050.264933] #0: 000000001ef90325 (sb_writers#4){.+.+}, at: vfs_write+0x9e/0x198
[ 4050.264948] #1: 000000005c1ab0b3 (&of->mutex){+.+.}, at: kernfs_fop_write+0x1cc/0x1f8
[ 4050.264963] #2: 0000000034831ab8 (kn->count#297){++++}, at: kernfs_remove_self+0x12e/0x150
[ 4050.264979] #3: 00000000e152484f (&dev->mutex){....}, at: device_release_driver_internal+0x5c/0x268
[ 4050.264993] Last Breaking-Event-Address:
[ 4050.265002] [<000000000017bbaa>] __might_sleep+0x72/0x90
[ 4050.265010] irq event stamp: 7039
[ 4050.265020] hardirqs last enabled at (7047): [<00000000001cee7a>] console_unlock+0x6d2/0x740
[ 4050.265029] hardirqs last disabled at (7054): [<00000000001ce87e>] console_unlock+0xd6/0x740
[ 4050.265040] softirqs last enabled at (6416): [<0000000000b8fe26>] __udelay+0xb6/0x100
[ 4050.265049] softirqs last disabled at (6415): [<0000000000b8fe06>] __udelay+0x96/0x100
[ 4050.265057] ---[ end trace d04a07d39d99a9f9 ]---
Let's fix this as described in the article
https://lwn.net/Articles/628628/.
Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
[remove now redundant vfio_dev_present()]
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/vfio/vfio.c | 30 ++++++++++--------------------
1 file changed, 10 insertions(+), 20 deletions(-)
diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
index f5a86f651f38..0d73d913c18b 100644
--- a/drivers/vfio/vfio.c
+++ b/drivers/vfio/vfio.c
@@ -34,6 +34,7 @@
#include <linux/uaccess.h>
#include <linux/vfio.h>
#include <linux/wait.h>
+#include <linux/sched/signal.h>
#define DRIVER_VERSION "0.3"
#define DRIVER_AUTHOR "Alex Williamson <alex.williamson@redhat.com>"
@@ -909,30 +910,17 @@ void *vfio_device_data(struct vfio_device *device)
}
EXPORT_SYMBOL_GPL(vfio_device_data);
-/* Given a referenced group, check if it contains the device */
-static bool vfio_dev_present(struct vfio_group *group, struct device *dev)
-{
- struct vfio_device *device;
-
- device = vfio_group_get_device(group, dev);
- if (!device)
- return false;
-
- vfio_device_put(device);
- return true;
-}
-
/*
* Decrement the device reference count and wait for the device to be
* removed. Open file descriptors for the device... */
void *vfio_del_group_dev(struct device *dev)
{
+ DEFINE_WAIT_FUNC(wait, woken_wake_function);
struct vfio_device *device = dev_get_drvdata(dev);
struct vfio_group *group = device->group;
void *device_data = device->device_data;
struct vfio_unbound_dev *unbound;
unsigned int i = 0;
- long ret;
bool interrupted = false;
/*
@@ -969,6 +957,8 @@ void *vfio_del_group_dev(struct device *dev)
* interval with counter to allow the driver to take escalating
* measures to release the device if it has the ability to do so.
*/
+ add_wait_queue(&vfio.release_q, &wait);
+
do {
device = vfio_group_get_device(group, dev);
if (!device)
@@ -980,12 +970,10 @@ void *vfio_del_group_dev(struct device *dev)
vfio_device_put(device);
if (interrupted) {
- ret = wait_event_timeout(vfio.release_q,
- !vfio_dev_present(group, dev), HZ * 10);
+ wait_woken(&wait, TASK_UNINTERRUPTIBLE, HZ * 10);
} else {
- ret = wait_event_interruptible_timeout(vfio.release_q,
- !vfio_dev_present(group, dev), HZ * 10);
- if (ret == -ERESTARTSYS) {
+ wait_woken(&wait, TASK_INTERRUPTIBLE, HZ * 10);
+ if (signal_pending(current)) {
interrupted = true;
dev_warn(dev,
"Device is currently in use, task"
@@ -994,8 +982,10 @@ void *vfio_del_group_dev(struct device *dev)
current->comm, task_pid_nr(current));
}
}
- } while (ret <= 0);
+ } while (1);
+
+ remove_wait_queue(&vfio.release_q, &wait);
/*
* In order to support multiple devices per group, devices can be
* plucked from the group while other devices in the group are still
--
2.20.1
next prev parent reply other threads:[~2019-06-13 16:23 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-13 8:32 [PATCH 4.14 00/81] 4.14.126-stable review Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 01/81] rapidio: fix a NULL pointer dereference when create_workqueue() fails Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 02/81] fs/fat/file.c: issue flush after the writeback of FAT Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 03/81] sysctl: return -EINVAL if val violates minmax Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 04/81] ipc: prevent lockup on alloc_msg and free_msg Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 05/81] ARM: prevent tracing IPI_CPU_BACKTRACE Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 06/81] mm/hmm: select mmu notifier when selecting HMM Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 07/81] hugetlbfs: on restore reserve error path retain subpool reservation Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 08/81] mem-hotplug: fix node spanned pages when we have a node with only ZONE_MOVABLE Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 09/81] mm/cma.c: fix crash on CMA allocation if bitmap allocation fails Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 10/81] mm/cma.c: fix the bitmap status to show failed allocation reason Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 11/81] mm/cma_debug.c: fix the break condition in cma_maxchunk_get() Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 12/81] mm/slab.c: fix an infinite loop in leaks_show() Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 13/81] kernel/sys.c: prctl: fix false positive in validate_prctl_map() Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 14/81] thermal: rcar_gen3_thermal: disable interrupt in .remove Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 15/81] drivers: thermal: tsens: Dont print error message on -EPROBE_DEFER Greg Kroah-Hartman
2019-06-13 8:32 ` [PATCH 4.14 16/81] mfd: tps65912-spi: Add missing of table registration Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 17/81] mfd: intel-lpss: Set the device in reset state when init Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 18/81] drm/nouveau/disp/dp: respect sink limits when selecting failsafe link configuration Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 19/81] mfd: twl6040: Fix device init errors for ACCCTL register Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 20/81] perf/x86/intel: Allow PEBS multi-entry in watermark mode Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 21/81] drm/bridge: adv7511: Fix low refresh rate selection Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 22/81] objtool: Dont use ignore flag for fake jumps Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 23/81] EDAC/mpc85xx: Prevent building as a module Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 24/81] pwm: meson: Use the spin-lock only to protect register modifications Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 25/81] ntp: Allow TAI-UTC offset to be set to zero Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 26/81] f2fs: fix to avoid panic in do_recover_data() Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 27/81] f2fs: fix to clear dirty inode in error path of f2fs_iget() Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 28/81] f2fs: fix to avoid panic in dec_valid_block_count() Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 29/81] f2fs: fix to do sanity check on valid block count of segment Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 30/81] percpu: remove spurious lock dependency between percpu and sched Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 31/81] configfs: fix possible use-after-free in configfs_register_group Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 32/81] uml: fix a boot splat wrt use of cpu_all_mask Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 33/81] mmc: mmci: Prevent polling for busy detection in IRQ context Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 34/81] mips: Make sure dt memory regions are valid Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 35/81] watchdog: imx2_wdt: Fix set_timeout for big timeout values Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 36/81] watchdog: fix compile time error of pretimeout governors Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 37/81] blk-mq: move cancel of requeue_work into blk_mq_release Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 38/81] iommu/vt-d: Set intel_iommu_gfx_mapped correctly Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 39/81] misc: pci_endpoint_test: Fix test_reg_bar to be updated in pci_endpoint_test Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 40/81] nvme-pci: unquiesce admin queue on shutdown Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 41/81] ALSA: hda - Register irq handler after the chip initialization Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 42/81] nvmem: core: fix read buffer in place Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 43/81] fuse: retrieve: cap requested size to negotiated max_write Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 44/81] nfsd: allow fh_want_write to be called twice Greg Kroah-Hartman
2019-06-13 8:33 ` Greg Kroah-Hartman [this message]
2019-06-13 8:33 ` [PATCH 4.14 46/81] x86/PCI: Fix PCI IRQ routing table memory leak Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 47/81] platform/chrome: cros_ec_proto: check for NULL transfer function Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 48/81] PCI: keystone: Prevent ARM32 specific code to be compiled for ARM64 Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 49/81] soc: mediatek: pwrap: Zero initialize rdata in pwrap_init_cipher Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 50/81] clk: rockchip: Turn on "aclk_dmac1" for suspend on rk3288 Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 51/81] soc: rockchip: Set the proper PWM for rk3288 Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 52/81] ARM: dts: imx51: Specify IMX5_CLK_IPG as "ahb" clock to SDMA Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 53/81] ARM: dts: imx50: " Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 54/81] ARM: dts: imx53: " Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 55/81] ARM: dts: imx6sx: Specify IMX6SX_CLK_IPG " Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 56/81] ARM: dts: imx7d: Specify IMX7D_CLK_IPG as "ipg" " Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 57/81] ARM: dts: imx6ul: Specify IMX6UL_CLK_IPG " Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 58/81] ARM: dts: imx6sx: Specify IMX6SX_CLK_IPG " Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 59/81] ARM: dts: imx6qdl: Specify IMX6QDL_CLK_IPG " Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 60/81] PCI: rpadlpar: Fix leaked device_node references in add/remove paths Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 61/81] ALSA: seq: Protect in-kernel ioctl calls with mutex Greg Kroah-Hartman
2019-06-13 9:02 ` Takashi Iwai
2019-06-13 9:11 ` Greg Kroah-Hartman
2019-06-13 9:13 ` Takashi Iwai
2019-06-13 15:39 ` Sasha Levin
2019-06-13 15:44 ` Takashi Iwai
2019-06-13 16:28 ` Sasha Levin
2019-06-13 8:33 ` [PATCH 4.14 62/81] platform/x86: intel_pmc_ipc: adding error handling Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 63/81] power: supply: max14656: fix potential use-before-alloc Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 64/81] PCI: rcar: Fix a potential NULL pointer dereference Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 65/81] PCI: rcar: Fix 64bit MSI message address handling Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 66/81] video: hgafb: fix potential NULL pointer dereference Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 67/81] video: imsttfb: fix potential NULL pointer dereferences Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 68/81] block, bfq: increase idling for weight-raised queues Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 69/81] PCI: xilinx: Check for __get_free_pages() failure Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 70/81] gpio: gpio-omap: add check for off wake capable gpios Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 71/81] dmaengine: idma64: Use actual device for DMA transfers Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 72/81] pwm: tiehrpwm: Update shadow register for disabling PWMs Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 73/81] ARM: dts: exynos: Always enable necessary APIO_1V8 and ABB_1V8 regulators on Arndale Octa Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 74/81] pwm: Fix deadlock warning when removing PWM device Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 75/81] ARM: exynos: Fix undefined instruction during Exynos5422 resume Greg Kroah-Hartman
2019-06-13 8:33 ` [PATCH 4.14 76/81] usb: typec: fusb302: Check vconn is off when we start toggling Greg Kroah-Hartman
2019-06-13 8:34 ` [PATCH 4.14 77/81] gpio: vf610: Do not share irq_chip Greg Kroah-Hartman
2019-06-13 8:34 ` [PATCH 4.14 78/81] percpu: do not search past bitmap when allocating an area Greg Kroah-Hartman
2019-06-13 8:34 ` [PATCH 4.14 79/81] Revert "Bluetooth: Align minimum encryption key size for LE and BR/EDR connections" Greg Kroah-Hartman
2019-06-13 8:34 ` [PATCH 4.14 80/81] Revert "drm/nouveau: add kconfig option to turn off nouveau legacy contexts. (v3)" Greg Kroah-Hartman
2019-06-13 8:34 ` [PATCH 4.14 81/81] drm: dont block fb changes for async plane updates Greg Kroah-Hartman
2019-06-13 15:11 ` [PATCH 4.14 00/81] 4.14.126-stable review Guenter Roeck
2019-06-13 15:37 ` Greg Kroah-Hartman
2019-06-13 16:38 ` Sasha Levin
2019-06-13 19:33 ` Naresh Kamboju
2019-06-13 16:30 ` kernelci.org bot
2019-06-13 22:38 ` Guenter Roeck
2019-06-14 2:38 ` shuah
2019-06-14 10:28 ` Jon Hunter
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=20190613075652.609955264@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=alex.williamson@redhat.com \
--cc=alifm@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).