Пример #1
0
/* These fields in kdump_ctx must be initialised:
 *
 *   endian
 */
static kdump_status
process_xc_xen_note(kdump_ctx *ctx, uint32_t type,
		    void *desc, size_t descsz)
{
	if (type == XEN_ELFNOTE_DUMPCORE_HEADER) {
		struct xen_elfnote_header *header = desc;
		uint64_t page_size = dump64toh(ctx, header->xch_page_size);

		return set_page_size(ctx, page_size);
	} else if (type == XEN_ELFNOTE_DUMPCORE_FORMAT_VERSION) {
		uint64_t version = dump64toh(ctx, *(uint64_t*)desc);

		if (version != 1)
			return set_error(ctx, kdump_unsupported,
					 "Unsupported Xen dumpcore format version: %llu",
					 (unsigned long long) version);
	}

	return kdump_ok;
}
Пример #2
0
errtype dependent_swap<dtype>::init(stype **s, rank_type ndep) {
  rank_type i;

  set_type();
  swap=NULL;
  this->data=NULL;

  this->rank=ndep;
  this->dim=new ind_type[this->rank];
  this->dependencies=new stype *[this->rank];

  this->n_data=1;
  for (i=0; i<this->rank; i++) {
    this->dependencies[i]=s[i];
    s[i]->add_dependent(this, i);
    this->dim[i]=this->dependencies[i]->nel();
    this->n_data*=this->dim[i];
  }

  set_page_size(0);
  fchange=0;
  dchange=0;
}
Пример #3
0
void		bootloader(multiboot_info_t* mbi)
{
  void		(*kaneton)(t_init*);
  t_init*	init = NULL;
  Elf64_Ehdr*	kaneton_kernel = NULL;

  /*
   * 1)
   */

  bootloader_cons_init();
  printf("\n");
  printf("                --- the kaneton microkernel project ---\n");
  printf("\n\n");

  /*
   * 3)
   */

  set_page_size(PAGE_SIZE);

  /*
   * 4)
   */

  kernel_mem_space_64();
  supervisor_mem_space_64();
  user_mem_space_64();

  /*
   * 5)
   */

  init = bootloader_init_relocate(mbi);

  /*
   * 6)
   */

  set_kernel_mode();

  /*
   * 7)
   */

  disable_bootstrap_mode();

  /*
   * 8)
   */

  /*
   * 9)
   */

  kaneton_kernel = (Elf64_Ehdr*)KERNEL_BASE_ADDRESS;

  bootloader_cons_msg('+', "Jump to the kaneton function 0x%lx\n", kaneton_kernel->e_entry);

  kaneton = (void (*)(t_init*))kaneton_kernel->e_entry;
  
  kaneton(init);

  while(1)
    ;
}
void SpaceDbResultNewFormat::read_spacedb_output (FILE *fp)
{
  char page_unit, log_page_unit, *p;
  double page_size, log_page_size_double;
  char str_buf[1024];
  int db_page_size = 0, log_page_size = 0;
  int index = 0;

  while (fgets (str_buf, sizeof (str_buf), fp))
    {
      ut_trim (str_buf);

      if (strncmp (str_buf, "Space", 5) == 0)
        {
          p = strstr (str_buf, "pagesize");
          if (p)
            {
              sscanf (p, "pagesize %lf%c", &page_size, &page_unit);
              if ((db_page_size =
                     _size_to_byte_by_unit (page_size, page_unit)) < 0)
                {
                  goto spacedb_error;
                }
              set_page_size (db_page_size);
            }
          p = strstr (str_buf, "log pagesize:");
          if (p)
            {
              sscanf (p, "log pagesize: %lf%c", &log_page_size_double, &log_page_unit);
              if ((log_page_size =
                     _size_to_byte_by_unit (log_page_size_double, log_page_unit)) < 0)
                {
                  goto spacedb_error;
                }
              set_log_page_size (log_page_size);
            }
        }
      if (strncmp (str_buf, "type", 4) == 0)
        {
          break;
        }
    }

  while (fgets (str_buf, sizeof (str_buf), fp))
    {
      ut_trim (str_buf);

      if (strncmp (str_buf, "Space", 5) == 0)
        {
          break;
        }
      if (!is_valid_database_description (str_buf))
        {
          break;
        }
      sscanf (str_buf, "%s %s DATA %d %d %d %d", databaseSpaceDescriptions[index].type,
              databaseSpaceDescriptions[index].purpose, &databaseSpaceDescriptions[index].volume_count,
              &databaseSpaceDescriptions[index].used_size,
              &databaseSpaceDescriptions[index].free_size,
              &databaseSpaceDescriptions[index].total_size);
      index++;
    }

  while (fgets (str_buf, sizeof (str_buf), fp))
    {
      ut_trim (str_buf);

      if (strncmp (str_buf, "Detailed", 8) == 0)
        {
          break;
        }

      if (!is_valid_volume_description (str_buf))
        {
          continue;
        }

      add_volume (str_buf);
    }

  while (fgets (str_buf, sizeof (str_buf), fp))
    {
      ut_trim (str_buf);

      if (strncmp (str_buf, "data_type", 9) == 0)
        {
          break;
        }
    }

  index = 0;

  while (fgets (str_buf, sizeof (str_buf), fp))
    {
      ut_trim (str_buf);

      if (!is_valid_file_description (str_buf))
        {
          continue;
        }

      sscanf (str_buf, "%s %d %d %d %d %d\n", fileSpaceDescriptions[index].data_type,
              &fileSpaceDescriptions[index].file_count,
              &fileSpaceDescriptions[index].used_size,
              &fileSpaceDescriptions[index].file_table_size,
              &fileSpaceDescriptions[index].reserved_size,
              &fileSpaceDescriptions[index].total_size);
      index++;
    }

  fclose (fp);
  return;

spacedb_error:
  fclose (fp);
}
void SpaceDbResultOldFormat::read_spacedb_output (FILE *fp)
{
  char str_buf[1024];
  int db_page_size = 0, log_page_size = 0;

  while (fgets (str_buf, sizeof (str_buf), fp))
    {
      char *tmp_p;

      ut_trim (str_buf);

      if (strncmp (str_buf, "Space", 5) == 0)
        {
          int matchs = 0;
          double page_size = 0.0;
          char page_unit = 'H';

          /*
          * The log format looks like the following:
          * Space description for database 'demodb' with pagesize 16.0K. (log pagesize: 16.0K)
          */
          tmp_p = strstr (str_buf, "pagesize");
          if (tmp_p == NULL)
            {
              goto spacedb_error;
            }

          if ((matchs =
                 sscanf (tmp_p, "pagesize %lf%c", &page_size, &page_unit)) != 2)
            {
              goto spacedb_error;
            }

          if ((db_page_size =
                 _size_to_byte_by_unit (page_size, page_unit)) < 0)
            {
              goto spacedb_error;
            }

          tmp_p = strstr (str_buf, "log pagesize:");
          if (tmp_p != NULL)
            {
              if ((matchs =
                     sscanf (tmp_p, "log pagesize: %lf%c", &page_size,
                             &page_unit)) != 2)
                {
                  goto spacedb_error;
                }

              if ((log_page_size =
                     _size_to_byte_by_unit (page_size, page_unit)) < 0)
                {
                  goto spacedb_error;
                }
            }
          else
            {
              /* log pagesize default value */
              log_page_size = 4096;
            }
        }

      else if (strncmp (str_buf, "Volid", 5) == 0)
        {
          break;
        }
    }

  while (fgets (str_buf, sizeof (str_buf), fp))
    {
      ut_trim (str_buf);
      if (str_buf[0] == '\0' || str_buf[0] == '-')
        {
          continue;
        }
      if (strncmp (str_buf, "Volid", 5) == 0)
        {
          break;
        }

      if (strncmp (str_buf, "Space", 5) == 0)
        {
          continue;
        }

      if (add_volume (str_buf))
        {
          continue;
        }
    }

  while (fgets (str_buf, sizeof (str_buf), fp))
    {
      ut_trim (str_buf);
      if (str_buf[0] == '\0' || str_buf[0] == '-')
        {
          continue;
        }
      if (strncmp (str_buf, "Volid", 5) == 0)
        {
          break;
        }

      if (add_temporary_volume (str_buf))
        {
          continue;
        }
    }
  set_page_size (db_page_size);
  set_log_page_size (log_page_size);

  fclose (fp);
  return;

spacedb_error:
  fclose (fp);
}