Re: [RESEND PATCH v1 00/37] iommu/amd: Add multiple PCI segments support

2022-04-12 Thread Vasant Hegde via iommu
Hi Joerg,

On 4/4/2022 3:29 PM, Vasant Hegde via iommu wrote:
> Newer AMD systems can support multiple PCI segments, where each segment
> contains one or more IOMMU instances. However, an IOMMU instance can only
> support a single PCI segment.
> 

Did you get a chance to look into this series?

Thanks
-Vasant

> Current code assumes a system contains only one PCI segment (segment 0)
> and creates global data structures such as device table, rlookup table,
> etc.
> 
> This series introduces per-PCI-segment data structure, which contains
> device table, alias table, etc. For each PCI segment, all IOMMUs
> share the same data structure. The series also makes necessary code
> adjustment and logging enhancements. Finally it removes global data
> structures like device table, alias table, etc.
> 
> In case of system w/ single PCI segment (e.g. PCI segment ID is zero),
> IOMMU driver allocates one PCI segment data structure, which will
> be shared by all IOMMUs.
> 
> Patch 1 Updates struct iommu_dev_data defination.
> 
> Patch 2 - 13 introduce  new PCI segment structure and allocate per
> data structures, and introduce the amd_iommu.pci_seg pointer to point
> to the corresponded pci_segment structure. Also, we have introduced
> a helper function rlookup_amd_iommu() to reverse-lookup each iommu
> for a particular device.
> 
> Patch 14 - 29 adopt to per PCI segment data structure and removes
> global data structure.
> 
> Patch 30 fixes flushing logic to flush upto last_bdf.
> 
> Patch 31 - 37 convert usages of 16-bit PCI device ID to include
> 16-bit segment ID.
> 
> 
> RFC patchset : 
> https://lore.kernel.org/linux-iommu/20220311094854.31595-1-vasant.he...@amd.com/T/#t
> 
> Changes in RFC -> v1:
>   - Rebased patches on top of iommu/next tree.
>   - Update struct iommu_dev_data defination
>   - Updated few log message to print segment ID
>   - Fix smatch warnings
> 
> 
> Regards,
> Vasant
> 
> 
> Suravee Suthikulpanit (21):
>   iommu/amd: Introduce per PCI segment device table
>   iommu/amd: Introduce per PCI segment rlookup table
>   iommu/amd: Introduce per PCI segment old_dev_tbl_cpy
>   iommu/amd: Introduce per PCI segment alias_table
>   iommu/amd: Convert to use rlookup_amd_iommu helper function
>   iommu/amd: Update irq_remapping_alloc to use IOMMU lookup helper function
>   iommu/amd: Introduce struct amd_ir_data.iommu
>   iommu/amd: Update amd_irte_ops functions
>   iommu/amd: Update alloc_irq_table and alloc_irq_index
>   iommu/amd: Update set_dte_entry and clear_dte_entry
>   iommu/amd: Update iommu_ignore_device
>   iommu/amd: Update dump_dte_entry
>   iommu/amd: Update set_dte_irq_entry
>   iommu/amd: Update (un)init_device_table_dma()
>   iommu/amd: Update set_dev_entry_bit() and get_dev_entry_bit()
>   iommu/amd: Remove global amd_iommu_dev_table
>   iommu/amd: Remove global amd_iommu_alias_table
>   iommu/amd: Introduce get_device_sbdf_id() helper function
>   iommu/amd: Include PCI segment ID when initialize IOMMU
>   iommu/amd: Specify PCI segment ID when getting pci device
>   iommu/amd: Add PCI segment support for ivrs_ioapic, ivrs_hpet, ivrs_acpihid 
> commands
> 
> Vasant Hegde (16):
>   iommu/amd: Update struct iommu_dev_data defination
>   iommu/amd: Introduce pci segment structure
>   iommu/amd: Introduce per PCI segment irq_lookup_table
>   iommu/amd: Introduce per PCI segment dev_data_list
>   iommu/amd: Introduce per PCI segment unity map list
>   iommu/amd: Introduce per PCI segment last_bdf
>   iommu/amd: Introduce per PCI segment device table size
>   iommu/amd: Introduce per PCI segment alias table size
>   iommu/amd: Introduce per PCI segment rlookup table size
>   iommu/amd: Convert to use per PCI segment irq_lookup_table
>   iommu/amd: Convert to use per PCI segment rlookup_table
>   iommu/amd: Remove global amd_iommu_last_bdf
>   iommu/amd: Flush upto last_bdf only
>   iommu/amd: Print PCI segment ID in error log messages
>   iommu/amd: Update device_state structure to include PCI seg ID
>   iommu/amd: Update amd_iommu_fault structure to include PCI seg ID
> 
>  .../admin-guide/kernel-parameters.txt |  34 +-
>  drivers/iommu/amd/amd_iommu.h |  13 +-
>  drivers/iommu/amd/amd_iommu_types.h   | 127 +++-
>  drivers/iommu/amd/init.c  | 683 +++---
>  drivers/iommu/amd/iommu.c | 540 --
>  drivers/iommu/amd/iommu_v2.c  |  67 +-
>  drivers/iommu/amd/quirks.c|   4 +-
>  7 files changed, 884 insertions(+), 584 deletions(-)
> 

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


