mirror of https://gitee.com/openkylin/qemu.git
ppc patch queue for 2019-11-26
Here's the first 4.2 hard freeze pull request from me. This has: * A fix for some testcases that cause errors on older host kernels (e.g. RHEL7), with our new default configuration of VSMT mode * Changes to make VFIO devices interact properly with change of irq chip caused by PAPR feature negotiation. This is more involved than I would like, but it's a problem in real use cases and I can't see an easier way to handle it. * Fix an error with ms6522 counters for the g3beige machine * Fix a coverity warning -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEdfRlhq5hpmzETofcbDjKyiDZs5IFAl3cvZAACgkQbDjKyiDZ s5LzYA/+KUmXnvvaVfRMLqYZuBVLxUN7+b472mYxrZY8neQ4yO9JYcFRb1FWlZKo zqUjBXljARPJZoT4pGhobqgR6hs/nbn6WaN0oI0ZrxHKMUsPe56c90PbvprtiGMe qGCoSuWQHccwouSZFmMcOUqO8rT+wlwMV+if/WbwNvhm4oCvA9Lcx2bBNllLN8XB bIdiZACsk+XHJDm5SDNr/Wyhz/N8tODStuKPYtyoHd5LarXVUymqljaNJhEIcqQZ awFP200fX6fKR+jRUV7AnG5faF2p1P6K2khwMYQF0QzpEQg4d9hKBs7SsSkzY3YD 8nVeXGi6201kw9V5tqzqiG0mNcCME8Pb3K4fsmOfLSWbnOax8yv9tisz8+FYuful KxUBjp9cE/Tla+Zg1SeQ8VZrHJhcX98aT57CWQCtuYX+82krHQCKMSRpbEJ6ECRJ dChfXrAqmtG0mPd7sypeQPuJRBMOwuJsuJr6a0glDY61XmXCJbH5R6Jf+iDQ2Nf8 owx07xNQ5fVO0RYDqr+eZSTfllW1P2FNI8sz0XFp6/dAz3KbLuNbzREFZcdEV1Gp CdJd9UA1P45c/BOOQy7FAeewKhuhgBE1S7m5brX9t1CorUW2zaM/hLwd3ZII0UyE if8hYpfeTY+lhNpu0hCpyzecZOMBabLAmQqIUUKO/wkydcIKYUg= =GHGC -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-4.2-20191126' into staging ppc patch queue for 2019-11-26 Here's the first 4.2 hard freeze pull request from me. This has: * A fix for some testcases that cause errors on older host kernels (e.g. RHEL7), with our new default configuration of VSMT mode * Changes to make VFIO devices interact properly with change of irq chip caused by PAPR feature negotiation. This is more involved than I would like, but it's a problem in real use cases and I can't see an easier way to handle it. * Fix an error with ms6522 counters for the g3beige machine * Fix a coverity warning # gpg: Signature made Tue 26 Nov 2019 05:52:16 GMT # gpg: using RSA key 75F46586AE61A66CC44E87DC6C38CACA20D9B392 # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>" [full] # gpg: aka "David Gibson (Red Hat) <dgibson@redhat.com>" [full] # gpg: aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>" [full] # gpg: aka "David Gibson (kernel.org) <dwg@kernel.org>" [unknown] # Primary key fingerprint: 75F4 6586 AE61 A66C C44E 87DC 6C38 CACA 20D9 B392 * remotes/dgibson/tags/ppc-for-4.2-20191126: ppc/spapr_events: fix potential NULL pointer dereference in rtas_event_log_dequeue mos6522: update counters when timer interrupts are off spapr: Work around spurious warnings from vfio INTx initialization spapr: Handle irq backend changes with VFIO PCI devices vfio/pci: Respond to KVM irqchip change notifier vfio/pci: Split vfio_intx_update() kvm: Introduce KVM irqchip change notifier pseries: fix migration-test and pxe-test Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
a0aaca7e9c
|
@ -149,6 +149,9 @@ static const KVMCapabilityInfo kvm_required_capabilites[] = {
|
||||||
KVM_CAP_LAST_INFO
|
KVM_CAP_LAST_INFO
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static NotifierList kvm_irqchip_change_notifiers =
|
||||||
|
NOTIFIER_LIST_INITIALIZER(kvm_irqchip_change_notifiers);
|
||||||
|
|
||||||
#define kvm_slots_lock(kml) qemu_mutex_lock(&(kml)->slots_lock)
|
#define kvm_slots_lock(kml) qemu_mutex_lock(&(kml)->slots_lock)
|
||||||
#define kvm_slots_unlock(kml) qemu_mutex_unlock(&(kml)->slots_lock)
|
#define kvm_slots_unlock(kml) qemu_mutex_unlock(&(kml)->slots_lock)
|
||||||
|
|
||||||
|
@ -1396,6 +1399,21 @@ void kvm_irqchip_release_virq(KVMState *s, int virq)
|
||||||
trace_kvm_irqchip_release_virq(virq);
|
trace_kvm_irqchip_release_virq(virq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void kvm_irqchip_add_change_notifier(Notifier *n)
|
||||||
|
{
|
||||||
|
notifier_list_add(&kvm_irqchip_change_notifiers, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void kvm_irqchip_remove_change_notifier(Notifier *n)
|
||||||
|
{
|
||||||
|
notifier_remove(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void kvm_irqchip_change_notify(void)
|
||||||
|
{
|
||||||
|
notifier_list_notify(&kvm_irqchip_change_notifiers, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static unsigned int kvm_hash_msi(uint32_t data)
|
static unsigned int kvm_hash_msi(uint32_t data)
|
||||||
{
|
{
|
||||||
/* This is optimized for IA32 MSI layout. However, no other arch shall
|
/* This is optimized for IA32 MSI layout. However, no other arch shall
|
||||||
|
|
|
@ -138,6 +138,18 @@ void kvm_irqchip_commit_routes(KVMState *s)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void kvm_irqchip_add_change_notifier(Notifier *n)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void kvm_irqchip_remove_change_notifier(Notifier *n)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void kvm_irqchip_change_notify(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter)
|
int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
|
|
@ -113,6 +113,10 @@ static int64_t get_next_irq_time(MOS6522State *s, MOS6522Timer *ti,
|
||||||
int64_t d, next_time;
|
int64_t d, next_time;
|
||||||
unsigned int counter;
|
unsigned int counter;
|
||||||
|
|
||||||
|
if (ti->frequency == 0) {
|
||||||
|
return INT64_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
/* current counter value */
|
/* current counter value */
|
||||||
d = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - ti->load_time,
|
d = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - ti->load_time,
|
||||||
ti->frequency, NANOSECONDS_PER_SECOND);
|
ti->frequency, NANOSECONDS_PER_SECOND);
|
||||||
|
@ -149,10 +153,10 @@ static void mos6522_timer1_update(MOS6522State *s, MOS6522Timer *ti,
|
||||||
if (!ti->timer) {
|
if (!ti->timer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ti->next_irq_time = get_next_irq_time(s, ti, current_time);
|
||||||
if ((s->ier & T1_INT) == 0 || (s->acr & T1MODE) != T1MODE_CONT) {
|
if ((s->ier & T1_INT) == 0 || (s->acr & T1MODE) != T1MODE_CONT) {
|
||||||
timer_del(ti->timer);
|
timer_del(ti->timer);
|
||||||
} else {
|
} else {
|
||||||
ti->next_irq_time = get_next_irq_time(s, ti, current_time);
|
|
||||||
timer_mod(ti->timer, ti->next_irq_time);
|
timer_mod(ti->timer, ti->next_irq_time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,10 +167,10 @@ static void mos6522_timer2_update(MOS6522State *s, MOS6522Timer *ti,
|
||||||
if (!ti->timer) {
|
if (!ti->timer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ti->next_irq_time = get_next_irq_time(s, ti, current_time);
|
||||||
if ((s->ier & T2_INT) == 0) {
|
if ((s->ier & T2_INT) == 0) {
|
||||||
timer_del(ti->timer);
|
timer_del(ti->timer);
|
||||||
} else {
|
} else {
|
||||||
ti->next_irq_time = get_next_irq_time(s, ti, current_time);
|
|
||||||
timer_mod(ti->timer, ti->next_irq_time);
|
timer_mod(ti->timer, ti->next_irq_time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -358,6 +358,7 @@ static SpaprEventLogEntry *rtas_event_log_dequeue(SpaprMachineState *spapr,
|
||||||
rtas_event_log_to_source(spapr,
|
rtas_event_log_to_source(spapr,
|
||||||
spapr_event_log_entry_type(entry));
|
spapr_event_log_entry_type(entry));
|
||||||
|
|
||||||
|
g_assert(source);
|
||||||
if (source->mask & event_mask) {
|
if (source->mask & event_mask) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -373,6 +373,14 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **errp)
|
||||||
|
|
||||||
spapr->qirqs = qemu_allocate_irqs(spapr_set_irq, spapr,
|
spapr->qirqs = qemu_allocate_irqs(spapr_set_irq, spapr,
|
||||||
smc->nr_xirqs + SPAPR_XIRQ_BASE);
|
smc->nr_xirqs + SPAPR_XIRQ_BASE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mostly we don't actually need this until reset, except that not
|
||||||
|
* having this set up can cause VFIO devices to issue a
|
||||||
|
* false-positive warning during realize(), because they don't yet
|
||||||
|
* have an in-kernel irq chip.
|
||||||
|
*/
|
||||||
|
spapr_irq_update_active_intc(spapr);
|
||||||
}
|
}
|
||||||
|
|
||||||
int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error **errp)
|
int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error **errp)
|
||||||
|
@ -508,6 +516,12 @@ static void set_active_intc(SpaprMachineState *spapr,
|
||||||
}
|
}
|
||||||
|
|
||||||
spapr->active_intc = new_intc;
|
spapr->active_intc = new_intc;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We've changed the kernel irqchip, let VFIO devices know they
|
||||||
|
* need to readjust.
|
||||||
|
*/
|
||||||
|
kvm_irqchip_change_notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
void spapr_irq_update_active_intc(SpaprMachineState *spapr)
|
void spapr_irq_update_active_intc(SpaprMachineState *spapr)
|
||||||
|
@ -522,7 +536,8 @@ void spapr_irq_update_active_intc(SpaprMachineState *spapr)
|
||||||
* this.
|
* this.
|
||||||
*/
|
*/
|
||||||
new_intc = SPAPR_INTC(spapr->xive);
|
new_intc = SPAPR_INTC(spapr->xive);
|
||||||
} else if (spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) {
|
} else if (spapr->ov5_cas
|
||||||
|
&& spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) {
|
||||||
new_intc = SPAPR_INTC(spapr->xive);
|
new_intc = SPAPR_INTC(spapr->xive);
|
||||||
} else {
|
} else {
|
||||||
new_intc = SPAPR_INTC(spapr->ics);
|
new_intc = SPAPR_INTC(spapr->ics);
|
||||||
|
|
|
@ -216,30 +216,18 @@ static void vfio_intx_disable_kvm(VFIOPCIDevice *vdev)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vfio_intx_update(PCIDevice *pdev)
|
static void vfio_intx_update(VFIOPCIDevice *vdev, PCIINTxRoute *route)
|
||||||
{
|
{
|
||||||
VFIOPCIDevice *vdev = PCI_VFIO(pdev);
|
|
||||||
PCIINTxRoute route;
|
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
if (vdev->interrupt != VFIO_INT_INTx) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
route = pci_device_route_intx_to_irq(&vdev->pdev, vdev->intx.pin);
|
|
||||||
|
|
||||||
if (!pci_intx_route_changed(&vdev->intx.route, &route)) {
|
|
||||||
return; /* Nothing changed */
|
|
||||||
}
|
|
||||||
|
|
||||||
trace_vfio_intx_update(vdev->vbasedev.name,
|
trace_vfio_intx_update(vdev->vbasedev.name,
|
||||||
vdev->intx.route.irq, route.irq);
|
vdev->intx.route.irq, route->irq);
|
||||||
|
|
||||||
vfio_intx_disable_kvm(vdev);
|
vfio_intx_disable_kvm(vdev);
|
||||||
|
|
||||||
vdev->intx.route = route;
|
vdev->intx.route = *route;
|
||||||
|
|
||||||
if (route.mode != PCI_INTX_ENABLED) {
|
if (route->mode != PCI_INTX_ENABLED) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,6 +240,30 @@ static void vfio_intx_update(PCIDevice *pdev)
|
||||||
vfio_intx_eoi(&vdev->vbasedev);
|
vfio_intx_eoi(&vdev->vbasedev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void vfio_intx_routing_notifier(PCIDevice *pdev)
|
||||||
|
{
|
||||||
|
VFIOPCIDevice *vdev = PCI_VFIO(pdev);
|
||||||
|
PCIINTxRoute route;
|
||||||
|
|
||||||
|
if (vdev->interrupt != VFIO_INT_INTx) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
route = pci_device_route_intx_to_irq(&vdev->pdev, vdev->intx.pin);
|
||||||
|
|
||||||
|
if (pci_intx_route_changed(&vdev->intx.route, &route)) {
|
||||||
|
vfio_intx_update(vdev, &route);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vfio_irqchip_change(Notifier *notify, void *data)
|
||||||
|
{
|
||||||
|
VFIOPCIDevice *vdev = container_of(notify, VFIOPCIDevice,
|
||||||
|
irqchip_change_notifier);
|
||||||
|
|
||||||
|
vfio_intx_update(vdev, &vdev->intx.route);
|
||||||
|
}
|
||||||
|
|
||||||
static int vfio_intx_enable(VFIOPCIDevice *vdev, Error **errp)
|
static int vfio_intx_enable(VFIOPCIDevice *vdev, Error **errp)
|
||||||
{
|
{
|
||||||
uint8_t pin = vfio_pci_read_config(&vdev->pdev, PCI_INTERRUPT_PIN, 1);
|
uint8_t pin = vfio_pci_read_config(&vdev->pdev, PCI_INTERRUPT_PIN, 1);
|
||||||
|
@ -2967,31 +2979,34 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
|
||||||
if (vfio_pci_read_config(&vdev->pdev, PCI_INTERRUPT_PIN, 1)) {
|
if (vfio_pci_read_config(&vdev->pdev, PCI_INTERRUPT_PIN, 1)) {
|
||||||
vdev->intx.mmap_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,
|
vdev->intx.mmap_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,
|
||||||
vfio_intx_mmap_enable, vdev);
|
vfio_intx_mmap_enable, vdev);
|
||||||
pci_device_set_intx_routing_notifier(&vdev->pdev, vfio_intx_update);
|
pci_device_set_intx_routing_notifier(&vdev->pdev,
|
||||||
|
vfio_intx_routing_notifier);
|
||||||
|
vdev->irqchip_change_notifier.notify = vfio_irqchip_change;
|
||||||
|
kvm_irqchip_add_change_notifier(&vdev->irqchip_change_notifier);
|
||||||
ret = vfio_intx_enable(vdev, errp);
|
ret = vfio_intx_enable(vdev, errp);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
goto out_teardown;
|
goto out_deregister;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vdev->display != ON_OFF_AUTO_OFF) {
|
if (vdev->display != ON_OFF_AUTO_OFF) {
|
||||||
ret = vfio_display_probe(vdev, errp);
|
ret = vfio_display_probe(vdev, errp);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
goto out_teardown;
|
goto out_deregister;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (vdev->enable_ramfb && vdev->dpy == NULL) {
|
if (vdev->enable_ramfb && vdev->dpy == NULL) {
|
||||||
error_setg(errp, "ramfb=on requires display=on");
|
error_setg(errp, "ramfb=on requires display=on");
|
||||||
goto out_teardown;
|
goto out_deregister;
|
||||||
}
|
}
|
||||||
if (vdev->display_xres || vdev->display_yres) {
|
if (vdev->display_xres || vdev->display_yres) {
|
||||||
if (vdev->dpy == NULL) {
|
if (vdev->dpy == NULL) {
|
||||||
error_setg(errp, "xres and yres properties require display=on");
|
error_setg(errp, "xres and yres properties require display=on");
|
||||||
goto out_teardown;
|
goto out_deregister;
|
||||||
}
|
}
|
||||||
if (vdev->dpy->edid_regs == NULL) {
|
if (vdev->dpy->edid_regs == NULL) {
|
||||||
error_setg(errp, "xres and yres properties need edid support");
|
error_setg(errp, "xres and yres properties need edid support");
|
||||||
goto out_teardown;
|
goto out_deregister;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3015,8 +3030,10 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
out_teardown:
|
out_deregister:
|
||||||
pci_device_set_intx_routing_notifier(&vdev->pdev, NULL);
|
pci_device_set_intx_routing_notifier(&vdev->pdev, NULL);
|
||||||
|
kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier);
|
||||||
|
out_teardown:
|
||||||
vfio_teardown_msi(vdev);
|
vfio_teardown_msi(vdev);
|
||||||
vfio_bars_exit(vdev);
|
vfio_bars_exit(vdev);
|
||||||
error:
|
error:
|
||||||
|
@ -3059,6 +3076,7 @@ static void vfio_exitfn(PCIDevice *pdev)
|
||||||
vfio_unregister_req_notifier(vdev);
|
vfio_unregister_req_notifier(vdev);
|
||||||
vfio_unregister_err_notifier(vdev);
|
vfio_unregister_err_notifier(vdev);
|
||||||
pci_device_set_intx_routing_notifier(&vdev->pdev, NULL);
|
pci_device_set_intx_routing_notifier(&vdev->pdev, NULL);
|
||||||
|
kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier);
|
||||||
vfio_disable_interrupts(vdev);
|
vfio_disable_interrupts(vdev);
|
||||||
if (vdev->intx.mmap_timer) {
|
if (vdev->intx.mmap_timer) {
|
||||||
timer_free(vdev->intx.mmap_timer);
|
timer_free(vdev->intx.mmap_timer);
|
||||||
|
|
|
@ -169,6 +169,7 @@ typedef struct VFIOPCIDevice {
|
||||||
bool enable_ramfb;
|
bool enable_ramfb;
|
||||||
VFIODisplay *dpy;
|
VFIODisplay *dpy;
|
||||||
Error *migration_blocker;
|
Error *migration_blocker;
|
||||||
|
Notifier irqchip_change_notifier;
|
||||||
} VFIOPCIDevice;
|
} VFIOPCIDevice;
|
||||||
|
|
||||||
uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len);
|
uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len);
|
||||||
|
|
|
@ -201,6 +201,7 @@ typedef struct KVMCapabilityInfo {
|
||||||
struct KVMState;
|
struct KVMState;
|
||||||
typedef struct KVMState KVMState;
|
typedef struct KVMState KVMState;
|
||||||
extern KVMState *kvm_state;
|
extern KVMState *kvm_state;
|
||||||
|
typedef struct Notifier Notifier;
|
||||||
|
|
||||||
/* external API */
|
/* external API */
|
||||||
|
|
||||||
|
@ -401,6 +402,10 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg);
|
||||||
|
|
||||||
void kvm_irqchip_add_irq_route(KVMState *s, int gsi, int irqchip, int pin);
|
void kvm_irqchip_add_irq_route(KVMState *s, int gsi, int irqchip, int pin);
|
||||||
|
|
||||||
|
void kvm_irqchip_add_change_notifier(Notifier *n);
|
||||||
|
void kvm_irqchip_remove_change_notifier(Notifier *n);
|
||||||
|
void kvm_irqchip_change_notify(void);
|
||||||
|
|
||||||
void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic);
|
void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic);
|
||||||
|
|
||||||
struct kvm_guest_debug;
|
struct kvm_guest_debug;
|
||||||
|
|
|
@ -614,7 +614,7 @@ static int test_migrate_start(QTestState **from, QTestState **to,
|
||||||
end_address = S390_TEST_MEM_END;
|
end_address = S390_TEST_MEM_END;
|
||||||
} else if (strcmp(arch, "ppc64") == 0) {
|
} else if (strcmp(arch, "ppc64") == 0) {
|
||||||
extra_opts = use_shmem ? get_shmem_opts("256M", shmem_path) : NULL;
|
extra_opts = use_shmem ? get_shmem_opts("256M", shmem_path) : NULL;
|
||||||
cmd_src = g_strdup_printf("-machine accel=%s -m 256M -nodefaults"
|
cmd_src = g_strdup_printf("-machine accel=%s,vsmt=8 -m 256M -nodefaults"
|
||||||
" -name source,debug-threads=on"
|
" -name source,debug-threads=on"
|
||||||
" -serial file:%s/src_serial"
|
" -serial file:%s/src_serial"
|
||||||
" -prom-env 'use-nvramrc?=true' -prom-env "
|
" -prom-env 'use-nvramrc?=true' -prom-env "
|
||||||
|
@ -623,7 +623,7 @@ static int test_migrate_start(QTestState **from, QTestState **to,
|
||||||
"until' %s %s", accel, tmpfs, end_address,
|
"until' %s %s", accel, tmpfs, end_address,
|
||||||
start_address, extra_opts ? extra_opts : "",
|
start_address, extra_opts ? extra_opts : "",
|
||||||
opts_src);
|
opts_src);
|
||||||
cmd_dst = g_strdup_printf("-machine accel=%s -m 256M"
|
cmd_dst = g_strdup_printf("-machine accel=%s,vsmt=8 -m 256M"
|
||||||
" -name target,debug-threads=on"
|
" -name target,debug-threads=on"
|
||||||
" -serial file:%s/dest_serial"
|
" -serial file:%s/dest_serial"
|
||||||
" -incoming %s %s %s",
|
" -incoming %s %s %s",
|
||||||
|
|
|
@ -46,15 +46,15 @@ static testdef_t x86_tests_slow[] = {
|
||||||
|
|
||||||
static testdef_t ppc64_tests[] = {
|
static testdef_t ppc64_tests[] = {
|
||||||
{ "pseries", "spapr-vlan",
|
{ "pseries", "spapr-vlan",
|
||||||
"-machine cap-cfpc=broken,cap-sbbc=broken,cap-ibs=broken" },
|
"-machine cap-cfpc=broken,cap-sbbc=broken,cap-ibs=broken,vsmt=8" },
|
||||||
{ "pseries", "virtio-net-pci",
|
{ "pseries", "virtio-net-pci",
|
||||||
"-machine cap-cfpc=broken,cap-sbbc=broken,cap-ibs=broken" },
|
"-machine cap-cfpc=broken,cap-sbbc=broken,cap-ibs=broken,vsmt=8" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
static testdef_t ppc64_tests_slow[] = {
|
static testdef_t ppc64_tests_slow[] = {
|
||||||
{ "pseries", "e1000",
|
{ "pseries", "e1000",
|
||||||
"-machine cap-cfpc=broken,cap-sbbc=broken,cap-ibs=broken" },
|
"-machine cap-cfpc=broken,cap-sbbc=broken,cap-ibs=broken,vsmt=8" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue