diff mbox

[for,2.8,10/11] Revert "intel_iommu: Throw hw_error on notify_started"

Message ID 1472526419-5900-11-git-send-email-jasowang@redhat.com
State New
Headers show

Commit Message

Jason Wang Aug. 30, 2016, 3:06 a.m. UTC
From: Peter Xu <peterx@redhat.com>

This reverts commit 3cb3b1549f5401dc3a5e1d073e34063dc274136f. Vhost
device IOTLB API will get notified and send invalidation request to
vhost through this notifier.

Cc: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 hw/i386/intel_iommu.c | 12 ------------
 1 file changed, 12 deletions(-)

Comments

Alex Williamson Aug. 30, 2016, 3:37 a.m. UTC | #1
On Tue, 30 Aug 2016 11:06:58 +0800
Jason Wang <jasowang@redhat.com> wrote:

> From: Peter Xu <peterx@redhat.com>
> 
> This reverts commit 3cb3b1549f5401dc3a5e1d073e34063dc274136f. Vhost
> device IOTLB API will get notified and send invalidation request to
> vhost through this notifier.

AFAICT this series does not address the original problem for which
commit 3cb3b1549f54 was added.  We've only addressed the very narrow
use case of a device iotlb firing the iommu notifier therefore this
change is a regression versus 2.7 since it allows invalid
configurations with a physical iommu which will never receive the
necessary notifies from intel-iommu emulation to work properly.  Thanks,

Alex

