[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