Распечатка 4.5 Имитация функции sync

Предыдущая  Содержание  Следующая V*D*V

Распечатка 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);

  }

}

 

Предыдущая  Содержание  Следующая