DragonFly kernel List (threaded) for 2007-07
DragonFly BSD
DragonFly kernel List (threaded) for 2007-07
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: Did the hdac patch work? (Re: Branching CVS for 1.10 on wednesday)


From: "Simon 'corecode' Schubert" <corecode@xxxxxxxxxxxx>
Date: Fri, 20 Jul 2007 11:53:22 +0200

Simon 'corecode' Schubert wrote:
Matthew Dillon wrote:
Simon, did that hdac patch work?

sorry, didn't have time yet to try out. will do so in a couple of minutes.

Okay, I produced another patch which seems to be working. It's kind of hackish, but you get my point.


cheers
 simon

--
Serve - BSD     +++  RENT this banner advert  +++    ASCII Ribbon   /"\
Work - Mac      +++  space for low €€€ NOW!1  +++      Campaign     \ /
Party Enjoy Relax   |   http://dragonflybsd.org      Against  HTML   \
Dude 2c 2 the max   !   http://golden-apple.biz       Mail + News   / \
Index: kern/kern_intr.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_intr.c,v
retrieving revision 1.49
diff -u -p -r1.49 kern_intr.c
--- kern/kern_intr.c	1 May 2007 23:53:51 -0000	1.49
+++ kern/kern_intr.c	20 Jul 2007 08:58:22 -0000
@@ -351,6 +351,9 @@ 		break;
 	}
 	if (rec0 == NULL)
 	    info->i_mplock_required = 0;
+
+	while (info->i_running & 2)
+		tsleep(info, 0, "wtintr", 1);
     }
 
     crit_exit();
@@ -497,8 +500,8 @@ 	    report_stray_interrupt(intr, info);
 	} else {
 #ifdef SMP
 	    if (info->i_thread.td_gd == mycpu) {
-		if (info->i_running == 0) {
-		    info->i_running = 1;
+		if (info->i_running & 1 == 0) {
+		    info->i_running |= 1;
 		    if (info->i_state != ISTATE_LIVELOCKED)
 			lwkt_schedule(&info->i_thread); /* MIGHT PREEMPT */
 		}
@@ -507,8 +510,8 @@ 		lwkt_send_ipiq(info->i_thread.td_gd, 
 				sched_ithd_remote, (void *)intr);
 	    }
 #else
-	    if (info->i_running == 0) {
-		info->i_running = 1;
+	    if ((info->i_running & 1) == 0) {
+		info->i_running |= 1;
 		if (info->i_state != ISTATE_LIVELOCKED)
 		    lwkt_schedule(&info->i_thread); /* MIGHT PREEMPT */
 	    }
@@ -782,7 +785,7 @@ 	 * FAST and SLOW designated service rou
 	 */
 	if (info->i_running) {
 	    ++ill_count;
-	    info->i_running = 0;
+	    info->i_running = 2;
 
 	    if (*list == NULL)
 		report_stray_interrupt(intr, info);
@@ -796,6 +799,7 @@ 		} else {
 		    rec->handler(rec->argument, NULL);
 		}
 	    }
+	    info->i_running &= 1;
 	}
 
 	/*


[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]