James Morris wrote:
> At http://namei.org/misc/lguest/patches/time/v04/
>
> Just a resync to the latest upstream lguest patch queue, after some fun 
> with bare metal bugs and assorted churn.
>
>
>
> - James
>   

+void guest_clockevent(struct lguest *lg, const ktime_t __user *u)
+{
+       ktime_t kdelta;
+
+       lgread(lg, &kdelta, (u32)u, sizeof(kdelta));
+
+       if (ktime_to_ns(kdelta) < LG_CLOCK_MIN_DELTA) {
+               if (printk_ratelimit())
+                       printk(KERN_DEBUG "%s: guest %u small delta %Ld ns\n",
+                              __FUNCTION__, lg->guestid, ktime_to_ns(kdelta));
+
+               /* kick guest timer immediately */
+               set_bit(0, lg->irqs_pending);
+       } else
+               hrtimer_start(&lg->hrt, kdelta, HRTIMER_MODE_REL);
+}


Two things:

   1. It's probably better to make this interface specified in absolute
      rather than relative time.  Asking for a timeout "X ns from _now_"
      is a bit vague if the guest can be preempted and _now_ can be
      arbitrarily deferred.  The tricky part about using an absolute
      time is that the guest needs to work out how to convert from a
      guest time into hypervisor time...
   2. Rather than kicking the timer immediately for too-short (or
      negative) timeouts, it should have the option to return -ETIME, to
      match the clockevents set_next_event API.


+static int lguest_clockevent_set_next_event(unsigned long delta,
+                                           struct clock_event_device *evt)
+{
+       ktime_t kdelta = ktime_sub(evt->next_event, ktime_get());
+       hcall(LHCALL_CLOCKEVENT, __pa(&kdelta), 0, 0);
+       return 0;
+}


Why compute kdelta?  Why not just use "delta"?

    J
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization

Reply via email to