Example #1
0
File: ssd.c Project: vishnu89/gijoe
struct ssd *ssd_copy(struct ssd *orig) {
  int i;
  struct ssd *result = malloc(sizeof(struct ssd));
  bzero(result, sizeof(struct ssd));
  memcpy(result, orig, sizeof(struct ssd));
  result->queue = ioqueue_copy(orig->queue);
  for (i=0;i<orig->params.nelements;i++)
      result->elements[i].queue = ioqueue_copy(orig->elements[i].queue);
  return result;
}
Example #2
0
struct device_header *simpledisk_copy(struct device_header *orig) {
  struct simpledisk *result = (struct simpledisk *)calloc(1, sizeof(struct simpledisk));
  memcpy(result, orig, sizeof(struct simpledisk));
  result->queue = ioqueue_copy(((struct simpledisk *)orig)->queue);

  return (struct device_header *)result;
}
Example #3
0
static iodriver *driver_copy(iodriver *orig) {
  iodriver *result = malloc(sizeof(iodriver));
  bzero(result, sizeof(iodriver));
  memcpy(result, orig, sizeof(iodriver));
  result->queue = ioqueue_copy(orig->queue);
  return result;
}
Example #4
0
mems_t *mems_copy(mems_t *src) {
  mems_t *result = (mems_t *)calloc(1, sizeof(mems_t));
  memcpy(result, src, sizeof(mems_t));
  result->queue = ioqueue_copy(src->queue);
  memcpy(&result->sled, src->sled, src->num_sleds * sizeof(mems_sled_t));
  return result;
}
Example #5
0
struct simpledisk *simpledisk_copy(struct simpledisk *orig) {
  struct simpledisk *result = malloc(sizeof(struct simpledisk));
  bzero(result, sizeof(struct simpledisk));
  memcpy(result, orig, sizeof(struct simpledisk));
  result->queue = ioqueue_copy(orig->queue);

