• P
    intc/gic: Extract some reusable vGIC code · 4b3cfe72
    Pavel Fedin 提交于
    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: NPavel Fedin <p.fedin@samsung.com>
    Tested-by: NAshok kumar <ashoks@broadcom.com>
    Reviewed-by: NPeter Maydell <peter.maydell@linaro.org>
    Message-id: 2ef56d1dd64ffb75ed02a10dcdaf605e5b8ff4f8.1441784344.git.p.fedin@samsung.com
    Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
    4b3cfe72
arm_gic_kvm.c 18.4 KB