Skip to contentSkip to conversation

arm:kvm correct prototype to make sparse happy

PATCH In review Peng Fan 2 participants 4 messages Dec 22, 2014

Subsystems (2)
lore
Share & tools
lore

Peng Fan

author
#0 lore raw

PATCH 1/2 arm:kvm correct prototype to make sparse happy

Warning message:
arch/arm/kvm/arm.c:85:17:
error: symbol 'kvm_get_running_vcpus' redeclared with different type (originally declared at ./arch/arm/include/asm/kvm_host.h :190) - different address spaces

CC Gleb Natapov <[email protected]>
CC Paolo Bonzini <[email protected]>
CC Christoffer Dall <[email protected]>
CC Marc Zyngier <[email protected]>
CC Russell King <[email protected]>
---
 arch/arm/include/asm/kvm_host.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/include/asm/kvm_host.h +1 -1
index 53036e2..219d025 100644
@@ -187,7 +187,7 @@ static inline void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm,
 }
 
 struct kvm_vcpu *kvm_arm_get_running_vcpu(void);
-struct kvm_vcpu __percpu **kvm_get_running_vcpus(void);
+struct kvm_vcpu * __percpu *kvm_get_running_vcpus(void);
 
 int kvm_arm_copy_coproc_indices(struct kvm_vcpu *vcpu, u64 __user *uindices);
 unsigned long kvm_arm_num_coproc_regs(struct kvm_vcpu *vcpu);
Signature · 1 line
1.8.4
author
#1 lore raw

PATCH 2/2 arm:kvm remove len 8 for mmio read write buf

For arm 32 bit architecture, 8 bytes load/store operation in one instruction will not be generated by compiler.

And before invoke mmio_read_buf, there is a piece of code:
"

                 len = run->mmio.len;
                 if (len > sizeof(unsigned long))
                         return -EINVAL;

		data = mmio_read_buf(run->mmio.data, len);

"

This piece code also tells that len variable does not exceeds 4 bytes. So, remove 8 bytes assign in mmio_read_buf and mmio_write_buf.

CC Gleb Natapov <[email protected]>
CC Paolo Bonzini <[email protected]>
CC Christoffer Dall <[email protected]>
CC Marc Zyngier <[email protected]>
CC Russell King <[email protected]>
---
 arch/arm/kvm/mmio.c | 10 ----------
 1 file changed, 10 deletions(-)
arch/arm/kvm/mmio.c +0 -10
index 4cb5a93..953a819 100644
@@ -30,7 +30,6 @@ static void mmio_write_buf(char *buf, unsigned int len, unsigned long data)
 		u8	byte;
 		u16	hword;
 		u32	word;
-		u64	dword;
 	} tmp;
 
 	switch (len) {
@@ -46,10 +45,6 @@ static void mmio_write_buf(char *buf, unsigned int len, unsigned long data)
 		tmp.word	= data;
 		datap		= &tmp.word;
 		break;
-	case 8:
-		tmp.dword	= data;
-		datap		= &tmp.dword;
-		break;
 	}
 
 	memcpy(buf, datap, len);
@@ -61,7 +56,6 @@ static unsigned long mmio_read_buf(char *buf, unsigned int len)
 	union {
 		u16	hword;
 		u32	word;
-		u64	dword;
 	} tmp;
 
 	switch (len) {
@@ -76,10 +70,6 @@ static unsigned long mmio_read_buf(char *buf, unsigned int len)
 		memcpy(&tmp.word, buf, len);
 		data = tmp.word;
 		break;
-	case 8:
-		memcpy(&tmp.dword, buf, len);
-		data = tmp.dword;
-		break;
 	}
 
 	return data;
Signature · 1 line
1.8.4
#2 lore raw

Re: [PATCH 2/2] arm:kvm remove len 8 for mmio read write buf

Quoted 2 lines · Peng Fan

For arm 32 bit architecture, 8 bytes load/store operation in one instruction will not be generated by compiler.

Ever heard of lrdr/strd?

Quoted 11 lines

And before invoke mmio_read_buf, there is a piece of code:
"

                 len = run->mmio.len;
                 if (len > sizeof(unsigned long))
                         return -EINVAL;

		data = mmio_read_buf(run->mmio.data, len);

"

This piece code also tells that len variable does not exceeds 4 bytes. So, remove 8 bytes assign in mmio_read_buf and mmio_write_buf.