Re: [PATCH v1 00/37] iommu/amd: Add multiple PCI segments support

2022-04-04 Thread Vasant Hegde via iommu
On 4/4/2022 3:10 PM, Vasant Hegde via iommu wrote:
> Newer AMD systems can support multiple PCI segments, where each segment
> contains one or more IOMMU instances. However, an IOMMU instance can only
> support a single PCI segment.
> 

Hi,

Please ignore this series. Looks like I had network glitch and git didn't send 
entire series.
I have resent series.

-Vasant

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


[RESEND PATCH v1 00/37] iommu/amd: Add multiple PCI segments support

2022-04-04 Thread Vasant Hegde via iommu
Newer AMD systems can support multiple PCI segments, where each segment
contains one or more IOMMU instances. However, an IOMMU instance can only
support a single PCI segment.

Current code assumes a system contains only one PCI segment (segment 0)
and creates global data structures such as device table, rlookup table,
etc.

This series introduces per-PCI-segment data structure, which contains
device table, alias table, etc. For each PCI segment, all IOMMUs
share the same data structure. The series also makes necessary code
adjustment and logging enhancements. Finally it removes global data
structures like device table, alias table, etc.

In case of system w/ single PCI segment (e.g. PCI segment ID is zero),
IOMMU driver allocates one PCI segment data structure, which will
be shared by all IOMMUs.

Patch 1 Updates struct iommu_dev_data defination.

Patch 2 - 13 introduce  new PCI segment structure and allocate per
data structures, and introduce the amd_iommu.pci_seg pointer to point
to the corresponded pci_segment structure. Also, we have introduced
a helper function rlookup_amd_iommu() to reverse-lookup each iommu
for a particular device.

Patch 14 - 29 adopt to per PCI segment data structure and removes
global data structure.

Patch 30 fixes flushing logic to flush upto last_bdf.

Patch 31 - 37 convert usages of 16-bit PCI device ID to include
16-bit segment ID.


RFC patchset : 
https://lore.kernel.org/linux-iommu/20220311094854.31595-1-vasant.he...@amd.com/T/#t

Changes in RFC -> v1:
  - Rebased patches on top of iommu/next tree.
  - Update struct iommu_dev_data defination
  - Updated few log message to print segment ID
  - Fix smatch warnings


Regards,
Vasant


Suravee Suthikulpanit (21):
  iommu/amd: Introduce per PCI segment device table
  iommu/amd: Introduce per PCI segment rlookup table
  iommu/amd: Introduce per PCI segment old_dev_tbl_cpy
  iommu/amd: Introduce per PCI segment alias_table
  iommu/amd: Convert to use rlookup_amd_iommu helper function
  iommu/amd: Update irq_remapping_alloc to use IOMMU lookup helper function
  iommu/amd: Introduce struct amd_ir_data.iommu
  iommu/amd: Update amd_irte_ops functions
  iommu/amd: Update alloc_irq_table and alloc_irq_index
  iommu/amd: Update set_dte_entry and clear_dte_entry
  iommu/amd: Update iommu_ignore_device
  iommu/amd: Update dump_dte_entry
  iommu/amd: Update set_dte_irq_entry
  iommu/amd: Update (un)init_device_table_dma()
  iommu/amd: Update set_dev_entry_bit() and get_dev_entry_bit()
  iommu/amd: Remove global amd_iommu_dev_table
  iommu/amd: Remove global amd_iommu_alias_table
  iommu/amd: Introduce get_device_sbdf_id() helper function
  iommu/amd: Include PCI segment ID when initialize IOMMU
  iommu/amd: Specify PCI segment ID when getting pci device
  iommu/amd: Add PCI segment support for ivrs_ioapic, ivrs_hpet, ivrs_acpihid 
commands

Vasant Hegde (16):
  iommu/amd: Update struct iommu_dev_data defination
  iommu/amd: Introduce pci segment structure
  iommu/amd: Introduce per PCI segment irq_lookup_table
  iommu/amd: Introduce per PCI segment dev_data_list
  iommu/amd: Introduce per PCI segment unity map list
  iommu/amd: Introduce per PCI segment last_bdf
  iommu/amd: Introduce per PCI segment device table size
  iommu/amd: Introduce per PCI segment alias table size
  iommu/amd: Introduce per PCI segment rlookup table size
  iommu/amd: Convert to use per PCI segment irq_lookup_table
  iommu/amd: Convert to use per PCI segment rlookup_table
  iommu/amd: Remove global amd_iommu_last_bdf
  iommu/amd: Flush upto last_bdf only
  iommu/amd: Print PCI segment ID in error log messages
  iommu/amd: Update device_state structure to include PCI seg ID
  iommu/amd: Update amd_iommu_fault structure to include PCI seg ID

 .../admin-guide/kernel-parameters.txt |  34 +-
 drivers/iommu/amd/amd_iommu.h |  13 +-
 drivers/iommu/amd/amd_iommu_types.h   | 127 +++-
 drivers/iommu/amd/init.c  | 683 +++---
 drivers/iommu/amd/iommu.c | 540 --
 drivers/iommu/amd/iommu_v2.c  |  67 +-
 drivers/iommu/amd/quirks.c|   4 +-
 7 files changed, 884 insertions(+), 584 deletions(-)

