在 2026/6/26 下午1:27, Tao Cui 写道:
From: Tao Cui <[email protected]>

A few small robustness fixes around cpucfg register sync and kvm device
attribute handling in the LoongArch KVM target.

   1/4: kvm_check_cpucfg2() discarded the return value of
        KVM_GET_DEVICE_ATTR and used an uninitialized val to mask
        cpucfg[2]; check the return value, warn and skip the mask on a GET
        failure (best-effort negotiation), and initialize val.

   2/4: kvm_get_stealtime(), kvm_set_stealtime() and kvm_set_pv_features()
        pass a struct kvm_device_attr by value to the variadic
        kvm_vcpu_ioctl(), which expects a pointer. Pass &attr.

   3/4: drop the redundant trace_kvm_failed_get/put_cpucfg() calls and
        their now-unused trace events; kvm_get/set_one_reg() already trace
        on failure.

   4/4: kvm_loongarch_get/put_cpucfg() overwrite ret on each iteration, so
        only the last register's result is returned and earlier failures
        are lost; on a failed read, get_cpucfg() also stores a stale val.
        Accumulate errors with ret |= and only store on a successful read.

Compiled and boot-tested on a loongarch64 KVM host.

Tao Cui (4):
   target/loongarch/kvm: fix uninitialized val and unchecked GET in
     cpucfg2 check
   target/loongarch/kvm: pass device attr by reference to kvm_vcpu_ioctl
   target/loongarch/kvm: remove redundant cpucfg failure traces
   target/loongarch/kvm: fix cpucfg sync error handling

  target/loongarch/kvm/kvm.c    | 46 ++++++++++++++++++++---------------
  target/loongarch/trace-events |  2 --
  2 files changed, 26 insertions(+), 22 deletions(-)

---
Applied to loongarch-next.

Thanks.
Song Gao
Changes in v2:
   - 1/4: on KVM_GET_DEVICE_ATTR failure, warn and skip the cpucfg2 mask
     instead of failing the register sync; the &= mask is best-effort, and a
     GET failure after a successful HAS is most likely a copy_{from,to}_user
     issue. Switched the report from error_report() to warn_report().



Reply via email to