Messages in this thread | | | From | Andreas Schwab <> | Subject | Re: [patch] spinlocks: remove 'volatile' | Date | Thu, 06 Jul 2006 16:26:38 +0200 |
| |
"J.A. Magallón" <jamagallon@ono.com> writes:
> The barrier prevents the compiler of translating this to: > > for (int i=0; i<10; i++) > { > b[i] = *inb; > a[i] = *ina; > } > > or even to: > > for (int i=0; i<10; i++) > a[i] = *ina; > for (int i=0; i<10; i++) > b[i] = *inb; > > but does not prevent it to do this: > > register int tmp_a = *ina; > register int tmp_b = *inb; > > for (int i=0; i<10; i++) > { > a[i] = tmp_a; > b[i] = tmp_b; > } > > because nor 'ina' nor 'inb' change under what the compiler sees inside > the loop. 'volatile' prevents the compiler of do a high level cache of > *ina or *inb.
Actually the compiler may not do any of these transformations because *ina or *inb may alias any of a[i] or b[i].
Andreas.
-- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |