iommu/dart: Fix apple_dart_device_group for PCI groups
authorSven Peter <sven@svenpeter.dev>
Sat, 28 Jan 2023 11:35:32 +0000 (12:35 +0100)
committerJoerg Roedel <jroedel@suse.de>
Fri, 3 Feb 2023 09:56:01 +0000 (10:56 +0100)
commitcf5c1c87c2391649e05e58ecc6dfc3dc5ebebc05
tree5c0514daad83a25e562763bc16ed613817509902
parentd8bcc870d99d7e523df31ab60f1228a8d9061191
iommu/dart: Fix apple_dart_device_group for PCI groups

pci_device_group() can return an already existing IOMMU group if the PCI
device's pagetables have to be shared with another one due to bus
toplogy, isolation features and/or DMA alias quirks.
apple_dart_device_group() however assumes that the group has just been
created and overwrites its iommudata which will eventually lead to
apple_dart_release_group leaving stale entries in sid2group.
Fix that by merging the iommudata if the returned group already exists.

Fixes: f0b636804c7c ("iommu/dart: Clear sid2group entry when a group is freed")
Signed-off-by: Sven Peter <sven@svenpeter.dev>
Reviewed-by: Eric Curtin <ecurtin@redhat.com>
Link: https://lore.kernel.org/r/20230128113532.94651-1-sven@svenpeter.dev
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/apple-dart.c