Exemplo n.º 1
0
void shm_destroy_context(shm_context_t *context)
{
    iterator_t it = iterator_create(context->phys_pages);
    list_set_first(&it);
    while( ! list_is_last(&it) )
    {
        void *addr = list_get_current(&it);
        pmm_mark_page_as_free(addr);

        list_next(&it);
    }

    free(context);
}
Exemplo n.º 2
0
void *shm_attach(vmm_context_t *vmm_context, shm_context_t *shm_context, uintptr_t offset)
{
    if(offset >= shm_context->size)
        return -1;

    uintptr_t base = 0xB0000000; /* TODO */
    uintptr_t start = (base + offset) & PAGE_MASK;

    iterator_t it = iterator_create(shm_context->phys_pages);
    list_set_first(&it);

    int i = 0;
    while( ! list_is_last(&it) )
    {
        vaddr_t vaddr = start + i * PAGE_SIZE;
        paddr_t paddr = list_get_current(&it);

        vmm_map(vmm_context, paddr, vaddr, VMM_PRESENT | VMM_WRITABLE | VMM_USER);
        i++;
    }

    return start;
}
iterator_t mpi_file_ntriples_node_iterator_create(MPI_File file, MPI_Offset start, MPI_Offset amount, size_t bufsize, MPI_Comm comm) {
	_mpi_file_ntriples_node_iterator_state_t state = malloc(sizeof(_mpi_file_ntriples_node_iterator_state_type));
	if(state == NULL) {
		fprintf(stderr, "%s:%u: Error in mpi_file_ntriples_node_iterator_create; unable to allocate %u bytes for internal state.\n", __FILE__, __LINE__, sizeof(_mpi_file_ntriples_node_iterator_state_type));
		return NULL;
	}
	state->ntriple = NULL;
	state->mark = NULL;
	state->part = _MPI_FILE_NTRIPLES_NODE_ITERATOR_SUBJECT;
	state->iter = mpi_file_ntriples_iterator_create(file, start, amount, bufsize, comm);
	if(state->iter == NULL) {
		fprintf(stderr, "%s:%u: Error in mpi_file_ntriples_node_iterator_create; unable to allocate underlying iterator.\n", __FILE__, __LINE__);
		free(state);
		return NULL;
	}
	iterator_t iter = iterator_create(&_mpi_file_ntriples_node_iterator_has_next, &_mpi_file_ntriples_node_iterator_next, &_mpi_file_ntriples_node_iterator_destroy, state);
	if(iter == NULL) {
		fprintf(stderr, "%s:%u: Error in mpi_file_ntriples_node_iterator_create; unable to allocate iterator.\n", __FILE__, __LINE__);
		iterator_destroy(state->iter);
		free(state);
	}
	return iter;
}
Exemplo n.º 4
0
iterator_t *array_iterator(array_t *array)
{
	iterator_t *iterator = iterator_create(array_iteratorNextObject, array);
	return iterator;
}