[Kernel] Revert Guest->Host Object Mapping
This commit is contained in:
committed by
Radosław Gliński
parent
be689457cb
commit
18b5a6706a
@@ -17,6 +17,7 @@ struct XAPC;
|
||||
|
||||
struct X_KPCR;
|
||||
struct X_KTHREAD;
|
||||
struct X_OBJECT_HEADER;
|
||||
struct X_OBJECT_CREATE_INFORMATION;
|
||||
|
||||
} // namespace xe::kernel
|
||||
|
||||
@@ -479,44 +479,6 @@ X_STATUS ObjectTable::RestoreHandle(X_HANDLE handle, XObject* object) {
|
||||
return X_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void ObjectTable::MapGuestObjectToHostHandle(uint32_t guest_object,
|
||||
X_HANDLE host_handle) {
|
||||
auto global_lock = global_critical_region_.Acquire();
|
||||
guest_to_host_handle_[guest_object] = host_handle;
|
||||
}
|
||||
bool ObjectTable::HostHandleForGuestObject(uint32_t guest_object, X_HANDLE& out) {
|
||||
auto global_lock = global_critical_region_.Acquire();
|
||||
auto gobj_iter = guest_to_host_handle_.find(guest_object);
|
||||
if (gobj_iter == guest_to_host_handle_.end()) {
|
||||
return false;
|
||||
}
|
||||
out = gobj_iter->second;
|
||||
return true;
|
||||
}
|
||||
|
||||
void ObjectTable::UnmapGuestObjectHostHandle(uint32_t guest_object) {
|
||||
auto global_lock = global_critical_region_.Acquire();
|
||||
auto iter = guest_to_host_handle_.find(guest_object);
|
||||
if (iter == guest_to_host_handle_.end()) {
|
||||
return;
|
||||
} else {
|
||||
guest_to_host_handle_.erase(iter);
|
||||
}
|
||||
}
|
||||
void ObjectTable::FlushGuestToHostMapping(uint32_t base_address,
|
||||
uint32_t length) {
|
||||
auto global_lock = global_critical_region_.Acquire();
|
||||
auto iterator = guest_to_host_handle_.lower_bound(base_address);
|
||||
|
||||
while (iterator !=guest_to_host_handle_.end() && iterator->first >= base_address && iterator->first < (base_address + length)) {
|
||||
auto old_mapping = iterator;
|
||||
|
||||
iterator++;
|
||||
auto node_handle = guest_to_host_handle_.extract(old_mapping);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace util
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
@@ -80,10 +80,6 @@ class ObjectTable {
|
||||
std::vector<object_ref<XObject>> GetAllObjects();
|
||||
void PurgeAllObjects(); // Purges the object table of all guest objects
|
||||
|
||||
void MapGuestObjectToHostHandle(uint32_t guest_object, X_HANDLE host_handle);
|
||||
void UnmapGuestObjectHostHandle(uint32_t guest_object);
|
||||
bool HostHandleForGuestObject(uint32_t guest_object, X_HANDLE& out);
|
||||
void FlushGuestToHostMapping(uint32_t base_address, uint32_t length);
|
||||
private:
|
||||
struct ObjectTableEntry {
|
||||
int handle_ref_count = 0;
|
||||
@@ -111,7 +107,6 @@ class ObjectTable {
|
||||
uint32_t last_free_entry_ = 0;
|
||||
uint32_t last_free_host_entry_ = 0;
|
||||
std::unordered_map<string_key_case, X_HANDLE> name_table_;
|
||||
std::map<uint32_t, X_HANDLE> guest_to_host_handle_;
|
||||
};
|
||||
|
||||
// Generic lookup
|
||||
|
||||
Reference in New Issue
Block a user