public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] need_resched abstraction
@ 2002-01-15  9:13 David Howells
  2002-01-15  9:29 ` Jeff Garzik
  0 siblings, 1 reply; 5+ messages in thread
From: David Howells @ 2002-01-15  9:13 UTC (permalink / raw)
  To: torvalds; +Cc: dhowells, linux-kernel


The attached patch abstracts access to need_resched in as many places as is
reasonable. It makes two replacements:

  (1) testing current->need_resched:

	if (current->need_resched) ...

      is replaced with:

	if (need_yield()) ...

  (2) testing current->need_resched and immediately scheduling if set:

	if (current->need_resched)
		schedule();

      is replaced with:

	yield_point();

      [since yield() is already defined to be something else].

David

_______________________________________________________________________________
diff -uNr linux-2.5.2/Documentation/DocBook/kernel-hacking.tmpl linux-yield-252/Documentation/DocBook/kernel-hacking.tmpl
--- linux-2.5.2/Documentation/DocBook/kernel-hacking.tmpl	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/Documentation/DocBook/kernel-hacking.tmpl	Tue Jan 15 08:40:37 2002
@@ -371,8 +371,7 @@
   </para>
 
   <programlisting>
-if (current-&gt;need_resched)
-        schedule(); /* Will sleep */ 
+yield_point(); /* Will sleep */ 
   </programlisting>
 
   <para>
diff -uNr linux-2.5.2/arch/arm/kernel/process.c linux-yield-252/arch/arm/kernel/process.c
--- linux-2.5.2/arch/arm/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/arm/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -91,7 +91,7 @@
 		if (!idle)
 			idle = arch_idle;
 		leds_event(led_idle_start);
-		while (!current->need_resched)
+		while (!need_yield())
 			idle();
 		leds_event(led_idle_end);
 		schedule();
diff -uNr linux-2.5.2/arch/i386/kernel/apm.c linux-yield-252/arch/i386/kernel/apm.c
--- linux-2.5.2/arch/i386/kernel/apm.c	Tue Jan 15 08:16:48 2002
+++ linux-yield-252/arch/i386/kernel/apm.c	Tue Jan 15 08:40:37 2002
@@ -766,14 +766,14 @@
 
 	start_idle = jiffies;
 	while (1) {
-		if (!current->need_resched) {
+		if (!need_yield()) {
 			if (jiffies - start_idle < HARD_IDLE_TIMEOUT) {
 				if (!current_cpu_data.hlt_works_ok)
 					continue;
 				if (hlt_counter)
 					continue;
 				__cli();
-				if (!current->need_resched)
+				if (!need_yield())
 					safe_halt();
 				else
 					__sti();
diff -uNr linux-2.5.2/arch/i386/kernel/process.c linux-yield-252/arch/i386/kernel/process.c
--- linux-2.5.2/arch/i386/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/i386/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -81,7 +81,7 @@
 {
 	if (current_cpu_data.hlt_works_ok && !hlt_counter) {
 		__cli();
-		if (!current->need_resched)
+		if (!need_yield())
 			safe_halt();
 		else
 			__sti();
@@ -127,7 +127,7 @@
 		void (*idle)(void) = pm_idle;
 		if (!idle)
 			idle = default_idle;
-		while (!current->need_resched)
+		while (!need_yield())
 			idle();
 		schedule();
 		check_pgt_cache();
diff -uNr linux-2.5.2/arch/i386/math-emu/fpu_entry.c linux-yield-252/arch/i386/math-emu/fpu_entry.c
--- linux-2.5.2/arch/i386/math-emu/fpu_entry.c	Tue Jan 15 08:16:48 2002
+++ linux-yield-252/arch/i386/math-emu/fpu_entry.c	Tue Jan 15 08:40:37 2002
@@ -559,7 +559,7 @@
   RE_ENTRANT_CHECK_ON;
 #endif /* DEBUG */
 
-  if (FPU_lookahead && !current->need_resched)
+  if (FPU_lookahead && !need_yield())
     {
       FPU_ORIG_EIP = FPU_EIP - code_base;
       if ( valid_prefix(&byte1, (u_char **)&FPU_EIP,
diff -uNr linux-2.5.2/arch/ia64/kernel/process.c linux-yield-252/arch/ia64/kernel/process.c
--- linux-2.5.2/arch/ia64/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/ia64/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -117,10 +117,10 @@
 
 	while (1) {
 #ifdef CONFIG_SMP
-		if (!current->need_resched)
+		if (!need_yield())
 			min_xtp();
 #endif
-		while (!current->need_resched)
+		while (!need_yield())
 			continue;
 #ifdef CONFIG_SMP
 		normal_xtp();
diff -uNr linux-2.5.2/arch/m68k/kernel/process.c linux-yield-252/arch/m68k/kernel/process.c
--- linux-2.5.2/arch/m68k/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/m68k/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -56,7 +56,7 @@
 static void default_idle(void)
 {
 	while(1) {
-		if (!current->need_resched)
+		if (!need_yield())
 #if defined(MACH_ATARI_ONLY) && !defined(CONFIG_HADES)
 			/* block out HSYNC on the atari (falcon) */
 			__asm__("stop #0x2200" : : : "cc");
diff -uNr linux-2.5.2/arch/mips/kernel/process.c linux-yield-252/arch/mips/kernel/process.c
--- linux-2.5.2/arch/mips/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/mips/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -39,7 +39,7 @@
 	init_idle();
 
 	while (1) {
-		while (!current->need_resched)
+		while (!need_yield())
 			if (cpu_wait)
 				(*cpu_wait)();
 		schedule();
diff -uNr linux-2.5.2/arch/mips/math-emu/cp1emu.c linux-yield-252/arch/mips/math-emu/cp1emu.c
--- linux-2.5.2/arch/mips/math-emu/cp1emu.c	Tue Jan 15 08:16:51 2002
+++ linux-yield-252/arch/mips/math-emu/cp1emu.c	Tue Jan 15 08:40:37 2002
@@ -1674,8 +1674,7 @@
 
 	oldepc = xcp->cp0_epc;
 	do {
-		if (current->need_resched)
-			schedule();
+		yield_point();
 
 		prevepc = xcp->cp0_epc;
 		insn = mips_get_word(xcp, REG_TO_VA(xcp->cp0_epc), &err);
diff -uNr linux-2.5.2/arch/mips64/kernel/process.c linux-yield-252/arch/mips64/kernel/process.c
--- linux-2.5.2/arch/mips64/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/mips64/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -35,7 +35,7 @@
 	init_idle();
 	current->nice = 20;
 	while (1) {
-		while (!current->need_resched)
+		while (!need_yield())
 			if (wait_available)
 				__asm__("wait");
 		schedule();
diff -uNr linux-2.5.2/arch/mips64/math-emu/cp1emu.c linux-yield-252/arch/mips64/math-emu/cp1emu.c
--- linux-2.5.2/arch/mips64/math-emu/cp1emu.c	Tue Jan 15 08:17:01 2002
+++ linux-yield-252/arch/mips64/math-emu/cp1emu.c	Tue Jan 15 08:40:37 2002
@@ -1707,8 +1707,7 @@
 
 	oldepc = xcp->cp0_epc;
 	do {
-		if (current->need_resched)
-			schedule();
+		yield_point();
 
 		prevepc = xcp->cp0_epc;
 		insn = mips_get_word(xcp, REG_TO_VA(xcp->cp0_epc), &err);
diff -uNr linux-2.5.2/arch/parisc/kernel/process.c linux-yield-252/arch/parisc/kernel/process.c
--- linux-2.5.2/arch/parisc/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/parisc/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -73,7 +73,7 @@
 	current->nice = 20;
 
 	while (1) {
-		while (!current->need_resched) {
+		while (!need_yield()) {
 		}
 		schedule();
 		check_pgt_cache();
diff -uNr linux-2.5.2/arch/ppc/kernel/idle.c linux-yield-252/arch/ppc/kernel/idle.c
--- linux-2.5.2/arch/ppc/kernel/idle.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/ppc/kernel/idle.c	Tue Jan 15 08:40:37 2002
@@ -71,10 +71,10 @@
 			}
 		}
 #endif
-		if (do_power_save && !current->need_resched)
+		if (do_power_save && !need_yield())
 			power_save();
 
-		if (current->need_resched) {
+		if (need_yield()) {
 			schedule();
 			check_pgt_cache();
 		}
@@ -150,7 +150,7 @@
 
 	if ( atomic_read(&zero_cache_sz) >= zero_cache_water[0] )
 		return;
-	while ( (atomic_read(&zero_cache_sz) < zero_cache_water[1]) && (!current->need_resched) )
+	while ( (atomic_read(&zero_cache_sz) < zero_cache_water[1]) && !need_yield() )
 	{
 		/*
 		 * Mark a page as reserved so we can mess with it
@@ -161,8 +161,7 @@
 		if ( !pageptr )
 			return;
 		
-		if ( current->need_resched )
-			schedule();
+		yield_point();
 		
 		/*
 		 * Make the page no cache so we don't blow our cache with 0's
@@ -181,8 +180,7 @@
 		 */
 		for ( bytecount = 0; bytecount < PAGE_SIZE ; bytecount += 4 )
 		{
-			if ( current->need_resched )
-				schedule();
+			yield_point();
 			*(unsigned long *)(bytecount + pageptr) = 0;
 		}
 		
@@ -243,7 +241,7 @@
 	 *  -- Cort
 	 */
 	_nmask_and_or_msr(MSR_EE, 0);
-	if (!current->need_resched)
+	if (!need_yield())
 	{
 		asm("mfspr %0,1008" : "=r" (hid0) :);
 		hid0 &= ~(HID0_NAP | HID0_SLEEP | HID0_DOZE);
diff -uNr linux-2.5.2/arch/s390/kernel/process.c linux-yield-252/arch/s390/kernel/process.c
--- linux-2.5.2/arch/s390/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/s390/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -60,7 +60,7 @@
 	wait_psw.mask = _WAIT_PSW_MASK;
 	wait_psw.addr = (unsigned long) &&idle_wakeup | 0x80000000L;
 	while(1) {
-                if (current->need_resched) {
+                if (need_yield()) {
                         schedule();
                         check_pgt_cache();
                         continue;
diff -uNr linux-2.5.2/arch/s390x/kernel/process.c linux-yield-252/arch/s390x/kernel/process.c
--- linux-2.5.2/arch/s390x/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/s390x/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -60,7 +60,7 @@
 	wait_psw.mask = _WAIT_PSW_MASK;
 	wait_psw.addr = (unsigned long) &&idle_wakeup;
 	while(1) {
-                if (current->need_resched) {
+                if (need_yield()) {
                         schedule();
                         check_pgt_cache();
                         continue;
diff -uNr linux-2.5.2/arch/sh/kernel/process.c linux-yield-252/arch/sh/kernel/process.c
--- linux-2.5.2/arch/sh/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/sh/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -44,11 +44,11 @@
 
 	while (1) {
 		if (hlt_counter) {
-			if (current->need_resched)
+			if (need_yield())
 				break;
 		} else {
 			__cli();
-			while (!current->need_resched) {
+			while (!need_yield()) {
 				__sti();
 				asm volatile("sleep" : : : "memory");
 				__cli();
diff -uNr linux-2.5.2/arch/sparc/kernel/process.c linux-yield-252/arch/sparc/kernel/process.c
--- linux-2.5.2/arch/sparc/kernel/process.c	Tue Jan 15 08:19:49 2002
+++ linux-yield-252/arch/sparc/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -106,7 +106,7 @@
 {
 	/* endless idle loop with no priority at all */
 	while(1) {
-		if(current->need_resched) {
+		if(need_yield()) {
 			schedule();
 			check_pgt_cache();
 		}
diff -uNr linux-2.5.2/arch/sparc64/kernel/process.c linux-yield-252/arch/sparc64/kernel/process.c
--- linux-2.5.2/arch/sparc64/kernel/process.c	Tue Jan 15 08:19:50 2002
+++ linux-yield-252/arch/sparc64/kernel/process.c	Tue Jan 15 08:40:37 2002
@@ -61,7 +61,7 @@
 		 * But this requires writing back the contents of the
 		 * L2 cache etc. so implement this later. -DaveM
 		 */
-		while (!current->need_resched)
+		while (!need_yield())
 			barrier();
 
 		schedule();
@@ -80,7 +80,7 @@
 int cpu_idle(void)
 {
 	while(1) {
-		if (current->need_resched != 0) {
+		if (need_yield()) {
 			unidle_me();
 			schedule();
 			check_pgt_cache();
diff -uNr linux-2.5.2/drivers/char/lp.c linux-yield-252/drivers/char/lp.c
--- linux-2.5.2/drivers/char/lp.c	Tue Jan 15 08:19:50 2002
+++ linux-yield-252/drivers/char/lp.c	Tue Jan 15 08:40:37 2002
@@ -367,7 +367,7 @@
 			  = lp_negotiate (port, 
 					  lp_table[minor].best_mode);
 
-		} else if (current->need_resched)
+		} else if (need_yield())
 			schedule ();
 
 		if (count) {
diff -uNr linux-2.5.2/drivers/char/mem.c linux-yield-252/drivers/char/mem.c
--- linux-2.5.2/drivers/char/mem.c	Tue Jan 15 08:19:50 2002
+++ linux-yield-252/drivers/char/mem.c	Tue Jan 15 08:40:37 2002
@@ -381,8 +381,7 @@
 		unsigned long unwritten = clear_user(buf, PAGE_SIZE);
 		if (unwritten)
 			return size + unwritten - PAGE_SIZE;
-		if (current->need_resched)
-			schedule();
+		yield_point();
 		buf += PAGE_SIZE;
 		size -= PAGE_SIZE;
 	} while (size);
diff -uNr linux-2.5.2/drivers/char/mwave/3780i.c linux-yield-252/drivers/char/mwave/3780i.c
--- linux-2.5.2/drivers/char/mwave/3780i.c	Tue Jan 15 08:16:25 2002
+++ linux-yield-252/drivers/char/mwave/3780i.c	Tue Jan 15 08:40:37 2002
@@ -68,11 +68,9 @@
 
 static void PaceMsaAccess(unsigned short usDspBaseIO)
 {
-	if(current->need_resched)
-		schedule();
+	yield_point();
 	udelay(100);
-	if(current->need_resched)
-		schedule();
+	yield_point();
 }
 
 unsigned short dsp3780I_ReadMsaCfg(unsigned short usDspBaseIO,
diff -uNr linux-2.5.2/drivers/char/ppdev.c linux-yield-252/drivers/char/ppdev.c
--- linux-2.5.2/drivers/char/ppdev.c	Tue Jan 15 08:19:50 2002
+++ linux-yield-252/drivers/char/ppdev.c	Tue Jan 15 08:40:37 2002
@@ -170,9 +170,7 @@
 			break;
 		}
 
-		if (current->need_resched) {
-			schedule ();
-		}
+		yield_point();
 	}
 
 	kfree (kbuffer);
@@ -242,9 +240,7 @@
 			break;
 		}
 
-		if (current->need_resched) {
-			schedule ();
-		}
+		yield_point();
 	}
 
 	kfree (kbuffer);
diff -uNr linux-2.5.2/drivers/char/random.c linux-yield-252/drivers/char/random.c
--- linux-2.5.2/drivers/char/random.c	Tue Jan 15 08:16:22 2002
+++ linux-yield-252/drivers/char/random.c	Tue Jan 15 08:40:37 2002
@@ -1313,7 +1313,7 @@
 		/*
 		 * Check if we need to break out or reschedule....
 		 */
-		if ((flags & EXTRACT_ENTROPY_USER) && current->need_resched) {
+		if ((flags & EXTRACT_ENTROPY_USER) && need_yield()) {
 			if (signal_pending(current)) {
 				if (ret == 0)
 					ret = -ERESTARTSYS;
diff -uNr linux-2.5.2/drivers/char/tty_io.c linux-yield-252/drivers/char/tty_io.c
--- linux-2.5.2/drivers/char/tty_io.c	Tue Jan 15 08:19:51 2002
+++ linux-yield-252/drivers/char/tty_io.c	Tue Jan 15 08:40:37 2002
@@ -712,8 +712,7 @@
 			ret = -ERESTARTSYS;
 			if (signal_pending(current))
 				break;
-			if (current->need_resched)
-				schedule();
+			yield_point();
 		}
 	}
 	if (written) {
diff -uNr linux-2.5.2/drivers/i2c/i2c-algo-bit.c linux-yield-252/drivers/i2c/i2c-algo-bit.c
--- linux-2.5.2/drivers/i2c/i2c-algo-bit.c	Tue Jan 15 08:16:44 2002
+++ linux-yield-252/drivers/i2c/i2c-algo-bit.c	Tue Jan 15 08:40:37 2002
@@ -50,7 +50,7 @@
 /* might not like this, as they have an internal timeout of some mils	*/
 /*
 #define SLO_IO      jif=jiffies;while(jiffies<=jif+i2c_table[minor].veryslow)\
-                        if (need_resched) schedule();
+                        yield_point();
 */
 
 
@@ -120,8 +120,7 @@
 		if (start+adap->timeout <= jiffies) {
 			return -ETIMEDOUT;
 		}
-		if (current->need_resched)
-			schedule();
+		yield_point();
 	}
 	DEBSTAT(printk("needed %ld jiffies\n", jiffies-start));
 #ifdef SLO_IO
diff -uNr linux-2.5.2/drivers/i2c/i2c-algo-ite.c linux-yield-252/drivers/i2c/i2c-algo-ite.c
--- linux-2.5.2/drivers/i2c/i2c-algo-ite.c	Tue Jan 15 08:16:44 2002
+++ linux-yield-252/drivers/i2c/i2c-algo-ite.c	Tue Jan 15 08:40:37 2002
@@ -67,7 +67,7 @@
 /* might not like this, as they have an internal timeout of some mils	*/
 /*
 #define SLO_IO      jif=jiffies;while(jiffies<=jif+i2c_table[minor].veryslow)\
-                        if (need_resched) schedule();
+                        yield_point();
 */
 
 
diff -uNr linux-2.5.2/drivers/md/md.c linux-yield-252/drivers/md/md.c
--- linux-2.5.2/drivers/md/md.c	Tue Jan 15 08:19:51 2002
+++ linux-yield-252/drivers/md/md.c	Tue Jan 15 08:40:37 2002
@@ -3458,8 +3458,7 @@
 		 * about not overloading the IO subsystem. (things like an
 		 * e2fsck being done on the RAID array should execute fast)
 		 */
-		if (current->need_resched)
-			schedule();
+		yield_point();
 
 		currspeed = (j-mddev->resync_mark_cnt)/2/((jiffies-mddev->resync_mark)/HZ +1) +1;
 
diff -uNr linux-2.5.2/drivers/media/radio/radio-sf16fmi.c linux-yield-252/drivers/media/radio/radio-sf16fmi.c
--- linux-2.5.2/drivers/media/radio/radio-sf16fmi.c	Tue Jan 15 08:16:46 2002
+++ linux-yield-252/drivers/media/radio/radio-sf16fmi.c	Tue Jan 15 08:40:37 2002
@@ -94,8 +94,7 @@
 	for(i=0; i< 100; i++)
 	{
 		udelay(1400);
-		if(current->need_resched)
-			schedule();
+		yield_point();
 	}
 /* If this becomes allowed use it ... 	
 	current->state = TASK_UNINTERRUPTIBLE;
@@ -121,8 +120,7 @@
 	for(i=0; i< 100; i++)
 	{
 		udelay(1400);
-		if(current->need_resched)
-			schedule();
+		yield_point();
 	}
 /* If this becomes allowed use it ... 	
 	current->state = TASK_UNINTERRUPTIBLE;
diff -uNr linux-2.5.2/drivers/media/video/c-qcam.c linux-yield-252/drivers/media/video/c-qcam.c
--- linux-2.5.2/drivers/media/video/c-qcam.c	Tue Jan 15 08:16:46 2002
+++ linux-yield-252/drivers/media/video/c-qcam.c	Tue Jan 15 08:40:37 2002
@@ -425,8 +425,7 @@
 		wantlen -= t;
 		if (t < s)
 			break;
-		if (current->need_resched)
-			schedule();
+		yield_point();
 	}
 
 	len = outptr;
@@ -445,8 +444,7 @@
 		int l;
 		do {
 			l = qcam_read_bytes(q, tmpbuf, 3);
-			if (current->need_resched)
-				schedule();
+			yield_point();
 		} while (l && (tmpbuf[0] == 0x7e || tmpbuf[1] == 0x7e || tmpbuf[2] == 0x7e));
 		if (force_rgb) {
 			if (tmpbuf[0] != 0xe || tmpbuf[1] != 0x0 || tmpbuf[2] != 0xf)
@@ -478,8 +476,7 @@
 		int l;
 		do {
 			l = qcam_read_bytes(q, tmpbuf, 1);
-			if (current->need_resched)
-				schedule();
+			yield_point();
 		} while (l && tmpbuf[0] == 0x7e);
 		l = qcam_read_bytes(q, tmpbuf+1, 2);
 		if (force_rgb) {
diff -uNr linux-2.5.2/drivers/media/video/cpia.c linux-yield-252/drivers/media/video/cpia.c
--- linux-2.5.2/drivers/media/video/cpia.c	Tue Jan 15 08:19:51 2002
+++ linux-yield-252/drivers/media/video/cpia.c	Tue Jan 15 08:40:37 2002
@@ -2147,8 +2147,7 @@
 			/* loop until image ready */
 			do_command(cam, CPIA_COMMAND_GetCameraStatus,0,0,0,0);
 			while (cam->params.status.streamState != STREAM_READY) {
-				if (current->need_resched)
-					schedule();
+				yield_point();
 
 				current->state = TASK_INTERRUPTIBLE;
 
@@ -2163,8 +2162,7 @@
 		}
 
 		/* grab image from camera */
-		if (current->need_resched)
-			schedule();
+		yield_point();
 
 		oldjif = jiffies;
 		image_size = cam->ops->streamRead(cam->lowlevel_data,
@@ -2189,8 +2187,7 @@
 		/* decompress and convert image to by copying it from
 		 * raw_image to decompressed_frame
 		 */
-		if (current->need_resched)
-			schedule();
+		yield_point();
 
 		cam->image_size = parse_picture(cam, image_size);
 		if (cam->image_size <= 0)
diff -uNr linux-2.5.2/drivers/media/video/cpia_pp.c linux-yield-252/drivers/media/video/cpia_pp.c
--- linux-2.5.2/drivers/media/video/cpia_pp.c	Tue Jan 15 08:16:46 2002
+++ linux-yield-252/drivers/media/video/cpia_pp.c	Tue Jan 15 08:40:37 2002
@@ -392,7 +392,7 @@
 	endseen = 0;
 	block_size = PARPORT_CHUNK_SIZE;
 	while( !cam->image_complete ) {
-		if(current->need_resched)  schedule();
+		yield_point();
 		
 		new_bytes = cpia_pp_read(cam->port, buffer, block_size );
 		if( new_bytes <= 0 ) {
diff -uNr linux-2.5.2/drivers/media/video/saa5249.c linux-yield-252/drivers/media/video/saa5249.c
--- linux-2.5.2/drivers/media/video/saa5249.c	Tue Jan 15 08:16:46 2002
+++ linux-yield-252/drivers/media/video/saa5249.c	Tue Jan 15 08:40:37 2002
@@ -127,11 +127,7 @@
 #define MAX(a, b) ((a) > (b) ? (a) : (b))
 #endif
 
-#define RESCHED \
-        do { \
-          if (current->need_resched) \
-            schedule(); \
-        } while (0)
+#define RESCHED do { yield_point(); } while(0)
 
 static struct video_device saa_template;	/* Declared near bottom */
 
diff -uNr linux-2.5.2/drivers/mtd/chips/amd_flash.c linux-yield-252/drivers/mtd/chips/amd_flash.c
--- linux-2.5.2/drivers/mtd/chips/amd_flash.c	Tue Jan 15 08:16:46 2002
+++ linux-yield-252/drivers/mtd/chips/amd_flash.c	Tue Jan 15 08:40:37 2002
@@ -889,7 +889,7 @@
 
 	times_left = 500000;
 	while (times_left-- && flash_is_busy(map, adr, private->interleave)) { 
-		if (current->need_resched) {
+		if (need_yield()) {
 			spin_unlock_bh(chip->mutex);
 			schedule();
 			spin_lock_bh(chip->mutex);
@@ -1126,7 +1126,7 @@
 		/* Latency issues. Drop the lock, wait a while and retry */
 		spin_unlock_bh(chip->mutex);
 
-		if (current->need_resched)
+		if (need_yield())
 			schedule();
 		else
 			udelay(1);
diff -uNr linux-2.5.2/drivers/mtd/devices/doc2000.c linux-yield-252/drivers/mtd/devices/doc2000.c
--- linux-2.5.2/drivers/mtd/devices/doc2000.c	Tue Jan 15 08:16:46 2002
+++ linux-yield-252/drivers/mtd/devices/doc2000.c	Tue Jan 15 08:40:37 2002
@@ -97,7 +97,7 @@
 			DEBUG(MTD_DEBUG_LEVEL2, "_DoC_WaitReady timed out.\n");
 			return -EIO;
 		}
-		if (current->need_resched) {
+		if (need_yield()) {
 			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout(1);
 		}
diff -uNr linux-2.5.2/drivers/parport/ieee1284.c linux-yield-252/drivers/parport/ieee1284.c
--- linux-2.5.2/drivers/parport/ieee1284.c	Tue Jan 15 08:16:44 2002
+++ linux-yield-252/drivers/parport/ieee1284.c	Tue Jan 15 08:40:37 2002
@@ -128,7 +128,7 @@
 			return 0;
 		if (signal_pending (current))
 			return -EINTR;
-		if (current->need_resched)
+		if (need_yield())
 			break;
 		if (i >= 2)
 			udelay (5);
diff -uNr linux-2.5.2/drivers/parport/ieee1284_ops.c linux-yield-252/drivers/parport/ieee1284_ops.c
--- linux-2.5.2/drivers/parport/ieee1284_ops.c	Tue Jan 15 08:16:43 2002
+++ linux-yield-252/drivers/parport/ieee1284_ops.c	Tue Jan 15 08:40:37 2002
@@ -136,7 +136,7 @@
                 /* Let another process run if it needs to. */
 		if (time_before (jiffies, expire))
 			if (!parport_yield_blocking (dev)
-			    && current->need_resched)
+			    && need_yield())
 				schedule ();
 	}
  stop:
diff -uNr linux-2.5.2/drivers/parport/parport_pc.c linux-yield-252/drivers/parport/parport_pc.c
--- linux-2.5.2/drivers/parport/parport_pc.c	Tue Jan 15 08:16:43 2002
+++ linux-yield-252/drivers/parport/parport_pc.c	Tue Jan 15 08:40:37 2002
@@ -596,7 +596,7 @@
 		unsigned char ecrval = inb (ECONTROL (port));
 		int i = 0;
 
-		if (current->need_resched && time_before (jiffies, expire))
+		if (need_yield() && time_before (jiffies, expire))
 			/* Can't yield the port. */
 			schedule ();
 
@@ -622,7 +622,7 @@
 			}
 			ecrval = inb (ECONTROL (port));
 			if (!(ecrval & (1<<2))) {
-				if (current->need_resched &&
+				if (need_yield() &&
 				    time_before (jiffies, expire))
 					schedule ();
 
@@ -746,8 +746,7 @@
 		}
 		/* Is serviceIntr set? */
 		if (!(inb (ECONTROL (port)) & (1<<2))) {
-			if (current->need_resched)
-				schedule ();
+			yield_point();
 
 			goto false_alarm;
 		}
@@ -758,9 +757,7 @@
 		count = get_dma_residue(port->dma);
 		release_dma_lock(dmaflag);
 
-		if (current->need_resched)
-			/* Can't yield the port. */
-			schedule ();
+		yield_point(); /* Can't yield the port. */
 
 		/* Anyone else waiting for the port? */
 		if (port->waithead) {
@@ -1093,7 +1090,7 @@
 		long int expire = jiffies + port->cad->timeout;
 		unsigned char ecrval = inb (ECONTROL (port));
 
-		if (current->need_resched && time_before (jiffies, expire))
+		if (need_yield() && time_before (jiffies, expire))
 			/* Can't yield the port. */
 			schedule ();
 
@@ -1130,7 +1127,7 @@
 			}
 			ecrval = inb (ECONTROL (port));
 			if (!(ecrval & (1<<2))) {
-				if (current->need_resched &&
+				if (need_yield() &&
 				    time_before (jiffies, expire)) {
 					schedule ();
 				}
diff -uNr linux-2.5.2/drivers/sound/via82cxxx_audio.c linux-yield-252/drivers/sound/via82cxxx_audio.c
--- linux-2.5.2/drivers/sound/via82cxxx_audio.c	Tue Jan 15 08:16:34 2002
+++ linux-yield-252/drivers/sound/via82cxxx_audio.c	Tue Jan 15 08:40:37 2002
@@ -1995,7 +1995,7 @@
 	/* just to be a nice neighbor */
 	/* Thomas Sailer:
 	 * But also to ourselves, release semaphore if we do so */
-	if (current->need_resched) {
+	if (need_yield()) {
 		up(&card->syscall_sem);
 		schedule ();
 		ret = via_syscall_down (card, nonblock);
@@ -2171,7 +2171,7 @@
 	/* just to be a nice neighbor */
 	/* Thomas Sailer:
 	 * But also to ourselves, release semaphore if we do so */
-	if (current->need_resched) {
+	if (need_yield()) {
 		up(&card->syscall_sem);
 		schedule ();
 		ret = via_syscall_down (card, nonblock);
diff -uNr linux-2.5.2/fs/jbd/commit.c linux-yield-252/fs/jbd/commit.c
--- linux-2.5.2/fs/jbd/commit.c	Tue Jan 15 08:19:54 2002
+++ linux-yield-252/fs/jbd/commit.c	Tue Jan 15 08:40:37 2002
@@ -224,14 +224,13 @@
 		}
 	} while (jh != last_jh);
 
-	if (bufs || current->need_resched) {
+	if (bufs || need_yield()) {
 		jbd_debug(2, "submit %d writes\n", bufs);
 		spin_unlock(&journal_datalist_lock);
 		unlock_journal(journal);
 		if (bufs)
 			ll_rw_block(WRITE, bufs, wbuf);
-		if (current->need_resched)
-			schedule();
+		yield_point();
 		journal_brelse_array(wbuf, bufs);
 		lock_journal(journal);
 		spin_lock(&journal_datalist_lock);
@@ -458,8 +457,7 @@
 				bh->b_end_io = journal_end_buffer_io_sync;
 				submit_bh(WRITE, bh);
 			}
-			if (current->need_resched)
-				schedule();
+			yield_point();
 			lock_journal(journal);
 
 			/* Force a new descriptor to be generated next
diff -uNr linux-2.5.2/fs/jffs2/background.c linux-yield-252/fs/jffs2/background.c
--- linux-2.5.2/fs/jffs2/background.c	Tue Jan 15 08:19:55 2002
+++ linux-yield-252/fs/jffs2/background.c	Tue Jan 15 08:40:37 2002
@@ -127,8 +127,7 @@
 			schedule();
 		}
                 
-		if (current->need_resched)
-			schedule();
+		yield_point();
 
                 /* Put_super will send a SIGKILL and then wait on the sem. 
                  */
diff -uNr linux-2.5.2/fs/jffs2/erase.c linux-yield-252/fs/jffs2/erase.c
--- linux-2.5.2/fs/jffs2/erase.c	Tue Jan 15 08:19:55 2002
+++ linux-yield-252/fs/jffs2/erase.c	Tue Jan 15 08:40:37 2002
@@ -131,8 +131,7 @@
 		
 		jffs2_erase_block(c, jeb);
 		/* Be nice */
-		if (current->need_resched)
-			schedule();
+		yield_point();
 		spin_lock_bh(&c->erase_completion_lock);
 	}
 	spin_unlock_bh(&c->erase_completion_lock);
diff -uNr linux-2.5.2/fs/jffs2/nodemgmt.c linux-yield-252/fs/jffs2/nodemgmt.c
--- linux-2.5.2/fs/jffs2/nodemgmt.c	Tue Jan 15 08:16:02 2002
+++ linux-yield-252/fs/jffs2/nodemgmt.c	Tue Jan 15 08:40:37 2002
@@ -101,8 +101,7 @@
 			if (ret)
 				return ret;
 
-			if (current->need_resched)
-				schedule();
+			yield_point();
 
 			if (signal_pending(current))
 				return -EINTR;
diff -uNr linux-2.5.2/fs/namei.c linux-yield-252/fs/namei.c
--- linux-2.5.2/fs/namei.c	Tue Jan 15 08:19:55 2002
+++ linux-yield-252/fs/namei.c	Tue Jan 15 08:40:37 2002
@@ -339,7 +339,7 @@
 		goto loop;
 	if (current->total_link_count >= 40)
 		goto loop;
-	if (current->need_resched) {
+	if (need_yield()) {
 		current->state = TASK_RUNNING;
 		schedule();
 	}
diff -uNr linux-2.5.2/fs/reiserfs/inode.c linux-yield-252/fs/reiserfs/inode.c
--- linux-2.5.2/fs/reiserfs/inode.c	Tue Jan 15 08:19:55 2002
+++ linux-yield-252/fs/reiserfs/inode.c	Tue Jan 15 08:40:37 2002
@@ -808,8 +808,7 @@
 	/* inserting indirect pointers for a hole can take a 
 	** long time.  reschedule if needed
 	*/
-	if (current->need_resched)
-	    schedule() ;
+	yield_point();
 
 	retval = search_for_position_by_key (inode->i_sb, &key, &path);
 	if (retval == IO_ERROR) {
diff -uNr linux-2.5.2/include/asm-arm/arch-arc/system.h linux-yield-252/include/asm-arm/arch-arc/system.h
--- linux-2.5.2/include/asm-arm/arch-arc/system.h	Tue Jan 15 08:16:07 2002
+++ linux-yield-252/include/asm-arm/arch-arc/system.h	Tue Jan 15 08:40:37 2002
@@ -10,7 +10,7 @@
 
 static void arch_idle(void)
 {
-	while (!current->need_resched && !hlt_counter);
+	while (!need_yield() && !hlt_counter);
 }
 
 static inline void arch_reset(char mode)
diff -uNr linux-2.5.2/include/asm-arm/arch-cl7500/system.h linux-yield-252/include/asm-arm/arch-cl7500/system.h
--- linux-2.5.2/include/asm-arm/arch-cl7500/system.h	Tue Jan 15 08:16:07 2002
+++ linux-yield-252/include/asm-arm/arch-cl7500/system.h	Tue Jan 15 08:40:37 2002
@@ -10,7 +10,7 @@
 
 static void arch_idle(void)
 {
-	while (!current->need_resched && !hlt_counter)
+	while (!need_yield() && !hlt_counter)
 		iomd_writeb(0, IOMD_SUSMODE);
 }
 
diff -uNr linux-2.5.2/include/asm-arm/arch-ebsa110/system.h linux-yield-252/include/asm-arm/arch-ebsa110/system.h
--- linux-2.5.2/include/asm-arm/arch-ebsa110/system.h	Tue Jan 15 08:16:07 2002
+++ linux-yield-252/include/asm-arm/arch-ebsa110/system.h	Tue Jan 15 08:40:37 2002
@@ -17,7 +17,7 @@
  * will stop our MCLK signal (which provides the clock for the glue
  * logic, and therefore the timer interrupt).
  *
- * Instead, we spin, waiting for either hlt_counter or need_resched
+ * Instead, we spin, waiting for either hlt_counter or need_yield()
  * to be set.  If we have been spinning for 2cs, then we drop the
  * core clock down to the memory clock.
  */
@@ -28,13 +28,13 @@
 	start_idle = jiffies;
 
 	do {
-		if (current->need_resched || hlt_counter)
+		if (need_yield() || hlt_counter)
 			goto slow_out;
 	} while (time_before(jiffies, start_idle + HZ/50));
 
 	cpu_do_idle(IDLE_CLOCK_SLOW);
 
-	while (!current->need_resched && !hlt_counter) {
+	while (!need_yield() && !hlt_counter) {
 		/* do nothing slowly */
 	}
 
diff -uNr linux-2.5.2/include/asm-arm/arch-ebsa285/system.h linux-yield-252/include/asm-arm/arch-ebsa285/system.h
--- linux-2.5.2/include/asm-arm/arch-ebsa285/system.h	Tue Jan 15 08:16:07 2002
+++ linux-yield-252/include/asm-arm/arch-ebsa285/system.h	Tue Jan 15 08:40:37 2002
@@ -20,14 +20,14 @@
 	start_idle = jiffies;
 
 	do {
-		if (current->need_resched || hlt_counter)
+		if (need_yield() || hlt_counter)
 			goto slow_out;
 		cpu_do_idle(IDLE_WAIT_FAST);
 	} while (time_before(jiffies, start_idle + HZ/50));
 
 	cpu_do_idle(IDLE_CLOCK_SLOW);
 
-	while (!current->need_resched && !hlt_counter) {
+	while (!need_yield() && !hlt_counter) {
 		cpu_do_idle(IDLE_WAIT_SLOW);
 	}
 
diff -uNr linux-2.5.2/include/asm-arm/arch-nexuspci/system.h linux-yield-252/include/asm-arm/arch-nexuspci/system.h
--- linux-2.5.2/include/asm-arm/arch-nexuspci/system.h	Tue Jan 15 08:16:07 2002
+++ linux-yield-252/include/asm-arm/arch-nexuspci/system.h	Tue Jan 15 08:40:37 2002
@@ -16,7 +16,7 @@
 
 static void arch_idle(void)
 {
-	while (!current->need_resched && !hlt_counter)
+	while (!need_yield() && !hlt_counter)
 		cpu_do_idle(IDLE_WAIT_SLOW);
 }
 
diff -uNr linux-2.5.2/include/asm-arm/arch-rpc/system.h linux-yield-252/include/asm-arm/arch-rpc/system.h
--- linux-2.5.2/include/asm-arm/arch-rpc/system.h	Tue Jan 15 08:16:07 2002
+++ linux-yield-252/include/asm-arm/arch-rpc/system.h	Tue Jan 15 08:40:37 2002
@@ -18,14 +18,14 @@
 	start_idle = jiffies;
 
 	do {
-		if (current->need_resched || hlt_counter)
+		if (need_yield() || hlt_counter)
 			goto slow_out;
 		cpu_do_idle(IDLE_WAIT_FAST);
 	} while (time_before(jiffies, start_idle + HZ/50));
 
 	cpu_do_idle(IDLE_CLOCK_SLOW);
 
-	while (!current->need_resched && !hlt_counter) {
+	while (!need_yield() && !hlt_counter) {
 		cpu_do_idle(IDLE_WAIT_SLOW);
 	}
 
diff -uNr linux-2.5.2/include/asm-arm/arch-sa1100/system.h linux-yield-252/include/asm-arm/arch-sa1100/system.h
--- linux-2.5.2/include/asm-arm/arch-sa1100/system.h	Tue Jan 15 08:16:07 2002
+++ linux-yield-252/include/asm-arm/arch-sa1100/system.h	Tue Jan 15 08:40:37 2002
@@ -10,7 +10,7 @@
 	if (!hlt_counter) {
 		int flags;
 		local_irq_save(flags);
-		if (!current->need_resched)
+		if (!need_yield())
 			cpu_do_idle(0);
 		local_irq_restore(flags);
 	}
diff -uNr linux-2.5.2/include/asm-arm/arch-tbox/system.h linux-yield-252/include/asm-arm/arch-tbox/system.h
--- linux-2.5.2/include/asm-arm/arch-tbox/system.h	Tue Jan 15 08:16:07 2002
+++ linux-yield-252/include/asm-arm/arch-tbox/system.h	Tue Jan 15 08:40:37 2002
@@ -13,14 +13,14 @@
 	start_idle = jiffies;
 
 	do {
-		if (current->need_resched || hlt_counter)
+		if (need_yield() || hlt_counter)
 			goto slow_out;
 		cpu_do_idle(IDLE_WAIT_FAST);
 	} while (time_before(jiffies, start_idle + HZ/50));
 
 	cpu_do_idle(IDLE_CLOCK_SLOW);
 
-	while (!current->need_resched && !hlt_counter) {
+	while (!need_yield() && !hlt_counter) {
 		cpu_do_idle(IDLE_WAIT_SLOW);
 	}
 
diff -uNr linux-2.5.2/include/linux/mtd/cfi.h linux-yield-252/include/linux/mtd/cfi.h
--- linux-2.5.2/include/linux/mtd/cfi.h	Tue Jan 15 08:16:03 2002
+++ linux-yield-252/include/linux/mtd/cfi.h	Tue Jan 15 08:40:37 2002
@@ -368,7 +368,7 @@
 static inline void cfi_udelay(int us)
 {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
-	if (current->need_resched) {
+	if (need_yield()) {
 		unsigned long t = us * HZ / 1000000;
 		if (t < 1)
 			t = 1;
diff -uNr linux-2.5.2/include/linux/sched.h linux-yield-252/include/linux/sched.h
--- linux-2.5.2/include/linux/sched.h	Tue Jan 15 08:19:56 2002
+++ linux-yield-252/include/linux/sched.h	Tue Jan 15 08:45:38 2002
@@ -25,6 +25,7 @@
 #include <linux/signal.h>
 #include <linux/securebits.h>
 #include <linux/fs_struct.h>
+#include <linux/compiler.h>
 
 struct exec_domain;
 
@@ -669,6 +670,17 @@
 {
 	return (p->sigpending != 0);
 }
+  
+static inline int need_yield(void)
+{
+	return unlikely(current->need_resched != 0);
+}
+
+static inline void yield_point(void)
+{
+	if (need_yield())
+		schedule();
+}
 
 /*
  * Re-calculate pending state from the set of locally pending
diff -uNr linux-2.5.2/kernel/printk.c linux-yield-252/kernel/printk.c
--- linux-2.5.2/kernel/printk.c	Tue Jan 15 08:19:57 2002
+++ linux-yield-252/kernel/printk.c	Tue Jan 15 08:40:37 2002
@@ -524,7 +524,7 @@
  */
 void console_conditional_schedule(void)
 {
-	if (console_may_schedule && current->need_resched) {
+	if (console_may_schedule && need_yield()) {
 		set_current_state(TASK_RUNNING);
 		schedule();
 	}
diff -uNr linux-2.5.2/kernel/sched.c linux-yield-252/kernel/sched.c
--- linux-2.5.2/kernel/sched.c	Tue Jan 15 08:19:57 2002
+++ linux-yield-252/kernel/sched.c	Tue Jan 15 08:40:37 2002
@@ -531,7 +531,7 @@
 	spin_unlock_irq(&rq->lock);
 
 	reacquire_kernel_lock(current);
-	if (unlikely(current->need_resched))
+	if (need_yield())
 		goto need_resched_back;
 	return;
 }
diff -uNr linux-2.5.2/kernel/softirq.c linux-yield-252/kernel/softirq.c
--- linux-2.5.2/kernel/softirq.c	Tue Jan 15 08:19:57 2002
+++ linux-yield-252/kernel/softirq.c	Tue Jan 15 08:40:37 2002
@@ -387,8 +387,7 @@
 
 		while (softirq_pending(cpu)) {
 			do_softirq();
-			if (current->need_resched)
-				schedule();
+			yield_point();
 		}
 
 		__set_current_state(TASK_INTERRUPTIBLE);
diff -uNr linux-2.5.2/mm/filemap.c linux-yield-252/mm/filemap.c
--- linux-2.5.2/mm/filemap.c	Tue Jan 15 08:19:57 2002
+++ linux-yield-252/mm/filemap.c	Tue Jan 15 08:40:37 2002
@@ -290,7 +290,7 @@
 
 			page_cache_release(page);
 
-			if (current->need_resched) {
+			if (need_yield()) {
 				__set_current_state(TASK_RUNNING);
 				schedule();
 			}
@@ -400,7 +400,7 @@
 		}
 
 		page_cache_release(page);
-		if (current->need_resched) {
+		if (need_yield()) {
 			__set_current_state(TASK_RUNNING);
 			schedule();
 		}
diff -uNr linux-2.5.2/mm/swapfile.c linux-yield-252/mm/swapfile.c
--- linux-2.5.2/mm/swapfile.c	Tue Jan 15 08:19:57 2002
+++ linux-yield-252/mm/swapfile.c	Tue Jan 15 08:40:37 2002
@@ -696,7 +696,7 @@
 		 * interactive performance.  Interruptible check on
 		 * signal_pending() would be nice, but changes the spec?
 		 */
-		if (current->need_resched)
+		if (need_yield())
 			schedule();
 	}
 
diff -uNr linux-2.5.2/mm/vmscan.c linux-yield-252/mm/vmscan.c
--- linux-2.5.2/mm/vmscan.c	Tue Jan 15 08:19:57 2002
+++ linux-yield-252/mm/vmscan.c	Tue Jan 15 08:40:37 2002
@@ -300,7 +300,7 @@
 
 	counter = mmlist_nr;
 	do {
-		if (unlikely(current->need_resched)) {
+		if (need_yield()) {
 			__set_current_state(TASK_RUNNING);
 			schedule();
 		}
@@ -345,7 +345,7 @@
 	while (--max_scan >= 0 && (entry = inactive_list.prev) != &inactive_list) {
 		struct page * page;
 
-		if (unlikely(current->need_resched)) {
+		if (need_yield()) {
 			spin_unlock(&pagemap_lru_lock);
 			__set_current_state(TASK_RUNNING);
 			schedule();
@@ -625,8 +625,7 @@
 
 	for (i = pgdat->nr_zones-1; i >= 0; i--) {
 		zone = pgdat->node_zones + i;
-		if (unlikely(current->need_resched))
-			schedule();
+		yield_point();
 		if (!zone->need_balance)
 			continue;
 		if (!try_to_free_pages(zone, GFP_KSWAPD, 0)) {
diff -uNr linux-2.5.2/net/sunrpc/sched.c linux-yield-252/net/sunrpc/sched.c
--- linux-2.5.2/net/sunrpc/sched.c	Tue Jan 15 08:19:57 2002
+++ linux-yield-252/net/sunrpc/sched.c	Tue Jan 15 08:40:37 2002
@@ -721,7 +721,7 @@
 
 		__rpc_execute(task);
 
-		if (++count >= 200 || current->need_resched) {
+		if (++count >= 200 || need_yield()) {
 			count = 0;
 			schedule();
 		}

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] need_resched abstraction
  2002-01-15  9:13 [PATCH] need_resched abstraction David Howells
@ 2002-01-15  9:29 ` Jeff Garzik
  2002-01-16  3:03   ` Rusty Russell
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff Garzik @ 2002-01-15  9:29 UTC (permalink / raw)
  To: David Howells; +Cc: torvalds, linux-kernel

Call me picky but I like the name cond_resched()   ;-)
-- 
Jeff Garzik      | Alternate titles for LOTR:
Building 1024    | Fast Times at Uruk-Hai
MandrakeSoft     | The Took, the Elf, His Daughter and Her Lover
                 | Samwise Gamgee: International Hobbit of Mystery

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] need_resched abstraction
  2002-01-15  9:29 ` Jeff Garzik
