|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 11/12] AMD/IOMMU: don't needlessly log headers when dumping IRTs
On Thu, Jul 25, 2019 at 01:33:24PM +0000, Jan Beulich wrote:
> Log SBDF headers only when there are actual IRTEs to log. This is
> particularly important for the total volume of output when the ACPI
> tables describe far more than just the existing devices. On my Rome
> system so far there was one line for every function of every device on
> all 256 buses of segment 0, with extremely few exceptions (like the
> IOMMUs themselves).
>
> Also only log one of the "per-device" or "shared" overall headers.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Brian Woods <brian.woods@xxxxxxx>
> ---
> v4: New.
>
> --- a/xen/drivers/passthrough/amd/iommu_intr.c
> +++ b/xen/drivers/passthrough/amd/iommu_intr.c
> @@ -883,7 +883,8 @@ int __init amd_setup_hpet_msi(struct msi
> }
>
> static void dump_intremap_table(const struct amd_iommu *iommu,
> - union irte_cptr tbl)
> + union irte_cptr tbl,
> + const struct ivrs_mappings *ivrs_mapping)
> {
> unsigned int count;
>
> @@ -892,19 +893,25 @@ static void dump_intremap_table(const st
>
> for ( count = 0; count < INTREMAP_ENTRIES; count++ )
> {
> - if ( iommu->ctrl.ga_en )
> - {
> - if ( !tbl.ptr128[count].raw[0] && !tbl.ptr128[count].raw[1] )
> + if ( iommu->ctrl.ga_en
> + ? !tbl.ptr128[count].raw[0] && !tbl.ptr128[count].raw[1]
> + : !tbl.ptr32[count].raw )
> continue;
> +
> + if ( ivrs_mapping )
> + {
> + printk(" %04x:%02x:%02x:%u:\n", iommu->seg,
> + PCI_BUS(ivrs_mapping->dte_requestor_id),
> + PCI_SLOT(ivrs_mapping->dte_requestor_id),
> + PCI_FUNC(ivrs_mapping->dte_requestor_id));
> + ivrs_mapping = NULL;
> + }
> +
> + if ( iommu->ctrl.ga_en )
> printk(" IRTE[%03x] %016lx_%016lx\n",
> count, tbl.ptr128[count].raw[1],
> tbl.ptr128[count].raw[0]);
> - }
> else
> - {
> - if ( !tbl.ptr32[count].raw )
> - continue;
> printk(" IRTE[%03x] %08x\n", count, tbl.ptr32[count].raw);
> - }
> }
> }
>
> @@ -916,13 +923,8 @@ static int dump_intremap_mapping(const s
> if ( !ivrs_mapping )
> return 0;
>
> - printk(" %04x:%02x:%02x:%u:\n", iommu->seg,
> - PCI_BUS(ivrs_mapping->dte_requestor_id),
> - PCI_SLOT(ivrs_mapping->dte_requestor_id),
> - PCI_FUNC(ivrs_mapping->dte_requestor_id));
> -
> spin_lock_irqsave(&(ivrs_mapping->intremap_lock), flags);
> - dump_intremap_table(iommu, ivrs_mapping->intremap_table);
> + dump_intremap_table(iommu, ivrs_mapping->intremap_table, ivrs_mapping);
> spin_unlock_irqrestore(&(ivrs_mapping->intremap_lock), flags);
>
> process_pending_softirqs();
> @@ -932,17 +934,22 @@ static int dump_intremap_mapping(const s
>
> static void dump_intremap_tables(unsigned char key)
> {
> - unsigned long flags;
> -
> - printk("--- Dumping Per-dev IOMMU Interrupt Remapping Table ---\n");
> + if ( !shared_intremap_table )
> + {
> + printk("--- Dumping Per-dev IOMMU Interrupt Remapping Table ---\n");
>
> - iterate_ivrs_entries(dump_intremap_mapping);
> + iterate_ivrs_entries(dump_intremap_mapping);
> + }
> + else
> + {
> + unsigned long flags;
>
> - printk("--- Dumping Shared IOMMU Interrupt Remapping Table ---\n");
> + printk("--- Dumping Shared IOMMU Interrupt Remapping Table ---\n");
>
> - spin_lock_irqsave(&shared_intremap_lock, flags);
> - dump_intremap_table(list_first_entry(&amd_iommu_head, struct amd_iommu,
> - list),
> - shared_intremap_table);
> - spin_unlock_irqrestore(&shared_intremap_lock, flags);
> + spin_lock_irqsave(&shared_intremap_lock, flags);
> + dump_intremap_table(list_first_entry(&amd_iommu_head, struct
> amd_iommu,
> + list),
> + shared_intremap_table, NULL);
> + spin_unlock_irqrestore(&shared_intremap_lock, flags);
> + }
> }
>
--
Brian Woods
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |