lkml.org 
[lkml]   [2023]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v5 04/34] x86/traps: add external_interrupt() to dispatch external interrupts
    On Mon, Mar 06, 2023 at 06:39:16PM -0800, Xin Li wrote:

    > +#ifndef CONFIG_X86_LOCAL_APIC
    > +/*
    > + * Used when local APIC is not compiled into the kernel, but
    > + * external_interrupt() needs dispatch_spurious_interrupt().
    > + */
    > +DEFINE_IDTENTRY_IRQ(spurious_interrupt)
    > +{
    > + pr_info("Spurious interrupt (vector 0x%x) on CPU#%d, should never happen.\n",
    > + vector, smp_processor_id());
    > +}
    > +#endif
    > +
    > +/*
    > + * External interrupt dispatch function.
    > + *
    > + * Until/unless dispatch_common_interrupt() can be taught to deal with the
    > + * special system vectors, split the dispatch.
    > + *
    > + * Note: dispatch_common_interrupt() already deals with IRQ_MOVE_CLEANUP_VECTOR.
    > + */
    > +int external_interrupt(struct pt_regs *regs, unsigned int vector)
    > +{
    > + unsigned int sysvec = vector - FIRST_SYSTEM_VECTOR;
    > +
    > + if (vector < FIRST_EXTERNAL_VECTOR) {
    > + pr_err("invalid external interrupt vector %d\n", vector);
    > + return -EINVAL;
    > + }
    > +
    > + if (sysvec < NR_SYSTEM_VECTORS) {
    > + if (system_interrupt_handlers[sysvec])
    > + system_interrupt_handlers[sysvec](regs);
    > + else
    > + dispatch_spurious_interrupt(regs, vector);

    ISTR suggesting you can get rid of this branch if you stuff
    system_interrupt_handlers[] with dispatch_spurious_interrupt instead of
    NULL.

    > + } else {
    > + dispatch_common_interrupt(regs, vector);
    > + }
    > +
    > + return 0;
    > +}

    \
     
     \ /
      Last update: 2023-03-27 01:09    [W:4.194 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site