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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:33:36 +0000 (09:33 +0100)
commitbbbeb5414a9c0efbe5105c9861c75f978818aef5
tree70d38add3cdb3a67e424ecbd72bc0613ac30ed90
parent78b291ba2906a504ea959a51e92266f184db3ab2
iommu/dart: Fix apple_dart_device_group for PCI groups

[ Upstream commit cf5c1c87c2391649e05e58ecc6dfc3dc5ebebc05 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/iommu/apple-dart.c