Message ID | 1396502304-7456-1-git-send-email-arei.gonglei@huawei.com |
---|---|
State | New |
Headers | show |
Hi, mst and alex. Ping... These two bug fix can be accepted for KVM pci-assign ? Thanks. BTW, I have finished the testing work of the Emulex Corporation OneConnect NIC (Lancer) Nic by vfio-pci, and the pass-troughed VF works well. My environment of testing as follows: Host: 3.12.16-0.6.6-default Guest: Suse11sp1, linux-2.6.32.59-0.7 VF: 04:01.5 Ethernet controller: Emulex Corporation Device e228 (rev 10) Qemu command: /usr/bin/qemu-kvm -name suse -cpu kvm64,+x2apic -enable-kvm -m 4096 -smp 1,sockets=1,cores=1,threads=1 \ -drive file=/opt/suse11sp1.img,if=none,id=drive-virtio-disk0,format=raw,cache=none,aio=native -device virtio-blk-pci,scsi=off,bus=pci.0, \ addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-1-1,readonly=on,format=raw,cache=none, \ aio=native -device ide-cd,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 -vnc 0.0.0.0:0 -vga cirrus -device vfio-pci,host=04:01.5 > Subject: [PATCH 1/2] pci-assign: Fix a bug when map MSI-X table memory failed > > From: Gonglei <arei.gonglei@huawei.com> > > when map MSI-X table memory failed, the dev->msix_table not be > set to NULL, the assigned_dev_unregister_msix_mmio() will case > a segfault when munmap the failed dev->msix_table. > > Signed-off-by: Gonglei <arei.gonglei@huawei.com> > --- > hw/i386/kvm/pci-assign.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c > index a825871..570333f 100644 > --- a/hw/i386/kvm/pci-assign.c > +++ b/hw/i386/kvm/pci-assign.c > @@ -1608,6 +1608,7 @@ static int > assigned_dev_register_msix_mmio(AssignedDevice *dev) > MAP_ANONYMOUS|MAP_PRIVATE, 0, 0); > if (dev->msix_table == MAP_FAILED) { > error_report("fail allocate msix_table! %s", strerror(errno)); > + dev->msix_table = NULL; > return -EFAULT; > } > > -- > 1.7.12.4 >
On Thu, Apr 03, 2014 at 01:18:23PM +0800, arei.gonglei@huawei.com wrote: > From: Gonglei <arei.gonglei@huawei.com> > > when map MSI-X table memory failed, the dev->msix_table not be > set to NULL, the assigned_dev_unregister_msix_mmio() will case > a segfault when munmap the failed dev->msix_table. > > Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> > --- > hw/i386/kvm/pci-assign.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c > index a825871..570333f 100644 > --- a/hw/i386/kvm/pci-assign.c > +++ b/hw/i386/kvm/pci-assign.c > @@ -1608,6 +1608,7 @@ static int assigned_dev_register_msix_mmio(AssignedDevice *dev) > MAP_ANONYMOUS|MAP_PRIVATE, 0, 0); > if (dev->msix_table == MAP_FAILED) { > error_report("fail allocate msix_table! %s", strerror(errno)); > + dev->msix_table = NULL; > return -EFAULT; > } > > -- > 1.7.12.4 > >
On Thu, Apr 03, 2014 at 01:18:23PM +0800, arei.gonglei@huawei.com wrote: > From: Gonglei <arei.gonglei@huawei.com> > > when map MSI-X table memory failed, the dev->msix_table not be > set to NULL, the assigned_dev_unregister_msix_mmio() will case > a segfault when munmap the failed dev->msix_table. > > Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> > --- > hw/i386/kvm/pci-assign.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c > index a825871..570333f 100644 > --- a/hw/i386/kvm/pci-assign.c > +++ b/hw/i386/kvm/pci-assign.c > @@ -1608,6 +1608,7 @@ static int assigned_dev_register_msix_mmio(AssignedDevice *dev) > MAP_ANONYMOUS|MAP_PRIVATE, 0, 0); > if (dev->msix_table == MAP_FAILED) { > error_report("fail allocate msix_table! %s", strerror(errno)); > + dev->msix_table = NULL; > return -EFAULT; > } > > -- > 1.7.12.4 >
diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c index a825871..570333f 100644 --- a/hw/i386/kvm/pci-assign.c +++ b/hw/i386/kvm/pci-assign.c @@ -1608,6 +1608,7 @@ static int assigned_dev_register_msix_mmio(AssignedDevice *dev) MAP_ANONYMOUS|MAP_PRIVATE, 0, 0); if (dev->msix_table == MAP_FAILED) { error_report("fail allocate msix_table! %s", strerror(errno)); + dev->msix_table = NULL; return -EFAULT; }