From: Mushahid Hussain <hmushi@amazon.co.uk>
To: <kvm@vger.kernel.org>
Cc: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
"K . Y . Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
"Wei Liu" <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
Long Li <longli@microsoft.com>, <linux-hyperv@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <nh-open-source@amazon.com>,
<mushi.shar@gmail.com>
Subject: [PATCH 2/3] KVM: x86: Extract __kvm_set_clock() from kvm_vm_ioctl_set_clock()
Date: Mon, 5 Oct 2026 19:24:30 +0000 [thread overview]
Message-ID: <20261005192431.87317-3-hmushi@amazon.co.uk> (raw)
In-Reply-To: <20261005192431.87317-1-hmushi@amazon.co.uk>
Move the body of KVM_SET_CLOCK into __kvm_set_clock() and leave the
copy from userspace and the flags check in the ioctl handler. A
following patch steps kvmclock from inside KVM and needs the worker.
No functional change intended.
Assisted-by: Claude:claude-fable-5.1
Signed-off-by: Mushahid Hussain <hmushi@amazon.co.uk>
---
arch/x86/kvm/x86.c | 40 +++++++++++++++++++++++-----------------
1 file changed, 23 insertions(+), 17 deletions(-)
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 32563a91fba99..19666a80240a5 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -4354,22 +4354,11 @@ static int kvm_vm_ioctl_get_clock(struct kvm *kvm, void __user *argp)
return 0;
}
-static int kvm_vm_ioctl_set_clock(struct kvm *kvm, void __user *argp)
+static void __kvm_set_clock(struct kvm *kvm, struct kvm_clock_data *data)
{
struct kvm_arch *ka = &kvm->arch;
- struct kvm_clock_data data;
u64 now_raw_ns;
- if (copy_from_user(&data, argp, sizeof(data)))
- return -EFAULT;
-
- /*
- * Only KVM_CLOCK_REALTIME is used, but allow passing the
- * result of KVM_GET_CLOCK back to KVM_SET_CLOCK.
- */
- if (data.flags & ~KVM_CLOCK_VALID_FLAGS)
- return -EINVAL;
-
kvm_hv_request_tsc_page_update(kvm);
kvm_start_pvclock_update(kvm);
pvclock_update_vm_gtod_copy(kvm);
@@ -4379,24 +4368,41 @@ static int kvm_vm_ioctl_set_clock(struct kvm *kvm, void __user *argp)
* in use, we use master_kernel_ns + kvmclock_offset to set
* unsigned 'system_time' so if we use get_kvmclock_ns() (which
* is slightly ahead) here we risk going negative on unsigned
- * 'system_time' when 'data.clock' is very small.
+ * 'system_time' when 'data->clock' is very small.
*/
- if (data.flags & KVM_CLOCK_REALTIME) {
+ if (data->flags & KVM_CLOCK_REALTIME) {
u64 now_real_ns = ktime_get_real_ns();
/*
* Avoid stepping the kvmclock backwards.
*/
- if (now_real_ns > data.realtime)
- data.clock += now_real_ns - data.realtime;
+ if (now_real_ns > data->realtime)
+ data->clock += now_real_ns - data->realtime;
}
if (ka->use_master_clock)
now_raw_ns = ka->master_kernel_ns;
else
now_raw_ns = get_kvmclock_base_ns();
- ka->kvmclock_offset = data.clock - now_raw_ns;
+ ka->kvmclock_offset = data->clock - now_raw_ns;
kvm_end_pvclock_update(kvm);
+}
+
+static int kvm_vm_ioctl_set_clock(struct kvm *kvm, void __user *argp)
+{
+ struct kvm_clock_data data;
+
+ if (copy_from_user(&data, argp, sizeof(data)))
+ return -EFAULT;
+
+ /*
+ * Only KVM_CLOCK_REALTIME is used, but allow passing the
+ * result of KVM_GET_CLOCK back to KVM_SET_CLOCK.
+ */
+ if (data.flags & ~KVM_CLOCK_VALID_FLAGS)
+ return -EINVAL;
+
+ __kvm_set_clock(kvm, &data);
return 0;
}
--
2.47.3
next prev parent reply other threads:[~2026-10-05 19:25 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-05 19:24 [PATCH 0/3] KVM: x86: Support hibernation of a nested Hyper-V Mushahid Hussain
2026-10-05 19:24 ` [PATCH 1/3] KVM: nVMX: Clear stale vmcs02 sync flag in free_nested() Mushahid Hussain
2026-10-05 19:24 ` Mushahid Hussain [this message]
2026-10-05 19:24 ` [PATCH 3/3] KVM: x86: hyper-v: Implement HvCallRestorePartitionTime Mushahid Hussain
2026-10-05 19:38 ` sashiko-bot
2026-10-05 22:30 ` David Woodhouse
2026-10-06 5:08 ` [PATCH 0/3] KVM: x86: Support hibernation of a nested Hyper-V David Woodhouse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261005192431.87317-3-hmushi@amazon.co.uk \
--to=hmushi@amazon.co.uk \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=kvm@vger.kernel.org \
--cc=kys@microsoft.com \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=longli@microsoft.com \
--cc=mushi.shar@gmail.com \
--cc=nh-open-source@amazon.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=vkuznets@redhat.com \
--cc=wei.liu@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox