vl: Switch qemu_uuid to QemuUUID
Update all qemu_uuid users as well, especially get rid of the duplicated low level g_strdup_printf, sscanf and snprintf calls with QEMU UUID API. Since qemu_uuid_parse is quite tangled with qemu_uuid, its switching to QemuUUID is done here too to keep everything in sync and avoid code churn. Signed-off-by: Fam Zheng <famz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Jeff Cody <jcody@redhat.com> Message-Id: <1474432046-325-10-git-send-email-famz@redhat.com>
This commit is contained in:
parent
315d318452
commit
9c5ce8db2e
@ -1773,7 +1773,7 @@ static void ipmi_sim_realize(DeviceState *dev, Error **errp)
|
|||||||
ibs->acpi_power_state[1] = 0;
|
ibs->acpi_power_state[1] = 0;
|
||||||
|
|
||||||
if (qemu_uuid_set) {
|
if (qemu_uuid_set) {
|
||||||
memcpy(&ibs->uuid, qemu_uuid, 16);
|
memcpy(&ibs->uuid, &qemu_uuid, 16);
|
||||||
} else {
|
} else {
|
||||||
memset(&ibs->uuid, 0, 16);
|
memset(&ibs->uuid, 0, 16);
|
||||||
}
|
}
|
||||||
|
@ -883,7 +883,7 @@ static void fw_cfg_init1(DeviceState *dev)
|
|||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
|
|
||||||
fw_cfg_add_bytes(s, FW_CFG_SIGNATURE, (char *)"QEMU", 4);
|
fw_cfg_add_bytes(s, FW_CFG_SIGNATURE, (char *)"QEMU", 4);
|
||||||
fw_cfg_add_bytes(s, FW_CFG_UUID, qemu_uuid, 16);
|
fw_cfg_add_bytes(s, FW_CFG_UUID, &qemu_uuid, 16);
|
||||||
fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)!machine->enable_graphics);
|
fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)!machine->enable_graphics);
|
||||||
fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
||||||
fw_cfg_add_i16(s, FW_CFG_BOOT_MENU, (uint16_t)boot_menu);
|
fw_cfg_add_i16(s, FW_CFG_BOOT_MENU, (uint16_t)boot_menu);
|
||||||
|
@ -332,12 +332,7 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
|
|||||||
g_free(buf);
|
g_free(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
buf = g_strdup_printf(UUID_FMT, qemu_uuid[0], qemu_uuid[1],
|
buf = qemu_uuid_unparse_strdup(&qemu_uuid);
|
||||||
qemu_uuid[2], qemu_uuid[3], qemu_uuid[4],
|
|
||||||
qemu_uuid[5], qemu_uuid[6], qemu_uuid[7],
|
|
||||||
qemu_uuid[8], qemu_uuid[9], qemu_uuid[10],
|
|
||||||
qemu_uuid[11], qemu_uuid[12], qemu_uuid[13],
|
|
||||||
qemu_uuid[14], qemu_uuid[15]);
|
|
||||||
|
|
||||||
_FDT((fdt_property_string(fdt, "vm,uuid", buf)));
|
_FDT((fdt_property_string(fdt, "vm,uuid", buf)));
|
||||||
if (qemu_uuid_set) {
|
if (qemu_uuid_set) {
|
||||||
|
@ -303,7 +303,8 @@ static void rtas_ibm_get_system_parameter(PowerPCCPU *cpu,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case RTAS_SYSPARM_UUID:
|
case RTAS_SYSPARM_UUID:
|
||||||
ret = sysparm_st(buffer, length, qemu_uuid, (qemu_uuid_set ? 16 : 0));
|
ret = sysparm_st(buffer, length, (unsigned char *)&qemu_uuid,
|
||||||
|
(qemu_uuid_set ? 16 : 0));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ret = RTAS_OUT_NOT_SUPPORTED;
|
ret = RTAS_OUT_NOT_SUPPORTED;
|
||||||
|
@ -80,7 +80,7 @@ static struct {
|
|||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
const char *manufacturer, *product, *version, *serial, *sku, *family;
|
const char *manufacturer, *product, *version, *serial, *sku, *family;
|
||||||
/* uuid is in qemu_uuid[] */
|
/* uuid is in qemu_uuid */
|
||||||
} type1;
|
} type1;
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
@ -409,7 +409,7 @@ static void smbios_build_type_1_fields(void)
|
|||||||
* BIOS.
|
* BIOS.
|
||||||
*/
|
*/
|
||||||
smbios_add_field(1, offsetof(struct smbios_type_1, uuid),
|
smbios_add_field(1, offsetof(struct smbios_type_1, uuid),
|
||||||
qemu_uuid, 16);
|
&qemu_uuid, 16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -484,9 +484,9 @@ static void smbios_build_type_0_table(void)
|
|||||||
/* Encode UUID from the big endian encoding described on RFC4122 to the wire
|
/* Encode UUID from the big endian encoding described on RFC4122 to the wire
|
||||||
* format specified by SMBIOS version 2.6.
|
* format specified by SMBIOS version 2.6.
|
||||||
*/
|
*/
|
||||||
static void smbios_encode_uuid(struct smbios_uuid *uuid, const uint8_t *buf)
|
static void smbios_encode_uuid(struct smbios_uuid *uuid, QemuUUID *in)
|
||||||
{
|
{
|
||||||
memcpy(uuid, buf, 16);
|
memcpy(uuid, &in, 16);
|
||||||
if (smbios_uuid_encoded) {
|
if (smbios_uuid_encoded) {
|
||||||
uuid->time_low = bswap32(uuid->time_low);
|
uuid->time_low = bswap32(uuid->time_low);
|
||||||
uuid->time_mid = bswap16(uuid->time_mid);
|
uuid->time_mid = bswap16(uuid->time_mid);
|
||||||
@ -503,7 +503,7 @@ static void smbios_build_type_1_table(void)
|
|||||||
SMBIOS_TABLE_SET_STR(1, version_str, type1.version);
|
SMBIOS_TABLE_SET_STR(1, version_str, type1.version);
|
||||||
SMBIOS_TABLE_SET_STR(1, serial_number_str, type1.serial);
|
SMBIOS_TABLE_SET_STR(1, serial_number_str, type1.serial);
|
||||||
if (qemu_uuid_set) {
|
if (qemu_uuid_set) {
|
||||||
smbios_encode_uuid(&t->uuid, qemu_uuid);
|
smbios_encode_uuid(&t->uuid, &qemu_uuid);
|
||||||
} else {
|
} else {
|
||||||
memset(&t->uuid, 0, 16);
|
memset(&t->uuid, 0, 16);
|
||||||
}
|
}
|
||||||
@ -1002,7 +1002,7 @@ void smbios_entry_add(QemuOpts *opts)
|
|||||||
|
|
||||||
val = qemu_opt_get(opts, "uuid");
|
val = qemu_opt_get(opts, "uuid");
|
||||||
if (val) {
|
if (val) {
|
||||||
if (qemu_uuid_parse(val, qemu_uuid) != 0) {
|
if (qemu_uuid_parse(val, &qemu_uuid) != 0) {
|
||||||
error_report("Invalid UUID");
|
error_report("Invalid UUID");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -53,11 +53,7 @@ int xenstore_domain_init1(const char *kernel, const char *ramdisk,
|
|||||||
char *dom, uuid_string[42], vm[256], path[256];
|
char *dom, uuid_string[42], vm[256], path[256];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
snprintf(uuid_string, sizeof(uuid_string), UUID_FMT,
|
qemu_uuid_unparse(&qemu_uuid, uuid_string);
|
||||||
qemu_uuid[0], qemu_uuid[1], qemu_uuid[2], qemu_uuid[3],
|
|
||||||
qemu_uuid[4], qemu_uuid[5], qemu_uuid[6], qemu_uuid[7],
|
|
||||||
qemu_uuid[8], qemu_uuid[9], qemu_uuid[10], qemu_uuid[11],
|
|
||||||
qemu_uuid[12], qemu_uuid[13], qemu_uuid[14], qemu_uuid[15]);
|
|
||||||
dom = xs_get_domain_path(xenstore, xen_domid);
|
dom = xs_get_domain_path(xenstore, xen_domid);
|
||||||
snprintf(vm, sizeof(vm), "/vm/%s", uuid_string);
|
snprintf(vm, sizeof(vm), "/vm/%s", uuid_string);
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ void qemu_uuid_unparse(const QemuUUID *uuid, char *out);
|
|||||||
|
|
||||||
char *qemu_uuid_unparse_strdup(const QemuUUID *uuid);
|
char *qemu_uuid_unparse_strdup(const QemuUUID *uuid);
|
||||||
|
|
||||||
int qemu_uuid_parse(const char *str, uint8_t *uuid);
|
int qemu_uuid_parse(const char *str, QemuUUID *uuid);
|
||||||
|
|
||||||
void qemu_uuid_bswap(QemuUUID *uuid);
|
void qemu_uuid_bswap(QemuUUID *uuid);
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include "qemu/notify.h"
|
#include "qemu/notify.h"
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
#include "qemu/bitmap.h"
|
#include "qemu/bitmap.h"
|
||||||
|
#include "qemu/uuid.h"
|
||||||
#include "qom/object.h"
|
#include "qom/object.h"
|
||||||
|
|
||||||
/* vl.c */
|
/* vl.c */
|
||||||
@ -16,7 +17,7 @@
|
|||||||
extern const char *bios_name;
|
extern const char *bios_name;
|
||||||
|
|
||||||
extern const char *qemu_name;
|
extern const char *qemu_name;
|
||||||
extern uint8_t qemu_uuid[];
|
extern QemuUUID qemu_uuid;
|
||||||
extern bool qemu_uuid_set;
|
extern bool qemu_uuid_set;
|
||||||
|
|
||||||
bool runstate_check(RunState state);
|
bool runstate_check(RunState state);
|
||||||
|
10
qmp.c
10
qmp.c
@ -36,6 +36,7 @@
|
|||||||
#include "qom/object_interfaces.h"
|
#include "qom/object_interfaces.h"
|
||||||
#include "hw/mem/pc-dimm.h"
|
#include "hw/mem/pc-dimm.h"
|
||||||
#include "hw/acpi/acpi_dev_interface.h"
|
#include "hw/acpi/acpi_dev_interface.h"
|
||||||
|
#include "qemu/uuid.h"
|
||||||
|
|
||||||
NameInfo *qmp_query_name(Error **errp)
|
NameInfo *qmp_query_name(Error **errp)
|
||||||
{
|
{
|
||||||
@ -75,15 +76,8 @@ KvmInfo *qmp_query_kvm(Error **errp)
|
|||||||
UuidInfo *qmp_query_uuid(Error **errp)
|
UuidInfo *qmp_query_uuid(Error **errp)
|
||||||
{
|
{
|
||||||
UuidInfo *info = g_malloc0(sizeof(*info));
|
UuidInfo *info = g_malloc0(sizeof(*info));
|
||||||
char uuid[64];
|
|
||||||
|
|
||||||
snprintf(uuid, sizeof(uuid), UUID_FMT, qemu_uuid[0], qemu_uuid[1],
|
info->UUID = qemu_uuid_unparse_strdup(&qemu_uuid);
|
||||||
qemu_uuid[2], qemu_uuid[3], qemu_uuid[4], qemu_uuid[5],
|
|
||||||
qemu_uuid[6], qemu_uuid[7], qemu_uuid[8], qemu_uuid[9],
|
|
||||||
qemu_uuid[10], qemu_uuid[11], qemu_uuid[12], qemu_uuid[13],
|
|
||||||
qemu_uuid[14], qemu_uuid[15]);
|
|
||||||
|
|
||||||
info->UUID = g_strdup(uuid);
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -796,7 +796,7 @@ void qemu_spice_init(void)
|
|||||||
qemu_opt_foreach(opts, add_channel, &tls_port, NULL);
|
qemu_opt_foreach(opts, add_channel, &tls_port, NULL);
|
||||||
|
|
||||||
spice_server_set_name(spice_server, qemu_name);
|
spice_server_set_name(spice_server, qemu_name);
|
||||||
spice_server_set_uuid(spice_server, qemu_uuid);
|
spice_server_set_uuid(spice_server, (unsigned char *)&qemu_uuid);
|
||||||
|
|
||||||
seamless_migration = qemu_opt_get_bool(opts, "seamless-migration", 0);
|
seamless_migration = qemu_opt_get_bool(opts, "seamless-migration", 0);
|
||||||
spice_server_set_seamless_migration(spice_server, seamless_migration);
|
spice_server_set_seamless_migration(spice_server, seamless_migration);
|
||||||
|
11
util/uuid.c
11
util/uuid.c
@ -61,18 +61,19 @@ char *qemu_uuid_unparse_strdup(const QemuUUID *uuid)
|
|||||||
uu[13], uu[14], uu[15]);
|
uu[13], uu[14], uu[15]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int qemu_uuid_parse(const char *str, uint8_t *uuid)
|
int qemu_uuid_parse(const char *str, QemuUUID *uuid)
|
||||||
{
|
{
|
||||||
|
unsigned char *uu = &uuid->data[0];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (strlen(str) != 36) {
|
if (strlen(str) != 36) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
|
ret = sscanf(str, UUID_FMT, &uu[0], &uu[1], &uu[2], &uu[3],
|
||||||
&uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
|
&uu[4], &uu[5], &uu[6], &uu[7], &uu[8], &uu[9],
|
||||||
&uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14],
|
&uu[10], &uu[11], &uu[12], &uu[13], &uu[14],
|
||||||
&uuid[15]);
|
&uu[15]);
|
||||||
|
|
||||||
if (ret != 16) {
|
if (ret != 16) {
|
||||||
return -1;
|
return -1;
|
||||||
|
6
vl.c
6
vl.c
@ -183,10 +183,10 @@ uint8_t qemu_extra_params_fw[2];
|
|||||||
|
|
||||||
int icount_align_option;
|
int icount_align_option;
|
||||||
|
|
||||||
/* The bytes in qemu_uuid[] are in the order specified by RFC4122, _not_ in the
|
/* The bytes in qemu_uuid are in the order specified by RFC4122, _not_ in the
|
||||||
* little-endian "wire format" described in the SMBIOS 2.6 specification.
|
* little-endian "wire format" described in the SMBIOS 2.6 specification.
|
||||||
*/
|
*/
|
||||||
uint8_t qemu_uuid[16];
|
QemuUUID qemu_uuid;
|
||||||
bool qemu_uuid_set;
|
bool qemu_uuid_set;
|
||||||
|
|
||||||
static NotifierList exit_notifiers =
|
static NotifierList exit_notifiers =
|
||||||
@ -3780,7 +3780,7 @@ int main(int argc, char **argv, char **envp)
|
|||||||
cursor_hide = 0;
|
cursor_hide = 0;
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_uuid:
|
case QEMU_OPTION_uuid:
|
||||||
if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
|
if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) {
|
||||||
error_report("failed to parse UUID string: wrong format");
|
error_report("failed to parse UUID string: wrong format");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user