]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
plat/kvm: Adapt KVM to the new uk_intctlr API
authorMichalis Pappas <michalis@unikraft.io>
Tue, 19 Sep 2023 14:50:33 +0000 (16:50 +0200)
committerRazvan Deaconescu <razvand@unikraft.io>
Fri, 20 Oct 2023 16:35:55 +0000 (19:35 +0300)
Update KVM setup to use the new uk_intctlr API. Update the config
to define HAVE_INTCTLR and enable the default controller driver
depending on the VMM and architecture.

Notice: Picking individual commits in this PR will break the build.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Marco Schlumpp <marco@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
GitHub-Closes: #1103

plat/kvm/Config.uk
plat/kvm/arm/setup.c
plat/kvm/x86/setup.c
plat/kvm/x86/time.c

index e23bd7c6e6921ef839cab448c0a41703788ffb25..c21c9db855e937c8122340ad24510c19ddc65b2c 100644 (file)
@@ -10,7 +10,9 @@ menuconfig PLAT_KVM
        select ELF64_TO_32 if ARCH_X86_64
        select LIBUKRELOC if OPTIMIZE_PIE
        select LIBUKOFW if ARCH_ARM_64
-       select LIBUKINTCTLR if ARCH_X86_64
+       select HAVE_INTCTLR
+       select HAVE_APIC if ARCH_X86_64
+       select LIBUKINTCTLR_XPIC if ARCH_X86_64
        imply LIBUKBUS_PLATFORM if ARCH_ARM_64
        imply LIBVIRTIO_9P if LIBUK9P
        imply LIBVIRTIO_NET if LIBUKNETDEV
@@ -93,7 +95,7 @@ choice
 
 config KVM_VMM_QEMU
        bool "QEMU"
-       imply LIBUKINTCTLR_GICV2
+       imply LIBUKINTCTLR_GICV2 if ARCH_ARM_64
        select HAVE_PCI
        select HAVE_MMIO
 
@@ -101,7 +103,7 @@ config KVM_VMM_FIRECRACKER
        bool "Firecracker"
        select KVM_BOOT_PROTO_LXBOOT
        select HAVE_MMIO
-       imply LIBUKINTCTLR_GICV3
+       imply LIBUKINTCTLR_GICV3 if ARCH_ARM_64
        depends on ARCH_X86_64 || ARCH_ARM_64
 
 endchoice
index a0e92e883a07cb54599b3af4092f5bb5f8426d07..e9602baa4dd3f0daa08c4e1fd03f1a784ac55d91 100644 (file)
@@ -200,10 +200,6 @@ void __no_pauth _ukplat_entry(struct ukplat_bootinfo *bi)
                UK_CRASH("Could not initialize MTE (%d)\n", rc);
 #endif /* CONFIG_HAVE_MEMTAG */
 
-#ifdef CONFIG_RTC_PL031
-       /* Initialize RTC */
-       pl031_init_rtc(fdt);
-#endif /* CONFIG_RTC_PL031 */
 
 #if defined(CONFIG_UKPLAT_ACPI)
        rc = acpi_init();
@@ -212,7 +208,9 @@ void __no_pauth _ukplat_entry(struct ukplat_bootinfo *bi)
 #endif /* CONFIG_UKPLAT_ACPI */
 
        /* Initialize interrupt controller */
-       intctrl_init();
+       rc = uk_intctlr_probe();
+       if (unlikely(rc))
+               UK_CRASH("Could not initialize the IRQ controller: %d\n", rc);
 
        /* Initialize logical boot CPU */
        rc = lcpu_init(lcpu_get_bsp());
@@ -231,6 +229,11 @@ void __no_pauth _ukplat_entry(struct ukplat_bootinfo *bi)
        if (unlikely(rc < 0))
                UK_CRASH("Failed to get PSCI method: %d.\n", rc);
 
+#if CONFIG_RTC_PL031
+       /* Initialize RTC */
+       pl031_init_rtc(fdt);
+#endif /* CONFIG_RTC_PL031 */
+
        /*
         * Switch away from the bootstrap stack as early as possible.
         */
index 7da9481c1f3ad6a18b6517b23317c12ea0e604ef..e6b8ec72eed6438964dd66933f69a7e9866f0799 100644 (file)
@@ -86,7 +86,9 @@ void _ukplat_entry(struct lcpu *lcpu, struct ukplat_bootinfo *bi)
                UK_CRASH("Bootstrap processor init failed: %d\n", rc);
 
        /* Initialize IRQ controller */
-       intctrl_init();
+       rc = uk_intctlr_probe();
+       if (unlikely(rc))
+               UK_CRASH("Interrupt controller init failed: %d\n", rc);
 
        /* Initialize command line */
        rc = cmdline_init(bi);
index aa3866dae348b294a9350d48211ebf6650a67001..b5b113c5017798a64c1bc77ccf4d6fb241db7c4d 100644 (file)
@@ -40,7 +40,7 @@
 
 #include <stdlib.h>
 #include <uk/plat/time.h>
-#include <uk/plat/irq.h>
+#include <uk/intctlr.h>
 #include <kvm/tscclock.h>
 #include <uk/assert.h>
 
@@ -71,7 +71,7 @@ void ukplat_time_init(void)
 {
        int rc;
 
-       rc = ukplat_irq_register(0, timer_handler, NULL);
+       rc = uk_intctlr_irq_register(0, timer_handler, NULL);
        if (rc < 0)
                UK_CRASH("Failed to register timer interrupt handler\n");