Skip to content
  • Pavel Fedin's avatar
    4b3cfe72
    intc/gic: Extract some reusable vGIC code · 4b3cfe72
    Pavel Fedin authored
    
    
    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: default avatarPavel Fedin <p.fedin@samsung.com>
    Tested-by: default avatarAshok kumar <ashoks@broadcom.com>
    Reviewed-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Message-id: 2ef56d1dd64ffb75ed02a10dcdaf605e5b8ff4f8.1441784344.git.p.fedin@samsung.com
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    4b3cfe72
    intc/gic: Extract some reusable vGIC code
    Pavel Fedin authored
    
    
    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: default avatarPavel Fedin <p.fedin@samsung.com>
    Tested-by: default avatarAshok kumar <ashoks@broadcom.com>
    Reviewed-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Message-id: 2ef56d1dd64ffb75ed02a10dcdaf605e5b8ff4f8.1441784344.git.p.fedin@samsung.com
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Loading