Messages in this thread | | | Date | Mon, 15 May 2006 16:25:00 -0700 (PDT) | Subject | Re: [PATCH 53 of 53] ipath - add memory barrier when waiting for writes | From | ralphc@pathscal ... |
| |
> 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.
- 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/
| |