diff mbox

[PATCHv2] qemu-kvm: routing table update thinko fix

Message ID 20090723085216.GA10799@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Michael S. Tsirkin July 23, 2009, 8:52 a.m. UTC
When updating irq routing entries, we should memcpy the new entry
over the old one. Current code gets it wrong, and only works because
it's uncommon for guests to change tables.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---

Changes since v1:
  updated irqchip case as well

 qemu-kvm.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Comments

Marcelo Tosatti July 23, 2009, 8:01 p.m. UTC | #1
On Thu, Jul 23, 2009 at 11:52:16AM +0300, Michael S. Tsirkin wrote:
> When updating irq routing entries, we should memcpy the new entry
> over the old one. Current code gets it wrong, and only works because
> it's uncommon for guests to change tables.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Applied, thanks.

> ---
> 
> Changes since v1:
>   updated irqchip case as well
> 
>  qemu-kvm.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/qemu-kvm.c b/qemu-kvm.c
> index 60e5eac..b4de9c6 100644
> --- a/qemu-kvm.c
> +++ b/qemu-kvm.c
> @@ -1544,7 +1544,7 @@ int kvm_update_routing_entry(kvm_context_t kvm,
>          case KVM_IRQ_ROUTING_IRQCHIP:
>              if (e->u.irqchip.irqchip == entry->u.irqchip.irqchip &&
>                  e->u.irqchip.pin == entry->u.irqchip.pin) {
> -                memcpy(&e->u.irqchip, &entry->u.irqchip, sizeof e->u.irqchip);
> +                memcpy(&e->u.irqchip, &newentry->u.irqchip, sizeof e->u.irqchip);
>                  return 0;
>              }
>              break;
> @@ -1552,7 +1552,7 @@ int kvm_update_routing_entry(kvm_context_t kvm,
>              if (e->u.msi.address_lo == entry->u.msi.address_lo &&
>                  e->u.msi.address_hi == entry->u.msi.address_hi &&
>                  e->u.msi.data == entry->u.msi.data) {
> -                memcpy(&e->u.msi, &entry->u.msi, sizeof e->u.msi);
> +                memcpy(&e->u.msi, &newentry->u.msi, sizeof e->u.msi);
>                  return 0;
>              }
>              break;
> -- 
> 1.6.2.5
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/qemu-kvm.c b/qemu-kvm.c
index 60e5eac..b4de9c6 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -1544,7 +1544,7 @@  int kvm_update_routing_entry(kvm_context_t kvm,
         case KVM_IRQ_ROUTING_IRQCHIP:
             if (e->u.irqchip.irqchip == entry->u.irqchip.irqchip &&
                 e->u.irqchip.pin == entry->u.irqchip.pin) {
-                memcpy(&e->u.irqchip, &entry->u.irqchip, sizeof e->u.irqchip);
+                memcpy(&e->u.irqchip, &newentry->u.irqchip, sizeof e->u.irqchip);
                 return 0;
             }
             break;
@@ -1552,7 +1552,7 @@  int kvm_update_routing_entry(kvm_context_t kvm,
             if (e->u.msi.address_lo == entry->u.msi.address_lo &&
                 e->u.msi.address_hi == entry->u.msi.address_hi &&
                 e->u.msi.data == entry->u.msi.data) {
-                memcpy(&e->u.msi, &entry->u.msi, sizeof e->u.msi);
+                memcpy(&e->u.msi, &newentry->u.msi, sizeof e->u.msi);
                 return 0;
             }
             break;