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 Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization