patrick@ pointed out that the arm64 bus_space implementation was
(partly) copied from mips64.  Therefore th fixes should probably be
applied there as well.

Untested so far.


Index: arch/loongson/include/bus.h
===================================================================
RCS file: /cvs/src/sys/arch/loongson/include/bus.h,v
retrieving revision 1.7
diff -u -p -r1.7 bus.h
--- arch/loongson/include/bus.h 8 May 2017 00:27:45 -0000       1.7
+++ arch/loongson/include/bus.h 13 Apr 2020 21:42:14 -0000
@@ -144,8 +144,10 @@ static __inline void                                       
                      \
 CAT(bus_space_read_region_,n)(bus_space_tag_t bst, bus_space_handle_t bsh,    \
      bus_addr_t ba, CAT3(u_int,m,_t) *x, size_t cnt)                         \
 {                                                                            \
-       while (cnt--)                                                         \
-               *x++ = CAT(bus_space_read_,n)(bst, bsh, ba++);                \
+       while (cnt--) {                                                       \
+               *x++ = CAT(bus_space_read_,n)(bst, bsh, ba);                  \
+               ba += (n);                                                    \
+       }                                                                     \
 }
 
 bus_space_read_region(1,8)
@@ -178,9 +180,8 @@ static __inline void                                        
                      \
 CAT(bus_space_write_multi_,n)(bus_space_tag_t bst, bus_space_handle_t bsh,    \
      bus_size_t o, const CAT3(u_int,m,_t) *x, size_t cnt)                    \
 {                                                                            \
-       while (cnt--) {                                                       \
+       while (cnt--)                                                         \
                CAT(bus_space_write_,n)(bst, bsh, o, *x++);                   \
-       }                                                                     \
 }
 
 bus_space_write_multi(1,8)
@@ -196,7 +197,7 @@ CAT(bus_space_write_region_,n)(bus_space
 {                                                                            \
        while (cnt--) {                                                       \
                CAT(bus_space_write_,n)(bst, bsh, ba, *x++);                  \
-               ba += sizeof(x);                                              \
+               ba += (n);                                                    \
        }                                                                     \
 }
 
@@ -232,7 +233,7 @@ CAT(bus_space_set_region_,n)(bus_space_t
 {                                                                            \
        while (cnt--) {                                                       \
                CAT(bus_space_write_,n)(bst, bsh, ba, x);                     \
-               ba += sizeof(x);                                              \
+               ba += (n);                                                    \
        }                                                                     \
 }
 
Index: arch/octeon/include/bus.h
===================================================================
RCS file: /cvs/src/sys/arch/octeon/include/bus.h,v
retrieving revision 1.7
diff -u -p -r1.7 bus.h
--- arch/octeon/include/bus.h   8 May 2017 00:27:45 -0000       1.7
+++ arch/octeon/include/bus.h   13 Apr 2020 21:42:15 -0000
@@ -142,8 +142,10 @@ static __inline void                                       
                      \
 CAT(bus_space_read_region_,n)(bus_space_tag_t bst, bus_space_handle_t bsh,    \
      bus_addr_t ba, CAT3(u_int,m,_t) *x, size_t cnt)                         \
 {                                                                            \
-       while (cnt--)                                                         \
-               *x++ = CAT(bus_space_read_,n)(bst, bsh, ba++);                \
+       while (cnt--) {                                                       \
+               *x++ = CAT(bus_space_read_,n)(bst, bsh, ba);                  \
+               ba += (n);                                                    \
+       }                                                                     \
 }
 
 bus_space_read_region(1,8)
@@ -176,9 +178,8 @@ static __inline void                                        
                      \
 CAT(bus_space_write_multi_,n)(bus_space_tag_t bst, bus_space_handle_t bsh,    \
      bus_size_t o, const CAT3(u_int,m,_t) *x, size_t cnt)                    \
 {                                                                            \
-       while (cnt--) {                                                       \
+       while (cnt--)                                                         \
                CAT(bus_space_write_,n)(bst, bsh, o, *x++);                   \
-       }                                                                     \
 }
 
 bus_space_write_multi(1,8)
@@ -194,7 +195,7 @@ CAT(bus_space_write_region_,n)(bus_space
 {                                                                            \
        while (cnt--) {                                                       \
                CAT(bus_space_write_,n)(bst, bsh, ba, *x++);                  \
-               ba += sizeof(x);                                              \
+               ba += (n);                                                    \
        }                                                                     \
 }
 
@@ -230,7 +231,7 @@ CAT(bus_space_set_region_,n)(bus_space_t
 {                                                                            \
        while (cnt--) {                                                       \
                CAT(bus_space_write_,n)(bst, bsh, ba, x);                     \
-               ba += sizeof(x);                                              \
+               ba += (n);                                                    \
        }                                                                     \
 }
 
Index: arch/sgi/include/bus.h
===================================================================
RCS file: /cvs/src/sys/arch/sgi/include/bus.h,v
retrieving revision 1.28
diff -u -p -r1.28 bus.h
--- arch/sgi/include/bus.h      11 May 2017 15:47:45 -0000      1.28
+++ arch/sgi/include/bus.h      13 Apr 2020 21:42:15 -0000
@@ -143,8 +143,10 @@ static __inline void                                       
                      \
 CAT(bus_space_read_region_,n)(bus_space_tag_t bst, bus_space_handle_t bsh,    \
      bus_addr_t ba, CAT3(u_int,m,_t) *x, size_t cnt)                         \
 {                                                                            \
-       while (cnt--)                                                         \
-               *x++ = CAT(bus_space_read_,n)(bst, bsh, ba++);                \
+       while (cnt--) {                                                       \
+               *x++ = CAT(bus_space_read_,n)(bst, bsh, ba);                  \
+               ba += (n);                                                    \
+       }                                                                     \
 }
 
 bus_space_read_region(1,8)
@@ -177,9 +179,8 @@ static __inline void                                        
                      \
 CAT(bus_space_write_multi_,n)(bus_space_tag_t bst, bus_space_handle_t bsh,    \
      bus_size_t o, const CAT3(u_int,m,_t) *x, size_t cnt)                    \
 {                                                                            \
-       while (cnt--) {                                                       \
+       while (cnt--)                                                         \
                CAT(bus_space_write_,n)(bst, bsh, o, *x++);                   \
-       }                                                                     \
 }
 
 bus_space_write_multi(1,8)
@@ -195,7 +196,7 @@ CAT(bus_space_write_region_,n)(bus_space
 {                                                                            \
        while (cnt--) {                                                       \
                CAT(bus_space_write_,n)(bst, bsh, ba, *x++);                  \
-               ba += sizeof(x);                                              \
+               ba += (n);                                                    \
        }                                                                     \
 }
 
@@ -231,7 +232,7 @@ CAT(bus_space_set_region_,n)(bus_space_t
 {                                                                            \
        while (cnt--) {                                                       \
                CAT(bus_space_write_,n)(bst, bsh, ba, x);                     \
-               ba += sizeof(x);                                              \
+               ba += (n);                                                    \
        }                                                                     \
 }
 

Reply via email to