> Cc: Alex Williamson <alex.williamson@redhat.com>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  hw/i386/intel_iommu.c | 12 ------------
>  1 file changed, 12 deletions(-)
> 
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> index 298faab..15d1216 100644
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -25,7 +25,6 @@
>  #include "exec/address-spaces.h"
>  #include "intel_iommu_internal.h"
>  #include "hw/pci/pci.h"
> -#include "hw/pci/pci_bus.h"
>  #include "hw/i386/pc.h"
>  #include "hw/boards.h"
>  #include "hw/i386/x86-iommu.h"
> @@ -2041,16 +2040,6 @@ static IOMMUTLBEntry vtd_iommu_translate(MemoryRegion *iommu, hwaddr addr,
>      return ret;
>  }
>  
> -static void vtd_iommu_notify_started(MemoryRegion *iommu)
> -{
> -    VTDAddressSpace *vtd_as = container_of(iommu, VTDAddressSpace, iommu);
> -
> -    hw_error("Device at bus %s addr %02x.%d requires iommu notifier which "
> -             "is currently not supported by intel-iommu emulation",
> -             vtd_as->bus->qbus.name, PCI_SLOT(vtd_as->devfn),
> -             PCI_FUNC(vtd_as->devfn));
> -}
> -
>  static const VMStateDescription vtd_vmstate = {
>      .name = "iommu-intel",
>      .unmigratable = 1,
> @@ -2418,7 +2407,6 @@ static void vtd_init(IntelIOMMUState *s)
>      memset(s->womask, 0, DMAR_REG_SIZE);
>  
>      s->iommu_ops.translate = vtd_iommu_translate;
> -    s->iommu_ops.notify_started = vtd_iommu_notify_started;
>      s->root = 0;
>      s->root_extended = false;
>      s->dmar_enabled = false;
Jason Wang Aug. 31, 2016, 2:45 a.m. UTC | #2
On 2016年08月30日 11:37, Alex Williamson wrote:
> On Tue, 30 Aug 2016 11:06:58 +0800
> Jason Wang <jasowang@redhat.com> wrote:
>
>> From: Peter Xu <peterx@redhat.com>
>>
>> This reverts commit 3cb3b1549f5401dc3a5e1d073e34063dc274136f. Vhost
>> device IOTLB API will get notified and send invalidation request to
>> vhost through this notifier.
> AFAICT this series does not address the original problem for which
> commit 3cb3b1549f54 was added.  We've only addressed the very narrow
> use case of a device iotlb firing the iommu notifier therefore this
> change is a regression versus 2.7 since it allows invalid
> configurations with a physical iommu which will never receive the
> necessary notifies from intel-iommu emulation to work properly.  Thanks,
>
> Alex

Looking at vfio, it cares about map but vhost only cares about IOTLB 
invalidation. Then I think we probably need another kind of notifier in 
this case to avoid this.

>> Cc: Alex Williamson <alex.williamson@redhat.com>
>> Signed-off-by: Peter Xu <peterx@redhat.com>
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>> ---
>>   hw/i386/intel_iommu.c | 12 ------------
>>   1 file changed, 12 deletions(-)
>>
>> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
>> index 298faab..15d1216 100644
>> --- a/hw/i386/intel_iommu.c
>> +++ b/hw/i386/intel_iommu.c
>> @@ -25,7 +25,6 @@
>>   #include "exec/address-spaces.h"
>>   #include "intel_iommu_internal.h"
>>   #include "hw/pci/pci.h"
>> -#include "hw/pci/pci_bus.h"
>>   #include "hw/i386/pc.h"
>>   #include "hw/boards.h"
>>   #include "hw/i386/x86-iommu.h"
>> @@ -2041,16 +2040,6 @@ static IOMMUTLBEntry vtd_iommu_translate(MemoryRegion *iommu, hwaddr addr,
>>       return ret;
>>   }
>>   
>> -static void vtd_iommu_notify_started(MemoryRegion *iommu)
>> -{
>> -    VTDAddressSpace *vtd_as = container_of(iommu, VTDAddressSpace, iommu);
>> -
>> -    hw_error("Device at bus %s addr %02x.%d requires iommu notifier which "
>> -             "is currently not supported by intel-iommu emulation",
>> -             vtd_as->bus->qbus.name, PCI_SLOT(vtd_as->devfn),
>> -             PCI_FUNC(vtd_as->devfn));
>> -}
>> -
>>   static const VMStateDescription vtd_vmstate = {
>>       .name = "iommu-intel",
>>       .unmigratable = 1,
>> @@ -2418,7 +2407,6 @@ static void vtd_init(IntelIOMMUState *s)
>>       memset(s->womask, 0, DMAR_REG_SIZE);
>>   
>>       s->iommu_ops.translate = vtd_iommu_translate;
>> -    s->iommu_ops.notify_started = vtd_iommu_notify_started;
>>       s->root = 0;
>>       s->root_extended = false;
>>       s->dmar_enabled = false;
diff mbox

Patch

diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index 298faab..15d1216 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -25,7 +25,6 @@ 
 #include "exec/address-spaces.h"
 #include "intel_iommu_internal.h"
 #include "hw/pci/pci.h"
-#include "hw/pci/pci_bus.h"
 #include "hw/i386/pc.h"
 #include "hw/boards.h"
 #include "hw/i386/x86-iommu.h"
@@ -2041,16 +2040,6 @@  static IOMMUTLBEntry vtd_iommu_translate(MemoryRegion *iommu, hwaddr addr,
     return ret;
 }
 
-static void vtd_iommu_notify_started(MemoryRegion *iommu)
-{
-    VTDAddressSpace *vtd_as = container_of(iommu, VTDAddressSpace, iommu);
-
-    hw_error("Device at bus %s addr %02x.%d requires iommu notifier which "
-             "is currently not supported by intel-iommu emulation",
-             vtd_as->bus->qbus.name, PCI_SLOT(vtd_as->devfn),
-             PCI_FUNC(vtd_as->devfn));
-}
-
 static const VMStateDescription vtd_vmstate = {
     .name = "iommu-intel",
     .unmigratable = 1,
@@ -2418,7 +2407,6 @@  static void vtd_init(IntelIOMMUState *s)
     memset(s->womask, 0, DMAR_REG_SIZE);
 
     s->iommu_ops.translate = vtd_iommu_translate;
-    s->iommu_ops.notify_started = vtd_iommu_notify_started;
     s->root = 0;
     s->root_extended = false;
     s->dmar_enabled = false;