Changeset 12956e57 in mainline for uspace/srv/bd/gxe_bd/gxe_bd.c


Ignore:
Timestamp:
2009-06-20T19:31:19Z (15 years ago)
Author:
Jiri Svoboda <jirik.svoboda@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2dfd9fa
Parents:
ac47b7c2
Message:

Use fibril synchronization in bd drivers. Use per-disk locks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/gxe_bd/gxe_bd.c

    rac47b7c2 r12956e57  
    4343#include <async.h>
    4444#include <as.h>
    45 #include <futex.h>
     45#include <fibril_sync.h>
    4646#include <devmap.h>
    4747#include <sys/types.h>
     
    9292static dev_handle_t dev_handle[MAX_DISKS];
    9393
    94 static atomic_t dev_futex = FUTEX_INITIALIZER;
     94static fibril_mutex_t dev_lock[MAX_DISKS];
    9595
    9696static int gxe_bd_init(void);
     
    146146                        return rc;
    147147                }
     148                fibril_mutex_initialize(&dev_lock[i]);
    148149        }
    149150
     
    257258        uint32_t w;
    258259
    259         futex_down(&dev_futex);
     260        fibril_mutex_lock(&dev_lock[disk_id]);
    260261        pio_write_32(&dev->offset_lo, (uint32_t) offset);
    261262        pio_write_32(&dev->offset_hi, offset >> 32);
     
    265266        status = pio_read_32(&dev->status);
    266267        if (status == STATUS_FAILURE) {
     268                fibril_mutex_unlock(&dev_lock[disk_id]);
    267269                return EIO;
    268270        }
     
    272274        }
    273275
    274         futex_up(&dev_futex);
     276        fibril_mutex_unlock(&dev_lock[disk_id]);
    275277        return EOK;
    276278}
     
    286288        }
    287289
    288         futex_down(&dev_futex);
     290        fibril_mutex_lock(&dev_lock[disk_id]);
    289291        pio_write_32(&dev->offset_lo, (uint32_t) offset);
    290292        pio_write_32(&dev->offset_hi, offset >> 32);
     
    294296        status = pio_read_32(&dev->status);
    295297        if (status == STATUS_FAILURE) {
     298                fibril_mutex_unlock(&dev_lock[disk_id]);
    296299                return EIO;
    297300        }
    298301
    299         futex_up(&dev_futex);
     302        fibril_mutex_unlock(&dev_lock[disk_id]);
    300303        return EOK;
    301304}
Note: See TracChangeset for help on using the changeset viewer.