25 #ifndef SHARE_VM_RUNTIME_VIRTUALSPACE_HPP 26 #define SHARE_VM_RUNTIME_VIRTUALSPACE_HPP 27 28 #include "utilities/globalDefinitions.hpp" 29 30 // ReservedSpace is a data structure for reserving a contiguous address range. 31 32 class ReservedSpace { 33 friend class VMStructs; 34 protected: 35 char* _base; 36 char* _nvdimm_base; 37 char* _nvdimm_base_nv; 38 size_t _size; 39 size_t _dram_size; 40 size_t _nvdimm_size; 41 size_t _noaccess_prefix; 42 size_t _alignment; 43 bool _special; 44 int _fd_for_heap; 45 int _fd_for_nvdimm; 46 private: 47 bool _executable; 48 49 // ReservedSpace 50 ReservedSpace(char* base, size_t size, size_t alignment, bool special, 51 bool executable); 52 protected: 53 void initialize(size_t size, size_t alignment, bool large, 54 char* requested_address, 55 bool executable); 56 57 public: 58 // Constructor 59 ReservedSpace(); 60 // Initialize the reserved space with the given size. If preferred_page_size 61 // is set, use this as minimum page size/alignment. This may waste some space 62 // if the given size is not aligned to that value, as the reservation will be 63 // aligned up to the final alignment in this case. 64 ReservedSpace(size_t size, size_t preferred_page_size = 0); 65 ReservedSpace(size_t size, size_t alignment, bool large, 66 char* requested_address = NULL); 67 ReservedSpace(size_t size, size_t alignment, bool large, bool executable); 68 69 // Accessors 70 char* base() const { return _base; } 71 char* nvdimm_base() const { return _nvdimm_base; } 72 int nvdimm_fd() const { return _fd_for_nvdimm; } 73 void setup_fd(int fd) {_fd_for_nvdimm = fd; } 74 size_t size() const { return _size; } 75 size_t nvdimm_size() const { return _nvdimm_size; } 76 char* end() const { return _base + _size; } 77 size_t alignment() const { return _alignment; } 78 bool special() const { return _special; } 79 bool executable() const { return _executable; } 80 size_t noaccess_prefix() const { return _noaccess_prefix; } 81 bool is_reserved() const { return _base != NULL; } 82 void release(); 83 84 // Splitting 85 ReservedSpace first_part(size_t partition_size, size_t alignment, 86 bool split = false, bool realloc = true); 87 ReservedSpace last_part (size_t partition_size, size_t alignment); 88 89 // These simply call the above using the default alignment. 90 inline ReservedSpace first_part(size_t partition_size, 91 bool split = false, bool realloc = true); 92 inline ReservedSpace last_part (size_t partition_size); 93 | 25 #ifndef SHARE_VM_RUNTIME_VIRTUALSPACE_HPP 26 #define SHARE_VM_RUNTIME_VIRTUALSPACE_HPP 27 28 #include "utilities/globalDefinitions.hpp" 29 30 // ReservedSpace is a data structure for reserving a contiguous address range. 31 32 class ReservedSpace { 33 friend class VMStructs; 34 protected: 35 char* _base; 36 char* _nvdimm_base; 37 char* _nvdimm_base_nv; 38 size_t _size; 39 size_t _dram_size; 40 size_t _nvdimm_size; 41 size_t _noaccess_prefix; 42 size_t _alignment; 43 bool _special; 44 int _fd_for_heap; 45 private: 46 bool _executable; 47 48 // ReservedSpace 49 ReservedSpace(char* base, size_t size, size_t alignment, bool special, 50 bool executable); 51 protected: 52 void initialize(size_t size, size_t alignment, bool large, 53 char* requested_address, 54 bool executable); 55 56 public: 57 // Constructor 58 ReservedSpace(); 59 // Initialize the reserved space with the given size. If preferred_page_size 60 // is set, use this as minimum page size/alignment. This may waste some space 61 // if the given size is not aligned to that value, as the reservation will be 62 // aligned up to the final alignment in this case. 63 ReservedSpace(size_t size, size_t preferred_page_size = 0); 64 ReservedSpace(size_t size, size_t alignment, bool large, 65 char* requested_address = NULL); 66 ReservedSpace(size_t size, size_t alignment, bool large, bool executable); 67 68 // Accessors 69 char* base() const { return _base; } 70 char* nvdimm_base() const { return _nvdimm_base; } 71 int nvdimm_fd() const { return _fd_for_heap; } 72 void setup_fd(int fd) {_fd_for_heap = fd; } 73 size_t size() const { return _size; } 74 size_t nvdimm_size() const { return _nvdimm_size; } 75 char* end() const { return _base + _size; } 76 size_t alignment() const { return _alignment; } 77 bool special() const { return _special; } 78 bool executable() const { return _executable; } 79 size_t noaccess_prefix() const { return _noaccess_prefix; } 80 bool is_reserved() const { return _base != NULL; } 81 void release(); 82 83 // Splitting 84 ReservedSpace first_part(size_t partition_size, size_t alignment, 85 bool split = false, bool realloc = true); 86 ReservedSpace last_part (size_t partition_size, size_t alignment); 87 88 // These simply call the above using the default alignment. 89 inline ReservedSpace first_part(size_t partition_size, 90 bool split = false, bool realloc = true); 91 inline ReservedSpace last_part (size_t partition_size); 92 |