Changeset 712c4ba in mainline for kernel/genarch/src


Ignore:
Timestamp:
2011-05-20T16:09:24Z (14 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b6f3e7e
Parents:
326bf65
Message:

avoid spinlocks to be taken in the direct code path to physically outputing kconsole characters to the framebuffer (this fixes ticket #243)
the spinlock in printf() (kernel) was sacrificed, this might lead potentially to scrambled kconsole output
the hack of ignoring spinlocks whose names start with "*" in the livelock detector can be removed

Location:
kernel/genarch/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/drivers/ega/ega.c

    r326bf65 r712c4ba  
    4040#include <mm/as.h>
    4141#include <mm/slab.h>
     42#include <synch/mutex.h>
    4243#include <arch/mm/page.h>
    43 #include <synch/spinlock.h>
    4444#include <typedefs.h>
    4545#include <arch/asm.h>
     
    6363
    6464typedef struct {
    65         IRQ_SPINLOCK_DECLARE(lock);
     65        mutex_t mtx;
    6666       
    6767        uint32_t cursor;
     
    540540        ega_instance_t *instance = (ega_instance_t *) dev->data;
    541541       
    542         irq_spinlock_lock(&instance->lock, true);
     542        mutex_lock(&instance->mtx);
    543543       
    544544        switch (ch) {
     
    563563        ega_move_cursor(instance, silent);
    564564       
    565         irq_spinlock_unlock(&instance->lock, true);
     565        mutex_unlock(&instance->mtx);
    566566}
    567567
     
    570570        ega_instance_t *instance = (ega_instance_t *) dev->data;
    571571       
    572         irq_spinlock_lock(&instance->lock, true);
     572        mutex_lock(&instance->mtx);
    573573       
    574574        memcpy(instance->addr, instance->backbuf, EGA_VRAM_SIZE);
     
    576576        ega_show_cursor(instance, silent);
    577577       
    578         irq_spinlock_unlock(&instance->lock, true);
     578        mutex_unlock(&instance->mtx);
    579579}
    580580
     
    594594        egadev->data = instance;
    595595       
    596         irq_spinlock_initialize(&instance->lock, "*ega.instance.lock");
     596        mutex_initialize(&instance->mtx, MUTEX_PASSIVE);
    597597       
    598598        instance->base = base;
  • kernel/genarch/src/fb/fb.c

    r326bf65 r712c4ba  
    8080
    8181typedef struct {
    82         SPINLOCK_DECLARE(lock);
     82        mutex_t mtx;
    8383       
    8484        uint8_t *addr;
     
    365365{
    366366        fb_instance_t *instance = (fb_instance_t *) dev->data;
    367         spinlock_lock(&instance->lock);
     367        mutex_lock(&instance->mtx);
    368368       
    369369        switch (ch) {
     
    406406        cursor_put(instance, silent);
    407407       
    408         spinlock_unlock(&instance->lock);
     408        mutex_unlock(&instance->mtx);
    409409}
    410410
     
    473473        fb_instance_t *instance = (fb_instance_t *) dev->data;
    474474       
    475         spinlock_lock(&instance->lock);
     475        mutex_lock(&instance->mtx);
    476476        fb_redraw_internal(instance);
    477         spinlock_unlock(&instance->lock);
     477        mutex_unlock(&instance->mtx);
    478478}
    479479
     
    554554        fbdev->data = instance;
    555555       
    556         spinlock_initialize(&instance->lock, "*fb.instance.lock");
     556        mutex_initialize(&instance->mtx, MUTEX_PASSIVE);
    557557        instance->rgb_conv = rgb_conv;
    558558        instance->pixelbytes = pixelbytes;
Note: See TracChangeset for help on using the changeset viewer.