Tags: nanovms/nanos
Tags
Logging: add user-adjustable log levels ("err", "warn", "info") The log_printf() function now takes an enum log_level parameter, and prints the message to the console if the supplied level is lower than or equal than the configured kernel log level (which can be set via the "log_level" manifest option). The default log level is "err". The msg_{err,warn,info} macros have been repurposed so that in kernel code they expand to log_printf() function calls; calls to these macros have been modified so that the format string starts with a sensible prefix; the trailing newline is added by log_printf(), thus it has been removed from the macro invocations. Some rprintf() and thread_log() calls have been converted to use the msg_{print,err,warn,info} macros.
ARM: add support for Azure instances This change ports the Hyper-V drivers to the ARM architecture, which allows Nanos to run on Azure ARM-based instances; in addition, the SMBIOS entry point is passed from the UEFI bootloader to the kernel so that the cloud_init klib can detect (via DMI) whether the kernel is running on an Azure instance and finalize instance deployment according to Azure requirements.
Virtio-9P device attach: fix initialization of virtio_9p struct Since commit d037970, in multi-vCPU instances root filesystem initialization can complete before PCI bus discovery; this means that any filesystem mount points specified in the manifest options can be already processed by the time a virtio-9p device is probed and a corresponding volume is added; this in turn means that the `volume_add()` function called by `v9p_dev_attach()` can trigger a direct call to `v9p_fs_init()`. The `v9p_fs_init()` function uses the `general` field of the `virtio_9p` struct, which in the current code is initialized after calling the `volume_add()` function; this causes `v9p_fs_init()` to access an uninitialized pointer, leading to an unhandled page fault. The same issue applies to the `backed` field of the struct. This change fixes the above issue by moving the initialization of the struct fields before the call to `volume_add()`. In addition, the unused `dev` field is being removed, and setting the DRIVER_OK flag in the device status field is being moved before the call to `volume_add()` (according to the virtio specs, a driver must not send any buffer available notifications to the device before setting DRIVER_OK).
Klib linker scripts: use ELF segments with appropriate permissions This change amends the linker scripts for the klibs so that each klib ELF file has 3 segments: a text segment with read and execute permissions, a data segment with read-only permissions, and a data segment with read/write permissions. This avoids mapping an entire klib image with both write and execute permissions when the kernel loads a klib. In addition, the SECTIONS directive in the linker scripts has been fixed so that all the read-only input sections are mapped to the .text and .rodata output sections; this decreases the size of the klib ELF files.
stage2, uefi: allocate untyped buffers from tagged region This addresses a long-standing bug in targets that use a rewind tag for values (specifically the stage2 and uefi bootloaders), whereby an untyped buffer allocation was being allocated without creating space for the tag type. This could manifest in an incorrect tag type being read for a buffer. To remedy this, an additional tagged region heap is created of type tag_unknown, and untyped buffer values (currently only coming from decode_value() when using an old TFS encoding for backward compatibility) are allocated from that heap.
ATA: honor maximum number of sectors in each I/O request This commit adds a new function to the ATA disk driver to retrieve the maxiumum number of sectors that can be submitted in a single I/O request, which depends on whether LBA48 addressing is supported. This new function is called by both the x86_64 bootloader and the kernel ATA PCI driver, which check the maximum sector count value to split each I/O request so that it doesn't exceed the limit. This fixes booting on vsphere VMs with IDE disk emulation.
PreviousNext