4 * Copyright (C) 2006-2008 Qumranet Technologies
6 * Licensed under the terms of the GNU GPL version 2 or higher.
9 #include "config-host.h"
15 #include "qemu-common.h"
25 #define EXPECTED_KVM_API_VERSION 12
27 #if EXPECTED_KVM_API_VERSION != KVM_API_VERSION
28 #error libkvm: userspace and kernel version mismatch
31 #define ALIGN(x, y) (((x)+(y)-1) & ~((y)-1))
33 static inline void set_gsi(KVMState
*s
, unsigned int gsi
)
35 uint32_t *bitmap
= s
->used_gsi_bitmap
;
37 if (gsi
< s
->max_gsi
) {
38 bitmap
[gsi
/ 32] |= 1U << (gsi
% 32);
40 DPRINTF("Invalid GSI %u\n", gsi
);
44 static inline void clear_gsi(KVMState
*s
, unsigned int gsi
)
46 uint32_t *bitmap
= s
->used_gsi_bitmap
;
48 if (gsi
< s
->max_gsi
) {
49 bitmap
[gsi
/ 32] &= ~(1U << (gsi
% 32));
51 DPRINTF("Invalid GSI %u\n", gsi
);
55 static int kvm_init_irq_routing(KVMState
*s
)
57 #ifdef KVM_CAP_IRQ_ROUTING
60 gsi_count
= kvm_check_extension(s
, KVM_CAP_IRQ_ROUTING
);
64 /* Round up so we can search ints using ffs */
65 gsi_bits
= ALIGN(gsi_count
, 32);
66 s
->used_gsi_bitmap
= g_malloc0(gsi_bits
/ 8);
67 s
->max_gsi
= gsi_bits
;
69 /* Mark any over-allocated bits as already in use */
70 for (i
= gsi_count
; i
< gsi_bits
; i
++) {
75 s
->irq_routes
= g_malloc0(sizeof(*s
->irq_routes
));
76 s
->nr_allocated_irq_routes
= 0;
78 r
= kvm_arch_init_irq_routing();
87 int kvm_create_irqchip(KVMState
*s
)
89 #ifdef KVM_CAP_IRQCHIP
92 if (!kvm_irqchip
|| !kvm_check_extension(s
, KVM_CAP_IRQCHIP
)) {
96 r
= kvm_vm_ioctl(s
, KVM_CREATE_IRQCHIP
);
98 fprintf(stderr
, "Create kernel PIC irqchip failed\n");
102 s
->irqchip_inject_ioctl
= KVM_IRQ_LINE
;
103 #if defined(KVM_CAP_IRQ_INJECT_STATUS) && defined(KVM_IRQ_LINE_STATUS)
104 if (kvm_check_extension(s
, KVM_CAP_IRQ_INJECT_STATUS
)) {
105 s
->irqchip_inject_ioctl
= KVM_IRQ_LINE_STATUS
;
108 s
->irqchip_in_kernel
= 1;
110 r
= kvm_init_irq_routing(s
);
119 #ifdef KVM_CAP_IRQCHIP
121 int kvm_set_irq(int irq
, int level
, int *status
)
123 struct kvm_irq_level event
;
126 if (!kvm_state
->irqchip_in_kernel
) {
131 r
= kvm_vm_ioctl(kvm_state
, kvm_state
->irqchip_inject_ioctl
,
134 perror("kvm_set_irq");
138 #ifdef KVM_CAP_IRQ_INJECT_STATUS
139 *status
= (kvm_state
->irqchip_inject_ioctl
== KVM_IRQ_LINE
) ?
149 int kvm_get_irqchip(KVMState
*s
, struct kvm_irqchip
*chip
)
153 if (!s
->irqchip_in_kernel
) {
156 r
= kvm_vm_ioctl(s
, KVM_GET_IRQCHIP
, chip
);
158 perror("kvm_get_irqchip\n");
163 int kvm_set_irqchip(KVMState
*s
, struct kvm_irqchip
*chip
)
167 if (!s
->irqchip_in_kernel
) {
170 r
= kvm_vm_ioctl(s
, KVM_SET_IRQCHIP
, chip
);
172 perror("kvm_set_irqchip\n");
179 #ifdef KVM_CAP_DEVICE_ASSIGNMENT
180 int kvm_assign_pci_device(KVMState
*s
,
181 struct kvm_assigned_pci_dev
*assigned_dev
)
183 return kvm_vm_ioctl(s
, KVM_ASSIGN_PCI_DEVICE
, assigned_dev
);
186 static int kvm_old_assign_irq(KVMState
*s
,
187 struct kvm_assigned_irq
*assigned_irq
)
189 return kvm_vm_ioctl(s
, KVM_ASSIGN_IRQ
, assigned_irq
);
192 #ifdef KVM_CAP_ASSIGN_DEV_IRQ
193 int kvm_assign_irq(KVMState
*s
, struct kvm_assigned_irq
*assigned_irq
)
197 ret
= kvm_ioctl(s
, KVM_CHECK_EXTENSION
, KVM_CAP_ASSIGN_DEV_IRQ
);
199 return kvm_vm_ioctl(s
, KVM_ASSIGN_DEV_IRQ
, assigned_irq
);
202 return kvm_old_assign_irq(s
, assigned_irq
);
205 int kvm_deassign_irq(KVMState
*s
, struct kvm_assigned_irq
*assigned_irq
)
207 return kvm_vm_ioctl(s
, KVM_DEASSIGN_DEV_IRQ
, assigned_irq
);
210 int kvm_assign_irq(KVMState
*s
, struct kvm_assigned_irq
*assigned_irq
)
212 return kvm_old_assign_irq(s
, assigned_irq
);
217 #ifdef KVM_CAP_DEVICE_DEASSIGNMENT
218 int kvm_deassign_pci_device(KVMState
*s
,
219 struct kvm_assigned_pci_dev
*assigned_dev
)
221 return kvm_vm_ioctl(s
, KVM_DEASSIGN_PCI_DEVICE
, assigned_dev
);
225 int kvm_reinject_control(KVMState
*s
, int pit_reinject
)
227 #ifdef KVM_CAP_REINJECT_CONTROL
229 struct kvm_reinject_control control
;
231 control
.pit_reinject
= pit_reinject
;
233 r
= kvm_ioctl(s
, KVM_CHECK_EXTENSION
, KVM_CAP_REINJECT_CONTROL
);
235 return kvm_vm_ioctl(s
, KVM_REINJECT_CONTROL
, &control
);
241 int kvm_has_gsi_routing(void)
245 #ifdef KVM_CAP_IRQ_ROUTING
246 r
= kvm_check_extension(kvm_state
, KVM_CAP_IRQ_ROUTING
);
251 int kvm_clear_gsi_routes(void)
253 #ifdef KVM_CAP_IRQ_ROUTING
254 kvm_state
->irq_routes
->nr
= 0;
261 int kvm_add_routing_entry(struct kvm_irq_routing_entry
*entry
)
263 #ifdef KVM_CAP_IRQ_ROUTING
264 KVMState
*s
= kvm_state
;
265 struct kvm_irq_routing
*z
;
266 struct kvm_irq_routing_entry
*new;
269 if (s
->irq_routes
->nr
== s
->nr_allocated_irq_routes
) {
270 n
= s
->nr_allocated_irq_routes
* 2;
274 size
= sizeof(struct kvm_irq_routing
);
275 size
+= n
* sizeof(*new);
276 z
= realloc(s
->irq_routes
, size
);
280 s
->nr_allocated_irq_routes
= n
;
283 n
= s
->irq_routes
->nr
++;
284 new = &s
->irq_routes
->entries
[n
];
285 memset(new, 0, sizeof(*new));
286 new->gsi
= entry
->gsi
;
287 new->type
= entry
->type
;
288 new->flags
= entry
->flags
;
291 set_gsi(s
, entry
->gsi
);
299 int kvm_add_irq_route(int gsi
, int irqchip
, int pin
)
301 #ifdef KVM_CAP_IRQ_ROUTING
302 struct kvm_irq_routing_entry e
;
305 e
.type
= KVM_IRQ_ROUTING_IRQCHIP
;
307 e
.u
.irqchip
.irqchip
= irqchip
;
308 e
.u
.irqchip
.pin
= pin
;
309 return kvm_add_routing_entry(&e
);
315 int kvm_del_routing_entry(struct kvm_irq_routing_entry
*entry
)
317 #ifdef KVM_CAP_IRQ_ROUTING
318 KVMState
*s
= kvm_state
;
319 struct kvm_irq_routing_entry
*e
, *p
;
320 int i
, gsi
, found
= 0;
324 for (i
= 0; i
< s
->irq_routes
->nr
; ++i
) {
325 e
= &s
->irq_routes
->entries
[i
];
326 if (e
->type
== entry
->type
&& e
->gsi
== gsi
) {
328 case KVM_IRQ_ROUTING_IRQCHIP
:{
329 if (e
->u
.irqchip
.irqchip
==
330 entry
->u
.irqchip
.irqchip
331 && e
->u
.irqchip
.pin
== entry
->u
.irqchip
.pin
) {
332 p
= &s
->irq_routes
->entries
[--s
->irq_routes
->nr
];
338 case KVM_IRQ_ROUTING_MSI
:{
339 if (e
->u
.msi
.address_lo
==
340 entry
->u
.msi
.address_lo
341 && e
->u
.msi
.address_hi
==
342 entry
->u
.msi
.address_hi
343 && e
->u
.msi
.data
== entry
->u
.msi
.data
) {
344 p
= &s
->irq_routes
->entries
[--s
->irq_routes
->nr
];
354 /* If there are no other users of this GSI
355 * mark it available in the bitmap */
356 for (i
= 0; i
< s
->irq_routes
->nr
; i
++) {
357 e
= &s
->irq_routes
->entries
[i
];
361 if (i
== s
->irq_routes
->nr
) {
375 int kvm_update_routing_entry(struct kvm_irq_routing_entry
*entry
,
376 struct kvm_irq_routing_entry
*newentry
)
378 #ifdef KVM_CAP_IRQ_ROUTING
379 KVMState
*s
= kvm_state
;
380 struct kvm_irq_routing_entry
*e
;
383 if (entry
->gsi
!= newentry
->gsi
|| entry
->type
!= newentry
->type
) {
387 for (i
= 0; i
< s
->irq_routes
->nr
; ++i
) {
388 e
= &s
->irq_routes
->entries
[i
];
389 if (e
->type
!= entry
->type
|| e
->gsi
!= entry
->gsi
) {
393 case KVM_IRQ_ROUTING_IRQCHIP
:
394 if (e
->u
.irqchip
.irqchip
== entry
->u
.irqchip
.irqchip
&&
395 e
->u
.irqchip
.pin
== entry
->u
.irqchip
.pin
) {
396 memcpy(&e
->u
.irqchip
, &newentry
->u
.irqchip
,
397 sizeof e
->u
.irqchip
);
401 case KVM_IRQ_ROUTING_MSI
:
402 if (e
->u
.msi
.address_lo
== entry
->u
.msi
.address_lo
&&
403 e
->u
.msi
.address_hi
== entry
->u
.msi
.address_hi
&&
404 e
->u
.msi
.data
== entry
->u
.msi
.data
) {
405 memcpy(&e
->u
.msi
, &newentry
->u
.msi
, sizeof e
->u
.msi
);
419 int kvm_del_irq_route(int gsi
, int irqchip
, int pin
)
421 #ifdef KVM_CAP_IRQ_ROUTING
422 struct kvm_irq_routing_entry e
;
425 e
.type
= KVM_IRQ_ROUTING_IRQCHIP
;
427 e
.u
.irqchip
.irqchip
= irqchip
;
428 e
.u
.irqchip
.pin
= pin
;
429 return kvm_del_routing_entry(&e
);
435 int kvm_commit_irq_routes(void)
437 #ifdef KVM_CAP_IRQ_ROUTING
438 KVMState
*s
= kvm_state
;
440 s
->irq_routes
->flags
= 0;
441 return kvm_vm_ioctl(s
, KVM_SET_GSI_ROUTING
, s
->irq_routes
);
447 int kvm_get_irq_route_gsi(void)
449 KVMState
*s
= kvm_state
;
451 uint32_t *buf
= s
->used_gsi_bitmap
;
453 /* Return the lowest unused GSI in the bitmap */
454 for (i
= 0; i
< s
->max_gsi
/ 32; i
++) {
460 return bit
- 1 + i
* 32;
466 static void kvm_msi_routing_entry(struct kvm_irq_routing_entry
*e
,
471 e
->type
= KVM_IRQ_ROUTING_MSI
;
473 e
->u
.msi
.address_lo
= msg
->addr_lo
;
474 e
->u
.msi
.address_hi
= msg
->addr_hi
;
475 e
->u
.msi
.data
= msg
->data
;
478 int kvm_msi_message_add(KVMMsiMessage
*msg
)
480 struct kvm_irq_routing_entry e
;
483 ret
= kvm_get_irq_route_gsi();
489 kvm_msi_routing_entry(&e
, msg
);
490 return kvm_add_routing_entry(&e
);
493 int kvm_msi_message_del(KVMMsiMessage
*msg
)
495 struct kvm_irq_routing_entry e
;
497 kvm_msi_routing_entry(&e
, msg
);
498 return kvm_del_routing_entry(&e
);
501 int kvm_msi_message_update(KVMMsiMessage
*old
, KVMMsiMessage
*new)
503 struct kvm_irq_routing_entry e1
, e2
;
507 if (memcmp(old
, new, sizeof(KVMMsiMessage
)) == 0) {
511 kvm_msi_routing_entry(&e1
, old
);
512 kvm_msi_routing_entry(&e2
, new);
514 ret
= kvm_update_routing_entry(&e1
, &e2
);
523 #ifdef KVM_CAP_DEVICE_MSIX
524 int kvm_assign_set_msix_nr(KVMState
*s
, struct kvm_assigned_msix_nr
*msix_nr
)
526 return kvm_vm_ioctl(s
, KVM_ASSIGN_SET_MSIX_NR
, msix_nr
);
529 int kvm_assign_set_msix_entry(KVMState
*s
,
530 struct kvm_assigned_msix_entry
*entry
)
532 return kvm_vm_ioctl(s
, KVM_ASSIGN_SET_MSIX_ENTRY
, entry
);
537 void kvm_hpet_disable_kpit(void)
539 struct kvm_pit_state2 ps2
;
541 kvm_get_pit2(kvm_state
, &ps2
);
542 ps2
.flags
|= KVM_PIT_FLAGS_HPET_LEGACY
;
543 kvm_set_pit2(kvm_state
, &ps2
);
546 void kvm_hpet_enable_kpit(void)
548 struct kvm_pit_state2 ps2
;
550 kvm_get_pit2(kvm_state
, &ps2
);
551 ps2
.flags
&= ~KVM_PIT_FLAGS_HPET_LEGACY
;
552 kvm_set_pit2(kvm_state
, &ps2
);
556 #if !defined(TARGET_I386)
557 int kvm_arch_init_irq_routing(void)
563 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
564 typedef struct KVMIOPortRegion
{
568 QLIST_ENTRY(KVMIOPortRegion
) entry
;
571 static QLIST_HEAD(, KVMIOPortRegion
) ioport_regions
;
573 static void do_set_ioport_access(void *data
)
575 KVMIOPortRegion
*region
= data
;
576 bool enable
= region
->status
> 0;
579 r
= kvm_arch_set_ioport_access(region
->start
, region
->size
, enable
);
587 int kvm_add_ioport_region(unsigned long start
, unsigned long size
,
590 KVMIOPortRegion
*region
= g_malloc0(sizeof(KVMIOPortRegion
));
594 region
->start
= start
;
597 QLIST_INSERT_HEAD(&ioport_regions
, region
, entry
);
600 for (env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
601 run_on_cpu(env
, do_set_ioport_access
, region
);
602 if (region
->status
< 0) {
604 kvm_remove_ioport_region(start
, size
, is_hot_plug
);
612 int kvm_remove_ioport_region(unsigned long start
, unsigned long size
,
615 KVMIOPortRegion
*region
, *tmp
;
619 QLIST_FOREACH_SAFE(region
, &ioport_regions
, entry
, tmp
) {
620 if (region
->start
== start
&& region
->size
== size
) {
624 for (env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
625 run_on_cpu(env
, do_set_ioport_access
, region
);
628 QLIST_REMOVE(region
, entry
);
634 #endif /* CONFIG_KVM_DEVICE_ASSIGNMENT */
636 int kvm_update_ioport_access(CPUState
*env
)
638 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
639 KVMIOPortRegion
*region
;
642 assert(qemu_cpu_is_self(env
));
644 QLIST_FOREACH(region
, &ioport_regions
, entry
) {
645 bool enable
= region
->status
> 0;
647 r
= kvm_arch_set_ioport_access(region
->start
, region
->size
, enable
);
652 #endif /* CONFIG_KVM_DEVICE_ASSIGNMENT */