mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-18 07:32:06 -06:00
* microvm docs and fixes (Sergio, Liam)
* New processor features for Intel errata (myself, Pawan) * Kconfig fixes (myself, Thomas) * Revert mc146818rtc change (myself) * Deprecate scsi-disk (myself) * RTC fix (myself, Marcelo) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQEcBAABAgAGBQJd06/1AAoJEL/70l94x66DssgH/2nZ637XYeE7a7J/G9mXQ/wb nkRWzoCBlMyqPX1/Avj09Skm4gwFGn+QJmGKAE7lAWH6209WsNt7sCUfohyvLGlH i5ccXcnSRp2cTqK9aD73VnVlh9eY0fGU5TNxdBXdqE7MeLPHfb/iq/qo0l1SyhV6 Zx7zqknecLOG7DOWJsWnC4lyDXD2KHRng3gzAwzo2vByctBYga5hcMCFVDSvGxuR wuI3WX3IMaZtY5NtdhUhnjZUA4bZZW+1Ii5UR1zlVZeanUmyqhB64ABgVBl8G+jv HlfctgyQIqVMA0QHEulh3EU8GoTFFNwO2bQpFUNGV6iESISRtlj5sxgvhl7+ahg= =WHGB -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging * microvm docs and fixes (Sergio, Liam) * New processor features for Intel errata (myself, Pawan) * Kconfig fixes (myself, Thomas) * Revert mc146818rtc change (myself) * Deprecate scsi-disk (myself) * RTC fix (myself, Marcelo) # gpg: Signature made Tue 19 Nov 2019 09:03:49 GMT # gpg: using RSA key BFFBD25F78C7AE83 # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini/tags/for-upstream: mc146818rtc: fix timer interrupt reinjection again Revert "mc146818rtc: fix timer interrupt reinjection" scsi: deprecate scsi-disk hw/i386: Move save_tsc_khz from PCMachineClass to X86MachineClass docs/microvm.rst: add instructions for shutting down the guest docs/microvm.rst: fix alignment in "Limitations" vfio: vfio-pci requires EDID hw/i386: Fix compiler warning when CONFIG_IDE_ISA is disabled target/i386: Export TAA_NO bit to guests target/i386: add PSCHANGE_NO bit for the ARCH_CAPABILITIES MSR microvm: fix memory leak in microvm_fix_kernel_cmdline scripts: Detect git worktrees for get_maintainer.pl --git Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
06b43e082c
16 changed files with 103 additions and 59 deletions
|
@ -106,3 +106,24 @@ disabled::
|
||||||
-device virtio-blk-device,drive=test \
|
-device virtio-blk-device,drive=test \
|
||||||
-netdev tap,id=tap0,script=no,downscript=no \
|
-netdev tap,id=tap0,script=no,downscript=no \
|
||||||
-device virtio-net-device,netdev=tap0
|
-device virtio-net-device,netdev=tap0
|
||||||
|
|
||||||
|
|
||||||
|
Triggering a guest-initiated shut down
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
As the microvm machine type includes just a small set of system
|
||||||
|
devices, some x86 mechanisms for rebooting or shutting down the
|
||||||
|
system, like sending a key sequence to the keyboard or writing to an
|
||||||
|
ACPI register, doesn't have any effect in the VM.
|
||||||
|
|
||||||
|
The recommended way to trigger a guest-initiated shut down is by
|
||||||
|
generating a ``triple-fault``, which will cause the VM to initiate a
|
||||||
|
reboot. Additionally, if the ``-no-reboot`` argument is present in the
|
||||||
|
command line, QEMU will detect this event and terminate its own
|
||||||
|
execution gracefully.
|
||||||
|
|
||||||
|
Linux does support this mechanism, but by default will only be used
|
||||||
|
after other options have been tried and failed, causing the reboot to
|
||||||
|
be delayed by a small number of seconds. It's possible to instruct it
|
||||||
|
to try the triple-fault mechanism first, by adding ``reboot=t`` to the
|
||||||
|
kernel's command line.
|
||||||
|
|
|
@ -331,6 +331,8 @@ static void microvm_fix_kernel_cmdline(MachineState *machine)
|
||||||
|
|
||||||
fw_cfg_modify_i32(x86ms->fw_cfg, FW_CFG_CMDLINE_SIZE, strlen(cmdline) + 1);
|
fw_cfg_modify_i32(x86ms->fw_cfg, FW_CFG_CMDLINE_SIZE, strlen(cmdline) + 1);
|
||||||
fw_cfg_modify_string(x86ms->fw_cfg, FW_CFG_CMDLINE_DATA, cmdline);
|
fw_cfg_modify_string(x86ms->fw_cfg, FW_CFG_CMDLINE_DATA, cmdline);
|
||||||
|
|
||||||
|
g_free(cmdline);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void microvm_machine_state_init(MachineState *machine)
|
static void microvm_machine_state_init(MachineState *machine)
|
||||||
|
|
|
@ -2195,7 +2195,6 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
|
||||||
/* BIOS ACPI tables: 128K. Other BIOS datastructures: less than 4K reported
|
/* BIOS ACPI tables: 128K. Other BIOS datastructures: less than 4K reported
|
||||||
* to be used at the moment, 32K should be enough for a while. */
|
* to be used at the moment, 32K should be enough for a while. */
|
||||||
pcmc->acpi_data_size = 0x20000 + 0x8000;
|
pcmc->acpi_data_size = 0x20000 + 0x8000;
|
||||||
pcmc->save_tsc_khz = true;
|
|
||||||
pcmc->linuxboot_dma_enabled = true;
|
pcmc->linuxboot_dma_enabled = true;
|
||||||
pcmc->pvh_enabled = true;
|
pcmc->pvh_enabled = true;
|
||||||
assert(!mc->get_hotplug_handler);
|
assert(!mc->get_hotplug_handler);
|
||||||
|
|
|
@ -78,7 +78,6 @@ static void pc_init1(MachineState *machine,
|
||||||
X86MachineState *x86ms = X86_MACHINE(machine);
|
X86MachineState *x86ms = X86_MACHINE(machine);
|
||||||
MemoryRegion *system_memory = get_system_memory();
|
MemoryRegion *system_memory = get_system_memory();
|
||||||
MemoryRegion *system_io = get_system_io();
|
MemoryRegion *system_io = get_system_io();
|
||||||
int i;
|
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
ISABus *isa_bus;
|
ISABus *isa_bus;
|
||||||
PCII440FXState *i440fx_state;
|
PCII440FXState *i440fx_state;
|
||||||
|
@ -253,6 +252,7 @@ static void pc_init1(MachineState *machine,
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_IDE_ISA
|
#ifdef CONFIG_IDE_ISA
|
||||||
else {
|
else {
|
||||||
|
int i;
|
||||||
for (i = 0; i < MAX_IDE_BUS; i++) {
|
for (i = 0; i < MAX_IDE_BUS; i++) {
|
||||||
ISADevice *dev;
|
ISADevice *dev;
|
||||||
char busname[] = "ide.0";
|
char busname[] = "ide.0";
|
||||||
|
@ -567,10 +567,10 @@ DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
|
||||||
|
|
||||||
static void pc_i440fx_2_5_machine_options(MachineClass *m)
|
static void pc_i440fx_2_5_machine_options(MachineClass *m)
|
||||||
{
|
{
|
||||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
|
||||||
|
|
||||||
pc_i440fx_2_6_machine_options(m);
|
pc_i440fx_2_6_machine_options(m);
|
||||||
pcmc->save_tsc_khz = false;
|
x86mc->save_tsc_khz = false;
|
||||||
m->legacy_fw_cfg_order = 1;
|
m->legacy_fw_cfg_order = 1;
|
||||||
compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
||||||
compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
|
compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
|
||||||
|
|
|
@ -508,10 +508,10 @@ DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
|
||||||
|
|
||||||
static void pc_q35_2_5_machine_options(MachineClass *m)
|
static void pc_q35_2_5_machine_options(MachineClass *m)
|
||||||
{
|
{
|
||||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
|
||||||
|
|
||||||
pc_q35_2_6_machine_options(m);
|
pc_q35_2_6_machine_options(m);
|
||||||
pcmc->save_tsc_khz = false;
|
x86mc->save_tsc_khz = false;
|
||||||
m->legacy_fw_cfg_order = 1;
|
m->legacy_fw_cfg_order = 1;
|
||||||
compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
||||||
compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
|
compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
|
||||||
|
|
|
@ -763,6 +763,7 @@ static void x86_machine_class_init(ObjectClass *oc, void *data)
|
||||||
mc->get_default_cpu_node_id = x86_get_default_cpu_node_id;
|
mc->get_default_cpu_node_id = x86_get_default_cpu_node_id;
|
||||||
mc->possible_cpu_arch_ids = x86_possible_cpu_arch_ids;
|
mc->possible_cpu_arch_ids = x86_possible_cpu_arch_ids;
|
||||||
x86mc->compat_apic_id_mode = false;
|
x86mc->compat_apic_id_mode = false;
|
||||||
|
x86mc->save_tsc_khz = true;
|
||||||
nc->nmi_monitor_handler = x86_nmi;
|
nc->nmi_monitor_handler = x86_nmi;
|
||||||
|
|
||||||
object_class_property_add(oc, X86_MACHINE_MAX_RAM_BELOW_4G, "size",
|
object_class_property_add(oc, X86_MACHINE_MAX_RAM_BELOW_4G, "size",
|
||||||
|
|
|
@ -168,12 +168,13 @@ static uint32_t rtc_periodic_clock_ticks(RTCState *s)
|
||||||
* is just due to period adjustment.
|
* is just due to period adjustment.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
periodic_timer_update(RTCState *s, int64_t current_time, uint32_t old_period)
|
periodic_timer_update(RTCState *s, int64_t current_time, uint32_t old_period, bool period_change)
|
||||||
{
|
{
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
int64_t cur_clock, next_irq_clock, lost_clock = 0;
|
int64_t cur_clock, next_irq_clock, lost_clock = 0;
|
||||||
|
|
||||||
period = rtc_periodic_clock_ticks(s);
|
period = rtc_periodic_clock_ticks(s);
|
||||||
|
s->period = period;
|
||||||
|
|
||||||
if (!period) {
|
if (!period) {
|
||||||
s->irq_coalesced = 0;
|
s->irq_coalesced = 0;
|
||||||
|
@ -189,7 +190,7 @@ periodic_timer_update(RTCState *s, int64_t current_time, uint32_t old_period)
|
||||||
* if the periodic timer's update is due to period re-configuration,
|
* if the periodic timer's update is due to period re-configuration,
|
||||||
* we should count the clock since last interrupt.
|
* we should count the clock since last interrupt.
|
||||||
*/
|
*/
|
||||||
if (old_period) {
|
if (old_period && period_change) {
|
||||||
int64_t last_periodic_clock, next_periodic_clock;
|
int64_t last_periodic_clock, next_periodic_clock;
|
||||||
|
|
||||||
next_periodic_clock = muldiv64(s->next_periodic_time,
|
next_periodic_clock = muldiv64(s->next_periodic_time,
|
||||||
|
@ -197,6 +198,7 @@ periodic_timer_update(RTCState *s, int64_t current_time, uint32_t old_period)
|
||||||
last_periodic_clock = next_periodic_clock - old_period;
|
last_periodic_clock = next_periodic_clock - old_period;
|
||||||
lost_clock = cur_clock - last_periodic_clock;
|
lost_clock = cur_clock - last_periodic_clock;
|
||||||
assert(lost_clock >= 0);
|
assert(lost_clock >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* s->irq_coalesced can change for two reasons:
|
* s->irq_coalesced can change for two reasons:
|
||||||
|
@ -215,7 +217,6 @@ periodic_timer_update(RTCState *s, int64_t current_time, uint32_t old_period)
|
||||||
if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) {
|
if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) {
|
||||||
uint32_t old_irq_coalesced = s->irq_coalesced;
|
uint32_t old_irq_coalesced = s->irq_coalesced;
|
||||||
|
|
||||||
s->period = period;
|
|
||||||
lost_clock += old_irq_coalesced * old_period;
|
lost_clock += old_irq_coalesced * old_period;
|
||||||
s->irq_coalesced = lost_clock / s->period;
|
s->irq_coalesced = lost_clock / s->period;
|
||||||
lost_clock %= s->period;
|
lost_clock %= s->period;
|
||||||
|
@ -233,7 +234,6 @@ periodic_timer_update(RTCState *s, int64_t current_time, uint32_t old_period)
|
||||||
*/
|
*/
|
||||||
lost_clock = MIN(lost_clock, period);
|
lost_clock = MIN(lost_clock, period);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
assert(lost_clock >= 0 && lost_clock <= period);
|
assert(lost_clock >= 0 && lost_clock <= period);
|
||||||
|
|
||||||
|
@ -246,7 +246,7 @@ static void rtc_periodic_timer(void *opaque)
|
||||||
{
|
{
|
||||||
RTCState *s = opaque;
|
RTCState *s = opaque;
|
||||||
|
|
||||||
periodic_timer_update(s, s->next_periodic_time, 0);
|
periodic_timer_update(s, s->next_periodic_time, s->period, false);
|
||||||
s->cmos_data[RTC_REG_C] |= REG_C_PF;
|
s->cmos_data[RTC_REG_C] |= REG_C_PF;
|
||||||
if (s->cmos_data[RTC_REG_B] & REG_B_PIE) {
|
if (s->cmos_data[RTC_REG_B] & REG_B_PIE) {
|
||||||
s->cmos_data[RTC_REG_C] |= REG_C_IRQF;
|
s->cmos_data[RTC_REG_C] |= REG_C_IRQF;
|
||||||
|
@ -512,7 +512,7 @@ static void cmos_ioport_write(void *opaque, hwaddr addr,
|
||||||
|
|
||||||
if (update_periodic_timer) {
|
if (update_periodic_timer) {
|
||||||
periodic_timer_update(s, qemu_clock_get_ns(rtc_clock),
|
periodic_timer_update(s, qemu_clock_get_ns(rtc_clock),
|
||||||
old_period);
|
old_period, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
check_update_timer(s);
|
check_update_timer(s);
|
||||||
|
@ -551,7 +551,7 @@ static void cmos_ioport_write(void *opaque, hwaddr addr,
|
||||||
|
|
||||||
if (update_periodic_timer) {
|
if (update_periodic_timer) {
|
||||||
periodic_timer_update(s, qemu_clock_get_ns(rtc_clock),
|
periodic_timer_update(s, qemu_clock_get_ns(rtc_clock),
|
||||||
old_period);
|
old_period, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
check_update_timer(s);
|
check_update_timer(s);
|
||||||
|
@ -795,6 +795,7 @@ static int rtc_post_load(void *opaque, int version_id)
|
||||||
s->offset = 0;
|
s->offset = 0;
|
||||||
check_update_timer(s);
|
check_update_timer(s);
|
||||||
}
|
}
|
||||||
|
s->period = rtc_periodic_clock_ticks(s);
|
||||||
|
|
||||||
/* The periodic timer is deterministic in record/replay mode,
|
/* The periodic timer is deterministic in record/replay mode,
|
||||||
* so there is no need to update it after loading the vmstate.
|
* so there is no need to update it after loading the vmstate.
|
||||||
|
@ -804,7 +805,7 @@ static int rtc_post_load(void *opaque, int version_id)
|
||||||
uint64_t now = qemu_clock_get_ns(rtc_clock);
|
uint64_t now = qemu_clock_get_ns(rtc_clock);
|
||||||
if (now < s->next_periodic_time ||
|
if (now < s->next_periodic_time ||
|
||||||
now > (s->next_periodic_time + get_max_clock_jump())) {
|
now > (s->next_periodic_time + get_max_clock_jump())) {
|
||||||
periodic_timer_update(s, qemu_clock_get_ns(rtc_clock), 0);
|
periodic_timer_update(s, qemu_clock_get_ns(rtc_clock), s->period, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -254,8 +254,18 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
||||||
char *name;
|
char *name;
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
DriveInfo *dinfo;
|
||||||
|
|
||||||
driver = blk_is_sg(blk) ? "scsi-generic" : "scsi-disk";
|
if (blk_is_sg(blk)) {
|
||||||
|
driver = "scsi-generic";
|
||||||
|
} else {
|
||||||
|
dinfo = blk_legacy_dinfo(blk);
|
||||||
|
if (dinfo && dinfo->media_cd) {
|
||||||
|
driver = "scsi-cd";
|
||||||
|
} else {
|
||||||
|
driver = "scsi-hd";
|
||||||
|
}
|
||||||
|
}
|
||||||
dev = qdev_create(&bus->qbus, driver);
|
dev = qdev_create(&bus->qbus, driver);
|
||||||
name = g_strdup_printf("legacy[%d]", unit);
|
name = g_strdup_printf("legacy[%d]", unit);
|
||||||
object_property_add_child(OBJECT(bus), name, OBJECT(dev), NULL);
|
object_property_add_child(OBJECT(bus), name, OBJECT(dev), NULL);
|
||||||
|
|
|
@ -2481,6 +2481,9 @@ static void scsi_disk_realize(SCSIDevice *dev, Error **errp)
|
||||||
DriveInfo *dinfo;
|
DriveInfo *dinfo;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
|
warn_report("'scsi-disk' is deprecated, "
|
||||||
|
"please use 'scsi-hd' or 'scsi-cd' instead");
|
||||||
|
|
||||||
if (!dev->conf.blk) {
|
if (!dev->conf.blk) {
|
||||||
scsi_realize(dev, &local_err);
|
scsi_realize(dev, &local_err);
|
||||||
assert(local_err);
|
assert(local_err);
|
||||||
|
|
|
@ -116,8 +116,6 @@ typedef struct PCMachineClass {
|
||||||
bool enforce_aligned_dimm;
|
bool enforce_aligned_dimm;
|
||||||
bool broken_reserved_end;
|
bool broken_reserved_end;
|
||||||
|
|
||||||
/* TSC rate migration: */
|
|
||||||
bool save_tsc_khz;
|
|
||||||
/* generate legacy CPU hotplug AML */
|
/* generate legacy CPU hotplug AML */
|
||||||
bool legacy_cpu_hotplug;
|
bool legacy_cpu_hotplug;
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,8 @@ typedef struct {
|
||||||
|
|
||||||
/*< public >*/
|
/*< public >*/
|
||||||
|
|
||||||
|
/* TSC rate migration: */
|
||||||
|
bool save_tsc_khz;
|
||||||
/* Enables contiguous-apic-ID mode */
|
/* Enables contiguous-apic-ID mode */
|
||||||
bool compat_apic_id_mode;
|
bool compat_apic_id_mode;
|
||||||
} X86MachineClass;
|
} X86MachineClass;
|
||||||
|
|
|
@ -259,6 +259,11 @@ their usecases.
|
||||||
The 'ide-drive' device is deprecated. Users should use 'ide-hd' or
|
The 'ide-drive' device is deprecated. Users should use 'ide-hd' or
|
||||||
'ide-cd' as appropriate to get an IDE hard disk or CD-ROM as needed.
|
'ide-cd' as appropriate to get an IDE hard disk or CD-ROM as needed.
|
||||||
|
|
||||||
|
@subsection scsi-disk (since 4.2)
|
||||||
|
|
||||||
|
The 'scsi-disk' device is deprecated. Users should use 'scsi-hd' or
|
||||||
|
'scsi-cd' as appropriate to get a SCSI hard disk or CD-ROM as needed.
|
||||||
|
|
||||||
@section System emulator machines
|
@section System emulator machines
|
||||||
|
|
||||||
@subsection pc-0.12, pc-0.13, pc-0.14 and pc-0.15 (since 4.0)
|
@subsection pc-0.12, pc-0.13, pc-0.14 and pc-0.15 (since 4.0)
|
||||||
|
|
|
@ -81,7 +81,7 @@ my %VCS_cmds;
|
||||||
|
|
||||||
my %VCS_cmds_git = (
|
my %VCS_cmds_git = (
|
||||||
"execute_cmd" => \&git_execute_cmd,
|
"execute_cmd" => \&git_execute_cmd,
|
||||||
"available" => '(which("git") ne "") && (-d ".git")',
|
"available" => '(which("git") ne "") && (-e ".git")',
|
||||||
"find_signers_cmd" =>
|
"find_signers_cmd" =>
|
||||||
"git log --no-color --follow --since=\$email_git_since " .
|
"git log --no-color --follow --since=\$email_git_since " .
|
||||||
'--format="GitCommit: %H%n' .
|
'--format="GitCommit: %H%n' .
|
||||||
|
|
|
@ -1204,8 +1204,8 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
||||||
.type = MSR_FEATURE_WORD,
|
.type = MSR_FEATURE_WORD,
|
||||||
.feat_names = {
|
.feat_names = {
|
||||||
"rdctl-no", "ibrs-all", "rsba", "skip-l1dfl-vmentry",
|
"rdctl-no", "ibrs-all", "rsba", "skip-l1dfl-vmentry",
|
||||||
"ssb-no", "mds-no", NULL, NULL,
|
"ssb-no", "mds-no", "pschange-mc-no", NULL,
|
||||||
NULL, NULL, NULL, NULL,
|
"taa-no", NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
|
|
@ -988,8 +988,8 @@ static bool tsc_khz_needed(void *opaque)
|
||||||
X86CPU *cpu = opaque;
|
X86CPU *cpu = opaque;
|
||||||
CPUX86State *env = &cpu->env;
|
CPUX86State *env = &cpu->env;
|
||||||
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
|
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
|
||||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(mc);
|
X86MachineClass *x86mc = X86_MACHINE_CLASS(mc);
|
||||||
return env->tsc_khz && pcmc->save_tsc_khz;
|
return env->tsc_khz && x86mc->save_tsc_khz;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const VMStateDescription vmstate_tsc_khz = {
|
static const VMStateDescription vmstate_tsc_khz = {
|
||||||
|
|
|
@ -167,7 +167,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
|
||||||
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk
|
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) QEMU_PROG: -device scsi-disk,drive=disk: Device needs media, but drive is empty
|
(qemu) QEMU_PROG: -device scsi-disk,drive=disk: warning: 'scsi-disk' is deprecated, please use 'scsi-hd' or 'scsi-cd' instead
|
||||||
|
QEMU_PROG: -device scsi-disk,drive=disk: Device needs media, but drive is empty
|
||||||
|
|
||||||
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk
|
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
@ -238,7 +239,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) quit
|
(qemu) QEMU_PROG: -device scsi-disk,drive=disk: warning: 'scsi-disk' is deprecated, please use 'scsi-hd' or 'scsi-cd' instead
|
||||||
|
quit
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue