Add capability to get precise free size for userspace
This commit is contained in:
		
							parent
							
								
									69cb68ced3
								
							
						
					
					
						commit
						1e8584af10
					
				| @ -14,7 +14,7 @@ impl MemInfoINode { | |||||||
| impl ProcINode for MemInfoINode { | impl ProcINode for MemInfoINode { | ||||||
|     fn generate_data_in_bytes(&self) -> vfs::Result<Vec<u8>> { |     fn generate_data_in_bytes(&self) -> vfs::Result<Vec<u8>> { | ||||||
|         let total_ram = USER_SPACE_VM_MANAGER.get_total_size(); |         let total_ram = USER_SPACE_VM_MANAGER.get_total_size(); | ||||||
|         let free_ram = current!().vm().get_free_size(); |         let free_ram = USER_SPACE_VM_MANAGER.get_precise_free_size(); | ||||||
|         Ok(format!( |         Ok(format!( | ||||||
|             "MemTotal:       {} kB\n\ |             "MemTotal:       {} kB\n\ | ||||||
|              MemFree:        {} kB\n\ |              MemFree:        {} kB\n\ | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ pub fn do_sysinfo() -> Result<sysinfo_t> { | |||||||
|     let info = sysinfo_t { |     let info = sysinfo_t { | ||||||
|         uptime: time::up_time::get().unwrap().as_secs() as i64, // Duration can't be negative
 |         uptime: time::up_time::get().unwrap().as_secs() as i64, // Duration can't be negative
 | ||||||
|         totalram: USER_SPACE_VM_MANAGER.get_total_size() as u64, |         totalram: USER_SPACE_VM_MANAGER.get_total_size() as u64, | ||||||
|         freeram: current!().vm().get_free_size() as u64, |         freeram: USER_SPACE_VM_MANAGER.get_precise_free_size() as u64, | ||||||
|         procs: table::get_all_processes().len() as u16, |         procs: table::get_all_processes().len() as u16, | ||||||
|         mem_unit: 1, |         mem_unit: 1, | ||||||
|         ..Default::default() |         ..Default::default() | ||||||
|  | |||||||
| @ -46,6 +46,15 @@ impl VMManager { | |||||||
|         self.internal().free_manager.free_size() |         self.internal().free_manager.free_size() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub fn get_precise_free_size(&self) -> usize { | ||||||
|  |         let internal = self.internal(); | ||||||
|  |         internal.free_manager.free_size() | ||||||
|  |             + internal | ||||||
|  |                 .chunks | ||||||
|  |                 .iter() | ||||||
|  |                 .fold(0, |acc, chunks| acc + chunks.free_size()) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn verified_clean_when_exit(&self) -> bool { |     pub fn verified_clean_when_exit(&self) -> bool { | ||||||
|         let internal = self.internal(); |         let internal = self.internal(); | ||||||
|         internal.chunks.len() == 0 && internal.free_manager.free_size() == self.range.size() |         internal.chunks.len() == 0 && internal.free_manager.free_size() == self.range.size() | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user