test_memory.c revision 9ecc306d
1/*-
2 *   BSD LICENSE
3 *
4 *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
5 *   All rights reserved.
6 *
7 *   Redistribution and use in source and binary forms, with or without
8 *   modification, are permitted provided that the following conditions
9 *   are met:
10 *
11 *     * Redistributions of source code must retain the above copyright
12 *       notice, this list of conditions and the following disclaimer.
13 *     * Redistributions in binary form must reproduce the above copyright
14 *       notice, this list of conditions and the following disclaimer in
15 *       the documentation and/or other materials provided with the
16 *       distribution.
17 *     * Neither the name of Intel Corporation nor the names of its
18 *       contributors may be used to endorse or promote products derived
19 *       from this software without specific prior written permission.
20 *
21 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#include <stdio.h>
35#include <stdint.h>
36
37#include <rte_memory.h>
38#include <rte_common.h>
39
40#include "test.h"
41
42/*
43 * Memory
44 * ======
45 *
46 * - Dump the mapped memory. The python-expect script checks that at
47 *   least one line is dumped.
48 *
49 * - Check that memory size is different than 0.
50 *
51 * - Try to read all memory; it should not segfault.
52 */
53
54static int
55test_memory(void)
56{
57	uint64_t s;
58	unsigned i;
59	size_t j;
60	const struct rte_memseg *mem;
61
62	/*
63	 * dump the mapped memory: the python-expect script checks
64	 * that at least one line is dumped
65	 */
66	printf("Dump memory layout\n");
67	rte_dump_physmem_layout(stdout);
68
69	/* check that memory size is != 0 */
70	s = rte_eal_get_physmem_size();
71	if (s == 0) {
72		printf("No memory detected\n");
73		return -1;
74	}
75
76	/* try to read memory (should not segfault) */
77	mem = rte_eal_get_physmem_layout();
78	for (i = 0; i < RTE_MAX_MEMSEG && mem[i].addr != NULL ; i++) {
79
80		/* check memory */
81		for (j = 0; j<mem[i].len; j++) {
82			*((volatile uint8_t *) mem[i].addr + j);
83		}
84	}
85
86	return 0;
87}
88
89REGISTER_TEST_COMMAND(memory_autotest, test_memory);
90