* [PATCH] pci-assign: Fall back to host-side MSI if INTx sharing fails
@ 2012-03-19 9:56 Jan Kiszka
2012-03-19 15:52 ` Alex Williamson
2012-03-21 13:13 ` Avi Kivity
0 siblings, 2 replies; 3+ messages in thread
From: Jan Kiszka @ 2012-03-19 9:56 UTC (permalink / raw)
To: Avi Kivity, Marcelo Tosatti
Cc: kvm, Alex Williamson, Wen Congyang, Markus Armbruster
If the host or the device does not support INTx sharing, retry the IRQ
assignment with host-side MSI support enabled but warn about potential
consequences. This allows to preserve the previous behavior where we
defaulted to MSI and did not support INTx sharing at all.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
Detecting if the user actually specified prefer_msi=off as property of
pci-assign is non-trivial. So I decided to go for the retry approach,
ignoring potential user requests. The warning should attract the
attention.
hw/device-assignment.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/hw/device-assignment.c b/hw/device-assignment.c
index 89823f1..c953713 100644
--- a/hw/device-assignment.c
+++ b/hw/device-assignment.c
@@ -835,6 +835,7 @@ static int assign_irq(AssignedDevice *dev)
dev->irq_requested_type = 0;
}
+retry:
assigned_irq_data.flags = KVM_DEV_IRQ_GUEST_INTX;
if (dev->features & ASSIGNED_DEVICE_PREFER_MSI_MASK &&
dev->cap.available & ASSIGNED_DEVICE_CAP_MSI)
@@ -844,6 +845,17 @@ static int assign_irq(AssignedDevice *dev)
r = kvm_assign_irq(kvm_state, &assigned_irq_data);
if (r < 0) {
+ if (r == -EIO && !(dev->features & ASSIGNED_DEVICE_PREFER_MSI_MASK) &&
+ dev->cap.available & ASSIGNED_DEVICE_CAP_MSI) {
+ /* Retry with host-side MSI. There might be an IRQ conflict and
+ * either the kernel or the device doesn't support sharing. */
+ fprintf(stderr,
+ "Host-side INTx sharing not supported, "
+ "using MSI instead.\n"
+ "Some devices do not to work properly in this mode.\n");
+ dev->features |= ASSIGNED_DEVICE_PREFER_MSI_MASK;
+ goto retry;
+ }
fprintf(stderr, "Failed to assign irq for \"%s\": %s\n",
dev->dev.qdev.id, strerror(-r));
fprintf(stderr, "Perhaps you are assigning a device "
--
1.7.3.4
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] pci-assign: Fall back to host-side MSI if INTx sharing fails
2012-03-19 9:56 [PATCH] pci-assign: Fall back to host-side MSI if INTx sharing fails Jan Kiszka
@ 2012-03-19 15:52 ` Alex Williamson
2012-03-21 13:13 ` Avi Kivity
1 sibling, 0 replies; 3+ messages in thread
From: Alex Williamson @ 2012-03-19 15:52 UTC (permalink / raw)
To: Jan Kiszka
Cc: Avi Kivity, Marcelo Tosatti, kvm, Wen Congyang, Markus Armbruster
On Mon, 2012-03-19 at 10:56 +0100, Jan Kiszka wrote:
> If the host or the device does not support INTx sharing, retry the IRQ
> assignment with host-side MSI support enabled but warn about potential
> consequences. This allows to preserve the previous behavior where we
> defaulted to MSI and did not support INTx sharing at all.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>
> Detecting if the user actually specified prefer_msi=off as property of
> pci-assign is non-trivial. So I decided to go for the retry approach,
> ignoring potential user requests. The warning should attract the
> attention.
>
> hw/device-assignment.c | 12 ++++++++++++
> 1 files changed, 12 insertions(+), 0 deletions(-)
>
> diff --git a/hw/device-assignment.c b/hw/device-assignment.c
> index 89823f1..c953713 100644
> --- a/hw/device-assignment.c
> +++ b/hw/device-assignment.c
> @@ -835,6 +835,7 @@ static int assign_irq(AssignedDevice *dev)
> dev->irq_requested_type = 0;
> }
>
> +retry:
> assigned_irq_data.flags = KVM_DEV_IRQ_GUEST_INTX;
> if (dev->features & ASSIGNED_DEVICE_PREFER_MSI_MASK &&
> dev->cap.available & ASSIGNED_DEVICE_CAP_MSI)
> @@ -844,6 +845,17 @@ static int assign_irq(AssignedDevice *dev)
>
> r = kvm_assign_irq(kvm_state, &assigned_irq_data);
> if (r < 0) {
> + if (r == -EIO && !(dev->features & ASSIGNED_DEVICE_PREFER_MSI_MASK) &&
> + dev->cap.available & ASSIGNED_DEVICE_CAP_MSI) {
> + /* Retry with host-side MSI. There might be an IRQ conflict and
> + * either the kernel or the device doesn't support sharing. */
> + fprintf(stderr,
> + "Host-side INTx sharing not supported, "
> + "using MSI instead.\n"
> + "Some devices do not to work properly in this mode.\n");
> + dev->features |= ASSIGNED_DEVICE_PREFER_MSI_MASK;
> + goto retry;
> + }
> fprintf(stderr, "Failed to assign irq for \"%s\": %s\n",
> dev->dev.qdev.id, strerror(-r));
> fprintf(stderr, "Perhaps you are assigning a device "
Acked-by: Alex Williamson <alex.williamson@redhat.com>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] pci-assign: Fall back to host-side MSI if INTx sharing fails
2012-03-19 9:56 [PATCH] pci-assign: Fall back to host-side MSI if INTx sharing fails Jan Kiszka
2012-03-19 15:52 ` Alex Williamson
@ 2012-03-21 13:13 ` Avi Kivity
1 sibling, 0 replies; 3+ messages in thread
From: Avi Kivity @ 2012-03-21 13:13 UTC (permalink / raw)
To: Jan Kiszka
Cc: Marcelo Tosatti, kvm, Alex Williamson, Wen Congyang,
Markus Armbruster
On 03/19/2012 11:56 AM, Jan Kiszka wrote:
> If the host or the device does not support INTx sharing, retry the IRQ
> assignment with host-side MSI support enabled but warn about potential
> consequences. This allows to preserve the previous behavior where we
> defaulted to MSI and did not support INTx sharing at all.
>
>
Applied, thanks.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-03-21 13:13 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-19 9:56 [PATCH] pci-assign: Fall back to host-side MSI if INTx sharing fails Jan Kiszka
2012-03-19 15:52 ` Alex Williamson
2012-03-21 13:13 ` Avi Kivity
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox