Skip to contentSkip to conversation

OMAP and MSM IOMMU driver misbehavior

DISCUSSION Joerg Roedel 3 participants 3 messages Jan 23, 2012 – Jan 24, 2012

lore
Share & tools
lore
#0 lore raw

Hi,

while reviewing another IOMMU driver again I came across a problem in the IOMMU drivers for OMAP and MSM platforms. In both drivers the 'domain_destroy with devices attached' case isn't handled correctly.

OMAP driver seems not to track the devices attached to a domain at all. So when a domain is destroyed it can happen that the hardware still references old (and already freed) page-table pointers.

MSM tracks devices in a domain, but does not automatically remove the devices from a domain that is about to be destroyed.

Please tell me when I mis-read the code, otherwise please fix this in your drivers so that we can get consistent behavior for IOMMU-API users :-)

Thanks,

Joerg

Signature · 5 lines
AMD Operating System Research Center

Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach
General Managers: Alberto Bozzo
Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632
#1 lore raw

Hi Joerg,

Quoted 3 lines · Joerg Roedel

Please tell me when I mis-read the code, otherwise please fix this in your drivers so that we can get consistent behavior for IOMMU-API users :-)

I'm a bit tied up with some schedule I have to meet this week, but I'll definitely take a look and make sure it is fixed.

Somehow I trust you didn't mis-read anything :)

Thanks for reporting this,
Ohad.

#2 lore raw
In reply to Joerg Roedel
Quoted 13 lines · Joerg Roedel

Hi,

while reviewing another IOMMU driver again I came across a problem in the IOMMU drivers for OMAP and MSM platforms. In both drivers the 'domain_destroy with devices attached' case isn't handled correctly.

OMAP driver seems not to track the devices attached to a domain at all. So when a domain is destroyed it can happen that the hardware still references old (and already freed) page-table pointers.

MSM tracks devices in a domain, but does not automatically remove the devices from a domain that is about to be destroyed.

Quoted 7 lines

Please tell me when I mis-read the code, otherwise please fix this in your drivers so that we can get consistent behavior for IOMMU-API users :-)

Thanks,

Joerg

Hello

I believe your analysis is correct, and it is a legitimate problem. The driver does keep a list of devices attached to a domain, so it should not be too hard to detach them. However, I have been quite occupied with other things lately, but I can try to get to it when I have some free time. Calling detach_dev on each element is what needs to happen in theory, but I feel like the main detach_dev code will need to be broken out to handle the locking properly. Still, it does not sound particularly difficult.

Steve