@ 2002-01-16  3:03   ` Rusty Russell
  2002-01-16  3:06     ` Linus Torvalds
  0 siblings, 1 reply; 5+ messages in thread
From: Rusty Russell @ 2002-01-16  3:03 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: dhowells, torvalds, linux-kernel, akpm

On Tue, 15 Jan 2002 04:29:54 -0500
Jeff Garzik <jgarzik@mandrakesoft.com> wrote:

> Call me picky but I like the name cond_resched()   ;-)

... And I prefer maybe_schedule().

Cheers,
Rusty.
-- 
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] need_resched abstraction
  2002-01-16  3:03   ` Rusty Russell
@ 2002-01-16  3:06     ` Linus Torvalds
  2002-01-16  5:16       ` Rusty Russell
  0 siblings, 1 reply; 5+ messages in thread
From: Linus Torvalds @ 2002-01-16  3:06 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Jeff Garzik, dhowells, linux-kernel, akpm


On Wed, 16 Jan 2002, Rusty Russell wrote:
> On Tue, 15 Jan 2002 04:29:54 -0500
> Jeff Garzik <jgarzik@mandrakesoft.com> wrote:
>
> > Call me picky but I like the name cond_resched()   ;-)
>
> ... And I prefer maybe_schedule().

I made everybody unhappy by changing the names of _both_ "cond_yield()"
and "need_yield()". So there.

My tree calls them "cond_resched()" and "need_resched()" respectively.

Nyaah, nyaah, nyaah.

	Linus "management skill: saying 'Nyaah' really load" Torvalds


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] need_resched abstraction
  2002-01-16  3:06     ` Linus Torvalds
