OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [src/] [glue/] [tests/] [test_allocpage.c] - Rev 3

Go to most recent revision | Compare with Previous | Blame | View Log

#include <macros.h>
#include <config.h>
#include INC_GLUE(memory.h)
 
#include <lib/printk.h>
#include <lib/list.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include "test_allocpage.h"
#include "test_alloc_generic.h"
#include "debug.h"
 
unsigned int PAGE_ALLOCATIONS =	30;
unsigned int PAGE_ALLOC_SIZE_MAX = 8;
 
extern struct page_area *areas;
extern struct mem_cache *primary_cache;
 
extern struct mem_cache *secondary_cache;
extern struct mem_cache *spare_cache;
 
void print_page_area(struct page_area *ar, int areano)
{
	printf("Area starts @: 0x%x, %s, numpages: %d\n",
	       ar->index << PAGE_BITS,
	       (ar->used) ? "used" : "unused", ar->numpages);
	return;
}
 
void print_areas(struct page_area *ar)
{
	struct page_area *cur = ar;
	int areano = 1;
	printf("Page areas:\n-------------\n");
 
	if (!ar) {
		printf("None.\n");
		return;
	}
	print_page_area(cur, areano++);
	list_foreach_struct(cur, &ar->list, list) {
		print_page_area(cur, areano++);
	}
	return;
}
 
void print_cache(struct mem_cache *c, int cacheno)
{
	printf("Cache %d state:\n-------------\n", cacheno);
	printf("Total: %d\n", c->total);
	printf("Free: %d\n", c->free);
	printf("Start: 0x%x\n", c->start);
	return;
}
 
void print_caches(struct mem_cache *c)
{
	int caches = 1;
	struct mem_cache *cur = c;
	if (!c) {
		printf("None.\n");
		return;
	}
	print_cache(cur, caches++);
	list_foreach_struct(cur, &c->list, list) {
		print_cache(cur, caches++);
	}
	return;
}
 
void print_page_allocator_state(void)
{
	print_areas(areas);
	printf("PRIMARY:\n--------\n");
	print_caches(primary_cache);
	printf("SECONDARY:\n----------\n");
	print_caches(secondary_cache);
}
 
/* FIXME: with current default parameters (allocations = 30, sizemax = 8),
 * for some odd reason, we got the bug at line 280 in alloc_page.c.
 * Very weird. Find out why.
 */
void test_allocpage(int page_allocations, int page_alloc_size_max,
		    FILE *init_state, FILE *exit_state)
{
	if (!page_allocations)
		page_allocations = PAGE_ALLOCATIONS;
	if (!page_alloc_size_max)
		page_alloc_size_max = PAGE_ALLOC_SIZE_MAX;
 
	printf("\nPAGE ALLOCATOR TEST:====================================\n\n");
	test_alloc_free_random_order(page_allocations, page_alloc_size_max,
				     alloc_page, free_page,
				     print_page_allocator_state,
				     init_state, exit_state);
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.