• Mark Rutland's avatar
    irq: add a (temporary) CONFIG_HANDLE_DOMAIN_IRQ_IRQENTRY · 2fe35f8e
    Mark Rutland authored
    Going forward we want architecture/entry code to perform all the
    necessary work to enter/exit IRQ context, with irqchip code merely
    handling the mapping of the interrupt to any handler(s). Among other
    reasons, this is necessary to consistently fix some longstanding issues
    with the ordering of lockdep/RCU/tracing instrumentation which many
    architectures get wrong today in their entry code.
    
    Importantly, rcu_irq_{enter,exit}() must be called precisely once per
    IRQ exception, so that rcu_is_cpu_rrupt_from_idle() can correctly
    identify when an interrupt was taken from an idle context which must be
    explicitly preempted. Currently handle_domain_irq() calls
    rcu_irq_{enter,exit}() via irq_{enter,exit}(), but entry code needs to
    be able to call rcu_irq_{enter,exit}() earlier for correct ordering
    across lockdep/RCU/tracing updates for sequences such as:
    
      lockdep_hardirqs_off(CALLER_ADDR0);
      rcu_irq_enter();
      trace_hardirqs_off_finish();
    
    To permit each architecture to be converted to the new style in turn,
    this patch adds a new CONFIG_HANDLE_DOMAIN_IRQ_IRQENTRY selected by all
    current users of HANDLE_DOMAIN_IRQ, which gates the existing behaviour.
    When CONFIG_HANDLE_DOMAIN_IRQ_IRQENTRY is not selected,
    handle_domain_irq() requires entry code to perform the
    irq_{enter,exit}() work, with an explicit check for this matching the
    style of handle_domain_nmi().
    
    Subsequent patches will:
    
    1) Add the necessary IRQ entry accounting to each architecture in turn,
       dropping CONFIG_HANDLE_DOMAIN_IRQ_IRQENTRY from that architecture's
       Kconfig.
    
    2) Remove CONFIG_HANDLE_DOMAIN_IRQ_IRQENTRY once it is no longer
       selected.
    
    3) Convert irqchip drivers to consistently use
       generic_handle_domain_irq() rather than handle_domain_irq().
    
    4) Remove handle_domain_irq() and CONFIG_HANDLE_DOMAIN_IRQ.
    
    ... which should leave us with a clear split of responsiblity across the
    entry and irqchip code, making it possible to perform additional
    cleanups and fixes for the aforementioned longstanding issues with entry
    code.
    
    There should be no functional change as a result of this patch.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    2fe35f8e
Kconfig 62.2 KB