logo       

[Kernel-janitors] Calling yield() Considered Harmful: msg#00013

linux.kernel.janitors

Subject: [Kernel-janitors] Calling yield() Considered Harmful


In 2.6, the semantics of calling yield() changed from "sleep for a
bit" to "I really don't want to run for a while". This matches POSIX
better, but there's a lot of drivers still using yield() when they mean
cond_resched(), schedule() or even schedule_timeout().

Here's a list:

$ find drivers/ -type f |xargs grep 'yield[^a-z]*('
drivers/cdrom/cdu31a.c: yield();
drivers/cdrom/sonycd535.c: yield();
drivers/macintosh/adb.c: yield();
drivers/message/i2o/i2o_core.c: yield();
drivers/message/i2o/i2o_core.c: yield();
drivers/mtd/chips/cfi_cmdset_0002.c: yield();
drivers/mtd/nand/nand.c: yield ();
drivers/net/depca.c: yield();
drivers/net/sb1000.c: yield();
drivers/net/sb1000.c: yield();
drivers/net/sis900.c: yield();
drivers/net/e100/e100_eeprom.c: yield();
drivers/net/e100/e100_eeprom.c: yield();
drivers/net/e100/e100_main.c: yield();
drivers/net/e100/e100_phy.c: yield();
drivers/net/e100/e100_phy.c: yield();
drivers/net/e100/e100_test.c: yield();
drivers/scsi/NCR5380.c: yield();
drivers/scsi/ibmmca.c: yield();
drivers/scsi/ibmmca.c: yield();
drivers/scsi/megaraid.c: udelay(100); yield();
drivers/usb/core/message.c: yield ();

As always, this isn't a search-and-replace type of job. Let's take
the first one as an example:

static inline void sony_sleep(void)
{
unsigned long flags;

if (cdu31a_irq <= 0) {
yield();
} else { /* Interrupt driven */
save_flags(flags);
cli();
enable_interrupts();
interruptible_sleep_on(&cdu31a_irq_wait);
restore_flags(flags);
}
}

If you look at how sony_sleep() is typically used, what you really want to
do is schedule_timeout(1). But someone needs to look at all these cases..
do I hear a volunteer?

--
"It's not Hollywood. War is real, war is primarily not about defeat or
victory, it is about death. I've seen thousands and thousands of dead bodies.
Do you think I want to have an academic debate on this subject?" -- Robert Fisk


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise