[PATCH v17 22/26] bus/fslmc: use the new VFIO IOMMU mode API

Burakov, Anatoly anatoly.burakov at intel.com
Wed Sep 16 13:20:19 CEST 2026


On 9/16/2026 9:44 AM, David Marchand wrote:
> On Thu, 10 Sept 2026 at 14:56, Anatoly Burakov
> <anatoly.burakov at intel.com> wrote:
>> @@ -500,7 +507,8 @@ rte_dpaa2_get_iommu_class(void)
>>                  return RTE_IOVA_DC;
>>
>>          /* check if all devices on the bus support Virtual addressing or not */
>> -       if (fslmc_all_device_support_iova() != 0 && dev_vfio_noiommu_is_enabled() == 0)
>> +       if (fslmc_all_device_support_iova() != 0 &&
>> +                       dev_vfio_get_iommu_mode() == DEV_VFIO_IOMMU_MODE_UNSAFE)
>>                  return RTE_IOVA_VA;
>>
>>          return RTE_IOVA_PA;
> 
> IA flagged this part:
> 
> In `fslmc_bus.c`, the condition changed from:
> ```c
> /* Old */
> if (fslmc_all_device_support_iova() != 0 && dev_vfio_noiommu_is_enabled() == 0)
>      return RTE_IOVA_VA;
> 
> /* New */
> if (fslmc_all_device_support_iova() != 0 &&
>          dev_vfio_get_iommu_mode() == DEV_VFIO_IOMMU_MODE_UNSAFE)
>      return RTE_IOVA_VA;
> ```
> 
> The old code returned `RTE_IOVA_VA` when NOIOMMU was **disabled** (==
> 0), but the new code returns `RTE_IOVA_VA` when IOMMU mode is
> **UNSAFE** (i.e., NOIOMMU is enabled).
> 
> Looking at `dev_vfio_noiommu_is_enabled()`:
> ```c
> int
> dev_vfio_noiommu_is_enabled(void)
> {
>      return vfio_global_cfg.iommu_mode == DEV_VFIO_IOMMU_MODE_UNSAFE;
> }
> ```
> 
> So:
> - Old: `dev_vfio_noiommu_is_enabled() == 0` → NOIOMMU is NOT enabled →
> IOMMU is SAFE
> - New: `dev_vfio_get_iommu_mode() == DEV_VFIO_IOMMU_MODE_UNSAFE` →
> NOIOMMU IS enabled
> 
> **This is an inverted condition.** The old code returned `RTE_IOVA_VA`
> when IOMMU was safe (NOIOMMU disabled), but the new code returns
> `RTE_IOVA_VA` when IOMMU is unsafe (NOIOMMU enabled). This appears to
> be a correctness bug that will change the IOVA mode selection
> behavior.
> 
> **Suggested fix:** The new condition should likely be:
> ```c
> if (fslmc_all_device_support_iova() != 0 &&
>          dev_vfio_get_iommu_mode() != DEV_VFIO_IOMMU_MODE_UNSAFE)
>      return RTE_IOVA_VA;
> ```
> 
> Or if the intent was to check for safe mode:
> ```c
> if (fslmc_all_device_support_iova() != 0 &&
>          dev_vfio_get_iommu_mode() == DEV_VFIO_IOMMU_MODE_SAFE)
>      return RTE_IOVA_VA;
> ```
> 

Yep, a typo.

-- 
Thanks,
Anatoly


More information about the dev mailing list