Re: [RFC PATCH v12 10/11] arm64: add mechanism to let user choose which counter to return

From: Marc Zyngier
Date: Mon May 25 2020 - 05:17:24 EST

On 2020-05-24 03:11, Richard Cochran wrote:
On Fri, May 22, 2020 at 04:37:23PM +0800, Jianyong Wu wrote:
In general, vm inside will use virtual counter compered with host use
phyical counter. But in some special scenarios, like nested
virtualization, phyical counter maybe used by vm. A interface added in
ptp_kvm driver to offer a mechanism to let user choose which counter
should be return from host.

Sounds like you have two time sources, one for normal guest, and one
for nested. Why not simply offer the correct one to user space
automatically? If that cannot be done, then just offer two PHC
devices with descriptive names.

There is no such thing as a distinction between nested or non-nested.
Both counters are available to the guest at all times, and said guest
can choose whichever it wants to use. So the hypervisor (KVM) has to
support both counters as a reference.

For a Linux guest, we always know which reference we're using (the
virtual counter). So it is pointless to expose the choice to userspace
at all.

diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c
index fef72f29f3c8..8b0a7b328bcd 100644
--- a/drivers/ptp/ptp_chardev.c
+++ b/drivers/ptp/ptp_chardev.c
@@ -123,6 +123,9 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)
struct timespec64 ts;
int enable, err = 0;

+#ifdef CONFIG_ARM64
+ static long flag;

static? This is not going to fly.

+ * In most cases, we just need virtual counter from host and
+ * there is limited scenario using this to get physical counter
+ * in guest.
+ * Be careful to use this as there is no way to set it back
+ * unless you reinstall the module.

How on earth is the user supposed to know this?

From your description, this "flag" really should be a module

Not even that. If anything, the driver can obtain full knowledge of which
counter is in use without any help. And the hard truth is that it is
*always* the virtual counter as far as Linux is concerned.

Jazz is not dead. It just smells funny...