diff options
author | Niklas Schnelle <schnelle@linux.ibm.com> | 2022-11-09 15:29:01 +0100 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2022-11-19 10:28:16 +0100 |
commit | 2ba8336dab5fb81452aea9c21dfc870050a017f3 (patch) | |
tree | 28cf21630a2a43438e63a6b8001f32ebd9abc8b8 /arch/s390/include/asm/pci.h | |
parent | iommu/s390: Add I/O TLB ops (diff) | |
download | linux-2ba8336dab5fb81452aea9c21dfc870050a017f3.tar.xz linux-2ba8336dab5fb81452aea9c21dfc870050a017f3.zip |
iommu/s390: Use RCU to allow concurrent domain_list iteration
The s390_domain->devices list is only added to when new devices are
attached but is iterated through in read-only fashion for every mapping
operation as well as for I/O TLB flushes and thus in performance
critical code causing contention on the s390_domain->list_lock.
Fortunately such a read-mostly linked list is a standard use case for
RCU. This change closely follows the example fpr RCU protected list
given in Documentation/RCU/listRCU.rst.
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
Link: https://lore.kernel.org/r/20221109142903.4080275-4-schnelle@linux.ibm.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'arch/s390/include/asm/pci.h')
-rw-r--r-- | arch/s390/include/asm/pci.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h index 07361e2fd8c5..e4c3e4e04d30 100644 --- a/arch/s390/include/asm/pci.h +++ b/arch/s390/include/asm/pci.h @@ -119,6 +119,7 @@ struct zpci_dev { struct list_head entry; /* list of all zpci_devices, needed for hotplug, etc. */ struct list_head iommu_list; struct kref kref; + struct rcu_head rcu; struct hotplug_slot hotplug_slot; enum zpci_state state; |