mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
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>
This commit is contained in:
parent
ff8f06ee76
commit
4b3cfe72d9
4 changed files with 129 additions and 66 deletions
|
@ -239,6 +239,32 @@ int kvm_device_ioctl(int fd, int type, ...);
|
|||
*/
|
||||
int kvm_vm_check_attr(KVMState *s, uint32_t group, uint64_t attr);
|
||||
|
||||
/**
|
||||
* kvm_device_check_attr - check for existence of a specific device attribute
|
||||
* @fd: The device file descriptor
|
||||
* @group: the group
|
||||
* @attr: the attribute of that group to query for
|
||||
*
|
||||
* Returns: 1 if the attribute exists
|
||||
* 0 if the attribute either does not exist or if the vm device
|
||||
* interface is unavailable
|
||||
*/
|
||||
int kvm_device_check_attr(int fd, uint32_t group, uint64_t attr);
|
||||
|
||||
/**
|
||||
* kvm_device_access - set or get value of a specific vm attribute
|
||||
* @fd: The device file descriptor
|
||||
* @group: the group
|
||||
* @attr: the attribute of that group to set or get
|
||||
* @val: pointer to a storage area for the value
|
||||
* @write: true for set and false for get operation
|
||||
*
|
||||
* This function is not allowed to fail. Use kvm_device_check_attr()
|
||||
* in order to check for the availability of optional attributes.
|
||||
*/
|
||||
void kvm_device_access(int fd, int group, uint64_t attr,
|
||||
void *val, bool write);
|
||||
|
||||
/**
|
||||
* kvm_create_device - create a KVM device for the device control API
|
||||
* @KVMState: The KVMState pointer
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue