arm: remove interrupt nesting by ipi_preempt()/ipi_hardclock()
This was needed when intr_ipi_dispatch() was called by hardware-specific IPI interrupt routines which didn't save the trap frame. Now all ARM interrupts pass through INTRNG which will have already saved the trap frame and disabled preemption. Remove the conditional trapframe/argument passing to the handlers. Reviewed by: andrew Differential Revision: https://reviews.freebsd.org/D37938
This commit is contained in:
parent
d09a955a60
commit
c7e5e9dc41
@ -143,7 +143,6 @@ intr_ipi_lookup(u_int ipi)
|
||||
void
|
||||
intr_ipi_dispatch(u_int ipi, struct trapframe *tf)
|
||||
{
|
||||
void *arg;
|
||||
struct intr_ipi *ii;
|
||||
|
||||
ii = intr_ipi_lookup(ipi);
|
||||
@ -152,12 +151,7 @@ intr_ipi_dispatch(u_int ipi, struct trapframe *tf)
|
||||
|
||||
intr_ipi_increment_count(ii->ii_count, PCPU_GET(cpuid));
|
||||
|
||||
/*
|
||||
* Supply ipi filter with trapframe argument
|
||||
* if none is registered.
|
||||
*/
|
||||
arg = ii->ii_handler_arg != NULL ? ii->ii_handler_arg : tf;
|
||||
ii->ii_handler(arg);
|
||||
ii->ii_handler(ii->ii_handler_arg);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -282,41 +282,17 @@ ipi_stop(void *dummy __unused)
|
||||
static void
|
||||
ipi_preempt(void *arg)
|
||||
{
|
||||
struct trapframe *oldframe;
|
||||
struct thread *td;
|
||||
|
||||
critical_enter();
|
||||
td = curthread;
|
||||
td->td_intr_nesting_level++;
|
||||
oldframe = td->td_intr_frame;
|
||||
td->td_intr_frame = (struct trapframe *)arg;
|
||||
|
||||
CTR1(KTR_SMP, "%s: IPI_PREEMPT", __func__);
|
||||
sched_preempt(td);
|
||||
|
||||
td->td_intr_frame = oldframe;
|
||||
td->td_intr_nesting_level--;
|
||||
critical_exit();
|
||||
sched_preempt(curthread);
|
||||
}
|
||||
|
||||
static void
|
||||
ipi_hardclock(void *arg)
|
||||
{
|
||||
struct trapframe *oldframe;
|
||||
struct thread *td;
|
||||
|
||||
critical_enter();
|
||||
td = curthread;
|
||||
td->td_intr_nesting_level++;
|
||||
oldframe = td->td_intr_frame;
|
||||
td->td_intr_frame = (struct trapframe *)arg;
|
||||
|
||||
CTR1(KTR_SMP, "%s: IPI_HARDCLOCK", __func__);
|
||||
hardclockintr();
|
||||
|
||||
td->td_intr_frame = oldframe;
|
||||
td->td_intr_nesting_level--;
|
||||
critical_exit();
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -917,7 +917,6 @@ intr_ipi_lookup(u_int ipi)
|
||||
void
|
||||
intr_ipi_dispatch(u_int ipi, struct trapframe *tf)
|
||||
{
|
||||
void *arg;
|
||||
struct intr_ipi *ii;
|
||||
|
||||
ii = intr_ipi_lookup(ipi);
|
||||
@ -926,12 +925,7 @@ intr_ipi_dispatch(u_int ipi, struct trapframe *tf)
|
||||
|
||||
intr_ipi_increment_count(ii->ii_count, PCPU_GET(cpuid));
|
||||
|
||||
/*
|
||||
* Supply ipi filter with trapframe argument
|
||||
* if none is registered.
|
||||
*/
|
||||
arg = ii->ii_handler_arg != NULL ? ii->ii_handler_arg : tf;
|
||||
ii->ii_handler(arg);
|
||||
ii->ii_handler(ii->ii_handler_arg);
|
||||
}
|
||||
|
||||
#ifdef notyet
|
||||
|
Loading…
Reference in New Issue
Block a user