@samitouri / QOSamiQemu / commits / f029c634ee

target/loongarch/kvm: pass device attr by reference to kvm_vcpu_ioctl

kvm_vcpu_ioctl() is variadic and reads its argument as a pointer, but kvm_get_stealtime(), kvm_set_stealtime() and kvm_set_pv_features() pass the local struct kvm_device_attr by value. It currently works because of how the calling convention passes large structs; pass &attr so the argument is passed as intended. Reviewed-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Tao Cui <cuitao@kylinos.cn> Message-ID: <20260626052742.810726-3-cui.tao@linux.dev> Signed-off-by: Song Gao <gaosong@loongson.cn>

Tao Cui committed Jun 26, 2026 at 13:27 UTC f029c634ee99e70f7523a8662fe83d92c1999852
1 file changed +6 -6
target/loongarch/kvm/kvm.c
+6 -6
@@ -46,12 +46,12 @@ static int kvm_get_stealtime(CPUState *cs)
46 .addr = (uint64_t)&env->stealtime.guest_addr,
47 };
48
49 - err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, attr);
49 + err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, &attr);
50 if (err) {
51 return 0;
52 }
53
54 - err = kvm_vcpu_ioctl(cs, KVM_GET_DEVICE_ATTR, attr);
54 + err = kvm_vcpu_ioctl(cs, KVM_GET_DEVICE_ATTR, &attr);
55 if (err) {
56 error_report("PVTIME: KVM_GET_DEVICE_ATTR: %s", strerror(errno));
57 return err;
@@ -70,12 +70,12 @@ static int kvm_set_stealtime(CPUState *cs)
70 .addr = (uint64_t)&env->stealtime.guest_addr,
71 };
72
73 - err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, attr);
73 + err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, &attr);
74 if (err) {
75 return 0;
76 }
77
78 - err = kvm_vcpu_ioctl(cs, KVM_SET_DEVICE_ATTR, attr);
78 + err = kvm_vcpu_ioctl(cs, KVM_SET_DEVICE_ATTR, &attr);
79 if (err) {
80 error_report("PVTIME: KVM_SET_DEVICE_ATTR %s with gpa "TARGET_FMT_lx,
81 strerror(errno), env->stealtime.guest_addr);
@@ -96,13 +96,13 @@ static int kvm_set_pv_features(CPUState *cs)
96 .addr = (uint64_t)&val,
97 };
98
99 - err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, attr);
99 + err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, &attr);
100 if (err) {
101 return 0;
102 }
103
104 val = env->pv_features;
105 - err = kvm_vcpu_ioctl(cs, KVM_SET_DEVICE_ATTR, attr);
105 + err = kvm_vcpu_ioctl(cs, KVM_SET_DEVICE_ATTR, &attr);
106 if (err) {
107 error_report("Fail to set pv feature "TARGET_FMT_lx " with error %s",
108 val, strerror(errno));