Author: marcel
Date: Sun Mar 16 20:21:40 2014
New Revision: 263248
URL: http://svnweb.freebsd.org/changeset/base/263248

Log:
  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().

Modified:
  head/sys/ia64/ia64/clock.c
  head/sys/ia64/ia64/interrupt.c

Modified: head/sys/ia64/ia64/clock.c
==============================================================================
--- head/sys/ia64/ia64/clock.c  Sun Mar 16 16:33:25 2014        (r263247)
+++ head/sys/ia64/ia64/clock.c  Sun Mar 16 20:21:40 2014        (r263248)
@@ -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 x
        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);
 }
 

Modified: head/sys/ia64/ia64/interrupt.c
==============================================================================
--- head/sys/ia64/ia64/interrupt.c      Sun Mar 16 16:33:25 2014        
(r263247)
+++ head/sys/ia64/ia64/interrupt.c      Sun Mar 16 20:21:40 2014        
(r263248)
@@ -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:
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to