-- 
2.27.0

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


[PATCH v1 00/37] iommu/amd: Add multiple PCI segments support

2022-04-04 Thread Vasant Hegde via iommu
Newer AMD systems can support multiple PCI segments, where each segment
contains one or more IOMMU instances. However, an IOMMU instance can only
support a single PCI segment.

Current code assumes a system contains only one PCI segment (segment 0)
and creates global data structures such as device table, rlookup table,
etc.

This series introduces per-PCI-segment data structure, which contains
device table, alias table, etc. For each PCI segment, all IOMMUs
share the same data structure. The series also makes necessary code
adjustment and logging enhancements. Finally it removes global data
structures like device table, alias table, etc.

In case of system w/ single PCI segment (e.g. PCI segment ID is zero),
IOMMU driver allocates one PCI segment data structure, which will
be shared by all IOMMUs.

Patch 1 Updates struct iommu_dev_data defination.

Patch 2 - 13 introduce  new PCI segment structure and allocate per
data structures, and introduce the amd_iommu.pci_seg pointer to point
to the corresponded pci_segment structure. Also, we have introduced
a helper function rlookup_amd_iommu() to reverse-lookup each iommu
for a particular device.

Patch 14 - 29 adopt to per PCI segment data structure and removes
global data structure.

Patch 30 fixes flushing logic to flush upto last_bdf.

Patch 31 - 37 convert usages of 16-bit PCI device ID to include
16-bit segment ID.


RFC patchset : 
https://lore.kernel.org/linux-iommu/20220311094854.31595-1-vasant.he...@amd.com/T/#t

Changes in RFC -> v1:
  - Rebased patches on top of iommu/next tree.
  - Update struct iommu_dev_data defination
  - Updated few log message to print segment ID
  - Fix smatch warnings


Regards,
Vasant


Suravee Suthikulpanit (21):
  iommu/amd: Introduce per PCI segment device table
  iommu/amd: Introduce per PCI segment rlookup table
  iommu/amd: Introduce per PCI segment old_dev_tbl_cpy
  iommu/amd: Introduce per PCI segment alias_table
  iommu/amd: Convert to use rlookup_amd_iommu helper function
  iommu/amd: Update irq_remapping_alloc to use IOMMU lookup helper function
  iommu/amd: Introduce struct amd_ir_data.iommu
  iommu/amd: Update amd_irte_ops functions
  iommu/amd: Update alloc_irq_table and alloc_irq_index
  iommu/amd: Update set_dte_entry and clear_dte_entry
  iommu/amd: Update iommu_ignore_device
  iommu/amd: Update dump_dte_entry
  iommu/amd: Update set_dte_irq_entry
  iommu/amd: Update (un)init_device_table_dma()
  iommu/amd: Update set_dev_entry_bit() and get_dev_entry_bit()
  iommu/amd: Remove global amd_iommu_dev_table
  iommu/amd: Remove global amd_iommu_alias_table
  iommu/amd: Introduce get_device_sbdf_id() helper function
  iommu/amd: Include PCI segment ID when initialize IOMMU
  iommu/amd: Specify PCI segment ID when getting pci device
  iommu/amd: Add PCI segment support for ivrs_ioapic, ivrs_hpet, ivrs_acpihid 
commands

Vasant Hegde (16):
  iommu/amd: Update struct iommu_dev_data defination
  iommu/amd: Introduce pci segment structure
  iommu/amd: Introduce per PCI segment irq_lookup_table
  iommu/amd: Introduce per PCI segment dev_data_list
  iommu/amd: Introduce per PCI segment unity map list
  iommu/amd: Introduce per PCI segment last_bdf
  iommu/amd: Introduce per PCI segment device table size
  iommu/amd: Introduce per PCI segment alias table size
  iommu/amd: Introduce per PCI segment rlookup table size
  iommu/amd: Convert to use per PCI segment irq_lookup_table
  iommu/amd: Convert to use per PCI segment rlookup_table
  iommu/amd: Remove global amd_iommu_last_bdf
  iommu/amd: Flush upto last_bdf only
  iommu/amd: Print PCI segment ID in error log messages
  iommu/amd: Update device_state structure to include PCI seg ID
  iommu/amd: Update amd_iommu_fault structure to include PCI seg ID

 .../admin-guide/kernel-parameters.txt |  34 +-
 drivers/iommu/amd/amd_iommu.h |  13 +-
 drivers/iommu/amd/amd_iommu_types.h   | 127 +++-
 drivers/iommu/amd/init.c  | 683 +++---
 drivers/iommu/amd/iommu.c | 540 --
 drivers/iommu/amd/iommu_v2.c  |  67 +-
 drivers/iommu/amd/quirks.c|   4 +-
 7 files changed, 884 insertions(+), 584 deletions(-)

-- 
2.27.0

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu