Hello Marc, This patch is of special interest to me as I was working on my own ECV/CNTPOFF implementation, although mine was more narrow and doesn't address any of your other goals. As far as I can tell at the moment, your patch can cover the uses of mine, so I will dedicate myself to reviewing and testing yours. Please include me on any future rerolls of this patch. Marc Zyngier <maz@xxxxxxxxxx> writes:
This series aims at satisfying multiple goals:
- allow a VMM to atomically restore a timer offset for a whole VM instead of updating the offset each time a vcpu get its counter written
- allow a VMM to save/restore the physical timer context, something that we cannot do at the moment due to the lack of offsetting
- provide a framework that is suitable for NV support, where we get both global and per timer, per vcpu offsetting
If I am understanding your changes correctly, you introduce some VM-wide timers with no hardware backing and a new API to access them from userspace. This is useful both because it makes the code simpler (no need to manually keep registers in sync), and so CNT{V,P}OFF can be appropriately virtualized with NV. Is that a fair summary of the important bits?
This has been moderately tested with nVHE, VHE and NV. I do not have access to CNTPOFF-aware HW, so the jury is still out on that one. Note that the NV patches in this series are here to give a perspective on how this gets used.
I've updated the arch_timer selftest to allow offsets to be provided from the command line, but the arch_test is pretty flimsy and tends to fail with an error==EINTR, even without this series. Something to investigate.
I can help you with testing because I have access to CNTPOFF-aware hardware and emulators. Is there anything you are especially interested to try out?