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_clear_gsi_routes(void)
243 #ifdef KVM_CAP_IRQ_ROUTING
244 kvm_state
->irq_routes
->nr
= 0;
251 int kvm_add_routing_entry(struct kvm_irq_routing_entry
*entry
)
253 #ifdef KVM_CAP_IRQ_ROUTING
254 KVMState
*s
= kvm_state
;
255 struct kvm_irq_routing
*z
;
256 struct kvm_irq_routing_entry
*new;
259 if (s
->irq_routes
->nr
== s
->nr_allocated_irq_routes
) {
260 n
= s
->nr_allocated_irq_routes
* 2;
264 size
= sizeof(struct kvm_irq_routing
);
265 size
+= n
* sizeof(*new);
266 z
= realloc(s
->irq_routes
, size
);
270 s
->nr_allocated_irq_routes
= n
;
273 n
= s
->irq_routes
->nr
++;
274 new = &s
->irq_routes
->entries
[n
];
275 memset(new, 0, sizeof(*new));
276 new->gsi
= entry
->gsi
;
277 new->type
= entry
->type
;
278 new->flags
= entry
->flags
;
281 set_gsi(s
, entry
->gsi
);
289 int kvm_add_irq_route(int gsi
, int irqchip
, int pin
)
291 #ifdef KVM_CAP_IRQ_ROUTING
292 struct kvm_irq_routing_entry e
;
295 e
.type
= KVM_IRQ_ROUTING_IRQCHIP
;
297 e
.u
.irqchip
.irqchip
= irqchip
;
298 e
.u
.irqchip
.pin
= pin
;
299 return kvm_add_routing_entry(&e
);
305 int kvm_del_routing_entry(struct kvm_irq_routing_entry
*entry
)
307 #ifdef KVM_CAP_IRQ_ROUTING
308 KVMState
*s
= kvm_state
;
309 struct kvm_irq_routing_entry
*e
, *p
;
310 int i
, gsi
, found
= 0;
314 for (i
= 0; i
< s
->irq_routes
->nr
; ++i
) {
315 e
= &s
->irq_routes
->entries
[i
];
316 if (e
->type
== entry
->type
&& e
->gsi
== gsi
) {
318 case KVM_IRQ_ROUTING_IRQCHIP
:{
319 if (e
->u
.irqchip
.irqchip
==
320 entry
->u
.irqchip
.irqchip
321 && e
->u
.irqchip
.pin
== entry
->u
.irqchip
.pin
) {
322 p
= &s
->irq_routes
->entries
[--s
->irq_routes
->nr
];
328 case KVM_IRQ_ROUTING_MSI
:{
329 if (e
->u
.msi
.address_lo
==
330 entry
->u
.msi
.address_lo
331 && e
->u
.msi
.address_hi
==
332 entry
->u
.msi
.address_hi
333 && e
->u
.msi
.data
== entry
->u
.msi
.data
) {
334 p
= &s
->irq_routes
->entries
[--s
->irq_routes
->nr
];
344 /* If there are no other users of this GSI
345 * mark it available in the bitmap */
346 for (i
= 0; i
< s
->irq_routes
->nr
; i
++) {
347 e
= &s
->irq_routes
->entries
[i
];
351 if (i
== s
->irq_routes
->nr
) {
365 int kvm_update_routing_entry(struct kvm_irq_routing_entry
*entry
,
366 struct kvm_irq_routing_entry
*newentry
)
368 #ifdef KVM_CAP_IRQ_ROUTING
369 KVMState
*s
= kvm_state
;
370 struct kvm_irq_routing_entry
*e
;
373 if (entry
->gsi
!= newentry
->gsi
|| entry
->type
!= newentry
->type
) {
377 for (i
= 0; i
< s
->irq_routes
->nr
; ++i
) {
378 e
= &s
->irq_routes
->entries
[i
];
379 if (e
->type
!= entry
->type
|| e
->gsi
!= entry
->gsi
) {
383 case KVM_IRQ_ROUTING_IRQCHIP
:
384 if (e
->u
.irqchip
.irqchip
== entry
->u
.irqchip
.irqchip
&&
385 e
->u
.irqchip
.pin
== entry
->u
.irqchip
.pin
) {
386 memcpy(&e
->u
.irqchip
, &newentry
->u
.irqchip
,
387 sizeof e
->u
.irqchip
);
391 case KVM_IRQ_ROUTING_MSI
:
392 if (e
->u
.msi
.address_lo
== entry
->u
.msi
.address_lo
&&
393 e
->u
.msi
.address_hi
== entry
->u
.msi
.address_hi
&&
394 e
->u
.msi
.data
== entry
->u
.msi
.data
) {
395 memcpy(&e
->u
.msi
, &newentry
->u
.msi
, sizeof e
->u
.msi
);
409 int kvm_del_irq_route(int gsi
, int irqchip
, int pin
)
411 #ifdef KVM_CAP_IRQ_ROUTING
412 struct kvm_irq_routing_entry e
;
415 e
.type
= KVM_IRQ_ROUTING_IRQCHIP
;
417 e
.u
.irqchip
.irqchip
= irqchip
;
418 e
.u
.irqchip
.pin
= pin
;
419 return kvm_del_routing_entry(&e
);
425 int kvm_commit_irq_routes(void)
427 #ifdef KVM_CAP_IRQ_ROUTING
428 KVMState
*s
= kvm_state
;
430 s
->irq_routes
->flags
= 0;
431 return kvm_vm_ioctl(s
, KVM_SET_GSI_ROUTING
, s
->irq_routes
);
437 int kvm_get_irq_route_gsi(void)
439 KVMState
*s
= kvm_state
;
441 uint32_t *buf
= s
->used_gsi_bitmap
;
443 /* Return the lowest unused GSI in the bitmap */
444 for (i
= 0; i
< s
->max_gsi
/ 32; i
++) {
450 return bit
- 1 + i
* 32;
456 static void kvm_msi_routing_entry(struct kvm_irq_routing_entry
*e
,
461 e
->type
= KVM_IRQ_ROUTING_MSI
;
463 e
->u
.msi
.address_lo
= msg
->addr_lo
;
464 e
->u
.msi
.address_hi
= msg
->addr_hi
;
465 e
->u
.msi
.data
= msg
->data
;
468 int kvm_msi_message_add(KVMMsiMessage
*msg
)
470 struct kvm_irq_routing_entry e
;
473 ret
= kvm_get_irq_route_gsi();
479 kvm_msi_routing_entry(&e
, msg
);
480 return kvm_add_routing_entry(&e
);
483 int kvm_msi_message_del(KVMMsiMessage
*msg
)
485 struct kvm_irq_routing_entry e
;
487 kvm_msi_routing_entry(&e
, msg
);
488 return kvm_del_routing_entry(&e
);
491 int kvm_msi_message_update(KVMMsiMessage
*old
, KVMMsiMessage
*new)
493 struct kvm_irq_routing_entry e1
, e2
;
497 if (memcmp(old
, new, sizeof(KVMMsiMessage
)) == 0) {
501 kvm_msi_routing_entry(&e1
, old
);
502 kvm_msi_routing_entry(&e2
, new);
504 ret
= kvm_update_routing_entry(&e1
, &e2
);
513 #ifdef KVM_CAP_DEVICE_MSIX
514 int kvm_assign_set_msix_nr(KVMState
*s
, struct kvm_assigned_msix_nr
*msix_nr
)
516 return kvm_vm_ioctl(s
, KVM_ASSIGN_SET_MSIX_NR
, msix_nr
);
519 int kvm_assign_set_msix_entry(KVMState
*s
,
520 struct kvm_assigned_msix_entry
*entry
)
522 return kvm_vm_ioctl(s
, KVM_ASSIGN_SET_MSIX_ENTRY
, entry
);
527 void kvm_hpet_disable_kpit(void)
529 struct kvm_pit_state2 ps2
;
531 kvm_get_pit2(kvm_state
, &ps2
);
532 ps2
.flags
|= KVM_PIT_FLAGS_HPET_LEGACY
;
533 kvm_set_pit2(kvm_state
, &ps2
);
536 void kvm_hpet_enable_kpit(void)
538 struct kvm_pit_state2 ps2
;
540 kvm_get_pit2(kvm_state
, &ps2
);
541 ps2
.flags
&= ~KVM_PIT_FLAGS_HPET_LEGACY
;
542 kvm_set_pit2(kvm_state
, &ps2
);
546 #if !defined(TARGET_I386)
547 int kvm_arch_init_irq_routing(void)
553 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
554 typedef struct KVMIOPortRegion
{
558 QLIST_ENTRY(KVMIOPortRegion
) entry
;
561 static QLIST_HEAD(, KVMIOPortRegion
) ioport_regions
;
563 static void do_set_ioport_access(void *data
)
565 KVMIOPortRegion
*region
= data
;
566 bool enable
= region
->status
> 0;
569 r
= kvm_arch_set_ioport_access(region
->start
, region
->size
, enable
);
577 int kvm_add_ioport_region(unsigned long start
, unsigned long size
,
580 KVMIOPortRegion
*region
= g_malloc0(sizeof(KVMIOPortRegion
));
584 region
->start
= start
;
587 QLIST_INSERT_HEAD(&ioport_regions
, region
, entry
);
590 for (env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
591 run_on_cpu(env
, do_set_ioport_access
, region
);
592 if (region
->status
< 0) {
594 kvm_remove_ioport_region(start
, size
, is_hot_plug
);
602 int kvm_remove_ioport_region(unsigned long start
, unsigned long size
,
605 KVMIOPortRegion
*region
, *tmp
;
609 QLIST_FOREACH_SAFE(region
, &ioport_regions
, entry
, tmp
) {
610 if (region
->start
== start
&& region
->size
== size
) {
614 for (env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
615 run_on_cpu(env
, do_set_ioport_access
, region
);
618 QLIST_REMOVE(region
, entry
);
624 #endif /* CONFIG_KVM_DEVICE_ASSIGNMENT */
626 int kvm_update_ioport_access(CPUState
*env
)
628 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
629 KVMIOPortRegion
*region
;
632 assert(qemu_cpu_is_self(env
));
634 QLIST_FOREACH(region
, &ioport_regions
, entry
) {
635 bool enable
= region
->status
> 0;
637 r
= kvm_arch_set_ioport_access(region
->start
, region
->size
, enable
);
642 #endif /* CONFIG_KVM_DEVICE_ASSIGNMENT */