OSDN Git Service
(root)
/
uclinux-h8
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
9899a56
)
powerpc/powernv/pci: fix a RCU-list lock
author
Qian Cai
<cai@lca.pw>
Sun, 10 May 2020 05:13:47 +0000
(
01:13
-0400)
committer
Michael Ellerman
<mpe@ellerman.id.au>
Sun, 31 Jan 2021 11:35:49 +0000
(22:35 +1100)
It is unsafe to traverse tbl->it_group_list without the RCU read lock.
WARNING: suspicious RCU usage
5.7.0-rc4-next-
20200508
#1 Not tainted
-----------------------------
arch/powerpc/platforms/powernv/pci-ioda-tce.c:355 RCU-list traversed in non-reader section!!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
3 locks held by qemu-kvm/4305:
#0:
c000000bc3fe6988
(&container->group_lock){++++}-{3:3}, at: vfio_fops_unl_ioctl+0x108/0x410 [vfio]
#1:
c00800000fcc7400
(&vfio.iommu_drivers_lock){+.+.}-{3:3}, at: vfio_fops_unl_ioctl+0x148/0x410 [vfio]
#2:
c000000bc3fe4d68
(&container->lock){+.+.}-{3:3}, at: tce_iommu_attach_group+0x3c/0x4f0 [vfio_iommu_spapr_tce]
stack backtrace:
CPU: 4 PID: 4305 Comm: qemu-kvm Not tainted 5.7.0-rc4-next-
20200508
#1
Call Trace:
[
c0000010f29afa60
] [
c0000000007154c8
] dump_stack+0xfc/0x174 (unreliable)
[
c0000010f29afab0
] [
c0000000001d8ff0
] lockdep_rcu_suspicious+0x140/0x164
[
c0000010f29afb30
] [
c0000000000dae2c
] pnv_pci_unlink_table_and_group+0x11c/0x200
[
c0000010f29afb70
] [
c0000000000d4a34
] pnv_pci_ioda2_unset_window+0xc4/0x190
[
c0000010f29afbf0
] [
c0000000000d4b4c
] pnv_ioda2_take_ownership+0x4c/0xd0
[
c0000010f29afc30
] [
c00800000fd60ee0
] tce_iommu_attach_group+0x2c8/0x4f0 [vfio_iommu_spapr_tce]
[
c0000010f29afcd0
] [
c00800000fcc11a0
] vfio_fops_unl_ioctl+0x238/0x410 [vfio]
[
c0000010f29afd50
] [
c0000000005430a8
] ksys_ioctl+0xd8/0x130
[
c0000010f29afda0
] [
c000000000543128
] sys_ioctl+0x28/0x40
[
c0000010f29afdc0
] [
c000000000038af4
] system_call_exception+0x114/0x1e0
[
c0000010f29afe20
] [
c00000000000c8f0
] system_call_common+0xf0/0x278
Signed-off-by: Qian Cai <cai@lca.pw>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link:
https://lore.kernel.org/r/20200510051347.1906-1-cai@lca.pw
arch/powerpc/platforms/powernv/pci-ioda-tce.c
patch
|
blob
|
history
diff --git
a/arch/powerpc/platforms/powernv/pci-ioda-tce.c
b/arch/powerpc/platforms/powernv/pci-ioda-tce.c
index
5218f5d
..
30551bb
100644
(file)
--- a/
arch/powerpc/platforms/powernv/pci-ioda-tce.c
+++ b/
arch/powerpc/platforms/powernv/pci-ioda-tce.c
@@
-380,6
+380,8
@@
void pnv_pci_unlink_table_and_group(struct iommu_table *tbl,
/* Remove link to a group from table's list of attached groups */
found = false;
+
+ rcu_read_lock();
list_for_each_entry_rcu(tgl, &tbl->it_group_list, next) {
if (tgl->table_group == table_group) {
list_del_rcu(&tgl->next);
@@
-388,6
+390,8
@@
void pnv_pci_unlink_table_and_group(struct iommu_table *tbl,
break;
}
}
+ rcu_read_unlock();
+
if (WARN_ON(!found))
return;