On 8/15/2007 10:18 AM, Heiko Carstens wrote: > On Wed, Aug 15, 2007 at 02:49:03PM +0800, Herbert Xu wrote: >> Chris Snook <[EMAIL PROTECTED]> wrote: >> > >> > Because atomic operations are generally used for synchronization, which >> > requires >> > volatile behavior. Most such codepaths currently use an inefficient >> > barrier(). >> > Some forget to and we get bugs, because people assume that atomic_read() >> > actually reads something, and atomic_write() actually writes something. >> > Worse, >> > these are architecture-specific, even compiler version-specific bugs that >> > are >> > often difficult to track down. >> >> I'm yet to see a single example from the current tree where >> this patch series is the correct solution. So far the only >> example has been a buggy piece of code which has since been >> fixed with a cpu_relax. > > Btw.: we still have > > include/asm-i386/mach-es7000/mach_wakecpu.h: while (!atomic_read(deassert)); > include/asm-i386/mach-default/mach_wakecpu.h: while (!atomic_read(deassert)); > > Looks like they need to be fixed as well.
I don't know if this here is affected: /* drivers/ieee1394/ieee1394_core.h */ static inline unsigned int get_hpsb_generation(struct hpsb_host *host) { return atomic_read(&host->generation); } /* drivers/ieee1394/nodemgr.c */ static int nodemgr_host_thread(void *__hi) { [...] for (;;) { [... sleep until bus reset event ...] /* Pause for 1/4 second in 1/16 second intervals, * to make sure things settle down. */ g = get_hpsb_generation(host); for (i = 0; i < 4 ; i++) { if (msleep_interruptible(63) || kthread_should_stop()) goto exit; /* Now get the generation in which the node ID's we collect * are valid. During the bus scan we will use this generation * for the read transactions, so that if another reset occurs * during the scan the transactions will fail instead of * returning bogus data. */ generation = get_hpsb_generation(host); /* If we get a reset before we are done waiting, then * start the waiting over again */ if (generation != g) g = generation, i = 0; } [... scan bus, using generation ...] } exit: [...] } -- Stefan Richter -=====-=-=== =--- -==== http://arcgraph.de/sr/ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/