Skip to contentSkip to conversation

matroxfb: fix incorrect use of memcpy_toio()

PATCH In review Ondrej Zary 2 participants 3 messages Aug 11, 2010 Framebuffer layer

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 matroxfb: fix incorrect use of memcpy_toio()

Fix incorrect use of memcpy_toio() in matroxfb that broke in 2.6.34 on x86.

drivers/video/matrox/matroxfb_base.h +2 -2
@@ -151,13 +151,13 @@ static inline void mga_writel(vaddr_t va
 static inline void mga_memcpy_toio(vaddr_t va, const void* src, int len) {
 #if defined(__alpha__) || defined(__i386__) || defined(__x86_64__)
 	/*
-	 * memcpy_toio works for us if:
+	 * iowrite32_rep works for us if:
 	 *  (1) Copies data as 32bit quantities, not byte after byte,
 	 *  (2) Performs LE ordered stores, and
 	 *  (3) It copes with unaligned source (destination is guaranteed to be page
 	 *      aligned and length is guaranteed to be multiple of 4).
 	 */
-	memcpy_toio(va.vaddr, src, len);
+	iowrite32_rep(va.vaddr, src, len >> 2);
 #else
         u_int32_t __iomem* addr = va.vaddr;
 
Signature · 1 line
Ondrej Zary
#1 lore raw
Quoted 2 lines · On Wed, 11 Aug 2010 22:27:42 +0200 Ondrej Zary <[email protected]>…

Fix incorrect use of memcpy_toio() in matroxfb that broke in 2.6.34 on x86.

Thanks.

What was incorrect about it? And what is the user-visible effect of this regression?

#2 lore raw
Quoted 10 lines · On Wednesday 11 August 2010 22:41:36 Andrew Morton wrote:

On Wed, 11 Aug 2010 22:27:42 +0200

Quoted 2 lines · Ondrej Zary

Fix incorrect use of memcpy_toio() in matroxfb that broke in 2.6.34 on x86.

Thanks.

What was incorrect about it? And what is the user-visible effect of this regression?

Screen is completely corrupted since 2.6.34. Bisection revealed that it's caused by commit 6175ddf06b6172046a329e3abfd9c901a43efd2e. H. Peter Anvin explained that memcpy_toio() does not copy data in 32bit chunks anymore on x86.

See: http://lkml.org/lkml/2010/8/2/409

Signature · 1 line
Ondrej Zary