Распечатка 4.5 Имитация функции sync |
Предыдущая Содержание Следующая |
Распечатка 4.5
static void dummy_flash_sync(struct mtd_info *mtd) { struct map_info *map = mtd->priv; struct dummy_private_info_struct *priv = map->fldrv_priv; struct flchip *chip; int i;
DECLARE_WAITQUEUE(wait, current);
for(i=0; i< priv->number_of_chips;i++) { chip = &priv->chips[i]; again: spin_lock(chip->mutex);
switch(chip->state) { case FL_READY: case FL_STATUS: chip->oldstate = chip->state; chip->state = FL_SYNCING; break; case FL_SYNCING: spin_unlock(chip->mutex); break; default: add_wait_queue(&chip->wq, &wait); spin_unlock(chip->mutex); schedule(); remove_wait_queue(&chip->wq, &wait); goto again; } }
for(i--; i >=0; i--) { chip = &priv->chips[i]; spin_lock(chip->mutex); if(chip->state == FL_SYNCING) { chip->state = chip->oldstate; wake_up(&chip->wq); } spin_unlock(chip->mutex); } }
|
Предыдущая Содержание Следующая |