pvpanic: initialization cleanup
Avoid use of static variables: PC systems initialize pvpanic device through pvpanic_init, so we can simply create the fw_cfg file at that point. This also makes it possible to skip device creation completely if fw_cfg is not there, e.g. for xen - so the ports it reserves are not discoverable by guests. Also, make pvpanic_init void since callers ignore return status anyway. Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Paul Durrant <Paul.Durrant@citrix.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
		
							parent
							
								
									c6d559d9cf
								
							
						
					
					
						commit
						bc3e6a0d6c
					
				@ -97,26 +97,28 @@ static void pvpanic_isa_realizefn(DeviceState *dev, Error **errp)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    ISADevice *d = ISA_DEVICE(dev);
 | 
					    ISADevice *d = ISA_DEVICE(dev);
 | 
				
			||||||
    PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
 | 
					    PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
 | 
				
			||||||
    static bool port_configured;
 | 
					 | 
				
			||||||
    FWCfgState *fw_cfg;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    isa_register_ioport(d, &s->io, s->ioport);
 | 
					    isa_register_ioport(d, &s->io, s->ioport);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void pvpanic_fw_cfg(ISADevice *dev, FWCfgState *fw_cfg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!port_configured) {
 | 
					 | 
				
			||||||
        fw_cfg = fw_cfg_find();
 | 
					 | 
				
			||||||
        if (fw_cfg) {
 | 
					 | 
				
			||||||
    fw_cfg_add_file(fw_cfg, "etc/pvpanic-port",
 | 
					    fw_cfg_add_file(fw_cfg, "etc/pvpanic-port",
 | 
				
			||||||
                    g_memdup(&s->ioport, sizeof(s->ioport)),
 | 
					                    g_memdup(&s->ioport, sizeof(s->ioport)),
 | 
				
			||||||
                    sizeof(s->ioport));
 | 
					                    sizeof(s->ioport));
 | 
				
			||||||
            port_configured = true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int pvpanic_init(ISABus *bus)
 | 
					void pvpanic_init(ISABus *bus)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
 | 
					    ISADevice *dev;
 | 
				
			||||||
    return 0;
 | 
					    FWCfgState *fw_cfg = fw_cfg_find();
 | 
				
			||||||
 | 
					    if (!fw_cfg) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    dev = isa_create_simple (bus, TYPE_ISA_PVPANIC_DEVICE);
 | 
				
			||||||
 | 
					    pvpanic_fw_cfg(dev, fw_cfg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static Property pvpanic_isa_properties[] = {
 | 
					static Property pvpanic_isa_properties[] = {
 | 
				
			||||||
 | 
				
			|||||||
@ -193,7 +193,7 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
 | 
				
			|||||||
void pc_system_firmware_init(MemoryRegion *rom_memory);
 | 
					void pc_system_firmware_init(MemoryRegion *rom_memory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* pvpanic.c */
 | 
					/* pvpanic.c */
 | 
				
			||||||
int pvpanic_init(ISABus *bus);
 | 
					void pvpanic_init(ISABus *bus);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* e820 types */
 | 
					/* e820 types */
 | 
				
			||||||
#define E820_RAM        1
 | 
					#define E820_RAM        1
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user