Maybe we should update this as well:

```
        pc_info.pasid = pasid ?: PCI_NO_PASID;
```

Other question: is this correct?

```
        pasid = VTD_INV_DESC_PASID_DEVICE_IOTLB_PASID(inv_desc->lo);
        vtd_dev_as = vtd_get_as_by_sid_and_pasid(s, sid, pasid);
```

cmd

On Thu, 2026-04-30 at 03:13 -0400, Zhenzhong Duan wrote:
> In previous patch we introduced a global macro IOMMU_NO_PASID(0) for  
> Requests-without-PASID, this makes the local macro PASID_0 redundant.  
> Delete it and use IOMMU_NO_PASID instead.
> 
> Suggested-by: Yi Liu <[[email protected]](mailto:[email protected])>  
> Signed-off-by: Zhenzhong Duan 
> <[[email protected]](mailto:[email protected])>  
> Tested-by: Xudong Hao <[[email protected]](mailto:[email protected])>  
> ---  
>  hw/i386/intel_iommu_internal.h |  1 -  
>  hw/i386/intel_iommu.c          | 21 +++++++++++----------  
>  hw/i386/intel_iommu_accel.c    |  2 +-  
>  3 files changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h  
> index c7e107fe87..0141316f83 100644  
> --- a/hw/i386/intel_iommu_internal.h  
> +++ b/hw/i386/intel_iommu_internal.h  
> @@ -615,7 +615,6 @@ typedef struct VTDRootEntry VTDRootEntry;  
>  #define VTD_CTX_ENTRY_LEGACY_SIZE     16  
>  #define VTD_CTX_ENTRY_SCALABLE_SIZE   32  
>    
> -#define PASID_0                             0  
>  #define VTD_SM_CONTEXT_ENTRY_RSVD_VAL0(aw)  (0x1e0ULL | ~VTD_HAW_MASK(aw))  
>  #define VTD_SM_CONTEXT_ENTRY_RSVD_VAL1      0xffffffffffe00000ULL  
>  #define VTD_SM_CONTEXT_ENTRY_PRE            0x10ULL  
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c  
> index 74642d8123..4d1b262d56 100644  
> --- a/hw/i386/intel_iommu.c  
> +++ b/hw/i386/intel_iommu.c  
> @@ -100,7 +100,8 @@ static void vtd_pasid_cache_reset_locked(IntelIOMMUState 
> *s)  
>   *  
>   * Requests-without-PASID:  
>   *   - PCI subsystem: Uses PCI_NO_PASID (-1) to indicate no PASID present  
> - *   - VT-d IOMMU:    Uses PASID_0 (0) to index the PASID table for 
> translation  
> + *   - VT-d IOMMU:    Uses IOMMU_NO_PASID (0) to index the PASID table for  
> + *                    translation  
>   *  
>   * Requests-with-PASID:  
>   *   - Both subsystems use identical PASID values (1-0xFFFFF)  
> @@ -114,7 +115,7 @@ static void vtd_pasid_cache_reset_locked(IntelIOMMUState 
> *s)  
>   */  
>  static uint32_t vtd_pasid_to_pci_pasid(uint32_t pasid)  
>  {  
> -    if (pasid == PASID_0) {  
> +    if (pasid == IOMMU_NO_PASID) {  
>          pasid = PCI_NO_PASID;  
>      }  
>      return pasid;  
> @@ -969,7 +970,7 @@ int vtd_ce_get_pasid_entry(IntelIOMMUState *s, 
> VTDContextEntry *ce,  
>      dma_addr_t pasid_dir_base;  
>    
>      if (pasid == PCI_NO_PASID) {  
> -        pasid = PASID_0;  
> +        pasid = IOMMU_NO_PASID;  
>      }  
>      pasid_dir_base = VTD_CE_GET_PASID_DIR_TABLE(ce);  
>      return vtd_get_pe_from_pasid_table(s, pasid_dir_base, pasid, pe);  
> @@ -986,7 +987,7 @@ static int vtd_ce_get_pasid_fpd(IntelIOMMUState *s,  
>      VTDPASIDEntry pe;  
>    
>      if (pasid == PCI_NO_PASID) {  
> -        pasid = PASID_0;  
> +        pasid = IOMMU_NO_PASID;  
>      }  
>      pasid_dir_base = VTD_CE_GET_PASID_DIR_TABLE(ce);  
>    
> @@ -1529,9 +1530,9 @@ static int vtd_ce_pasid_0_check(IntelIOMMUState *s, 
> VTDContextEntry *ce)  
>    
>      /*  
>       * Make sure in Scalable Mode, a present context entry  
> -     * has valid pasid entry setting at PASID_0.  
> +     * has valid pasid entry setting at IOMMU_NO_PASID.  
>       */  
> -    return vtd_ce_get_pasid_entry(s, ce, &pe, PASID_0);  
> +    return vtd_ce_get_pasid_entry(s, ce, &pe, IOMMU_NO_PASID);  
>  }  
>    
>  /* Map a device to its corresponding domain (context-entry) */  
> @@ -1592,7 +1593,7 @@ int vtd_dev_to_context_entry(IntelIOMMUState *s, 
> uint8_t bus_num,  
>          }  
>      } else {  
>          /*  
> -         * Check if the programming of pasid setting of PASID_0  
> +         * Check if the programming of pasid setting of IOMMU_NO_PASID  
>           * is valid, and thus avoids to check pasid entry fetching  
>           * result in future helper function calling.  
>           */  
> @@ -2150,7 +2151,7 @@ static bool vtd_do_iommu_translate(VTDAddressSpace 
> *vtd_as, PCIBus *bus,  
>      vtd_iommu_lock(s);  
>    
>      if (pasid == PCI_NO_PASID && s->root_scalable) {  
> -        pasid = PASID_0;  
> +        pasid = IOMMU_NO_PASID;  
>      }  
>    
>      /* Try to fetch pte from IOTLB */  
> @@ -2515,7 +2516,7 @@ static void vtd_iotlb_domain_invalidate(IntelIOMMUState 
> *s, uint16_t domain_id)  
>  }  
>    
>  /*  
> - * There is no pasid field in iotlb invalidation descriptor, so PASID_0  
> + * There is no pasid field in iotlb invalidation descriptor, so 
> IOMMU_NO_PASID  
>   * is passed as parameter. Piotlb invalidation supports pasid, pasid in its  
>   * descriptor is passed. In both cases, pasid is converted to PCI pasid  
>   * before checking with vtd_as->pasid.  
> @@ -2586,7 +2587,7 @@ static void vtd_iotlb_page_invalidate(IntelIOMMUState 
> *s, uint16_t domain_id,  
>      vtd_iommu_lock(s);  
>      g_hash_table_foreach_remove(s->iotlb, vtd_hash_remove_by_page, &info);  
>      vtd_iommu_unlock(s);  
> -    vtd_iotlb_page_invalidate_notify(s, domain_id, addr, am, PASID_0);  
> +    vtd_iotlb_page_invalidate_notify(s, domain_id, addr, am, 
> IOMMU_NO_PASID);  
>  }  
>    
>  /* Flush IOTLB  
> diff --git a/hw/i386/intel_iommu_accel.c b/hw/i386/intel_iommu_accel.c  
> index bd1236c070..8940d240a1 100644  
> --- a/hw/i386/intel_iommu_accel.c  
> +++ b/hw/i386/intel_iommu_accel.c  
> @@ -217,7 +217,7 @@ static void vtd_flush_host_piotlb_locked(gpointer key, 
> gpointer value,  
>    
>      did = VTD_SM_PASID_ENTRY_DID(&pc_entry->pasid_entry);  
>    
> -    if (piotlb_info->domain_id == did && piotlb_info->pasid == PASID_0) {  
> +    if (piotlb_info->domain_id == did && piotlb_info->pasid == 
> IOMMU_NO_PASID) {  
>          HostIOMMUDeviceIOMMUFD *hiodi =  
>              HOST_IOMMU_DEVICE_IOMMUFD(vtd_hiod->hiod);  
>          uint32_t entry_num = 1; /* Only implement one request for simplicity 
> */

Reply via email to