linux/drivers/gpu/drm/i915/gvt
Changbin Du 679fd3ebab drm/i915/gvt: Fix unsafe locking caused by spin_unlock_bh
The caller of shadow_context_status_change may disable irqs. So it is not
safe to use spin_unlock_bh in such context. Let's switch to irqsave version
for safety.

------------[ cut here ]------------
WARNING: CPU: 2 PID: 4504 at kernel/softirq.c:161 __local_bh_enable_ip+0x46/0x60
[  168.797710] Hardware name: Dell Inc. OptiPlex 7040/0Y7WYT, BIOS 1.2.8 01/26/2016
[  168.797712] task: ffff8c693d22db80 task.stack: ffffb51b482bc000
[  168.797718] RIP: 0010:__local_bh_enable_ip+0x46/0x60
[  168.797721] RSP: 0018:ffffb51b482bfa10 EFLAGS: 00010046
[  168.797724] RAX: 0000000000000046 RBX: ffff8c6900278000 RCX: 00000000ffffffff
[  168.797726] RDX: 0000000000000001 RSI: 0000000000000200 RDI: ffffffffc06a0330
[  168.797728] RBP: ffffb51b482bfa10 R08: 0000000000000000 R09: ffff8c690027cb90
[  168.797730] R10: ffffb51b482bfa40 R11: 00000004072f0001 R12: 0000000000000000
[  168.797732] R13: 0000000000000000 R14: ffff8c690027ca9c R15: 0000000000000000
[  168.797735] FS:  00007ff187c56700(0000) GS:ffff8c6959d00000(0000) knlGS:0000000000000000
[  168.797738] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  168.797740] CR2: 0000562bc0c3991f CR3: 0000000430614006 CR4: 00000000003606e0
[  168.797742] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  168.797744] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[  168.797745] Call Trace:
[  168.797755]  _raw_spin_unlock_bh+0x1e/0x20
[  168.797826]  shadow_context_status_change+0x120/0x1e0 [i915]
[  168.797831]  notifier_call_chain+0x4a/0x70
[  168.797834]  atomic_notifier_call_chain+0x1a/0x20
[  168.797896]  execlists_cancel_port_requests+0x4f/0x80 [i915]
[  168.797956]  reset_common_ring+0x30/0x100 [i915]
[  168.798007]  i915_gem_reset_engine+0x114/0x330 [i915]
[  168.798060]  ? i915_gem_retire_requests+0x75/0x180 [i915]
[  168.798111]  i915_gem_reset+0x3e/0xb0 [i915]
[  168.798149]  i915_reset+0x10b/0x1c0 [i915]
[  168.798187]  i915_reset_device+0x209/0x220 [i915]
[  168.798225]  ? gen8_gt_irq_ack+0x170/0x170 [i915]
[  168.798229]  ? __queue_work+0x430/0x430
[  168.798270]  i915_handle_error+0x285/0x420 [i915]
[  168.798275]  ? mntput+0x24/0x40
[  168.798281]  ? terminate_walk+0x8e/0xf0
[  168.798328]  i915_wedged_set+0x84/0xc0 [i915]
[  168.798333]  simple_attr_write+0xab/0xc0
[  168.798337]  full_proxy_write+0x54/0x90
[  168.798343]  __vfs_write+0x37/0x170
[  168.798349]  ? common_file_perm+0x4c/0x100
[  168.798355]  ? apparmor_file_permission+0x1a/0x20
[  168.798361]  ? security_file_permission+0x3b/0xc0
[  168.798365]  vfs_write+0xb8/0x1b0
[  168.798370]  SyS_write+0x55/0xc0
[  168.798376]  entry_SYSCALL_64_fastpath+0x1e/0xa9