  return result;
}
Example #6
0
void controller_smart_initialize (controller *currctlr)
{
   int numdevs = device_get_numdevices();
   device *currdev;
   int i;

   controller_smart_setcallbacks ();
   currctlr->numdevices = numdevs;
   currctlr->devices = (device *) DISKSIM_malloc(numdevs * sizeof(device));
   ASSERT(currctlr->devices != NULL);
   for (i=0; i<numdevs; i++) {
      currdev = &currctlr->devices[i];
      currdev->devno = i;
      currdev->busy = FALSE;
      currdev->flag = 0;
      currdev->queue = ioqueue_copy(currctlr->queue);
      ioqueue_initialize(currdev->queue, i);
      iosim_get_path_to_device (0, i, &currdev->buspath, &currdev->slotpath);
      currdev->maxoutstanding = currctlr->maxdiskqsize;
   }
   currctlr->cache->cache_initialize(currctlr->cache, &disksim->issuefunc_ctlrsmart, currctlr, &disksim->queuefind_ctlrsmart, currctlr, &disksim->wakeupfunc_ctlrsmart, currctlr, numdevs);
}
Example #7
0
void iodriver_initialize (int standalone)
{
   int numdevs;
   struct ioq * queueset[MAXDEVICES];
   int i, j;
   iodriver *curriodriver;

   i = numiodrivers;

      /* Code will be broken by multiple iodrivers */
   ASSERT1(numiodrivers == 1, "numiodrivers", numiodrivers);

   ioqueue_initialize (OVERALLQUEUE, 0);

   for (i = 0; i < numiodrivers; i++) {
      curriodriver = iodrivers[i];
      curriodriver->type = standalone;
      if (standalone != STANDALONE) {
         curriodriver->scale = 1.0;
      }
      numdevs = controller_get_numcontrollers();
      curriodriver->numctlrs = numdevs;
      curriodriver->ctlrs = (ctlr*) DISKSIM_malloc(numdevs * (sizeof(ctlr)));
      ASSERT(curriodriver->ctlrs != NULL);
      for (j=0; j < numdevs; j++) {
         ctlr *currctlr = &curriodriver->ctlrs[j];
         currctlr->ctlno = j;
         currctlr->flags = 0;
         if (controller_C700_based(j) == TRUE) {
/*
fprintf (outputfile, "This one is c700_based - %d\n", j);
*/
            currctlr->flags |= DRIVER_C700;
         }
         currctlr->buspath.value = 0;
         currctlr->slotpath.value = 0;
         iosim_get_path_to_controller(i, currctlr->ctlno, &currctlr->buspath, &currctlr->slotpath);
         currctlr->numoutstanding = 0;
         currctlr->pendio = NULL;
         currctlr->oversized = NULL;
      }

      numdevs = device_get_numdevices();
      curriodriver->numdevices = numdevs;
      curriodriver->devices = (device*) DISKSIM_malloc(numdevs * (sizeof(device)));
      ASSERT(curriodriver->devices != NULL);
      for (j = 0; j < numdevs; j++) {
         device *currdev = &curriodriver->devices[j];
         currdev->devno = j;
         currdev->busy = FALSE;
         currdev->flag = 0;
         currdev->queue = ioqueue_copy(curriodriver->queue);
         ioqueue_initialize(currdev->queue, j);
         queueset[j] = currdev->queue;
         currdev->buspath.value = 0;
         currdev->slotpath.value = 0;
         iosim_get_path_to_device(i, currdev->devno, &currdev->buspath, &currdev->slotpath);
         iodriver_set_ctl_to_device(i, currdev);
         get_device_maxoutstanding(curriodriver, currdev);
      }
      logorg_initialize(sysorgs, numsysorgs, queueset,
			drv_printlocalitystats, 
			drv_printblockingstats, 
			drv_printinterferestats, 
			drv_printstreakstats, 
			drv_printstampstats, 
			drv_printintarrstats, 
			drv_printidlestats, 
			drv_printsizestats);
/*
fprintf (outputfile, "Back from logorg_initialize\n");
*/
   }
   stat_initialize(statdeffile, statdesc_emptyqueue, &emptyqueuestats);
   stat_initialize(statdeffile, statdesc_initiatenext, &initiatenextstats);

#if 0
   print_paths_to_devices();
   print_paths_to_ctlrs();
#endif

}
Example #8
0
struct mems *memsmodel_mems_loadparams(struct lp_block *b,
				       int *numptr)
{
  int c;
  int num;
  struct mems *result;
  mems_sled_t tmpsled;

  device_initialize_deviceinfo();

  bzero(&tmpsled, sizeof(tmpsled));

  result = (struct mems *)calloc(1, sizeof(mems_t));
  if(!result) return 0;

  ((struct device_header *)result)->device_type = DEVICETYPE_MEMS;

  /* Initialize disksim's memsinfo structures */
  if (disksim->memsinfo == NULL) {
    disksim->memsinfo = (struct mems_info *)calloc(1, sizeof(struct mems_info));
    ASSERT(disksim->memsinfo != NULL);

/*      disksim->memsinfo->devices = malloc(MAXDEVICES * sizeof(mems_t)); */
/*      ASSERT(disksim->memsinfo->devices != NULL); */

  }

  for(c = 0; c < disksim->memsinfo->devices_len; c++) {
    if(!disksim->memsinfo->devices[c]) {
      break;
    }
  }

  if(c == disksim->memsinfo->devices_len) {
    int newlen = disksim->memsinfo->devices_len ?
      disksim->memsinfo->devices_len * 2 : 2;
    int zerolen = newlen == 2 ? 2 : newlen / 2;
     
    disksim->memsinfo->devices = 
      (mems_t **)realloc(disksim->memsinfo->devices, 
	      newlen * sizeof(mems_t *));

    bzero(&(disksim->memsinfo->devices[c]), zerolen * sizeof(mems_t *));
    disksim->memsinfo->devices_len = newlen;
  }
  
  disksim->memsinfo->devices[c] = result;
  num = c;
  if(numptr) *numptr = num;
  result->hdr = mems_hdr_initializer;
  result->hdr.device_name = strdup(b->name);
  
  disksim->memsinfo->numdevices++;

    
  //#include "modules/disksim_mems_param.c"
  lp_loadparams(result, b, &memsmodel_mems_mod);

  for (c = 0; c < MAXINBUSES; c++) {
    result->inbuses[c] = -1;
    result->depth[c]   = -1;
    result->slotno[c]  = -1;
  }


  for(c = 0; c < result->num_sleds; c++) {
    memcpy(&result->sled[c], &result->sled[0], result->num_sleds * sizeof(mems_sled_t));
    result->sled[c].queue = ioqueue_copy(result->queue);
  }

  
  device_add((struct device_header *)result, num);
  return result;
}