gem5  v20.1.0.0
physical.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 #ifndef __MEM_PHYSICAL_HH__
39 #define __MEM_PHYSICAL_HH__
40 
41 #include "base/addr_range_map.hh"
42 #include "mem/packet.hh"
43 
47 class AbstractMemory;
48 
53 {
54  public:
55 
61  bool conf_table_reported, bool in_addr_map, bool kvm_map)
62  : range(range), pmem(pmem), confTableReported(conf_table_reported),
63  inAddrMap(in_addr_map), kvmMap(kvm_map)
64  {}
65 
70 
75  uint8_t* pmem;
76 
81 
85  bool inAddrMap;
86 
91  bool kvmMap;
92 };
93 
111 {
112 
113  private:
114 
115  // Name for debugging
116  std::string _name;
117 
118  // Global address map
120 
121  // All address-mapped memories
123 
124  // The total memory size
125  uint64_t size;
126 
127  // Let the user choose if we reserve swap space when calling mmap
128  const bool mmapUsingNoReserve;
129 
130  const std::string sharedBackstore;
131 
132  // The physical memory used to provide the memory in the simulated
133  // system
135 
136  // Prevent copying
138 
139  // Prevent assignment
141 
151  void createBackingStore(AddrRange range,
152  const std::vector<AbstractMemory*>& _memories,
153  bool conf_table_reported,
154  bool in_addr_map, bool kvm_map);
155 
156  public:
157 
161  PhysicalMemory(const std::string& _name,
162  const std::vector<AbstractMemory*>& _memories,
163  bool mmap_using_noreserve,
164  const std::string& shared_backstore);
165 
169  ~PhysicalMemory();
170 
175  const std::string name() const { return _name; }
176 
184  bool isMemAddr(Addr addr) const;
185 
195 
201  uint64_t totalSize() const { return size; }
202 
216  { return backingStore; }
217 
225  void access(PacketPtr pkt);
226 
235  void functionalAccess(PacketPtr pkt);
236 
245  void serialize(CheckpointOut &cp) const override;
246 
254  void serializeStore(CheckpointOut &cp, unsigned int store_id,
255  AddrRange range, uint8_t* pmem) const;
256 
262  void unserialize(CheckpointIn &cp) override;
263 
268 
269 };
270 
271 #endif //__MEM_PHYSICAL_HH__
BackingStoreEntry::range
AddrRange range
The address range covered in the guest.
Definition: physical.hh:69
Serializable
Basic support for object serialization.
Definition: serialize.hh:172
BackingStoreEntry::BackingStoreEntry
BackingStoreEntry(AddrRange range, uint8_t *pmem, bool conf_table_reported, bool in_addr_map, bool kvm_map)
Create a backing store entry.
Definition: physical.hh:60
PhysicalMemory::getBackingStore
std::vector< BackingStoreEntry > getBackingStore() const
Get the pointers to the backing store for external host access.
Definition: physical.hh:215
PhysicalMemory::unserializeStore
void unserializeStore(CheckpointIn &cp)
Unserialize a specific backing store, identified by a section.
Definition: physical.cc:413
PhysicalMemory::sharedBackstore
const std::string sharedBackstore
Definition: physical.hh:130
std::vector< AbstractMemory * >
packet.hh
PhysicalMemory::PhysicalMemory
PhysicalMemory(const PhysicalMemory &)
PhysicalMemory::operator=
PhysicalMemory & operator=(const PhysicalMemory &)
BackingStoreEntry::confTableReported
bool confTableReported
Whether this memory should be reported to the configuration table.
Definition: physical.hh:80
AbstractMemory
An abstract memory represents a contiguous block of physical memory, with an associated address range...
Definition: abstract_mem.hh:104
PhysicalMemory::name
const std::string name() const
Return the name for debugging and for creation of sections for checkpointing.
Definition: physical.hh:175
PhysicalMemory::createBackingStore
void createBackingStore(AddrRange range, const std::vector< AbstractMemory * > &_memories, bool conf_table_reported, bool in_addr_map, bool kvm_map)
Create the memory region providing the backing store for a given address range that corresponds to a ...
Definition: physical.cc:185
BackingStoreEntry::kvmMap
bool kvmMap
Whether KVM should map this memory into the guest address space during acceleration.
Definition: physical.hh:91
PhysicalMemory::_name
std::string _name
Definition: physical.hh:116
cp
Definition: cprintf.cc:40
PhysicalMemory::size
uint64_t size
Definition: physical.hh:125
PhysicalMemory::serializeStore
void serializeStore(CheckpointOut &cp, unsigned int store_id, AddrRange range, uint8_t *pmem) const
Serialize a specific store.
Definition: physical.cc:342
AddrRange
The AddrRange class encapsulates an address range, and supports a number of tests to check if two ran...
Definition: addr_range.hh:68
addr_range_map.hh
PhysicalMemory::totalSize
uint64_t totalSize() const
Get the total physical memory size.
Definition: physical.hh:201
PhysicalMemory::backingStore
std::vector< BackingStoreEntry > backingStore
Definition: physical.hh:134
PhysicalMemory::mmapUsingNoReserve
const bool mmapUsingNoReserve
Definition: physical.hh:128
PhysicalMemory::functionalAccess
void functionalAccess(PacketPtr pkt)
Perform an untimed memory read or write without changing anything but the memory itself.
Definition: physical.cc:303
AddrRangeMap< AbstractMemory *, 1 >
BackingStoreEntry::inAddrMap
bool inAddrMap
Whether this memory should appear in the global address map.
Definition: physical.hh:85
BackingStoreEntry::pmem
uint8_t * pmem
Pointer to the host memory this range maps to.
Definition: physical.hh:75
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
PhysicalMemory
The physical memory encapsulates all memories in the system and provides basic functionality for acce...
Definition: physical.hh:110
PhysicalMemory::memories
std::vector< AbstractMemory * > memories
Definition: physical.hh:122
BackingStoreEntry
A single entry for the backing store.
Definition: physical.hh:52
PhysicalMemory::isMemAddr
bool isMemAddr(Addr addr) const
Check if a physical address is within a range of a memory that is part of the global address map.
Definition: physical.cc:252
PhysicalMemory::addrMap
AddrRangeMap< AbstractMemory *, 1 > addrMap
Definition: physical.hh:119
Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:257
addr
ip6_addr_t addr
Definition: inet.hh:423
PhysicalMemory::serialize
void serialize(CheckpointOut &cp) const override
Serialize all the memories in the system.
Definition: physical.cc:312
CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:63
PhysicalMemory::access
void access(PacketPtr pkt)
Perform an untimed memory access and update all the state (e.g.
Definition: physical.cc:294
PhysicalMemory::getConfAddrRanges
AddrRangeList getConfAddrRanges() const
Get the memory ranges for all memories that are to be reported to the configuration table.
Definition: physical.cc:258
std::list< AddrRange >
CheckpointIn
Definition: serialize.hh:67
PhysicalMemory::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize the memories in the system.
Definition: physical.cc:388
PhysicalMemory::~PhysicalMemory
~PhysicalMemory()
Unmap all the backing store we have used.
Definition: physical.cc:244

Generated on Wed Sep 30 2020 14:02:13 for gem5 by doxygen 1.8.17