Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F156578480
D35406.id106644.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
9 KB
Referenced Files
None
Subscribers
None
D35406.id106644.diff
View Options
Index: sys/x86/include/intr_machdep.h
===================================================================
--- sys/x86/include/intr_machdep.h
+++ sys/x86/include/intr_machdep.h
@@ -84,7 +84,6 @@
void (*pic_eoi_source)(struct intsrc *);
void (*pic_enable_intr)(struct intsrc *);
void (*pic_disable_intr)(struct intsrc *);
- int (*pic_vector)(struct intsrc *);
int (*pic_source_pending)(struct intsrc *);
void (*pic_suspend)(struct pic *);
void (*pic_resume)(struct pic *, bool suspend_cancelled);
@@ -149,11 +148,12 @@
int intr_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
int intr_describe(struct intsrc *isrc, void *ih, const char *descr);
-void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame);
+void intr_execute_handlers(u_int vector, struct intsrc *isrc,
+ struct trapframe *frame);
u_int intr_next_cpu(int domain);
struct intsrc *intr_lookup_source(int vector);
int intr_register_pic(struct pic *pic);
-int intr_register_source(struct intsrc *isrc);
+int intr_register_source(u_int vector, struct intsrc *isrc);
int intr_remove_handler(void *cookie);
void intr_resume(bool suspend_cancelled);
void intr_suspend(void);
Index: sys/x86/isa/atpic.c
===================================================================
--- sys/x86/isa/atpic.c
+++ sys/x86/isa/atpic.c
@@ -102,7 +102,6 @@
.pic_eoi_source = (eoi), \
.pic_enable_intr = atpic_enable_intr, \
.pic_disable_intr = atpic_disable_intr, \
- .pic_vector = atpic_vector, \
.pic_source_pending = atpic_source_pending, \
.pic_resume = atpic_resume, \
.pic_config_intr = atpic_config_intr, \
@@ -237,7 +236,7 @@
for (i = 0, ai = atintrs; i < NUM_ISA_IRQS; i++, ai++) {
if (i == ICU_SLAVEID)
continue;
- intr_register_source(&ai->at_intsrc);
+ intr_register_source(i, &ai->at_intsrc);
}
}
@@ -550,7 +549,7 @@
if ((isr & IRQ_MASK(7)) == 0)
return;
}
- intr_execute_handlers(isrc, frame);
+ intr_execute_handlers(atpic_vector(isrc), isrc, frame);
}
#ifdef DEV_ISA
Index: sys/x86/x86/intr_machdep.c
===================================================================
--- sys/x86/x86/intr_machdep.c
+++ sys/x86/x86/intr_machdep.c
@@ -111,7 +111,7 @@
static int intr_pic_registered(struct pic *pic);
static void intrcnt_setname(const char *name, int index);
static void intrcnt_updatename(struct intsrc *is);
-static void intrcnt_register(struct intsrc *is);
+static void intrcnt_register(u_int vector, struct intsrc *is);
/*
* SYSINIT levels for SI_SUB_INTR:
@@ -219,12 +219,11 @@
* called.
*/
int
-intr_register_source(struct intsrc *isrc)
+intr_register_source(u_int vector, struct intsrc *isrc)
{
- int error, vector;
+ int error;
KASSERT(intr_pic_registered(isrc->is_pic), ("unregistered PIC"));
- vector = isrc->is_pic->pic_vector(isrc);
KASSERT(vector < num_io_irqs, ("IRQ %d too large (%u irqs)", vector,
num_io_irqs));
if (interrupt_sources[vector] != NULL)
@@ -241,7 +240,7 @@
intr_event_destroy(isrc->is_event);
return (EEXIST);
}
- intrcnt_register(isrc);
+ intrcnt_register(vector, isrc);
interrupt_sources[vector] = isrc;
isrc->is_handlers = 0;
sx_xunlock(&intrsrc_lock);
@@ -319,10 +318,10 @@
}
void
-intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame)
+intr_execute_handlers(u_int vector, struct intsrc *isrc,
+ struct trapframe *frame)
{
struct intr_event *ie;
- int vector;
/*
* We count software interrupts when we process them. The
@@ -339,7 +338,6 @@
* XXX: We assume that IRQ 0 is only used for the ISA timer
* device (clk).
*/
- vector = isrc->is_pic->pic_vector(isrc);
if (vector == 0)
clkintr_pending = 1;
@@ -437,7 +435,7 @@
}
static void
-intrcnt_register(struct intsrc *is)
+intrcnt_register(u_int vector, struct intsrc *is)
{
char straystr[MAXCOMLEN + 1];
@@ -446,8 +444,7 @@
MPASS(intrcnt_index + 2 <= nintrcnt);
is->is_index = intrcnt_index;
intrcnt_index += 2;
- snprintf(straystr, MAXCOMLEN + 1, "stray irq%d",
- is->is_pic->pic_vector(is));
+ snprintf(straystr, MAXCOMLEN + 1, "stray irq%u", vector);
intrcnt_updatename(is);
is->is_count = &intrcnt[is->is_index];
intrcnt_setname(straystr, is->is_index + 1);
Index: sys/x86/x86/io_apic.c
===================================================================
--- sys/x86/x86/io_apic.c
+++ sys/x86/x86/io_apic.c
@@ -119,7 +119,6 @@
static void ioapic_eoi_source(struct intsrc *isrc);
static void ioapic_enable_intr(struct intsrc *isrc);
static void ioapic_disable_intr(struct intsrc *isrc);
-static int ioapic_vector(struct intsrc *isrc);
static int ioapic_source_pending(struct intsrc *isrc);
static int ioapic_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
@@ -136,7 +135,6 @@
.pic_eoi_source = ioapic_eoi_source,
.pic_enable_intr = ioapic_enable_intr,
.pic_disable_intr = ioapic_disable_intr,
- .pic_vector = ioapic_vector,
.pic_source_pending = ioapic_source_pending,
.pic_suspend = NULL,
.pic_resume = ioapic_resume,
@@ -530,15 +528,6 @@
}
}
-static int
-ioapic_vector(struct intsrc *isrc)
-{
- struct ioapic_intsrc *pin;
-
- pin = (struct ioapic_intsrc *)isrc;
- return (pin->io_irq);
-}
-
static int
ioapic_source_pending(struct intsrc *isrc)
{
@@ -951,7 +940,7 @@
io = (struct ioapic *)pic;
for (i = 0, pin = io->io_pins; i < io->io_numintr; i++, pin++) {
if (pin->io_irq >= 0)
- intr_register_source(&pin->io_intsrc);
+ intr_register_source(pin->io_irq, &pin->io_intsrc);
}
}
Index: sys/x86/x86/local_apic.c
===================================================================
--- sys/x86/x86/local_apic.c
+++ sys/x86/x86/local_apic.c
@@ -1288,14 +1288,15 @@
lapic_handle_intr(int vector, struct trapframe *frame)
{
struct intsrc *isrc;
+ u_int irq;
kasan_mark(frame, sizeof(*frame), sizeof(*frame), 0);
kmsan_mark(&vector, sizeof(vector), KMSAN_STATE_INITED);
kmsan_mark(frame, sizeof(*frame), KMSAN_STATE_INITED);
- isrc = intr_lookup_source(apic_idt_to_irq(PCPU_GET(apic_id),
- vector));
- intr_execute_handlers(isrc, frame);
+ irq = apic_idt_to_irq(PCPU_GET(apic_id), vector);
+ isrc = intr_lookup_source(irq);
+ intr_execute_handlers(irq, isrc, frame);
}
void
Index: sys/x86/x86/msi.c
===================================================================
--- sys/x86/x86/msi.c
+++ sys/x86/x86/msi.c
@@ -132,7 +132,6 @@
static void msi_eoi_source(struct intsrc *isrc);
static void msi_enable_intr(struct intsrc *isrc);
static void msi_disable_intr(struct intsrc *isrc);
-static int msi_vector(struct intsrc *isrc);
static int msi_source_pending(struct intsrc *isrc);
static int msi_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
@@ -144,7 +143,6 @@
.pic_eoi_source = msi_eoi_source,
.pic_enable_intr = msi_enable_intr,
.pic_disable_intr = msi_disable_intr,
- .pic_vector = msi_vector,
.pic_source_pending = msi_source_pending,
.pic_suspend = NULL,
.pic_resume = NULL,
@@ -217,14 +215,6 @@
apic_disable_vector(msi->msi_cpu, msi->msi_vector);
}
-static int
-msi_vector(struct intsrc *isrc)
-{
- struct msi_intsrc *msi = (struct msi_intsrc *)isrc;
-
- return (msi->msi_irq);
-}
-
static int
msi_source_pending(struct intsrc *isrc)
{
@@ -371,7 +361,7 @@
msi = malloc(sizeof(struct msi_intsrc), M_MSI, M_WAITOK | M_ZERO);
msi->msi_intsrc.is_pic = &msi_pic;
msi->msi_irq = irq;
- intr_register_source(&msi->msi_intsrc);
+ intr_register_source(irq, &msi->msi_intsrc);
nexus_add_irq(irq);
}
Index: sys/x86/xen/xen_intr.c
===================================================================
--- sys/x86/xen/xen_intr.c
+++ sys/x86/xen/xen_intr.c
@@ -137,7 +137,6 @@
static void xen_intr_eoi_source(struct intsrc *isrc);
static void xen_intr_enable_intr(struct intsrc *isrc);
static void xen_intr_disable_intr(struct intsrc *isrc);
-static int xen_intr_vector(struct intsrc *isrc);
static int xen_intr_source_pending(struct intsrc *isrc);
static int xen_intr_config_intr(struct intsrc *isrc,
enum intr_trigger trig, enum intr_polarity pol);
@@ -152,7 +151,6 @@
.pic_eoi_source = xen_intr_eoi_source,
.pic_enable_intr = xen_intr_enable_intr,
.pic_disable_intr = xen_intr_disable_intr,
- .pic_vector = xen_intr_vector,
.pic_source_pending = xen_intr_source_pending,
.pic_suspend = xen_intr_suspend,
.pic_resume = xen_intr_resume,
@@ -329,7 +327,7 @@
isrc->xi_intsrc.is_pic = &xen_intr_pic;
isrc->xi_vector = vector;
isrc->xi_type = type;
- intr_register_source(&isrc->xi_intsrc);
+ intr_register_source(vector, &isrc->xi_intsrc);
mtx_lock(&xen_intr_isrc_lock);
return (isrc);
@@ -568,7 +566,8 @@
("Received unexpected event on vCPU#%d, event bound to vCPU#%d",
PCPU_GET(cpuid), isrc->xi_cpu));
- intr_execute_handlers(&isrc->xi_intsrc, trap_frame);
+ intr_execute_handlers(isrc->xi_vector,
+ &isrc->xi_intsrc, trap_frame);
/*
* If this is the final port processed,
@@ -789,22 +788,6 @@
evtchn_mask_port(isrc->xi_port);
}
-/**
- * Determine the global interrupt vector number for
- * a Xen interrupt source.
- *
- * \param isrc The interrupt source to query.
- *
- * \return The vector number corresponding to the given interrupt source.
- */
-static int
-xen_intr_vector(struct intsrc *base_isrc)
-{
- struct xenisrc *isrc = (struct xenisrc *)base_isrc;
-
- return (isrc->xi_vector);
-}
-
/**
* Determine whether or not interrupt events are pending on the
* the given interrupt source.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, May 15, 7:53 PM (7 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33096780
Default Alt Text
D35406.id106644.diff (9 KB)
Attached To
Mode
D35406: intr/x86: remove ->pic_vector() from x86 interrupt framework
Attached
Detach File
Event Timeline
Log In to Comment