From 35f55c5b0b54e310c787c39bde0f723a1390e839 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 26 Nov 2008 17:18:19 +0000 Subject: [PATCH] Contain MSI errors in msi emulation code If msi=0 is specified and guest want to enable msi, qemu finds it can not enable it and quits. (This problem is not appicable for xen unstable since the "msi=x" switch is removed.) This patch let these cases be handled inside msi emulation code. If qemu can not enable msi, guest will not receive MSI. But Qemu can still go on. But if guest driver does not test MSI's functionality, guest device will stop to function. Submitted-By: Haitao Shan Signed-off-by: Ian Jackson --- hw/pass-through.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/pass-through.c b/hw/pass-through.c index 77ab759a..0cb4008f 100644 --- a/hw/pass-through.c +++ b/hw/pass-through.c @@ -2701,8 +2701,14 @@ static int pt_msgctrl_reg_write(struct pt_dev *ptdev, PT_LOG("setup msi for dev %x\n", pd->devfn); if (pt_msi_setup(ptdev)) { - PT_LOG("pt_msi_setup error!!!\n"); - return -1; + /* We do not broadcast the error to the framework code, so that + * MSI errors are contained in MSI emulation code and QEMU + * can go on running. + * Guest MSI would be actually not working. + */ + *value &= ~PCI_MSI_FLAGS_ENABLE; + PT_LOG("Warning: Can not map MSI for dev %x\n", pd->devfn); + return 0; } pt_msi_update(ptdev); -- 2.39.5