From: Abramo Bagnara <abramo@alsa-project.org>
To: Linux Kernel <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@transmeta.com>,
Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: [2*PATCH] alpha I/O access and mb()
Date: Sat, 09 Dec 2000 09:43:00 +0100 [thread overview]
Message-ID: <3A31F094.480AAAFB@alsa-project.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 644 bytes --]
Here you are two patches:
alpha-mb-2.2.diff add the missing mb() to the cores that still lack it
(against 2.2.18pre25)
alpha-mb-2.4.diff add missing defines from core_t2.h for non generic
kernel (against 2.4.0test11)
Please apply on your trees.
I've also noted that 2.4 uses mb() after read[bwlq] while 2.2 don't.
Who's right?
--
Abramo Bagnara mailto:abramo@alsa-project.org
Opera Unica Phone: +39.546.656023
Via Emilia Interna, 140
48014 Castel Bolognese (RA) - Italy
ALSA project is http://www.alsa-project.org
sponsored by SuSE Linux http://www.suse.com
It sounds good!
[-- Attachment #2: alpha-mb-2.2.diff --]
[-- Type: text/plain, Size: 6781 bytes --]
--- linux-2.2/include/asm-alpha/core_pyxis.h.~1~ Tue Jan 4 19:12:24 2000
+++ linux-2.2/include/asm-alpha/core_pyxis.h Sat Dec 9 09:17:43 2000
@@ -437,11 +437,13 @@
__EXTERN_INLINE void pyxis_bw_writel(unsigned int b, unsigned long addr)
{
*(vuip)(addr+PYXIS_BW_MEM) = b;
+ mb();
}
__EXTERN_INLINE void pyxis_bw_writeq(unsigned long b, unsigned long addr)
{
*(vulp)(addr+PYXIS_BW_MEM) = b;
+ mb();
}
__EXTERN_INLINE unsigned long pyxis_srm_base(unsigned long addr)
@@ -504,6 +506,7 @@
if (work) {
work += 0x00; /* add transfer length */
*(vuip) work = b * 0x01010101;
+ mb();
}
}
@@ -513,6 +516,7 @@
if (work) {
work += 0x08; /* add transfer length */
*(vuip) work = b * 0x00010001;
+ mb();
}
}
@@ -551,6 +555,7 @@
set_hae(msb);
*(vuip) ((addr << 5) + PYXIS_SPARSE_MEM + 0x00) = b * 0x01010101;
+ mb();
}
__EXTERN_INLINE void pyxis_writew(unsigned short b, unsigned long addr)
@@ -562,6 +567,7 @@
set_hae(msb);
*(vuip) ((addr << 5) + PYXIS_SPARSE_MEM + 0x08) = b * 0x00010001;
+ mb();
}
__EXTERN_INLINE unsigned long pyxis_readl(unsigned long addr)
@@ -577,11 +583,13 @@
__EXTERN_INLINE void pyxis_writel(unsigned int b, unsigned long addr)
{
*(vuip) (addr + PYXIS_DENSE_MEM) = b;
+ mb();
}
__EXTERN_INLINE void pyxis_writeq(unsigned long b, unsigned long addr)
{
*(vulp) (addr + PYXIS_DENSE_MEM) = b;
+ mb();
}
/* Find the DENSE memory area for a given bus address. */
--- linux-2.2/include/asm-alpha/core_apecs.h.~1~ Mon Dec 28 00:21:50 1998
+++ linux-2.2/include/asm-alpha/core_apecs.h Sat Dec 9 09:28:16 2000
@@ -543,6 +543,7 @@
set_hae(msb);
}
*(vuip) ((addr << 5) + APECS_SPARSE_MEM + 0x00) = b * 0x01010101;
+ mb();
}
__EXTERN_INLINE void apecs_writew(unsigned short b, unsigned long addr)
@@ -555,16 +556,19 @@
set_hae(msb);
}
*(vuip) ((addr << 5) + APECS_SPARSE_MEM + 0x08) = b * 0x00010001;
+ mb();
}
__EXTERN_INLINE void apecs_writel(unsigned int b, unsigned long addr)
{
*(vuip) (addr + APECS_DENSE_MEM) = b;
+ mb();
}
__EXTERN_INLINE void apecs_writeq(unsigned long b, unsigned long addr)
{
*(vulp) (addr + APECS_DENSE_MEM) = b;
+ mb();
}
/* Find the DENSE memory area for a given bus address. */
--- linux-2.2/include/asm-alpha/core_cia.h.~1~ Thu Aug 26 02:29:49 1999
+++ linux-2.2/include/asm-alpha/core_cia.h Sat Dec 9 09:28:16 2000
@@ -460,6 +460,7 @@
work += 0x00; /* add transfer length */
w = __kernel_insbl(b, addr & 3);
*(vuip) work = w;
+ mb();
}
}
@@ -470,6 +471,7 @@
work += 0x08; /* add transfer length */
w = __kernel_inswl(b, addr & 3);
*(vuip) work = w;
+ mb();
}
}
@@ -507,6 +509,7 @@
w = __kernel_insbl(b, addr & 3);
*(vuip) ((addr << 5) + CIA_SPARSE_MEM + 0x00) = w;
+ mb();
}
__EXTERN_INLINE void cia_writew(unsigned short b, unsigned long addr)
@@ -519,6 +522,7 @@
w = __kernel_inswl(b, addr & 3);
*(vuip) ((addr << 5) + CIA_SPARSE_MEM + 0x08) = w;
+ mb();
}
__EXTERN_INLINE unsigned long cia_readl(unsigned long addr)
@@ -534,11 +538,13 @@
__EXTERN_INLINE void cia_writel(unsigned int b, unsigned long addr)
{
*(vuip) (addr + CIA_DENSE_MEM) = b;
+ mb();
}
__EXTERN_INLINE void cia_writeq(unsigned long b, unsigned long addr)
{
*(vulp) (addr + CIA_DENSE_MEM) = b;
+ mb();
}
/* Find the DENSE memory area for a given bus address. */
--- linux-2.2/include/asm-alpha/core_t2.h.~1~ Mon Dec 28 00:21:50 1998
+++ linux-2.2/include/asm-alpha/core_t2.h Sat Dec 9 09:28:16 2000
@@ -499,6 +499,7 @@
if (work) {
work += 0x00; /* add transfer length */
*(vuip) work = b * 0x01010101;
+ mb();
}
}
@@ -508,6 +509,7 @@
if (work) {
work += 0x08; /* add transfer length */
*(vuip) work = b * 0x00010001;
+ mb();
}
}
@@ -518,6 +520,7 @@
if (work) {
work += 0x18; /* add transfer length */
*(vuip) work = b;
+ mb();
}
}
@@ -530,6 +533,7 @@
work += 0x18; /* add transfer length */
*(vuip) work = b;
*(vuip) (work + (4 << 5)) = b >> 32;
+ mb();
}
}
@@ -592,6 +596,7 @@
set_hae(msb);
*(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x00) = b * 0x01010101;
+ mb();
}
__EXTERN_INLINE void t2_writew(unsigned short b, unsigned long addr)
@@ -603,6 +608,7 @@
set_hae(msb);
*(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x08) = b * 0x00010001;
+ mb();
}
/* On SABLE with T2, we must use SPARSE memory even for 32-bit access. */
@@ -615,6 +621,7 @@
set_hae(msb);
*(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x18) = b;
+ mb();
}
__EXTERN_INLINE void t2_writeq(unsigned long b, unsigned long addr)
@@ -628,6 +635,7 @@
work = (addr << 5) + T2_SPARSE_MEM + 0x18;
*(vuip)work = b;
*(vuip)(work + (4 << 5)) = b >> 32;
+ mb();
}
/* Find the DENSE memory area for a given bus address. */
--- linux-2.2/include/asm-alpha/core_lca.h.~1~ Mon Dec 28 00:21:50 1998
+++ linux-2.2/include/asm-alpha/core_lca.h Sat Dec 9 09:28:16 2000
@@ -349,6 +349,7 @@
}
w = __kernel_insbl(b, addr & 3);
*(vuip) ((addr << 5) + LCA_SPARSE_MEM + 0x00) = w;
+ mb();
}
__EXTERN_INLINE void lca_writew(unsigned short b, unsigned long addr)
@@ -363,16 +364,19 @@
}
w = __kernel_inswl(b, addr & 3);
*(vuip) ((addr << 5) + LCA_SPARSE_MEM + 0x08) = w;
+ mb();
}
__EXTERN_INLINE void lca_writel(unsigned int b, unsigned long addr)
{
*(vuip) (addr + LCA_DENSE_MEM) = b;
+ mb();
}
__EXTERN_INLINE void lca_writeq(unsigned long b, unsigned long addr)
{
*(vulp) (addr + LCA_DENSE_MEM) = b;
+ mb();
}
/* Find the DENSE memory area for a given bus address. */
--- linux-2.2/include/asm-alpha/core_mcpcia.h.~1~ Tue Jan 4 19:12:24 2000
+++ linux-2.2/include/asm-alpha/core_mcpcia.h Sat Dec 9 09:28:16 2000
@@ -352,6 +352,7 @@
if (work) {
work += 0x00; /* add transfer length */
*(vuip) work = b * 0x01010101;
+ mb();
}
}
@@ -361,6 +362,7 @@
if (work) {
work += 0x08; /* add transfer length */
*(vuip) work = b * 0x00010001;
+ mb();
}
}
@@ -405,6 +407,7 @@
set_hae(msb);
*(vuip) ((addr << 5) + MCPCIA_SPARSE(hose) + 0x00) = b * 0x01010101;
+ mb();
}
__EXTERN_INLINE void mcpcia_writew(unsigned short b, unsigned long in_addr)
@@ -418,6 +421,7 @@
set_hae(msb);
*(vuip) ((addr << 5) + MCPCIA_SPARSE(hose) + 0x08) = b * 0x00010001;
+ mb();
}
__EXTERN_INLINE unsigned long mcpcia_readl(unsigned long in_addr)
@@ -439,6 +443,7 @@
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
*(vuip) (addr + MCPCIA_DENSE(hose)) = b;
+ mb();
}
__EXTERN_INLINE void mcpcia_writeq(unsigned long b, unsigned long in_addr)
@@ -446,6 +451,7 @@
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
*(vulp) (addr + MCPCIA_DENSE(hose)) = b;
+ mb();
}
/* Find the DENSE memory area for a given bus address. */
[-- Attachment #3: alpha-mb-2.4.diff --]
[-- Type: text/plain, Size: 837 bytes --]
--- linux/include/asm-alpha/core_t2.h.~1~ Fri Mar 17 22:01:38 2000
+++ linux/include/asm-alpha/core_t2.h Sat Dec 9 09:07:35 2000
@@ -533,6 +533,21 @@
#define __ioremap(a) t2_ioremap((unsigned long)(a))
#define __is_ioaddr(a) t2_is_ioaddr((unsigned long)(a))
+#define inb(p) __inb(p)
+#define inw(p) __inw(p)
+#define inl(p) __inl(p)
+#define outb(x,p) __outb((x),(p))
+#define outw(x,p) __outw((x),(p))
+#define outl(x,p) __outl((x),(p))
+#define __raw_readb(a) __readb(a)
+#define __raw_readw(a) __readw(a)
+#define __raw_readl(a) __readl(a)
+#define __raw_readq(a) __readq(a)
+#define __raw_writeb(v,a) __writeb((v),(a))
+#define __raw_writew(v,a) __writew((v),(a))
+#define __raw_writel(v,a) __writel((v),(a))
+#define __raw_writeq(v,a) __writeq((v),(a))
+
#endif /* __WANT_IO_DEF */
#ifdef __IO_EXTERN_INLINE
next reply other threads:[~2000-12-09 9:15 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-12-09 8:43 Abramo Bagnara [this message]
2000-12-09 10:12 ` [2*PATCH] alpha I/O access and mb() Gérard Roudier
2000-12-09 11:32 ` Abramo Bagnara
2000-12-09 13:46 ` Gérard Roudier
2000-12-10 0:10 ` Richard Henderson
2000-12-10 9:40 ` Abramo Bagnara
2000-12-10 18:44 ` Richard Henderson
2000-12-10 19:04 ` Abramo Bagnara
2000-12-10 20:49 ` Richard Henderson
2000-12-10 21:23 ` Abramo Bagnara
2000-12-11 0:19 ` Richard Henderson
2000-12-11 8:00 ` Abramo Bagnara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3A31F094.480AAAFB@alsa-project.org \
--to=abramo@alsa-project.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox