Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Dec 2009 18:29:59 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r200103 - in stable/8/sys/ia64: ia64 include
Message-ID:  <200912041829.nB4ITxYo062185@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marcel
Date: Fri Dec  4 18:29:59 2009
New Revision: 200103
URL: http://svn.freebsd.org/changeset/base/200103

Log:
  MFC rev 200051:
  Make sure bus space accesses use unorder memory loads and stores.

Modified:
  stable/8/sys/ia64/ia64/machdep.c
  stable/8/sys/ia64/ia64/support.S
  stable/8/sys/ia64/include/bus.h
  stable/8/sys/ia64/include/cpufunc.h
  stable/8/sys/ia64/include/ia64_cpu.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/ia64/ia64/machdep.c
==============================================================================
--- stable/8/sys/ia64/ia64/machdep.c	Fri Dec  4 15:39:37 2009	(r200102)
+++ stable/8/sys/ia64/ia64/machdep.c	Fri Dec  4 18:29:59 2009	(r200103)
@@ -859,14 +859,14 @@ ia64_init(void)
 	return (ret);
 }
 
-__volatile void *
+void *
 ia64_ioport_address(u_int port)
 {
 	uint64_t addr;
 
 	addr = (port > 0xffff) ? IA64_PHYS_TO_RR6((uint64_t)port) :
 	    ia64_port_base | ((port & 0xfffc) << 10) | (port & 0xFFF);
-	return ((__volatile void *)addr);
+	return ((void *)addr);
 }
 
 uint64_t

Modified: stable/8/sys/ia64/ia64/support.S
==============================================================================
--- stable/8/sys/ia64/ia64/support.S	Fri Dec  4 15:39:37 2009	(r200102)
+++ stable/8/sys/ia64/ia64/support.S	Fri Dec  4 18:29:59 2009	(r200103)
@@ -775,8 +775,10 @@ ENTRY(copyinstr, 4)
 	;;
 	br.call.sptk.few rp=copystr		// do the copy.
 	st8	[loc2]=r0			// kill the fault handler.
+	;;
 	mov	ar.pfs=loc0			// restore ar.pfs
 	mov	rp=loc1				// restore ra.
+	;;
 	br.ret.sptk.few rp			// ret0 left over from copystr
 END(copyinstr)
 
@@ -887,8 +889,10 @@ ENTRY(copyin, 3)
 	;;
 	br.call.sptk.few rp=bcopy		// do the copy.
 	st8	[loc2]=r0			// kill the fault handler.
+	;;
 	mov	ar.pfs=loc0			// restore ar.pfs
 	mov	rp=loc1				// restore ra.
+	;;
 	br.ret.sptk.few rp			// ret0 left over from bcopy
 END(copyin)
 
@@ -925,8 +929,10 @@ ENTRY(copyout, 3)
 	;;
 	br.call.sptk.few rp=bcopy		// do the copy.
 	st8	[loc2]=r0			// kill the fault handler.
+	;;
 	mov	ar.pfs=loc0			// restore ar.pfs
 	mov	rp=loc1				// restore ra.
+	;;
 	br.ret.sptk.few rp			// ret0 left over from bcopy
 END(copyout)
 
@@ -979,6 +985,7 @@ ENTRY_NOPROFILE(_mcount, 4)
 	;;
 2:
 	mov		ar.pfs = r14
+	;;
 	br.sptk		b6
 	;;
 END(_mcount)

Modified: stable/8/sys/ia64/include/bus.h
==============================================================================
--- stable/8/sys/ia64/include/bus.h	Fri Dec  4 15:39:37 2009	(r200102)
+++ stable/8/sys/ia64/include/bus.h	Fri Dec  4 18:29:59 2009	(r200103)
@@ -169,37 +169,37 @@ bus_space_barrier(bus_space_tag_t bst, b
 static __inline uint8_t
 bus_space_read_1(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
 {
-	uint8_t __volatile *bsp;
+	uint8_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
-	return (*bsp);
+	return (ia64_ld1(bsp));
 }
 
 static __inline uint16_t
 bus_space_read_2(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
 {
-	uint16_t __volatile *bsp;
+	uint16_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
-	return (*bsp);
+	return (ia64_ld2(bsp));
 }
 
 static __inline uint32_t
 bus_space_read_4(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
 {
-	uint32_t __volatile *bsp;
+	uint32_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
-	return (*bsp);
+	return (ia64_ld4(bsp));
 }
 
 static __inline uint64_t
 bus_space_read_8(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
 {
-	uint64_t __volatile *bsp;
+	uint64_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
-	return (*bsp);
+	return (ia64_ld8(bsp));
 }
 
 
@@ -212,40 +212,40 @@ static __inline void
 bus_space_write_1(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
     uint8_t val)
 {
-	uint8_t __volatile *bsp;
+	uint8_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
-	*bsp = val;
+	ia64_st1(bsp, val);
 }
 
 static __inline void
 bus_space_write_2(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
     uint16_t val)
 {
-	uint16_t __volatile *bsp;
+	uint16_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
-	*bsp = val;
+	ia64_st2(bsp, val);
 }
 
 static __inline void
 bus_space_write_4(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
     uint32_t val)
 {
-	uint32_t __volatile *bsp;
+	uint32_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
-	*bsp = val;
+	ia64_st4(bsp, val);
 }
 
 static __inline void
 bus_space_write_8(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
     uint64_t val)
 {
-	uint64_t __volatile *bsp;
+	uint64_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
-	*bsp = val;
+	ia64_st8(bsp, val);
 }
 
 
@@ -258,44 +258,44 @@ static __inline void
 bus_space_read_multi_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint8_t *bufp, size_t count)
 {
-	uint8_t __volatile *bsp;
+	uint8_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bufp++ = *bsp;
+		*bufp++ = ia64_ld1(bsp);
 }
 
 static __inline void
 bus_space_read_multi_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint16_t *bufp, size_t count)
 {
-	uint16_t __volatile *bsp;
+	uint16_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bufp++ = *bsp;
+		*bufp++ = ia64_ld2(bsp);
 }
 
 static __inline void
 bus_space_read_multi_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint32_t *bufp, size_t count)
 {
-	uint32_t __volatile *bsp;
+	uint32_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bufp++ = *bsp;
+		*bufp++ = ia64_ld4(bsp);
 }
 
 static __inline void
 bus_space_read_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint64_t *bufp, size_t count)
 {
-	uint64_t __volatile *bsp;
+	uint64_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bufp++ = *bsp;
+		*bufp++ = ia64_ld8(bsp);
 }
 
 
@@ -308,44 +308,44 @@ static __inline void
 bus_space_write_multi_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint8_t *bufp, size_t count)
 {
-	uint8_t __volatile *bsp;
+	uint8_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bsp = *bufp++;
+		ia64_st1(bsp, *bufp++);
 }
 
 static __inline void
 bus_space_write_multi_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint16_t *bufp, size_t count)
 {
-	uint16_t __volatile *bsp;
+	uint16_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bsp = *bufp++;
+		ia64_st2(bsp, *bufp++);
 }
 
 static __inline void
 bus_space_write_multi_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint32_t *bufp, size_t count)
 {
-	uint32_t __volatile *bsp;
+	uint32_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bsp = *bufp++;
+		ia64_st4(bsp, *bufp++);
 }
 
 static __inline void
 bus_space_write_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint64_t *bufp, size_t count)
 {
-	uint64_t __volatile *bsp;
+	uint64_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bsp = *bufp++;
+		ia64_st8(bsp, *bufp++);
 }
 
 
@@ -359,11 +359,11 @@ static __inline void
 bus_space_read_region_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint8_t *bufp, size_t count)
 {
-	uint8_t __volatile *bsp;
+	uint8_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bufp++ = *bsp;
+		*bufp++ = ia64_ld1(bsp);
 		ofs += 1;
 	}
 }
@@ -372,11 +372,11 @@ static __inline void
 bus_space_read_region_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint16_t *bufp, size_t count)
 {
-	uint16_t __volatile *bsp;
+	uint16_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bufp++ = *bsp;
+		*bufp++ = ia64_ld2(bsp);
 		ofs += 2;
 	}
 }
@@ -385,11 +385,11 @@ static __inline void
 bus_space_read_region_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint32_t *bufp, size_t count)
 {
-	uint32_t __volatile *bsp;
+	uint32_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bufp++ = *bsp;
+		*bufp++ = ia64_ld4(bsp);
 		ofs += 4;
 	}
 }
@@ -398,11 +398,11 @@ static __inline void
 bus_space_read_region_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint64_t *bufp, size_t count)
 {
-	uint64_t __volatile *bsp;
+	uint64_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bufp++ = *bsp;
+		*bufp++ = ia64_ld8(bsp);
 		ofs += 8;
 	}
 }
@@ -418,11 +418,11 @@ static __inline void
 bus_space_write_region_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint8_t *bufp, size_t count)
 {
-	uint8_t __volatile *bsp;
+	uint8_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = *bufp++;
+		ia64_st1(bsp, *bufp++);
 		ofs += 1;
 	}
 }
@@ -431,11 +431,11 @@ static __inline void
 bus_space_write_region_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint16_t *bufp, size_t count)
 {
-	uint16_t __volatile *bsp;
+	uint16_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = *bufp++;
+		ia64_st2(bsp, *bufp++);
 		ofs += 2;
 	}
 }
@@ -444,11 +444,11 @@ static __inline void
 bus_space_write_region_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint32_t *bufp, size_t count)
 {
-	uint32_t __volatile *bsp;
+	uint32_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = *bufp++;
+		ia64_st4(bsp, *bufp++);
 		ofs += 4;
 	}
 }
@@ -457,11 +457,11 @@ static __inline void
 bus_space_write_region_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint64_t *bufp, size_t count)
 {
-	uint64_t __volatile *bsp;
+	uint64_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = *bufp++;
+		ia64_st8(bsp, *bufp++);
 		ofs += 8;
 	}
 }
@@ -476,44 +476,44 @@ static __inline void
 bus_space_set_multi_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint8_t val, size_t count)
 {
-	uint8_t __volatile *bsp;
+	uint8_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bsp = val;
+		ia64_st1(bsp, val);
 }
 
 static __inline void
 bus_space_set_multi_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint16_t val, size_t count)
 {
-	uint16_t __volatile *bsp;
+	uint16_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bsp = val;
+		ia64_st2(bsp, val);
 }
 
 static __inline void
 bus_space_set_multi_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint32_t val, size_t count)
 {
-	uint32_t __volatile *bsp;
+	uint32_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bsp = val;
+		ia64_st4(bsp, val);
 }
 
 static __inline void
 bus_space_set_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint64_t val, size_t count)
 {
-	uint64_t __volatile *bsp;
+	uint64_t *bsp;
 	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 	    __MEMIO_ADDR(bsh + ofs);
 	while (count-- > 0)
-		*bsp = val;
+		ia64_st8(bsp, val);
 }
 
 
@@ -527,11 +527,11 @@ static __inline void
 bus_space_set_region_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint8_t val, size_t count)
 {
-	uint8_t __volatile *bsp;
+	uint8_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = val;
+		ia64_st1(bsp, val);
 		ofs += 1;
 	}
 }
@@ -540,11 +540,11 @@ static __inline void
 bus_space_set_region_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint16_t val, size_t count)
 {
-	uint16_t __volatile *bsp;
+	uint16_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = val;
+		ia64_st2(bsp, val);
 		ofs += 2;
 	}
 }
@@ -553,11 +553,11 @@ static __inline void
 bus_space_set_region_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint32_t val, size_t count)
 {
-	uint32_t __volatile *bsp;
+	uint32_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = val;
+		ia64_st4(bsp, val);
 		ofs += 4;
 	}
 }
@@ -566,11 +566,11 @@ static __inline void
 bus_space_set_region_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint64_t val, size_t count)
 {
-	uint64_t __volatile *bsp;
+	uint64_t *bsp;
 	while (count-- > 0) {
 		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
 		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = val;
+		ia64_st8(bsp, val);
 		ofs += 8;
 	}
 }
@@ -588,7 +588,7 @@ bus_space_copy_region_1(bus_space_tag_t 
     bus_size_t ofs1, bus_space_handle_t bsh2, bus_size_t ofs2, size_t count)
 {
 	bus_addr_t dst, src;
-	uint8_t __volatile *dstp, *srcp;
+	uint8_t *dstp, *srcp;
 	src = bsh1 + ofs1;
 	dst = bsh2 + ofs2;
 	if (dst > src) {
@@ -602,7 +602,7 @@ bus_space_copy_region_1(bus_space_tag_t 
 				srcp = __MEMIO_ADDR(src);
 				dstp = __MEMIO_ADDR(dst);
 			}
-			*dstp = *srcp;
+			ia64_st1(dstp, ia64_ld1(srcp));
 			src -= 1;
 			dst -= 1;
 		}
@@ -615,7 +615,7 @@ bus_space_copy_region_1(bus_space_tag_t 
 				srcp = __MEMIO_ADDR(src);
 				dstp = __MEMIO_ADDR(dst);
 			}
-			*dstp = *srcp;
+			ia64_st1(dstp, ia64_ld1(srcp));
 			src += 1;
 			dst += 1;
 		}
@@ -627,7 +627,7 @@ bus_space_copy_region_2(bus_space_tag_t 
     bus_size_t ofs1, bus_space_handle_t bsh2, bus_size_t ofs2, size_t count)
 {
 	bus_addr_t dst, src;
-	uint16_t __volatile *dstp, *srcp;
+	uint16_t *dstp, *srcp;
 	src = bsh1 + ofs1;
 	dst = bsh2 + ofs2;
 	if (dst > src) {
@@ -641,7 +641,7 @@ bus_space_copy_region_2(bus_space_tag_t 
 				srcp = __MEMIO_ADDR(src);
 				dstp = __MEMIO_ADDR(dst);
 			}
-			*dstp = *srcp;
+			ia64_st2(dstp, ia64_ld2(srcp));
 			src -= 2;
 			dst -= 2;
 		}
@@ -654,7 +654,7 @@ bus_space_copy_region_2(bus_space_tag_t 
 				srcp = __MEMIO_ADDR(src);
 				dstp = __MEMIO_ADDR(dst);
 			}
-			*dstp = *srcp;
+			ia64_st2(dstp, ia64_ld2(srcp));
 			src += 2;
 			dst += 2;
 		}
@@ -666,7 +666,7 @@ bus_space_copy_region_4(bus_space_tag_t 
     bus_size_t ofs1, bus_space_handle_t bsh2, bus_size_t ofs2, size_t count)
 {
 	bus_addr_t dst, src;
-	uint32_t __volatile *dstp, *srcp;
+	uint32_t *dstp, *srcp;
 	src = bsh1 + ofs1;
 	dst = bsh2 + ofs2;
 	if (dst > src) {
@@ -680,7 +680,7 @@ bus_space_copy_region_4(bus_space_tag_t 
 				srcp = __MEMIO_ADDR(src);
 				dstp = __MEMIO_ADDR(dst);
 			}
-			*dstp = *srcp;
+			ia64_st4(dstp, ia64_ld4(srcp));
 			src -= 4;
 			dst -= 4;
 		}
@@ -693,7 +693,7 @@ bus_space_copy_region_4(bus_space_tag_t 
 				srcp = __MEMIO_ADDR(src);
 				dstp = __MEMIO_ADDR(dst);
 			}
-			*dstp = *srcp;
+			ia64_st4(dstp, ia64_ld4(srcp));
 			src += 4;
 			dst += 4;
 		}
@@ -705,7 +705,7 @@ bus_space_copy_region_8(bus_space_tag_t 
     bus_size_t ofs1, bus_space_handle_t bsh2, bus_size_t ofs2, size_t count)
 {
 	bus_addr_t dst, src;
-	uint64_t __volatile *dstp, *srcp;
+	uint64_t *dstp, *srcp;
 	src = bsh1 + ofs1;
 	dst = bsh2 + ofs2;
 	if (dst > src) {
@@ -719,7 +719,7 @@ bus_space_copy_region_8(bus_space_tag_t 
 				srcp = __MEMIO_ADDR(src);
 				dstp = __MEMIO_ADDR(dst);
 			}
-			*dstp = *srcp;
+			ia64_st8(dstp, ia64_ld8(srcp));
 			src -= 8;
 			dst -= 8;
 		}
@@ -732,7 +732,7 @@ bus_space_copy_region_8(bus_space_tag_t 
 				srcp = __MEMIO_ADDR(src);
 				dstp = __MEMIO_ADDR(dst);
 			}
-			*dstp = *srcp;
+			ia64_st8(dstp, ia64_ld8(srcp));
 			src += 8;
 			dst += 8;
 		}

Modified: stable/8/sys/ia64/include/cpufunc.h
==============================================================================
--- stable/8/sys/ia64/include/cpufunc.h	Fri Dec  4 15:39:37 2009	(r200102)
+++ stable/8/sys/ia64/include/cpufunc.h	Fri Dec  4 18:29:59 2009	(r200103)
@@ -54,8 +54,8 @@ breakpoint(void)
 #define	HAVE_INLINE_FFS
 #define	ffs(x)	__builtin_ffs(x)
 
-#define	__MEMIO_ADDR(x)		(__volatile void*)(IA64_PHYS_TO_RR6(x))
-extern __volatile void *ia64_ioport_address(u_int);
+#define	__MEMIO_ADDR(x)		(void*)(IA64_PHYS_TO_RR6(x))
+extern void *ia64_ioport_address(u_int);
 #define	__PIO_ADDR(x)		ia64_ioport_address(x)
 
 /*

Modified: stable/8/sys/ia64/include/ia64_cpu.h
==============================================================================
--- stable/8/sys/ia64/include/ia64_cpu.h	Fri Dec  4 15:39:37 2009	(r200102)
+++ stable/8/sys/ia64/include/ia64_cpu.h	Fri Dec  4 18:29:59 2009	(r200103)
@@ -282,6 +282,74 @@ ia64_ptc_l(u_int64_t va, u_int64_t log2s
 }
 
 /*
+ * Unordered memory load.
+ */
+
+static __inline uint8_t
+ia64_ld1(uint8_t *p)
+{
+	uint8_t v;
+
+	__asm __volatile("ld1 %0=[%1];;" : "=r"(v) : "r"(p));
+	return (v);
+}
+
+static __inline uint16_t
+ia64_ld2(uint16_t *p)        
+{
+	uint16_t v;
+
+	__asm __volatile("ld2 %0=[%1];;" : "=r"(v) : "r"(p));
+	return (v);
+}
+
+static __inline uint32_t
+ia64_ld4(uint32_t *p)        
+{
+	uint32_t v;
+
+	__asm __volatile("ld4 %0=[%1];;" : "=r"(v) : "r"(p));
+	return (v);
+}
+
+static __inline uint64_t
+ia64_ld8(uint64_t *p)        
+{
+	uint64_t v;
+
+	__asm __volatile("ld8 %0=[%1];;" : "=r"(v) : "r"(p));
+	return (v);
+}
+
+/*
+ * Unordered memory store.
+ */
+
+static __inline void
+ia64_st1(uint8_t *p, uint8_t v)
+{
+	__asm __volatile("st1 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st2(uint16_t *p, uint16_t v)
+{
+	__asm __volatile("st2 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st4(uint32_t *p, uint32_t v)
+{
+	__asm __volatile("st4 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st8(uint64_t *p, uint64_t v)
+{
+	__asm __volatile("st8 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+/*
  * Read the value of psr.
  */
 static __inline u_int64_t



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912041829.nB4ITxYo062185>