bogus barriers in sym53c8xx_2?
In drivers/scsi/sym53c8xx_2/sym_misc.h we find:
#elif defined __ia64__
#define __READ_BARRIER() __asm__ volatile("mf.a; mf" : : : "memory")
#define __WRITE_BARRIER() __asm__ volatile("mf.a; mf" : : : "memory")
based on the comments and the other implementations, these barriers are bogus and the "mf.a" should be dropped.
Anyone know who wrote this code originally and why the mf.a was added?
mf.a is very slow and should be avoided except were truly needed.
--david
Quoted 6 lines · David Mosberger
In
drivers/scsi/sym53c8xx_2/sym_misc.hwe find:#elif defined
__ia64__
#define__READ_BARRIER()__asm__volatile("mf.a; mf" : : : "memory")
#define__WRITE_BARRIER()__asm__volatile("mf.a; mf" : : : "memory")
Quoted 6 lines
based on the comments and the other implementations, these barriers are bogus and the "mf.a" should be dropped.
Anyone know who wrote this code originally and why the mf.a was added?
mf.a is very slow and should be avoided except were truly needed.
I'm sure Gerard must have written it originally. It's there in the earliest version of the sym2 driver I can find -- sym-2.1.16a-for-linux-2.4.13.patch.gz. A similar barrier is there in the sym1 driver (drivers/scsi/sym53c8xx_defs.h). It seems to have been introduced around 2.4.3 (symbios driver version 1.6b -> 1.7.3a-20010304)
So you're looking for a patch which looks something like this:
- #define __READ_BARRIER() __asm__ volatile("mf.a; mf" : : : "memory")
- #define __WRITE_BARRIER() __asm__ volatile("mf.a; mf" : : : "memory")
+ #define __READ_BARRIER() __asm__ volatile("mf" : : : "memory")
+ #define __WRITE_BARRIER() __asm__ volatile("mf" : : : "memory")
Or really, might be better to just define them to rmb() and wmb()?
Signature · 3 lines
"It's not Hollywood. War is real, war is primarily not about defeat or victory, it is about death. I've seen thousands and thousands of dead bodies. Do you think I want to have an academic debate on this subject?" -- Robert Fisk
Quoted 7 lines
I'm sure Gerard must have written it originally. It's there in the earliest version of the sym2 driver I can find -- sym-2.1.16a-for-linux-2.4.13.patch.gz. A similar barrier is there in the sym1 driver (
drivers/scsi/sym53c8xx_defs.h). It seems to have been introduced around 2.4.3 (symbios driver version 1.6b -> 1.7.3a-20010304)
Quoted 8 lines
So you're looking for a patch which looks something like this:
- #define
__READ_BARRIER()__asm__volatile("mf.a; mf" : : : "memory")
- #define__WRITE_BARRIER()__asm__volatile("mf.a; mf" : : : "memory")
+ #define__READ_BARRIER()__asm__volatile("mf" : : : "memory")
+ #define__WRITE_BARRIER()__asm__volatile("mf" : : : "memory")Or really, might be better to just define them to
rmb()andwmb()?
I suspect so, the powerpc ones are overkill too:
#define __READ_BARRIER() __asm__ volatile("eieio; sync" : : : "memory")
#define __WRITE_BARRIER() __asm__ volatile("eieio; sync" : : : "memory")
Anton
I didn't see any followup. Gerard, do you have any comments? I'm inclined to drop the #ifdef __ia64 part. Also, I think Matthew's suggestion to use rmb()/wmb() for the generic case is a good one (though it makes no difference for ia64).
--david
Quoted 11 lines
Quoted 10 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line · Anton Blanchard
I'm sure Gerard must have written it originally. It's there in the earliest version of the sym2 driver I can find -- sym-2.1.16a-for-linux-2.4.13.patch.gz. A similar barrier is there in the sym1 driver (
drivers/scsi/sym53c8xx_defs.h). It seems to have been introduced around 2.4.3 (symbios driver version 1.6b -> 1.7.3a-20010304)So you're looking for a patch which looks something like this:
Quoted 8 lines
Quoted 8 lines
- #define
__READ_BARRIER()__asm__volatile("mf.a; mf" : : :
"memory") - #define__WRITE_BARRIER()__asm__volatile("mf.a; mf" : : : "memory")+ #define__READ_BARRIER()__asm__volatile("mf" : : : "memory")+ #define__WRITE_BARRIER()__asm__volatile("mf" : : : "memory")Or really, might be better to just define them to
rmb()andwmb()?
Anton> I suspect so, the powerpc ones are overkill too:
Anton> #define __READ_BARRIER() __asm__ volatile("eieio; sync" : : :
Anton> "memory") #define __WRITE_BARRIER() __asm__ volatile("eieio; Anton> sync" : : : "memory")