qemu/hw/core
Peter Maydell 78b6eaa6f3 ptimer: Provide new transaction-based API
Provide the new transaction-based API. If a ptimer is created
using ptimer_init() rather than ptimer_init_with_bh(), then
instead of providing a QEMUBH, it provides a pointer to the
callback function directly, and has opted into the transaction
API. All calls to functions which modify ptimer state:
 - ptimer_set_period()
 - ptimer_set_freq()
 - ptimer_set_limit()
 - ptimer_set_count()
 - ptimer_run()
 - ptimer_stop()
must be between matched calls to ptimer_transaction_begin()
and ptimer_transaction_commit(). When ptimer_transaction_commit()
is called it will evaluate the state of the timer after all the
changes in the transaction, and call the callback if necessary.

In the old API the individual update functions generally would
call ptimer_trigger() immediately, which would schedule the QEMUBH.
In the new API the update functions will instead defer the
"set s->next_event and call ptimer_reload()" work to
ptimer_transaction_commit().

Because ptimer_trigger() can now immediately call into the
device code which may then call other ptimer functions that
update ptimer_state fields, we must be more careful in
ptimer_reload() not to cache fields from ptimer_state across
the ptimer_trigger() call. (This was harmless with the QEMUBH
mechanism as the BH would not be invoked until much later.)

We use assertions to check that:
 * the functions modifying ptimer state are not called outside
   a transaction block
 * ptimer_transaction_begin() and _commit() calls are paired
 * the transaction API is not used with a QEMUBH ptimer

There is some slight repetition of code:
 * most of the set functions have similar looking "if s->bh
   call ptimer_reload, otherwise set s->need_reload" code
 * ptimer_init() and ptimer_init_with_bh() have similar code
We deliberately don't try to avoid this repetition, because
it will all be deleted when the QEMUBH version of the API
is removed.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20191008171740.9679-3-peter.maydell@linaro.org
2019-10-15 18:09:02 +01:00
..
bus.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
cpu.c cputlb: Remove cpu->mem_io_vaddr 2019-09-25 10:56:28 -07:00
empty_slot.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
fw-path-provider.c Include qemu/module.h where needed, drop it from qemu-common.h 2019-06-12 13:18:33 +02:00
generic-loader.c hw/core: Move cpu.c, cpu.h from qom/ to hw/core/ 2019-08-21 13:24:01 +02:00
hotplug.c call HotplugHandler->plug() as the last step in device realization 2018-10-19 13:44:12 +02:00
irq.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
Kconfig hw/core: Add a config switch for the generic loader device 2019-08-20 09:11:17 +02:00
loader-fit.c Clean up inclusion of sysemu/sysemu.h 2019-08-16 13:31:53 +02:00
loader.c hw/core/loader: Fix possible crash in rom_copy() 2019-10-01 11:42:27 +02:00
machine-hmp-cmds.c numa: move numa global variable nb_numa_nodes into MachineState 2019-09-03 11:26:55 -03:00
machine-qmp-cmds.c qapi: report the default CPU type for each machine 2019-09-03 14:39:46 -03:00
machine.c virtio,vhost: fixes, features, cleanups. 2019-09-04 17:22:34 +01:00
Makefile.objs hw/core: Move cpu.c, cpu.h from qom/ to hw/core/ 2019-08-21 13:24:01 +02:00
nmi.c Include qemu/module.h where needed, drop it from qemu-common.h 2019-06-12 13:18:33 +02:00
null-machine.c hw/core: Move cpu.c, cpu.h from qom/ to hw/core/ 2019-08-21 13:24:01 +02:00
numa.c numa: move numa global variable numa_info into MachineState 2019-09-03 11:26:55 -03:00
or-irq.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
platform-bus.c Clean up inclusion of sysemu/sysemu.h 2019-08-16 13:31:53 +02:00
ptimer.c ptimer: Provide new transaction-based API 2019-10-15 18:09:02 +01:00
qdev-fw.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
qdev-properties-system.c audio: add audiodev properties to frontends 2019-08-21 09:13:37 +02:00
qdev-properties.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
qdev.c qdev/machine: Introduce hotplug_allowed hook 2019-09-16 06:57:24 -04:00
register.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
reset.c qemu/queue.h: leave head structs anonymous unless necessary 2019-01-11 15:46:55 +01:00
split-irq.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
stream.c Include qemu/module.h where needed, drop it from qemu-common.h 2019-06-12 13:18:33 +02:00
sysbus.c Include qemu/module.h where needed, drop it from qemu-common.h 2019-06-12 13:18:33 +02:00
trace-events loader: Trace loaded images 2019-09-18 10:18:51 +01:00
uboot_image.h Support u-boot noload images for arm as used by, NetBSD/evbarm GENERIC kernel. 2019-01-07 15:46:20 +00:00
vm-change-state-handler.c sysemu: Split sysemu/runstate.h off sysemu/sysemu.h 2019-08-16 13:37:36 +02:00