lkml.org 
[lkml]   [2014]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC Part2 v1 01/21] irqdomain: Introduce new interfaces to support hierarchy irqdomains
    On 2014/9/17 1:43, Thomas Gleixner wrote:
    > Jiang,
    >
    > On Thu, 11 Sep 2014, Jiang Liu wrote:
    >> diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
    >> /* Create mapping */
    >> - virq = irq_create_mapping(domain, hwirq);
    >> +#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
    >> + if (domain->ops->alloc)
    >> + virq = irq_domain_alloc_irqs(domain, -1, 1, NUMA_NO_NODE,
    >> + irq_data);
    >> + else
    >> +#endif
    >> + virq = irq_create_mapping(domain, hwirq);
    >
    > I'd prefer to get rid of the #ifdef CONFIG...s in the code. So this
    > can be written:
    >
    > if (irq_domain_has_hierarchy(domain))
    > virq = irq_domain_alloc_irqs(domain, -1, 1, NUMA_NO_NODE,
    > irq_data);
    > else
    > virq = irq_create_mapping(domain, hwirq);
    Sure, will kill the ifdef.

    >
    >
    >> if (!virq)
    >> return virq;
    >>
    >> @@ -540,7 +542,11 @@ unsigned int irq_find_mapping(struct irq_domain *domain,
    >> return 0;
    >>
    >> if (hwirq < domain->revmap_direct_max_irq) {
    >> +#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
    >> + data = irq_domain_get_irq_data(domain, hwirq);
    >> +#else
    >> data = irq_get_irq_data(hwirq);
    >> +#endif
    >
    > Similar here. Make irq_domain_get_irq_data() map to irq_get_irq_data() for
    > the non hierarchy mode so you end up with a single line:
    >
    > - data = irq_get_irq_data(hwirq);
    > + data = irq_domain_get_irq_data(domain, hwirq);
    Sure.

    >> +#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
    >> +/**
    >> + * irq_domain_alloc_irqs - Allocate IRQs from domain
    >> + * @domain: domain to allocate from
    >> + * @irq_base: allocate specified IRQ nubmer if irq_base >= 0
    >> + * @nr_irqs: number of IRQs to allocate
    >> + * @node: NUMA node id for memory allocation
    >> + * @arg: domain specific argument
    >> + * @realloc: IRQ descriptors have already been allocated if true
    >> + *
    >> + * Allocate IRQ numbers and initialized all data structures to support
    >> + * hiearchy IRQ domains.
    >> + * Parameter @realloc is mainly to support legacy IRQs.
    >
    > What's the issue with the legacy irqs? So this has the interrupt
    > descriptors allocated already. Are they already wired up for serving
    > interrupts and what's the state of those lines?
    Function arch_early_ioapic_init() will allocate irq descriptors and
    irq_cfg structures for all legacy IRQ for three purposes:
    1) To support ISA IRQs managed by 8259.
    2) To reserve vectors on all CPUs for legacy IRQs
    3) Prepare data structures to support pre_init_apic_IRQ0().
    We will kill pre_init_apic_IRQ0() soon, so item 3 above won't be needed
    anymore.

    When __irq_domain_alloc_irqs() is called, only irq descriptor and
    irq_cfg have been allocated, but the interrupt controller hardware
    should be untouched yet.

    >
    >> + * Returns error code or allocated IRQ number
    >
    > Can you please add some documentation how the hierarchical allocation
    > is supposed to work and how the domains are connected. That should
    > probably go to Documentation/IRQ-domains.txt.
    Sure, I will do my best to add documentations for it.
    >
    > Other than that this looks pretty good! Nice work!
    Thanks!
    Gerry
    >
    > Thanks,
    >
    > tglx
    >


    \
     
     \ /
      Last update: 2014-09-18 10:01    [W:4.130 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site