|
1 | 1 | # Revision History for Microkit |
2 | 2 |
|
| 3 | +## Release 2.3.0 |
| 4 | + |
| 5 | +This release contains quite a few new features: |
| 6 | + |
| 7 | + * x86_64 IOMMU support (this entails a breaking change) |
| 8 | + * seL4_BootInfo support, for reading runtime parameters on x86_64 |
| 9 | + * Various improvements to x86_64 virtual machines, such as being able to |
| 10 | + stop/start their execution. |
| 11 | + * Support for 'Cap Sharing' to give PDs access to specific TCBs or SCs, |
| 12 | + useful for userspace schedulers. |
| 13 | + * Support for the seL4 Domain Scheduler. |
| 14 | + |
| 15 | +There are also a variety of bug fixes, especially for x86_64 systems, and |
| 16 | +support for two new boards. |
| 17 | + |
| 18 | +### Breaking changes |
| 19 | + |
| 20 | +* x86_64 systems are now built with the IOMMU turned on by default, as we have |
| 21 | + added new syntax to allow for the IOMMU to be configured (see below). |
| 22 | + However, previously the IOMMU was disabled in seL4, so systems which did DMA |
| 23 | + on x86_64 will now *stop working* without specifying the IOMMU setup. |
| 24 | + |
| 25 | +* x86_64 IOAPIC IRQs had an inverted polarity; `polarity="low"` became high |
| 26 | + and `polarity="high"` became low. |
| 27 | + |
| 28 | +* vCPUs now default to the same core as the VMM, instead of core 0. If you |
| 29 | + were relying on this behaviour, you should explicitly specify core 0. |
| 30 | + |
| 31 | +* PCI 'bus:dev:func' syntax is no longer supported, use the correct 'bus:dev.func' |
| 32 | + syntax instead. This was an implementation bug which was more permissive |
| 33 | + than it was supposed to be. |
| 34 | + |
| 35 | +* Virtual Machines on x86_64: |
| 36 | + |
| 37 | + * No longer support budget/period/priority. This did not work previously, |
| 38 | + as they share a TCB/SC with the VMM. |
| 39 | + |
| 40 | + * The VMM on x86_64 cannot have children, nor receive PPCs. |
| 41 | + This was previously allowed but had several complex restrictions (such as |
| 42 | + not receiving messages after a `vmenter`) so have been disallowed. |
| 43 | + |
| 44 | +* If you were not using the `libmicrokit` linker script (e.g. rust-seL4 users), |
| 45 | + the `__sel4_ipc_buffer_obj` is no longer declared in the linker script, and |
| 46 | + is instead allocated by the tool at a fixed virtual address above the stack |
| 47 | + which is now reserved. If you were assuming a specific virtual address for the |
| 48 | + IPC buffer, this would be broken. |
| 49 | + |
| 50 | +### Feature changes |
| 51 | + |
| 52 | +* Update to 16.0.0 release of seL4. |
| 53 | + |
| 54 | +* Support an 'fpu' attribute on protection domains, following [RFC-18]( |
| 55 | + https://sel4.github.io/rfcs/implemented/0180-fpu-switching.html), which allows |
| 56 | + for FPU access to be disabled on a per-PD basis. |
| 57 | + |
| 58 | +* The debug-only (unverified) HardwareDebugAPI has been enabled and is available |
| 59 | + on most x86_64 and AArch64 platforms. |
| 60 | + |
| 61 | +* A new 'cap sharing' feature. The SDF now supports a `<cspace>` element and |
| 62 | + support for placing caps to TCBs, SchedContexts, and VSpaces of other PDs |
| 63 | + into the CSpace of the current PD. This can be useful for user space schedulers |
| 64 | + that are not the fault-handlers (i.e. use parent-child hierarchy). |
| 65 | + |
| 66 | +* It is now possible to turn x86 vCPUs (VMs) on or off. |
| 67 | + Use the new `microkit_vcpu_x86_on` and `microkit_vcpu_x86_off` APIs |
| 68 | + |
| 69 | +* AArch64 EL1 (non-hypervisor) platforms are now supported. |
| 70 | + |
| 71 | +* There is a new (experimental) `--viper-output` argument to the tool, which |
| 72 | + is part of some new (experimental) verification work of Microkit PDs using |
| 73 | + the [Viper tools from ETH Zürich](http://viper.ethz.ch). |
| 74 | + |
| 75 | +* Microkit PDs are now a 2-level CSpace. This should not have any impact on |
| 76 | + users. |
| 77 | + |
| 78 | +* It is now possible to create memory regions that are prefilled with bootinfo |
| 79 | + from the capDL initialiser. This includes the VBE, MBMAP, ACPI RSDP, Framebuffer, |
| 80 | + and TSC frequency types exported by seL4. |
| 81 | + |
| 82 | +* New function `microkit_pd_resume()` which resumes a stopped child PD. Previously, |
| 83 | + only stop and start (which does resume but requires a program counter) existed. |
| 84 | + |
| 85 | +* New support for configuring the IOMMU on x86_64 systems with the |
| 86 | + `<io_address_space>` element. See the `x86_64_iommu_dma_test` example packaged |
| 87 | + in the SDK for more details, as well as the manual section on IOMMU. |
| 88 | + Only 4KiB pages are supporting for the IOMMU due to kernel limitations. |
| 89 | + |
| 90 | +* Support for the seL4 domain schedule now that the [RFC-20 Runtime Schedules]( |
| 91 | + https://sel4.github.io/rfcs/implemented/0200-domain-schedules.html) has been |
| 92 | + added to seL4. This is useful for systems which want isolated subsystems |
| 93 | + with limited information flow between them. |
| 94 | + |
| 95 | +### Bug fixes |
| 96 | + |
| 97 | +* TQMA8XQP1GB loader address has been fixed as it was collided with reserved |
| 98 | + regions in memory. |
| 99 | +* IOAPIC IRQ polarity was inverted. |
| 100 | +* The loader now only maps in the loader memory, UART, and kernel regions, as |
| 101 | + otherwise (instruction) speculative accesses to device memory can occur. |
| 102 | + Please see [PR 464 for more details](https://github.com/seL4/microkit/pull/464). |
| 103 | +* A `microkit_deferred_notify()` or `microkit_deferred_irq_ack()` would be |
| 104 | + lost if you sent a reply from a `protected()` call, or from a `fault()` handler. |
| 105 | + Now we perform `seL4_Send` on the Notification or IRQHandler capability |
| 106 | + before replying to the PPC or Fault. |
| 107 | +* A bug with [high-address regions allocated the wrong memory]( |
| 108 | + https://github.com/seL4/rust-sel4/issues/319) in the capDL initialiser was |
| 109 | + fixed. |
| 110 | +* A bug with certain systems that caused the Microkit tool to panic with the |
| 111 | + below message has been fixed. |
| 112 | + |
| 113 | + ``` |
| 114 | + thread 'main' (414114) panicked at tool/microkit/src/capdl/allocation.rs:225:17: |
| 115 | + assertion `left == right` failed |
| 116 | + ``` |
| 117 | + |
| 118 | +### Board support |
| 119 | + |
| 120 | +* 'stm32mp2' for the STM32MP2 evaluation board. |
| 121 | +* 'qemu_virt_aarch64_el1' for QEMU/KVM on Linux AArch64 hosts (which don't support |
| 122 | + nested virtualisation). |
| 123 | + |
| 124 | +### Notes for developers |
| 125 | + |
| 126 | +* There is a new `--override-kernel` option to the tool that allows one to |
| 127 | + use an SDK built of Microkit but with a different seL4 kernel ELF. |
| 128 | +* We now have basic CI that runs Microkit images on real hardware. |
| 129 | +* We now recommend the use of the [Google repo-manifest 'microkit-manifest']( |
| 130 | + https://github.com/seL4/microkit-manifest) which tracks the supported version |
| 131 | + of seL4 to be used for testing the Microkit. It also records the latest build |
| 132 | + of the main branch which passed CI. |
| 133 | + |
3 | 134 | ## Release 2.2.0 |
4 | 135 |
|
5 | 136 | This release contains various bug fixes, minor features, and new board support. |
|
0 commit comments