Merge remote-tracking branch 'remotes/ehabkost/tags/machine-next-pull-request' into staging
Machine queue, 2018-08-17 * Allow machine classes to specify if boot device suffixes should be ignored by get_boot_devices_list() * Tiny coding style fixup # gpg: Signature made Fri 17 Aug 2018 19:29:22 BST # gpg: using RSA key 2807936F984DC5A6 # gpg: Good signature from "Eduardo Habkost <ehabkost@redhat.com>" # Primary key fingerprint: 5A32 2FD5 ABC4 D3DB ACCF D1AA 2807 936F 984D C5A6 * remotes/ehabkost/tags/machine-next-pull-request: fw_cfg: ignore suffixes in the bootdevice list dependent on machine class sysbus: always allow explicit_ofw_unit_address() to override address generation machine: Fix coding style at machine_run_board_init() Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		@@ -29,6 +29,7 @@
 | 
			
		||||
#include "qemu/error-report.h"
 | 
			
		||||
#include "sysemu/reset.h"
 | 
			
		||||
#include "hw/qdev-core.h"
 | 
			
		||||
#include "hw/boards.h"
 | 
			
		||||
 | 
			
		||||
typedef struct FWBootEntry FWBootEntry;
 | 
			
		||||
 | 
			
		||||
@@ -208,11 +209,13 @@ DeviceState *get_boot_device(uint32_t position)
 | 
			
		||||
 * memory pointed by "size" is assigned total length of the array in bytes
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
char *get_boot_devices_list(size_t *size, bool ignore_suffixes)
 | 
			
		||||
char *get_boot_devices_list(size_t *size)
 | 
			
		||||
{
 | 
			
		||||
    FWBootEntry *i;
 | 
			
		||||
    size_t total = 0;
 | 
			
		||||
    char *list = NULL;
 | 
			
		||||
    MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
 | 
			
		||||
    bool ignore_suffixes = mc->ignore_boot_device_suffixes;
 | 
			
		||||
 | 
			
		||||
    QTAILQ_FOREACH(i, &fw_boot_order, link) {
 | 
			
		||||
        char *devpath = NULL,  *suffix = NULL;
 | 
			
		||||
 
 | 
			
		||||
@@ -793,8 +793,9 @@ void machine_run_board_init(MachineState *machine)
 | 
			
		||||
    MachineClass *machine_class = MACHINE_GET_CLASS(machine);
 | 
			
		||||
 | 
			
		||||
    numa_complete_configuration(machine);
 | 
			
		||||
    if (nb_numa_nodes)
 | 
			
		||||
    if (nb_numa_nodes) {
 | 
			
		||||
        machine_numa_finish_cpu_init(machine);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* If the machine supports the valid_cpu_types check and the user
 | 
			
		||||
     * specified a CPU with -cpu check here that the user CPU is supported.
 | 
			
		||||
 
 | 
			
		||||
@@ -293,16 +293,8 @@ static char *sysbus_get_fw_dev_path(DeviceState *dev)
 | 
			
		||||
{
 | 
			
		||||
    SysBusDevice *s = SYS_BUS_DEVICE(dev);
 | 
			
		||||
    SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(s);
 | 
			
		||||
    /* for the explicit unit address fallback case: */
 | 
			
		||||
    char *addr, *fw_dev_path;
 | 
			
		||||
 | 
			
		||||
    if (s->num_mmio) {
 | 
			
		||||
        return g_strdup_printf("%s@" TARGET_FMT_plx, qdev_fw_name(dev),
 | 
			
		||||
                               s->mmio[0].addr);
 | 
			
		||||
    }
 | 
			
		||||
    if (s->num_pio) {
 | 
			
		||||
        return g_strdup_printf("%s@i%04x", qdev_fw_name(dev), s->pio[0]);
 | 
			
		||||
    }
 | 
			
		||||
    if (sbc->explicit_ofw_unit_address) {
 | 
			
		||||
        addr = sbc->explicit_ofw_unit_address(s);
 | 
			
		||||
        if (addr) {
 | 
			
		||||
@@ -311,6 +303,13 @@ static char *sysbus_get_fw_dev_path(DeviceState *dev)
 | 
			
		||||
            return fw_dev_path;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (s->num_mmio) {
 | 
			
		||||
        return g_strdup_printf("%s@" TARGET_FMT_plx, qdev_fw_name(dev),
 | 
			
		||||
                               s->mmio[0].addr);
 | 
			
		||||
    }
 | 
			
		||||
    if (s->num_pio) {
 | 
			
		||||
        return g_strdup_printf("%s@i%04x", qdev_fw_name(dev), s->pio[0]);
 | 
			
		||||
    }
 | 
			
		||||
    return g_strdup(qdev_fw_name(dev));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -861,7 +861,7 @@ static void fw_cfg_machine_reset(void *opaque)
 | 
			
		||||
    void *ptr;
 | 
			
		||||
    size_t len;
 | 
			
		||||
    FWCfgState *s = opaque;
 | 
			
		||||
    char *bootindex = get_boot_devices_list(&len, false);
 | 
			
		||||
    char *bootindex = get_boot_devices_list(&len);
 | 
			
		||||
 | 
			
		||||
    ptr = fw_cfg_modify_file(s, "bootorder", (uint8_t *)bootindex, len);
 | 
			
		||||
    g_free(ptr);
 | 
			
		||||
 
 | 
			
		||||
@@ -1160,7 +1160,7 @@ static void spapr_dt_chosen(sPAPRMachineState *spapr, void *fdt)
 | 
			
		||||
    const char *boot_device = machine->boot_order;
 | 
			
		||||
    char *stdout_path = spapr_vio_stdout_path(spapr->vio_bus);
 | 
			
		||||
    size_t cb = 0;
 | 
			
		||||
    char *bootlist = get_boot_devices_list(&cb, true);
 | 
			
		||||
    char *bootlist = get_boot_devices_list(&cb);
 | 
			
		||||
 | 
			
		||||
    _FDT(chosen = fdt_add_subnode(fdt, 0, "chosen"));
 | 
			
		||||
 | 
			
		||||
@@ -3949,6 +3949,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
 | 
			
		||||
    InterruptStatsProviderClass *ispc = INTERRUPT_STATS_PROVIDER_CLASS(oc);
 | 
			
		||||
 | 
			
		||||
    mc->desc = "pSeries Logical Partition (PAPR compliant)";
 | 
			
		||||
    mc->ignore_boot_device_suffixes = true;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * We set up the default / latest behaviour here.  The class_init
 | 
			
		||||
 
 | 
			
		||||
@@ -206,6 +206,7 @@ struct MachineClass {
 | 
			
		||||
    bool auto_enable_numa_with_memhp;
 | 
			
		||||
    void (*numa_auto_assign_ram)(MachineClass *mc, NodeInfo *nodes,
 | 
			
		||||
                                 int nb_nodes, ram_addr_t size);
 | 
			
		||||
    bool ignore_boot_device_suffixes;
 | 
			
		||||
 | 
			
		||||
    HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
 | 
			
		||||
                                           DeviceState *dev);
 | 
			
		||||
 
 | 
			
		||||
@@ -182,7 +182,7 @@ void hmp_info_usb(Monitor *mon, const QDict *qdict);
 | 
			
		||||
 | 
			
		||||
void add_boot_device_path(int32_t bootindex, DeviceState *dev,
 | 
			
		||||
                          const char *suffix);
 | 
			
		||||
char *get_boot_devices_list(size_t *size, bool ignore_suffixes);
 | 
			
		||||
char *get_boot_devices_list(size_t *size);
 | 
			
		||||
 | 
			
		||||
DeviceState *get_boot_device(uint32_t position);
 | 
			
		||||
void check_boot_index(int32_t bootindex, Error **errp);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user