blob: 4f066d96048e87f6c160bc822c9a35d9ab0fe427 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
/* $Id: zone.h $ */
/** @file
* NAT - this file is for sharing zone declaration with emu emulation and logging routines.
*/
/*
* Copyright (C) 2006-2022 Oracle and/or its affiliates.
*
* This file is part of VirtualBox base platform packages, as
* available from https://www.virtualbox.org.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, in version 3 of the
* License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <https://www.gnu.org/licenses>.
*
* SPDX-License-Identifier: GPL-3.0-only
*/
#ifndef __ZONE_H__
# define __ZONE_H__
# define ITEM_MAGIC 0xdead0001
struct item
{
uint32_t magic;
uma_zone_t zone;
uint32_t ref_count;
LIST_ENTRY(item) list;
};
# define ZONE_MAGIC 0xdead0002
struct uma_zone
{
uint32_t magic;
PNATState pData; /* to minimize changes in the rest of UMA emulation code */
RTCRITSECT csZone;
const char *name;
size_t size; /* item size */
ctor_t pfCtor;
dtor_t pfDtor;
zinit_t pfInit;
zfini_t pfFini;
uma_alloc_t pfAlloc;
uma_free_t pfFree;
int max_items;
int cur_items;
LIST_HEAD(RT_NOTHING, item) used_items;
LIST_HEAD(RT_NOTHING, item) free_items;
uma_zone_t master_zone;
void *area;
/** Needs call pfnXmitPending when memory becomes available if @c true.
* @remarks Only applies to the master zone (master_zone == NULL) */
bool fDoXmitPending;
};
#endif
|