]> git.proxmox.com Git - mirror_qemu.git/commit - kvm-all.c
intc/gic: Extract some reusable vGIC code
authorPavel Fedin <p.fedin@samsung.com>
Thu, 24 Sep 2015 00:29:36 +0000 (01:29 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Thu, 24 Sep 2015 00:29:36 +0000 (01:29 +0100)
commit4b3cfe72d9b9c53be31a88e7eebdda14f1757d3e
tree83c08a78208f17f4e41051f19e730d3a8b5d6e5b
parentff8f06ee7680fb505079d33caaf8f5ebff0853bc
intc/gic: Extract some reusable vGIC code

Some functions previously used only by vGICv2 are useful also for vGICv3
implementation. Untie them from GICState and make accessible from within
other modules:
- kvm_arm_gic_set_irq()
- kvm_gic_supports_attr() - moved to common code and renamed to
  kvm_device_check_attr()
- kvm_gic_access() - turned into GIC-independent kvm_device_access().
  Data pointer changed to void * because some GICv3 registers are
  64-bit wide

Some of these changes are not used right now, but they will be helpful for
implementing live migration.

Actually kvm_dist_get() and kvm_dist_put() could also be made reusable, but
they would require two extra parameters (s->dev_fd and s->num_cpu) as well as
lots of typecasts of 's' to DeviceState * and back to GICState *. This makes
the code very ugly so i decided to stop at this point. I tried also an
approach with making a base class for all possible GICs, but it would contain
only three variables (dev_fd, cpu_num and irq_num), and accessing them through
the rest of the code would be again tedious (either ugly casts or qemu-style
separate object pointer). So i disliked it too.

Signed-off-by: Pavel Fedin <p.fedin@samsung.com>
Tested-by: Ashok kumar <ashoks@broadcom.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 2ef56d1dd64ffb75ed02a10dcdaf605e5b8ff4f8.1441784344.git.p.fedin@samsung.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/intc/arm_gic_kvm.c
hw/intc/vgic_common.h [new file with mode: 0644]
include/sysemu/kvm.h
kvm-all.c