Messages in this thread Patch in this message | | | Subject | [PATCH] Define wc_wmb, a write barrier for PCI write combining | From | Bryan O'Sullivan <> | Date | Fri, 24 Feb 2006 20:20:50 -0800 |
| |
On some platforms, a regular wmb() is not sufficient to guarantee that PCI writes have been flushed to the bus if write combining is in effect.
This change introduces a new macro, wc_wmb(), that makes this guarantee.
It does so by way of a new header file, <linux/system.h>. This header can be a site for oft-replicated code from <asm-*/system.h>, but isn't just yet.
We also define a version of wc_wmb() with the required semantics on x86_64.
Signed-off-by: Bryan O'Sullivan <bos@pathscale.com>
diff -r c89918da5f7b -r 94d372e00ccd include/asm-x86_64/system.h --- a/include/asm-x86_64/system.h Sat Feb 25 08:01:07 2006 +0800 +++ b/include/asm-x86_64/system.h Fri Feb 24 20:15:07 2006 -0800 @@ -321,6 +321,8 @@ static inline unsigned long __cmpxchg(vo #define mb() asm volatile("mfence":::"memory") #define rmb() asm volatile("lfence":::"memory") +#define wc_wmb() asm volatile("sfence" ::: "memory") + #ifdef CONFIG_UNORDERED_IO #define wmb() asm volatile("sfence" ::: "memory") #else diff -r c89918da5f7b -r 94d372e00ccd include/linux/system.h --- /dev/null Thu Jan 1 00:00:00 1970 +0000 +++ b/include/linux/system.h Fri Feb 24 20:15:07 2006 -0800 @@ -0,0 +1,27 @@ +/* + * Copyright 2006 PathScale, Inc. All Rights Reserved. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _LINUX_SYSTEM_H +#define _LINUX_SYSTEM_H + +#include <asm/system.h> + +#ifndef wc_wmb +#define wc_wmb() wmb() +#endif + +#endif /* _LINUX_SYSTEM_H */
- 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/
| |