Changeset a1b9f63 in mainline for kernel/genarch/src


Ignore:
Timestamp:
2018-08-31T10:32:40Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6bf5b8c
Parents:
b1834a01
git-author:
Jakub Jermar <jakub@…> (2018-08-31 09:54:11)
git-committer:
Jakub Jermar <jakub@…> (2018-08-31 10:32:40)
Message:

Add alignment argument to km_map()

km_map() currently always applies alignment requirement equal to the
size of the mapped region. Most of the time, the natural alignment is
unnecessarily strong and especially on 32-bit systems may contribute to
km_map() failures for regions with size in the order of several hundred
megabytes.

This change adds an extra argument to km_map() which allows the caller
to indicate the desired alignment. The old behaviour can be specified
by passing KM_NATURAL_ALIGNMENT as alignment.

This change only adds the alignment argument, but does not change the
alignment requirement anywhere.

Location:
kernel/genarch/src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/acpi/acpi.c

    rb1834a01 ra1b9f63  
    105105        /* Start with mapping the header only. */
    106106        vhdr = (struct acpi_sdt_header *) km_map((uintptr_t) psdt,
    107             sizeof(struct acpi_sdt_header), PAGE_READ | PAGE_NOT_CACHEABLE);
     107            sizeof(struct acpi_sdt_header), KM_NATURAL_ALIGNMENT,
     108            PAGE_READ | PAGE_NOT_CACHEABLE);
    108109
    109110        /* Now we can map the entire structure. */
    110111        vsdt = (struct acpi_sdt_header *) km_map((uintptr_t) psdt,
    111             vhdr->length, PAGE_WRITE | PAGE_NOT_CACHEABLE);
     112            vhdr->length, KM_NATURAL_ALIGNMENT,
     113            PAGE_WRITE | PAGE_NOT_CACHEABLE);
    112114
    113115        // TODO: do not leak vtmp
  • kernel/genarch/src/drivers/am335x/timer.c

    rb1834a01 ra1b9f63  
    101101        size = regs_map[id].size;
    102102
    103         timer->regs = (void *) km_map(base_addr, size, PAGE_NOT_CACHEABLE);
     103        timer->regs = (void *) km_map(base_addr, size, KM_NATURAL_ALIGNMENT,
     104            PAGE_NOT_CACHEABLE);
    104105        assert(timer->regs != NULL);
    105106
  • kernel/genarch/src/drivers/bcm2835/mbox.c

    rb1834a01 ra1b9f63  
    9393
    9494        fb_mbox = (void *) km_map(BCM2835_MBOX0_ADDR, sizeof(bcm2835_mbox_t),
    95             PAGE_NOT_CACHEABLE);
     95            KM_NATURAL_ALIGNMENT, PAGE_NOT_CACHEABLE);
    9696
    9797        fb_desc->width = 640;
  • kernel/genarch/src/drivers/ega/ega.c

    rb1834a01 ra1b9f63  
    601601        instance->base = base;
    602602        instance->addr = (uint8_t *) km_map(addr, EGA_VRAM_SIZE,
    603             PAGE_WRITE | PAGE_NOT_CACHEABLE);
     603            KM_NATURAL_ALIGNMENT, PAGE_WRITE | PAGE_NOT_CACHEABLE);
    604604        if (!instance->addr) {
    605605                LOG("Unable to EGA video memory.");
  • kernel/genarch/src/drivers/omap/uart.c

    rb1834a01 ra1b9f63  
    8888{
    8989        assert(uart);
    90         uart->regs = (void *)km_map(addr, size, PAGE_NOT_CACHEABLE);
     90        uart->regs = (void *)km_map(addr, size, KM_NATURAL_ALIGNMENT,
     91            PAGE_NOT_CACHEABLE);
    9192
    9293        assert(uart->regs);
  • kernel/genarch/src/drivers/pl011/pl011.c

    rb1834a01 ra1b9f63  
    100100        assert(uart);
    101101        uart->regs = (void *)km_map(addr, sizeof(pl011_uart_regs_t),
    102             PAGE_NOT_CACHEABLE);
     102            KM_NATURAL_ALIGNMENT, PAGE_NOT_CACHEABLE);
    103103        assert(uart->regs);
    104104
  • kernel/genarch/src/drivers/s3c24xx/uart.c

    rb1834a01 ra1b9f63  
    116116        uart_dev->data = uart;
    117117
    118         uart->io = (s3c24xx_uart_io_t *) km_map(paddr, PAGE_SIZE,
     118        uart->io = (s3c24xx_uart_io_t *) km_map(paddr, PAGE_SIZE, PAGE_SIZE,
    119119            PAGE_WRITE | PAGE_NOT_CACHEABLE);
    120120        uart->indev = NULL;
  • kernel/genarch/src/fb/fb.c

    rb1834a01 ra1b9f63  
    610610
    611611        instance->addr = (uint8_t *) km_map((uintptr_t) props->addr, fbsize,
    612             PAGE_WRITE | PAGE_NOT_CACHEABLE);
     612            KM_NATURAL_ALIGNMENT, PAGE_WRITE | PAGE_NOT_CACHEABLE);
    613613        if (!instance->addr) {
    614614                LOG("Unable to map framebuffer.");
Note: See TracChangeset for help on using the changeset viewer.