[openib-general] Re: [PATCH 53 of 53] ipath - add memory barrier when waiting for writes
ralphc at pathscale.com
ralphc at pathscale.com
Mon May 15 16:25:00 PDT 2006
> ralphc> I don't have a lot to add to this other than I looked at
> ralphc> the assembly code output for -Os and -O3 and both looked
> ralphc> OK. I put the mb() in to be sure the writes were complete
> ralphc> and I found this to work by experimentation. Without it,
> ralphc> the driver fails to read the EEPROM correctly.
>
> Hmm, that doesn't give me a warm fuzzy feeling. Basically on x86-64
> you're adding an unneeded mfence instruction to work around
> miscompilation?
>
> Is i2c_wait_for_writes miscompiled without the mb() with -Os? What
> does the bad assembly look like?
>
> - R.
We had a power failure here so I'm not able to reproduce the
assembly code at the moment. What I remember from looking
at the code is that the code for ipath_read_kreg32() was
present in i2c_wait_for_writes() when compiled -Os so
it didn't look like a compiler bug. I probably could put the
mb() at the end of i2c_gpio_set() if that makes you more
comfortable. The mb() is definitely needed though.
More information about the general
mailing list