All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Joerg Roedel <joerg.roedel@amd.com>
Cc: iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
	x86@kernel.org, Yinghai Lu <yinghai@kernel.org>,
	Suresh Siddha <suresh.b.siddha@intel.com>
Subject: Re: [PATCH 03/28] x86/irq: Use irq_remap specific print_IO_APIC paths only on Intel
Date: Fri, 6 Jul 2012 16:00:37 +0200	[thread overview]
Message-ID: <20120706140037.GA22845@gmail.com> (raw)
In-Reply-To: <20120706130530.GC2639@amd.com>


* Joerg Roedel <joerg.roedel@amd.com> wrote:

> On Fri, Jul 06, 2012 at 10:50:36AM +0200, Ingo Molnar wrote:
> > 
> > * Joerg Roedel <joerg.roedel@amd.com> wrote:
> > >  extern int irq_remapping_enabled;
> > > +extern int intel_irq_remap_debug;
> 
> > Instead of yet another set of global flags thrown around the 
> > kernel please properly factor out this code, its data structures 
> > and methods: introduce a single descriptor structure that 
> > describes this piece of hardware, with debugging flags part of 
> > this structure - with operations function pointer structure and 
> > such.
> 
> Not sure I understand what you mean. So, simplified, from a 
> hardware point of view we have IO-APICs and MSIs. This doesn't 
> change with IOMMU-based interrupt remapping. The IO-APICs and 
> MSIs are properly abstraced through 'struct irq_chip'.

I wouldn't call the IO-APIC code 'properly abstracted' - it's 
basically minimally abstracted to make genirq work, but 
otherwise it's still stock full of global data and methods, 
remnants of the old monolithic IO-APIC code.

( A proper abstraction would stick it all into some sort PCI 
  driver alike structure, including enumeration, initialization, 
  debugging and other non-core details. )

> When an IOMMU comes into play the IO-APICs and MSIs need to be 
> programmed differently so that they send the IRQ messages in a 
> way the IOMMU can remap. This is done by using a different 
> 'struct irq_chip' when interrupt remapping is enabled.

So the way this could work in a cleaner fashion is to 
encapsulate the logic even more. Today we have a per irq_desc 
irq_cfg data descriptor, but there's still global knowledge in 
actual vector allocation such as create_irq() or 
msi_compose_msg(). Patterns like:

        if (irq_remapped(cfg)) {
                compose_remapped_msi_msg(pdev, irq, dest, msg, hpet_id);
                return err;
        }

        if (x2apic_enabled())
                msg->address_hi = MSI_ADDR_BASE_HI |
                                  MSI_ADDR_EXT_DEST_ID(dest);
        else
                msg->address_hi = MSI_ADDR_BASE_HI;

all all signs of insufficient abstraction.

Methods like the ->set_affinity() variants are sufficiently 
abstracted out. Others, including the bits I commented on, not 
so much.

> For IRQ remapping there are two (not so much) different 
> implementations which are abstracted through 'struct 
> irq_remap_ops' made accessible via functions.
> 
> So what I _think_ you mean is to add another call-back to the 
> irq_remap_ops to print out debugging information and use that 
> call-back when IRQ remapping is enabled instead of the routine 
> in io_apic.c. Is that right?

This would be part of it, yes - and doing that alone would make 
this patch more palatable.

I'd also suggest other reductions of complexity - for example 
CONFIG_IRQ_REMAP should probably be an unconditional feature - 
it's not a huge amount of code.

More importantly, all the silly open-coded if 
(irq_remapping_enabled) checks should be eliminated from core 
x86 code. IRQ remapping should be either be an irq_chip detail 
or should live in a separate layer.

So before extending all this please get this into shape.

Thanks,

	Ingo

  reply	other threads:[~2012-07-06 14:00 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-05 12:36 [PATCH 0/28] AMD IOMMU interrupt remapping support Joerg Roedel
2012-07-05 12:36 ` Joerg Roedel
     [not found] ` <1341491808-23083-1-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
2012-07-05 12:36   ` [PATCH 01/28] x86/irq: Add data structure to keep AMD specific irq remapping information Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 02/28] x86/irq: Introduce irq_cfg->remapped Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 03/28] x86/irq: Use irq_remap specific print_IO_APIC paths only on Intel Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
     [not found]     ` <1341491808-23083-4-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
2012-07-06  8:50       ` Ingo Molnar
2012-07-06  8:50         ` Ingo Molnar
2012-07-06 13:05         ` Joerg Roedel
2012-07-06 13:05           ` Joerg Roedel
2012-07-06 14:00           ` Ingo Molnar [this message]
     [not found]             ` <20120706140037.GA22845-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-07-09 12:32               ` Joerg Roedel
2012-07-09 12:32                 ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 04/28] iommu/amd: Use acpi_get_table instead of acpi_table_parse Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 05/28] iommu/amd: Split out PCI related parts of IOMMU initialization Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 06/28] iommu/amd: Move informational prinks out of iommu_enable Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-06  4:08     ` Joe Perches
2012-07-06 12:08       ` Joerg Roedel
2012-07-06 12:08         ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 07/28] iommu/amd: Introduce early_amd_iommu_init routine Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 08/28] iommu/amd: Split enable_iommus() routine Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 09/28] iommu/amd: Move unmap_flush message to amd_iommu_init_dma_ops() Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 10/28] iommu/amd: Introduce amd_iommu_init_dma routine Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 11/28] iommu/amd: Convert iommu initialization to state machine Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 12/28] iommu/amd: Keep track of HPET and IOAPIC device ids Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 13/28] iommu/amd: Add slab-cache for irq remapping tables Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 14/28] iommu/amd: Allocate data structures to keep track of " Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 15/28] iommu/amd: Check if IOAPIC information is correct Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 16/28] iommu/amd: Block all interrupts by default with irq-remapping enabled Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 17/28] iommu/amd: Split device table initialization into irq and dma part Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
     [not found]     ` <1341491808-23083-18-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
2012-07-06 13:08       ` Joerg Roedel
2012-07-06 13:08         ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 18/28] iommu/amd: Make sure IOMMU is not considered to translate itself Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 19/28] iommu/amd: Add IRTE invalidation routine Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 20/28] iommu/amd: Add routines to manage irq remapping tables Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 21/28] iommu/amd: Add IOAPIC remapping routines Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 22/28] iommu/amd: Implement MSI routines for interrupt remapping Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 23/28] iommu/amd: Add call-back routine for HPET MSI Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 24/28] iommu/amd: Add initialization routines for AMD interrupt remapping Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 25/28] iommu/amd: Make sure irq remapping still works on dma init failure Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 26/28] iommu/irq: Use amd_iommu_irq_ops if supported Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 27/28] iommu/amd: Print message to system log when irq remapping is enabled Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-05 12:36   ` [PATCH 28/28] iommu/amd: Report irq remapping through IOMMU-API Joerg Roedel
2012-07-05 12:36     ` Joerg Roedel
2012-07-06 14:08   ` [PATCH 0/28] AMD IOMMU interrupt remapping support Joerg Roedel
2012-07-06 14:08     ` Joerg Roedel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120706140037.GA22845@gmail.com \
    --to=mingo@kernel.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joerg.roedel@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=suresh.b.siddha@intel.com \
    --cc=x86@kernel.org \
    --cc=yinghai@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.