Fixes: 0e86cc9 ("drm/i915/gvt: implement per-vm mmio switching optimization")
Signed-off-by: Changbin Du <changbin.du@intel.com>

Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
2017-11-28 17:22:48 +08:00
..
aperture_gm.c drm/i915: Add interface to reserve fence registers for vGPU 2017-09-04 16:34:59 +01:00
cfg_space.c drm/i915/gvt: Fix incorrect PCI BARs reporting 2017-09-18 15:22:16 -07:00
cmd_parser.c Linux 4.14-rc7 2017-11-02 12:40:41 +10:00
cmd_parser.h drm/i915/gvt: Factor out scan and shadow from workload dispatch 2017-08-10 10:26:06 +08:00
debug.h drm/i915/gvt: replace the gvt_err with gvt_vgpu_err 2017-03-17 16:46:45 +08:00
display.c Merge tag 'drm-intel-next-2017-08-18' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-08-22 10:03:07 +10:00
display.h drm/i915/gvt: add resolution definition for vGPU type 2017-02-24 13:25:18 +08:00
edid.c drm/i915/gvt: Fix guest fail to read EDID leading to black guest console issue. 2017-03-21 10:50:02 +08:00
edid.h
execlist.c Linux 4.14-rc7 2017-11-02 12:40:41 +10:00
execlist.h
firmware.c drm/i915/gvt: Initialize MMIO Block with HW state 2017-08-04 17:39:41 +08:00
gtt.c drm/i915: Remove the "INDEX" suffix from PPAT marcos 2017-09-14 16:46:36 +03:00
gtt.h drm/i915/gvt: Refine the intel_vgpu_reset_gtt reset function 2017-08-10 10:26:10 +08:00
gvt.c drm/i915/gvt: Add support for PCIe extended configuration space 2017-09-08 14:21:16 +08:00
gvt.h drm/i915/gvt: Add support for PCIe extended configuration space 2017-09-08 14:21:16 +08:00
handlers.c drm/i915/gvt: Adding ACTHD mmio read handler 2017-10-26 11:29:44 -07:00
hypercall.h drm/i915/gvt: remove detect_host() MPT hook 2017-02-07 17:21:44 +08:00
interrupt.c drm/i915/gvt: Change flood gvt dmesg into trace 2017-06-08 13:59:16 +08:00
interrupt.h
kvmgt.c drm/i915/gvt: Add support for PCIe extended configuration space 2017-09-08 14:21:16 +08:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mmio.c drm/i915/gvt: Add emulation for BAR2 (aperture) with normal file RW approach 2017-09-08 14:21:13 +08:00
mmio.h drm/i915/gvt: Refine virtual reset function 2017-06-08 13:59:21 +08:00
mpt.h drm/i915/gvt: Change flood gvt dmesg into trace 2017-06-08 13:59:16 +08:00
opregion.c drm/i915/gvt: replace the gvt_err with gvt_vgpu_err 2017-03-17 16:46:45 +08:00
reg.h drm/i915/gvt: Refine MMIO_RING_F() 2017-10-27 01:38:56 +08:00
render.c drm/i915: Rename global i915 to i915_modparams 2017-09-22 14:50:36 +03:00
render.h drm/i915/gvt: implement per-vm mmio switching optimization 2017-06-08 13:59:15 +08:00
sched_policy.c drm/i915/gvt: Fix GPU hang after reusing vGPU instance across different guest OS 2017-10-17 00:44:10 +08:00
sched_policy.h drm/i915/gvt: use hrtimer replace delayed_work in scheduler 2017-03-30 13:32:24 +08:00
scheduler.c drm/i915/gvt: Fix unsafe locking caused by spin_unlock_bh 2017-11-28 17:22:48 +08:00
scheduler.h Linux 4.14-rc7 2017-11-02 12:40:41 +10:00
trace_points.c
trace.h drm/i915/gvt: Change flood gvt dmesg into trace 2017-06-08 13:59:16 +08:00
vgpu.c Merge tag 'drm-intel-next-2017-08-18' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-08-22 10:03:07 +10:00