On 02/06/2012 03:33 PM, Anthony Liguori wrote:Look at arch/x86/kvm/i8254.c:pit_ioport_read() for a counterexample.
There are also interactions with other devices (for example the
apic/ioapic interaction via the apic bus).
Hrm, maybe I'm missing it, but the path that would be hot is:
if (!status_latched&& !count_latched) {
value = kpit_elapsed()
// manipulate count based on mode
// mask value depending on read_state
}
This path is side-effect free, and applies relatively simple math to a
time counter.
Do guests always read an unlatched counter? Doesn't seem reasonable
since they can't get a stable count this way.
The idea would be to allow the filter to not handle an I/O request
depending on existing state. Anything that's modifies state (like
reading the latch counter) would drop to userspace.
This restricts us to a subset of the device which is at the mercy of the
guest.
We could define mmio registers for muldiv64, and for communicating over
the APIC bus. But then the device model for BPF ends up more
complicated than the kernel devices we have put together.