VirtualBox

source: vbox/trunk/src/VBox/HostDrivers/Support/testcase/tstLow.cpp@ 18499

Last change on this file since 18499 was 14831, checked in by vboxsync, 16 years ago

whole bunch: avoid runtime.h, include individual headers indead.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.2 KB
Line 
1/** @file
2 *
3 * VBox host drivers - Ring-0 support drivers - Testcases:
4 * Test allocating physical memory below 4G
5 */
6
7/*
8 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.virtualbox.org. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License (GPL) as published by the Free Software
14 * Foundation, in version 2 as it comes in the "COPYING" file of the
15 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17 *
18 * The contents of this file may alternatively be used under the terms
19 * of the Common Development and Distribution License Version 1.0
20 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
21 * VirtualBox OSE distribution, in which case the provisions of the
22 * CDDL are applicable instead of those of the GPL.
23 *
24 * You may elect to license modified versions of this file under the
25 * terms and conditions of either the GPL or the CDDL or both.
26 *
27 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
28 * Clara, CA 95054 USA or visit http://www.sun.com if you need
29 * additional information or have any questions.
30 */
31
32
33/*******************************************************************************
34* Header Files *
35*******************************************************************************/
36#include <VBox/sup.h>
37#include <VBox/param.h>
38#include <VBox/err.h>
39#include <iprt/initterm.h>
40#include <iprt/stream.h>
41
42#include <string.h>
43
44int main(int argc, char **argv)
45{
46 int rc;
47 int rcRet = 0;
48
49 RTR3Init();
50 RTPrintf("tstLow: TESTING...\n");
51
52 rc = SUPR3Init(NULL);
53 if (RT_SUCCESS(rc))
54 {
55 /*
56 * Allocate a bit of contiguous memory.
57 */
58 SUPPAGE aPages0[128];
59 void *pvPages0 = (void *)0x77777777;
60 memset(&aPages0[0], 0x8f, sizeof(aPages0));
61 rc = SUPLowAlloc(RT_ELEMENTS(aPages0), &pvPages0, NULL, aPages0);
62 if (RT_SUCCESS(rc))
63 {
64 /* check that the pages are below 4GB and valid. */
65 for (unsigned iPage = 0; iPage < RT_ELEMENTS(aPages0); iPage++)
66 {
67 RTPrintf("%-4d: Phys=%RHp Reserved=%p\n", iPage, aPages0[iPage].Phys, aPages0[iPage].uReserved);
68 if (aPages0[iPage].uReserved != 0)
69 {
70 rcRet++;
71 RTPrintf("tstLow: error: aPages0[%d].uReserved=%#x expected 0!\n", iPage, aPages0[iPage].uReserved);
72 }
73 if ( aPages0[iPage].Phys >= _4G
74 || (aPages0[iPage].Phys & PAGE_OFFSET_MASK))
75 {
76 rcRet++;
77 RTPrintf("tstLow: error: aPages0[%d].Phys=%RHp!\n", iPage, aPages0[iPage].Phys);
78 }
79 }
80 if (!rcRet)
81 {
82 for (unsigned iPage = 0; iPage < RT_ELEMENTS(aPages0); iPage++)
83 memset((char *)pvPages0 + iPage * PAGE_SIZE, iPage, PAGE_SIZE);
84 for (unsigned iPage = 0; iPage < RT_ELEMENTS(aPages0); iPage++)
85 for (uint8_t *pu8 = (uint8_t *)pvPages0 + iPage * PAGE_SIZE, *pu8End = pu8 + PAGE_SIZE; pu8 < pu8End; pu8++)
86 if (*pu8 != (uint8_t)iPage)
87 {
88 RTPrintf("tstLow: error: invalid page content %02x != %02x. iPage=%p off=%#x\n",
89 *pu8, (uint8_t)iPage, iPage, (uintptr_t)pu8 & PAGE_OFFSET_MASK);
90 rcRet++;
91 }
92 }
93 SUPLowFree(pvPages0, RT_ELEMENTS(aPages0));
94 }
95 else
96 {
97 RTPrintf("SUPLowAlloc(%d,,) failed -> rc=%Rrc\n", RT_ELEMENTS(aPages0), rc);
98 rcRet++;
99 }
100
101 /*
102 * Allocate odd amounts in from 1 to 127.
103 */
104 for (unsigned cPages = 1; cPages <= 127; cPages++)
105 {
106 SUPPAGE aPages1[128];
107 void *pvPages1 = (void *)0x77777777;
108 memset(&aPages1[0], 0x8f, sizeof(aPages1));
109 rc = SUPLowAlloc(cPages, &pvPages1, NULL, aPages1);
110 if (RT_SUCCESS(rc))
111 {
112 /* check that the pages are below 4GB and valid. */
113 for (unsigned iPage = 0; iPage < cPages; iPage++)
114 {
115 RTPrintf("%-4d::%-4d: Phys=%RHp Reserved=%p\n", cPages, iPage, aPages1[iPage].Phys, aPages1[iPage].uReserved);
116 if (aPages1[iPage].uReserved != 0)
117 {
118 rcRet++;
119 RTPrintf("tstLow: error: aPages1[%d].uReserved=%#x expected 0!\n", iPage, aPages1[iPage].uReserved);
120 }
121 if ( aPages1[iPage].Phys >= _4G
122 || (aPages1[iPage].Phys & PAGE_OFFSET_MASK))
123 {
124 rcRet++;
125 RTPrintf("tstLow: error: aPages1[%d].Phys=%RHp!\n", iPage, aPages1[iPage].Phys);
126 }
127 }
128 if (!rcRet)
129 {
130 for (unsigned iPage = 0; iPage < cPages; iPage++)
131 memset((char *)pvPages1 + iPage * PAGE_SIZE, iPage, PAGE_SIZE);
132 for (unsigned iPage = 0; iPage < cPages; iPage++)
133 for (uint8_t *pu8 = (uint8_t *)pvPages1 + iPage * PAGE_SIZE, *pu8End = pu8 + PAGE_SIZE; pu8 < pu8End; pu8++)
134 if (*pu8 != (uint8_t)iPage)
135 {
136 RTPrintf("tstLow: error: invalid page content %02x != %02x. iPage=%p off=%#x\n",
137 *pu8, (uint8_t)iPage, iPage, (uintptr_t)pu8 & PAGE_OFFSET_MASK);
138 rcRet++;
139 }
140 }
141 SUPLowFree(pvPages1, cPages);
142 }
143 else
144 {
145 RTPrintf("SUPLowAlloc(%d,,) failed -> rc=%Rrc\n", cPages, rc);
146 rcRet++;
147 }
148 }
149
150 }
151 else
152 {
153 RTPrintf("SUPR3Init -> rc=%Rrc\n", rc);
154 rcRet++;
155 }
156
157
158 return rcRet;
159}
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use