diff options
author | marcel <marcel@FreeBSD.org> | 2014-03-16 20:21:40 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2014-03-16 20:21:40 +0000 |
commit | 2dbac64587c4ebc6ee985b331fd8aa6b2ab8bbfe (patch) | |
tree | ea2da9fcac12793d607db35fdbc45a0805be90b1 | |
parent | 47e104941c2677336a54eb7f5cb62defe5cb3c2e (diff) | |
download | FreeBSD-src-2dbac64587c4ebc6ee985b331fd8aa6b2ab8bbfe.zip FreeBSD-src-2dbac64587c4ebc6ee985b331fd8aa6b2ab8bbfe.tar.gz |
In intr_event_handle() we already save and set td_intr_frame, so
don't do it also in ia64_handle_intr(). With ia64_handle_intr()
not saving and setting td_intr_frame, make sure to do it for
clock interrupts in ia64_ih_clock().
-rw-r--r-- | sys/ia64/ia64/clock.c | 7 | ||||
-rw-r--r-- | sys/ia64/ia64/interrupt.c | 6 |
2 files changed, 6 insertions, 7 deletions
diff --git a/sys/ia64/ia64/clock.c b/sys/ia64/ia64/clock.c index 37a99a1..68dc29b 100644 --- a/sys/ia64/ia64/clock.c +++ b/sys/ia64/ia64/clock.c @@ -76,6 +76,7 @@ static u_int ia64_ih_clock(struct thread *td, u_int xiv, struct trapframe *tf) { struct eventtimer *et; + struct trapframe *stf; uint64_t itc, load; uint32_t mode; @@ -96,8 +97,12 @@ ia64_ih_clock(struct thread *td, u_int xiv, struct trapframe *tf) ia64_srlz_d(); et = &ia64_clock_et; - if (et->et_active) + if (et->et_active) { + stf = td->td_intr_frame; + td->td_intr_frame = tf; et->et_event_cb(et, et->et_arg); + td->td_intr_frame = stf; + } return (1); } diff --git a/sys/ia64/ia64/interrupt.c b/sys/ia64/ia64/interrupt.c index c2372b2..9d66f4e 100644 --- a/sys/ia64/ia64/interrupt.c +++ b/sys/ia64/ia64/interrupt.c @@ -301,7 +301,6 @@ void ia64_handle_intr(struct trapframe *tf) { struct thread *td; - struct trapframe *stf; u_int xiv; td = curthread; @@ -316,9 +315,6 @@ ia64_handle_intr(struct trapframe *tf) } critical_enter(); - stf = td->td_intr_frame; - td->td_intr_frame = tf; - do { CTR2(KTR_INTR, "INTR: ITC=%u, XIV=%u", (u_int)tf->tf_special.ifa, xiv); @@ -329,8 +325,6 @@ ia64_handle_intr(struct trapframe *tf) xiv = ia64_get_ivr(); ia64_srlz_d(); } while (xiv != 15); - - td->td_intr_frame = stf; critical_exit(); out: |