• L
    fw-cfg: turn FW_CFG_FILE_SLOTS into a device property · e12f3a13
    Laszlo Ersek 提交于
    We'd like to raise the value of FW_CFG_FILE_SLOTS. Doing it naively could
    lead to problems with backward migration: a more recent QEMU (running an
    older machine type) would allow the guest, in fw_cfg_select(), to select a
    high key value that is unavailable in the same machine type implemented by
    the older (target) QEMU. On the target host, fw_cfg_data_read() for
    example could dereference nonexistent entries.
    
    As first step, size the FWCfgState.entries[*] and FWCfgState.entry_order
    arrays dynamically. All three array sizes will be influenced by the new
    field FWCfgState.file_slots (and matching device property).
    
    Make the following changes:
    
    - Replace the FW_CFG_FILE_SLOTS macro with FW_CFG_FILE_SLOTS_MIN (minimum
      count of fw_cfg file slots) in the header file. The value remains 0x10.
    
    - Replace all uses of FW_CFG_FILE_SLOTS with a helper function called
      fw_cfg_file_slots(), returning the new property.
    
    - Eliminate the macro FW_CFG_MAX_ENTRY, and replace all its uses with a
      helper function called fw_cfg_max_entry().
    
    - In the MMIO- and IO-mapped realize functions both, allocate all three
      arrays dynamically, based on the new property.
    
    - The new property defaults to FW_CFG_FILE_SLOTS_MIN. This is going to be
      customized in the following patches.
    
    Cc: "Gabriel L. Somlo" <somlo@cmu.edu>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Gerd Hoffmann <kraxel@redhat.com>
    Cc: Igor Mammedov <imammedo@redhat.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
    Acked-by: NGabriel Somlo <somlo@cmu.edu>
    Tested-by: NGabriel Somlo <somlo@cmu.edu>
    Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
    Reviewed-by: NEduardo Habkost <ehabkost@redhat.com>
    e12f3a13
fw_cfg.c 34.5 KB