NAK. This code is shared between arm and arm64. See commit f42798c.

	M.
Quoted 54 lines
CC Gleb Natapov <[email protected]>
CC Paolo Bonzini <[email protected]>
CC Christoffer Dall <[email protected]>
CC Marc Zyngier <[email protected]>
CC Russell King <[email protected]>
---
 arch/arm/kvm/mmio.c | 10 ----------
 1 file changed, 10 deletions(-)
arch/arm/kvm/mmio.c +0 -10
index 4cb5a93..953a819 100644
@@ -30,7 +30,6 @@ static void mmio_write_buf(char *buf, unsigned int len, unsigned long data)
 		u8	byte;
 		u16	hword;
 		u32	word;
-		u64	dword;
 	} tmp;
 
 	switch (len) {
@@ -46,10 +45,6 @@ static void mmio_write_buf(char *buf, unsigned int len, unsigned long data)
 		tmp.word	= data;
 		datap		= &tmp.word;
 		break;
-	case 8:
-		tmp.dword	= data;
-		datap		= &tmp.dword;
-		break;
 	}
 
 	memcpy(buf, datap, len);
@@ -61,7 +56,6 @@ static unsigned long mmio_read_buf(char *buf, unsigned int len)
 	union {
 		u16	hword;
 		u32	word;
-		u64	dword;
 	} tmp;
 
 	switch (len) {
@@ -76,10 +70,6 @@ static unsigned long mmio_read_buf(char *buf, unsigned int len)
 		memcpy(&tmp.word, buf, len);
 		data = tmp.word;
 		break;
-	case 8:
-		memcpy(&tmp.dword, buf, len);
-		data = tmp.dword;
-		break;
 	}
 
 	return data;
Signature · 1 line
Jazz is not dead. It just smells funny...
author
#3 lore raw

Re: [PATCH 2/2] arm:kvm remove len 8 for mmio read write buf

Just began learning this piece of code.
Thanks for correcting me.

Quoted 78 lines · Marc Zyngier
Quoted 2 lines · Peng Fan

For arm 32 bit architecture, 8 bytes load/store operation in one instruction will not be generated by compiler.

Ever heard of lrdr/strd?

Quoted 11 lines

And before invoke mmio_read_buf, there is a piece of code:
"

                 len = run->mmio.len;
                 if (len > sizeof(unsigned long))
                         return -EINVAL;

		data = mmio_read_buf(run->mmio.data, len);

"

This piece code also tells that len variable does not exceeds 4 bytes. So, remove 8 bytes assign in mmio_read_buf and mmio_write_buf.

NAK. This code is shared between arm and arm64. See commit f42798c.

	M.
Quoted 54 lines
CC Gleb Natapov <[email protected]>
CC Paolo Bonzini <[email protected]>
CC Christoffer Dall <[email protected]>
CC Marc Zyngier <[email protected]>
CC Russell King <[email protected]>
---
 arch/arm/kvm/mmio.c | 10 ----------
 1 file changed, 10 deletions(-)
arch/arm/kvm/mmio.c +0 -10
index 4cb5a93..953a819 100644
@@ -30,7 +30,6 @@ static void mmio_write_buf(char *buf, unsigned int len, unsigned long data)
 		u8	byte;
 		u16	hword;
 		u32	word;
-		u64	dword;
 	} tmp;
 
 	switch (len) {
@@ -46,10 +45,6 @@ static void mmio_write_buf(char *buf, unsigned int len, unsigned long data)
 		tmp.word	= data;
 		datap		= &tmp.word;
 		break;
-	case 8:
-		tmp.dword	= data;
-		datap		= &tmp.dword;
-		break;
 	}
 
 	memcpy(buf, datap, len);
@@ -61,7 +56,6 @@ static unsigned long mmio_read_buf(char *buf, unsigned int len)
 	union {
 		u16	hword;
 		u32	word;
-		u64	dword;
 	} tmp;
 
 	switch (len) {
@@ -76,10 +70,6 @@ static unsigned long mmio_read_buf(char *buf, unsigned int len)
 		memcpy(&tmp.word, buf, len);
 		data = tmp.word;
 		break;
-	case 8:
-		memcpy(&tmp.dword, buf, len);
-		data = tmp.dword;
-		break;
 	}
 
 	return data;