From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: [PATCH v5-light 4/6] KVM: Save/restore state of assigned PCI device Date: Tue, 16 Nov 2010 22:30:05 +0100 Message-ID: <70f3547662238e6fe5e3e2d6e37e4ee22ccccfcc.1289943005.git.jan.kiszka@web.de> References: Cc: kvm , Alex Williamson , "Michael S. Tsirkin" , Jan Kiszka To: Avi Kivity , Marcelo Tosatti Return-path: Received: from fmmailgate02.web.de ([217.72.192.227]:42604 "EHLO fmmailgate02.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932439Ab0KPVao (ORCPT ); Tue, 16 Nov 2010 16:30:44 -0500 In-Reply-To: In-Reply-To: References: Sender: kvm-owner@vger.kernel.org List-ID: From: Jan Kiszka The guest may change states that pci_reset_function does not touch. So we better save/restore the assigned device across guest usage. Signed-off-by: Jan Kiszka --- virt/kvm/assigned-dev.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/virt/kvm/assigned-dev.c b/virt/kvm/assigned-dev.c index 7623408..d389207 100644 --- a/virt/kvm/assigned-dev.c +++ b/virt/kvm/assigned-dev.c @@ -197,7 +197,8 @@ static void kvm_free_assigned_device(struct kvm *kvm, { kvm_free_assigned_irq(kvm, assigned_dev); - pci_reset_function(assigned_dev->dev); + __pci_reset_function(assigned_dev->dev); + pci_restore_state(assigned_dev->dev); pci_release_regions(assigned_dev->dev); pci_disable_device(assigned_dev->dev); @@ -514,6 +515,7 @@ static int kvm_vm_ioctl_assign_device(struct kvm *kvm, } pci_reset_function(dev); + pci_save_state(dev); match->assigned_dev_id = assigned_dev->assigned_dev_id; match->host_segnr = assigned_dev->segnr; @@ -544,6 +546,7 @@ out: mutex_unlock(&kvm->lock); return r; out_list_del: + pci_restore_state(dev); list_del(&match->list); pci_release_regions(dev); out_disable: -- 1.7.1