arm:kvm correct prototype to make sparse happy
Subsystems (2)
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
--- arch/arm/include/asm/kvm_host.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/include/asm/kvm_host.h +1 -1
@@ -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
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.
--- arch/arm/kvm/mmio.c | 10 ---------- 1 file changed, 10 deletions(-)
arch/arm/kvm/mmio.c +0 -10
@@ -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
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_bufandmmio_write_buf.
NAK. This code is shared between arm and arm64. See commit f42798c.
M.
Quoted 54 lines
Signed-off-by Peng Fan <[email protected]>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@@ -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...
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_bufandmmio_write_buf.NAK. This code is shared between arm and arm64. See commit f42798c.
M.Quoted 54 lines
Signed-off-by Peng Fan <[email protected]>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@@ -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;