mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 75f2749822
			
		
	
	
		75f2749822
		
	
	
	
	
		
			
			as they use completely different way to handle hotplug event Suggested-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
		
			
				
	
	
		
			95 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| QEMU<->ACPI BIOS memory hotplug interface
 | ||
| --------------------------------------
 | ||
| 
 | ||
| ACPI BIOS GPE.3 handler is dedicated for notifying OS about memory hot-add
 | ||
| and hot-remove events.
 | ||
| 
 | ||
| Memory hot-plug interface (IO port 0xa00-0xa17, 1-4 byte access):
 | ||
| ---------------------------------------------------------------
 | ||
| 0xa00:
 | ||
|   read access:
 | ||
|       [0x0-0x3] Lo part of memory device phys address
 | ||
|       [0x4-0x7] Hi part of memory device phys address
 | ||
|       [0x8-0xb] Lo part of memory device size in bytes
 | ||
|       [0xc-0xf] Hi part of memory device size in bytes
 | ||
|       [0x10-0x13] Memory device proximity domain
 | ||
|       [0x14] Memory device status fields
 | ||
|           bits:
 | ||
|               0: Device is enabled and may be used by guest
 | ||
|               1: Device insert event, used to distinguish device for which
 | ||
|                  no device check event to OSPM was issued.
 | ||
|                  It's valid only when bit 1 is set.
 | ||
|               2: Device remove event, used to distinguish device for which
 | ||
|                  no device eject request to OSPM was issued.
 | ||
|               3-7: reserved and should be ignored by OSPM
 | ||
|       [0x15-0x17] reserved
 | ||
| 
 | ||
|   write access:
 | ||
|       [0x0-0x3] Memory device slot selector, selects active memory device.
 | ||
|                 All following accesses to other registers in 0xa00-0xa17
 | ||
|                 region will read/store data from/to selected memory device.
 | ||
|       [0x4-0x7] OST event code reported by OSPM
 | ||
|       [0x8-0xb] OST status code reported by OSPM
 | ||
|       [0xc-0x13] reserved, writes into it are ignored
 | ||
|       [0x14] Memory device control fields
 | ||
|           bits:
 | ||
|               0: reserved, OSPM must clear it before writing to register.
 | ||
|                  Due to BUG in versions prior 2.4 that field isn't cleared
 | ||
|                  when other fields are written. Keep it reserved and don't
 | ||
|                  try to reuse it.
 | ||
|               1: if set to 1 clears device insert event, set by OSPM
 | ||
|                  after it has emitted device check event for the
 | ||
|                  selected memory device
 | ||
|               2: if set to 1 clears device remove event, set by OSPM
 | ||
|                  after it has emitted device eject request for the
 | ||
|                  selected memory device
 | ||
|               3: if set to 1 initiates device eject, set by OSPM when it
 | ||
|                  triggers memory device removal and calls _EJ0 method
 | ||
|               4-7: reserved, OSPM must clear them before writing to register
 | ||
| 
 | ||
| Selecting memory device slot beyond present range has no effect on platform:
 | ||
|    - write accesses to memory hot-plug registers not documented above are
 | ||
|      ignored
 | ||
|    - read accesses to memory hot-plug registers not documented above return
 | ||
|      all bits set to 1.
 | ||
| 
 | ||
| Memory hot remove process diagram:
 | ||
| ----------------------------------
 | ||
|  +-------------+     +-----------------------+      +------------------+     
 | ||
|  |  1. QEMU    |     | 2. QEMU               |      |3. QEMU           |     
 | ||
|  |  device_del +---->+ device unplug request +----->+Send SCI to guest,|     
 | ||
|  |             |     |         cb            |      |return control to |     
 | ||
|  +-------------+     +-----------------------+      |management        |     
 | ||
|                                                     +------------------+     
 | ||
|                                                                              
 | ||
|  +---------------------------------------------------------------------+     
 | ||
|                                                                              
 | ||
|  +---------------------+              +-------------------------+            
 | ||
|  | OSPM:               | remove event | OSPM:                   |            
 | ||
|  | send Eject Request, |              | Scan memory devices     |            
 | ||
|  | clear remove event  +<-------------+ for event flags         |            
 | ||
|  |                     |              |                         |            
 | ||
|  +---------------------+              +-------------------------+            
 | ||
|            |                                                                 
 | ||
|            |                                                                 
 | ||
|  +---------v--------+            +-----------------------+                   
 | ||
|  | Guest OS:        |  success   | OSPM:                 |                   
 | ||
|  | process Ejection +----------->+ Execute _EJ0 method,  |                   
 | ||
|  | request          |            | set eject bit in flags|                   
 | ||
|  +------------------+            +-----------------------+                   
 | ||
|            |failure                         |                                
 | ||
|            v                                v                                
 | ||
|  +------------------------+      +-----------------------+                   
 | ||
|  | OSPM:                  |      | QEMU:                 |                   
 | ||
|  | set OST event & status |      | call device unplug cb |                   
 | ||
|  | fields                 |      |                       |                   
 | ||
|  +------------------------+      +-----------------------+                   
 | ||
|           |                                  |                               
 | ||
|           v                                  v                               
 | ||
|  +------------------+              +-------------------+                     
 | ||
|  |QEMU:             |              |QEMU:              |                     
 | ||
|  |Send OST QMP event|              |Send device deleted|                     
 | ||
|  |                  |              |QMP event          |                     
 | ||
|  +------------------+              |                   |                     
 | ||
|                                    +-------------------+
 |