[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