@ 2002-01-16  5:16       ` Rusty Russell
  0 siblings, 0 replies; 5+ messages in thread
From: Rusty Russell @ 2002-01-16  5:16 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Jeff Garzik, dhowells, linux-kernel, akpm

In message <Pine.LNX.4.33.0201151904120.1357-100000@penguin.transmeta.com> you 
write:
> 
> On Wed, 16 Jan 2002, Rusty Russell wrote:
> > ... And I prefer maybe_schedule().
> 
> My tree calls them "cond_resched()" and "need_resched()" respectively.

Bastard!  Then please apply (thanks to Andrew Morton):

diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3-pre1/drivers/block/ll_rw_blk.c working-2.5.3-pre1-ll/drivers/block/ll_rw_blk.c
--- linux-2.5.3-pre1/drivers/block/ll_rw_blk.c	Tue Jan 15 17:25:32 2002
+++ working-2.5.3-pre1-ll/drivers/block/ll_rw_blk.c	Wed Jan 16 16:15:10 2002
@@ -996,6 +996,7 @@
 		if (++rl->count >= batch_requests &&waitqueue_active(&rl->wait))
 			wake_up(&rl->wait);
 	}
+	cond_resched();
 }
 
 /*
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3-pre1/fs/buffer.c working-2.5.3-pre1-ll/fs/buffer.c
--- linux-2.5.3-pre1/fs/buffer.c	Tue Jan 15 17:25:47 2002
+++ working-2.5.3-pre1-ll/fs/buffer.c	Wed Jan 16 16:15:10 2002
@@ -250,12 +250,19 @@
 	struct buffer_head * next;
 	int nr;
 
-	next = lru_list[index];
 	nr = nr_buffers_type[index];
+repeat:
+	next = lru_list[index];
 	while (next && --nr >= 0) {
 		struct buffer_head *bh = next;
 		next = bh->b_next_free;
 
+		if (dev == NODEV && need_resched()) {
+			spin_unlock(&lru_list_lock);
+			cond_resched();
+			spin_lock(&lru_list_lock);
+			goto repeat;
+		}
 		if (!buffer_locked(bh)) {
 			if (refile)
 				__refile_buffer(bh);
@@ -1180,8 +1187,10 @@
 	struct buffer_head * bh = __getblk(bdev, block, size);
 
 	touch_buffer(bh);
-	if (buffer_uptodate(bh))
+	if (buffer_uptodate(bh)) {
+		cond_resched();
 		return bh;
+	}
 	ll_rw_block(READ, 1, &bh);
 	wait_on_buffer(bh);
 	if (buffer_uptodate(bh))
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3-pre1/fs/dcache.c working-2.5.3-pre1-ll/fs/dcache.c
--- linux-2.5.3-pre1/fs/dcache.c	Tue Jan 15 17:25:47 2002
+++ working-2.5.3-pre1-ll/fs/dcache.c	Wed Jan 16 16:15:10 2002
@@ -84,6 +84,7 @@
 			iput(inode);
 	} else
 		spin_unlock(&dcache_lock);
+	cond_resched();
 }
 
 /* 
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3-pre1/fs/jbd/commit.c working-2.5.3-pre1-ll/fs/jbd/commit.c
--- linux-2.5.3-pre1/fs/jbd/commit.c	Tue Jan 15 17:25:48 2002
+++ working-2.5.3-pre1-ll/fs/jbd/commit.c	Wed Jan 16 16:15:10 2002
@@ -212,6 +212,16 @@
 				__journal_remove_journal_head(bh);
 				refile_buffer(bh);
 				__brelse(bh);
+				if (need_resched()) {
+					if (commit_transaction->t_sync_datalist)
+						commit_transaction->t_sync_datalist =
+							next_jh;
+					if (bufs)
+						break;
+					spin_unlock(&journal_datalist_lock);
+					cond_resched();
+					goto write_out_data;
+				}
 			}
 		}
 		if (bufs == ARRAY_SIZE(wbuf)) {
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3-pre1/fs/proc/array.c working-2.5.3-pre1-ll/fs/proc/array.c
--- linux-2.5.3-pre1/fs/proc/array.c	Wed Jan 16 10:52:29 2002
+++ working-2.5.3-pre1-ll/fs/proc/array.c	Wed Jan 16 16:15:10 2002
@@ -419,6 +419,8 @@
 		pte_t page = *pte;
 		struct page *ptpage;
 
+		cond_resched();
+
 		address += PAGE_SIZE;
 		pte++;
 		if (pte_none(page))
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3-pre1/fs/proc/generic.c working-2.5.3-pre1-ll/fs/proc/generic.c
--- linux-2.5.3-pre1/fs/proc/generic.c	Sat Sep  8 03:53:59 2001
+++ working-2.5.3-pre1-ll/fs/proc/generic.c	Wed Jan 16 16:15:10 2002
@@ -98,7 +98,9 @@
 				retval = n;
 			break;
 		}
-		
+
+		cond_resched();
+
 		/* This is a hack to allow mangling of file pos independent
  		 * of actual bytes read.  Simply place the data at page,
  		 * return the bytes, and set `start' to the desired offset
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3-pre1/mm/filemap.c working-2.5.3-pre1-ll/mm/filemap.c
--- linux-2.5.3-pre1/mm/filemap.c	Wed Jan 16 10:52:30 2002
+++ working-2.5.3-pre1-ll/mm/filemap.c	Wed Jan 16 16:15:10 2002
@@ -603,6 +603,7 @@
 			UnlockPage(page);
 
 		page_cache_release(page);
+		cond_resched();
 		spin_lock(&pagecache_lock);
 	}
 	spin_unlock(&pagecache_lock);
@@ -1386,6 +1387,9 @@
 		offset &= ~PAGE_CACHE_MASK;
 
 		page_cache_release(page);
+
+		cond_resched();
+
 		if (ret == nr && desc->count)
 			continue;
 		break;
@@ -3019,6 +3023,8 @@
 		SetPageReferenced(page);
 		UnlockPage(page);
 		page_cache_release(page);
+
+		cond_resched();
 
 		if (status < 0)
 			break;
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2002-01-16  5:17 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-01-15  9:13 [PATCH] need_resched abstraction David Howells
2002-01-15  9:29 ` Jeff Garzik
2002-01-16  3:03   ` Rusty Russell
2002-01-16  3:06     ` Linus Torvalds
2002-01-16  5:16       ` Rusty Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox