All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning
@ 2022-04-28 13:49 Eric Auger
  2022-04-28 13:58 ` Cornelia Huck
  2022-04-28 20:14 ` Alex Williamson
  0 siblings, 2 replies; 8+ messages in thread
From: Eric Auger @ 2022-04-28 13:49 UTC (permalink / raw)
  To: eric.auger.pro, eric.auger, qemu-devel, alex.williamson
  Cc: cohuck, f4bug, stefanb

The CRB command buffer currently is a RAM MemoryRegion and given
its base address alignment, it causes an error report on
vfio_listener_region_add(). This region could have been a RAM device
region, easing the detection of such safe situation but this option
was not well received. So let's add a helper function that uses the
memory region owner type to detect the situation is safe wrt
the assignment. Other device types can be checked here if such kind
of problem occurs again.

Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Acked-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>

---

v3 -> v4:
- rebase on top of qemu_real_host_page_size() and
  qemu_real_host_page_size(). Print the size and make the message
  consistent
- Added Stefan's A-b and Connie R-b (despite the changes)
---
 hw/vfio/common.c     | 27 ++++++++++++++++++++++++++-
 hw/vfio/trace-events |  1 +
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/hw/vfio/common.c b/hw/vfio/common.c
index 2b1f78fdfa..f6b9bb6d71 100644
--- a/hw/vfio/common.c
+++ b/hw/vfio/common.c
@@ -40,6 +40,7 @@
 #include "trace.h"
 #include "qapi/error.h"
 #include "migration/migration.h"
+#include "sysemu/tpm.h"
 
 VFIOGroupList vfio_group_list =
     QLIST_HEAD_INITIALIZER(vfio_group_list);
@@ -861,6 +862,22 @@ static void vfio_unregister_ram_discard_listener(VFIOContainer *container,
     g_free(vrdl);
 }
 
+static bool vfio_known_safe_misalignment(MemoryRegionSection *section)
+{
+    MemoryRegion *mr = section->mr;
+
+    if (!TPM_IS_CRB(mr->owner)) {
+        return false;
+    }
+
+    /* this is a known safe misaligned region, just trace for debug purpose */
+    trace_vfio_known_safe_misalignment(memory_region_name(mr),
+                                       section->offset_within_address_space,
+                                       section->offset_within_region,
+                                       qemu_real_host_page_size());
+    return true;
+}
+
 static void vfio_listener_region_add(MemoryListener *listener,
                                      MemoryRegionSection *section)
 {
@@ -884,7 +901,15 @@ static void vfio_listener_region_add(MemoryListener *listener,
     if (unlikely((section->offset_within_address_space &
                   ~qemu_real_host_page_mask()) !=
                  (section->offset_within_region & ~qemu_real_host_page_mask()))) {
-        error_report("%s received unaligned region", __func__);
+        if (!vfio_known_safe_misalignment(section)) {
+            error_report("%s received unaligned region %s iova=0x%"PRIx64
+                         " offset_within_region=0x%"PRIx64
+                         " qemu_real_host_page_size=0x%"PRIxPTR,
+                         __func__, memory_region_name(section->mr),
+                         section->offset_within_address_space,
+                         section->offset_within_region,
+                         qemu_real_host_page_size());
+        }
         return;
     }
 
diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events
index 0ef1b5f4a6..582882db91 100644
--- a/hw/vfio/trace-events
+++ b/hw/vfio/trace-events
@@ -100,6 +100,7 @@ vfio_listener_region_add_skip(uint64_t start, uint64_t end) "SKIPPING region_add
 vfio_spapr_group_attach(int groupfd, int tablefd) "Attached groupfd %d to liobn fd %d"
 vfio_listener_region_add_iommu(uint64_t start, uint64_t end) "region_add [iommu] 0x%"PRIx64" - 0x%"PRIx64
 vfio_listener_region_add_ram(uint64_t iova_start, uint64_t iova_end, void *vaddr) "region_add [ram] 0x%"PRIx64" - 0x%"PRIx64" [%p]"
+vfio_known_safe_misalignment(const char *name, uint64_t iova, uint64_t offset_within_region, uintptr_t page_size) "Region \"%s\" iova=0x%"PRIx64" offset_within_region=0x%"PRIx64" qemu_real_host_page_size=0x%"PRIxPTR ": cannot be mapped for DMA"
 vfio_listener_region_add_no_dma_map(const char *name, uint64_t iova, uint64_t size, uint64_t page_size) "Region \"%s\" 0x%"PRIx64" size=0x%"PRIx64" is not aligned to 0x%"PRIx64" and cannot be mapped for DMA"
 vfio_listener_region_del_skip(uint64_t start, uint64_t end) "SKIPPING region_del 0x%"PRIx64" - 0x%"PRIx64
 vfio_listener_region_del(uint64_t start, uint64_t end) "region_del 0x%"PRIx64" - 0x%"PRIx64
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning
  2022-04-28 13:49 [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning Eric Auger
@ 2022-04-28 13:58 ` Cornelia Huck
  2022-04-28 20:14 ` Alex Williamson
  1 sibling, 0 replies; 8+ messages in thread
From: Cornelia Huck @ 2022-04-28 13:58 UTC (permalink / raw)
  To: Eric Auger, eric.auger.pro, eric.auger, qemu-devel, alex.williamson
  Cc: f4bug, stefanb

On Thu, Apr 28 2022, Eric Auger <eric.auger@redhat.com> wrote:

> The CRB command buffer currently is a RAM MemoryRegion and given
> its base address alignment, it causes an error report on
> vfio_listener_region_add(). This region could have been a RAM device
> region, easing the detection of such safe situation but this option
> was not well received. So let's add a helper function that uses the
> memory region owner type to detect the situation is safe wrt
> the assignment. Other device types can be checked here if such kind
> of problem occurs again.
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Acked-by: Stefan Berger <stefanb@linux.ibm.com>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
>
> ---
>
> v3 -> v4:
> - rebase on top of qemu_real_host_page_size() and
>   qemu_real_host_page_size(). Print the size and make the message
>   consistent
> - Added Stefan's A-b and Connie R-b (despite the changes)

Still fine with me.

> ---
>  hw/vfio/common.c     | 27 ++++++++++++++++++++++++++-
>  hw/vfio/trace-events |  1 +
>  2 files changed, 27 insertions(+), 1 deletion(-)



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning
  2022-04-28 13:49 [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning Eric Auger
  2022-04-28 13:58 ` Cornelia Huck
@ 2022-04-28 20:14 ` Alex Williamson
  2022-05-06  7:05   ` Eric Auger
  1 sibling, 1 reply; 8+ messages in thread
From: Alex Williamson @ 2022-04-28 20:14 UTC (permalink / raw)
  To: Eric Auger; +Cc: cohuck, f4bug, stefanb, qemu-devel, eric.auger.pro

On Thu, 28 Apr 2022 15:49:45 +0200
Eric Auger <eric.auger@redhat.com> wrote:

> The CRB command buffer currently is a RAM MemoryRegion and given
> its base address alignment, it causes an error report on
> vfio_listener_region_add(). This region could have been a RAM device
> region, easing the detection of such safe situation but this option
> was not well received. So let's add a helper function that uses the
> memory region owner type to detect the situation is safe wrt
> the assignment. Other device types can be checked here if such kind
> of problem occurs again.
> 
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Acked-by: Stefan Berger <stefanb@linux.ibm.com>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> 
> ---
> 
> v3 -> v4:
> - rebase on top of qemu_real_host_page_size() and
>   qemu_real_host_page_size(). Print the size and make the message
>   consistent
> - Added Stefan's A-b and Connie R-b (despite the changes)
> ---
>  hw/vfio/common.c     | 27 ++++++++++++++++++++++++++-
>  hw/vfio/trace-events |  1 +
>  2 files changed, 27 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/vfio/common.c b/hw/vfio/common.c
> index 2b1f78fdfa..f6b9bb6d71 100644
> --- a/hw/vfio/common.c
> +++ b/hw/vfio/common.c
> @@ -40,6 +40,7 @@
>  #include "trace.h"
>  #include "qapi/error.h"
>  #include "migration/migration.h"
> +#include "sysemu/tpm.h"
>  
>  VFIOGroupList vfio_group_list =
>      QLIST_HEAD_INITIALIZER(vfio_group_list);
> @@ -861,6 +862,22 @@ static void vfio_unregister_ram_discard_listener(VFIOContainer *container,
>      g_free(vrdl);
>  }
>  
> +static bool vfio_known_safe_misalignment(MemoryRegionSection *section)
> +{
> +    MemoryRegion *mr = section->mr;
> +
> +    if (!TPM_IS_CRB(mr->owner)) {
> +        return false;
> +    }

It looks like this test is going to need to be wrapped in #ifdef
CONFIG_TPM:

https://gitlab.com/alex.williamson/qemu/-/jobs/2391952412

Thanks,

Alex

> +
> +    /* this is a known safe misaligned region, just trace for debug purpose */
> +    trace_vfio_known_safe_misalignment(memory_region_name(mr),
> +                                       section->offset_within_address_space,
> +                                       section->offset_within_region,
> +                                       qemu_real_host_page_size());
> +    return true;
> +}
> +
>  static void vfio_listener_region_add(MemoryListener *listener,
>                                       MemoryRegionSection *section)
>  {
> @@ -884,7 +901,15 @@ static void vfio_listener_region_add(MemoryListener *listener,
>      if (unlikely((section->offset_within_address_space &
>                    ~qemu_real_host_page_mask()) !=
>                   (section->offset_within_region & ~qemu_real_host_page_mask()))) {
> -        error_report("%s received unaligned region", __func__);
> +        if (!vfio_known_safe_misalignment(section)) {
> +            error_report("%s received unaligned region %s iova=0x%"PRIx64
> +                         " offset_within_region=0x%"PRIx64
> +                         " qemu_real_host_page_size=0x%"PRIxPTR,
> +                         __func__, memory_region_name(section->mr),
> +                         section->offset_within_address_space,
> +                         section->offset_within_region,
> +                         qemu_real_host_page_size());
> +        }
>          return;
>      }
>  
> diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events
> index 0ef1b5f4a6..582882db91 100644
> --- a/hw/vfio/trace-events
> +++ b/hw/vfio/trace-events
> @@ -100,6 +100,7 @@ vfio_listener_region_add_skip(uint64_t start, uint64_t end) "SKIPPING region_add
>  vfio_spapr_group_attach(int groupfd, int tablefd) "Attached groupfd %d to liobn fd %d"
>  vfio_listener_region_add_iommu(uint64_t start, uint64_t end) "region_add [iommu] 0x%"PRIx64" - 0x%"PRIx64
>  vfio_listener_region_add_ram(uint64_t iova_start, uint64_t iova_end, void *vaddr) "region_add [ram] 0x%"PRIx64" - 0x%"PRIx64" [%p]"
> +vfio_known_safe_misalignment(const char *name, uint64_t iova, uint64_t offset_within_region, uintptr_t page_size) "Region \"%s\" iova=0x%"PRIx64" offset_within_region=0x%"PRIx64" qemu_real_host_page_size=0x%"PRIxPTR ": cannot be mapped for DMA"
>  vfio_listener_region_add_no_dma_map(const char *name, uint64_t iova, uint64_t size, uint64_t page_size) "Region \"%s\" 0x%"PRIx64" size=0x%"PRIx64" is not aligned to 0x%"PRIx64" and cannot be mapped for DMA"
>  vfio_listener_region_del_skip(uint64_t start, uint64_t end) "SKIPPING region_del 0x%"PRIx64" - 0x%"PRIx64
>  vfio_listener_region_del(uint64_t start, uint64_t end) "region_del 0x%"PRIx64" - 0x%"PRIx64



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning
  2022-04-28 20:14 ` Alex Williamson
@ 2022-05-06  7:05   ` Eric Auger
  2022-05-06  7:34     ` Cornelia Huck
  0 siblings, 1 reply; 8+ messages in thread
From: Eric Auger @ 2022-05-06  7:05 UTC (permalink / raw)
  To: Alex Williamson; +Cc: eric.auger.pro, qemu-devel, stefanb, cohuck, f4bug

Hi Alex,

On 4/28/22 22:14, Alex Williamson wrote:
> On Thu, 28 Apr 2022 15:49:45 +0200
> Eric Auger <eric.auger@redhat.com> wrote:
>
>> The CRB command buffer currently is a RAM MemoryRegion and given
>> its base address alignment, it causes an error report on
>> vfio_listener_region_add(). This region could have been a RAM device
>> region, easing the detection of such safe situation but this option
>> was not well received. So let's add a helper function that uses the
>> memory region owner type to detect the situation is safe wrt
>> the assignment. Other device types can be checked here if such kind
>> of problem occurs again.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> Acked-by: Stefan Berger <stefanb@linux.ibm.com>
>> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
>>
>> ---
>>
>> v3 -> v4:
>> - rebase on top of qemu_real_host_page_size() and
>>   qemu_real_host_page_size(). Print the size and make the message
>>   consistent
>> - Added Stefan's A-b and Connie R-b (despite the changes)
>> ---
>>  hw/vfio/common.c     | 27 ++++++++++++++++++++++++++-
>>  hw/vfio/trace-events |  1 +
>>  2 files changed, 27 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/vfio/common.c b/hw/vfio/common.c
>> index 2b1f78fdfa..f6b9bb6d71 100644
>> --- a/hw/vfio/common.c
>> +++ b/hw/vfio/common.c
>> @@ -40,6 +40,7 @@
>>  #include "trace.h"
>>  #include "qapi/error.h"
>>  #include "migration/migration.h"
>> +#include "sysemu/tpm.h"
>>  
>>  VFIOGroupList vfio_group_list =
>>      QLIST_HEAD_INITIALIZER(vfio_group_list);
>> @@ -861,6 +862,22 @@ static void vfio_unregister_ram_discard_listener(VFIOContainer *container,
>>      g_free(vrdl);
>>  }
>>  
>> +static bool vfio_known_safe_misalignment(MemoryRegionSection *section)
>> +{
>> +    MemoryRegion *mr = section->mr;
>> +
>> +    if (!TPM_IS_CRB(mr->owner)) {
>> +        return false;
>> +    }
> It looks like this test is going to need to be wrapped in #ifdef
> CONFIG_TPM:

sorry for the delay. Your message fell though the cracks :-(

if I put an '#ifdef CONFIG_TPM' I need to inverse the logic because by
default the function shall return false.

solution #1

#ifdef CONFIG_TPM  
 if (TPM_IS_CRB(mr->owner)) {

    /* this is a known safe misaligned region, just trace for debug purpose */
    trace_vfio_known_safe_misalignment(memory_region_name(mr),
                                       section->offset_within_address_space,
                                       section->offset_within_region,
                                       qemu_real_host_page_size());

    return true;
   }

#endif
return false;

This looks weird to me.

+    if (!object_dynamic_cast(mr->owner, TYPE_TPM_CRB)) {
+        return false;
+    }


solution #2
replace !object_dynamic_cast(mr->owner, TYPE_TPM_CRB) by
!object_dynamic_cast(mr->owner, "tpm-crb")
and add a comment saying that we don't use TYPE_TPM_CRB on purpose

solution #3
Move #define TPM_IS_CRB(chr) and related defined out of
#ifdef CONFIG_TPM hoping it does not have other side effects

Thoughts?
Eric
>
> https://gitlab.com/alex.williamson/qemu/-/jobs/2391952412
>
> Thanks,
>
> Alex
>
>> +
>> +    /* this is a known safe misaligned region, just trace for debug purpose */
>> +    trace_vfio_known_safe_misalignment(memory_region_name(mr),
>> +                                       section->offset_within_address_space,
>> +                                       section->offset_within_region,
>> +                                       qemu_real_host_page_size());
>> +    return true;
>> +}
>> +
>>  static void vfio_listener_region_add(MemoryListener *listener,
>>                                       MemoryRegionSection *section)
>>  {
>> @@ -884,7 +901,15 @@ static void vfio_listener_region_add(MemoryListener *listener,
>>      if (unlikely((section->offset_within_address_space &
>>                    ~qemu_real_host_page_mask()) !=
>>                   (section->offset_within_region & ~qemu_real_host_page_mask()))) {
>> -        error_report("%s received unaligned region", __func__);
>> +        if (!vfio_known_safe_misalignment(section)) {
>> +            error_report("%s received unaligned region %s iova=0x%"PRIx64
>> +                         " offset_within_region=0x%"PRIx64
>> +                         " qemu_real_host_page_size=0x%"PRIxPTR,
>> +                         __func__, memory_region_name(section->mr),
>> +                         section->offset_within_address_space,
>> +                         section->offset_within_region,
>> +                         qemu_real_host_page_size());
>> +        }
>>          return;
>>      }
>>  
>> diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events
>> index 0ef1b5f4a6..582882db91 100644
>> --- a/hw/vfio/trace-events
>> +++ b/hw/vfio/trace-events
>> @@ -100,6 +100,7 @@ vfio_listener_region_add_skip(uint64_t start, uint64_t end) "SKIPPING region_add
>>  vfio_spapr_group_attach(int groupfd, int tablefd) "Attached groupfd %d to liobn fd %d"
>>  vfio_listener_region_add_iommu(uint64_t start, uint64_t end) "region_add [iommu] 0x%"PRIx64" - 0x%"PRIx64
>>  vfio_listener_region_add_ram(uint64_t iova_start, uint64_t iova_end, void *vaddr) "region_add [ram] 0x%"PRIx64" - 0x%"PRIx64" [%p]"
>> +vfio_known_safe_misalignment(const char *name, uint64_t iova, uint64_t offset_within_region, uintptr_t page_size) "Region \"%s\" iova=0x%"PRIx64" offset_within_region=0x%"PRIx64" qemu_real_host_page_size=0x%"PRIxPTR ": cannot be mapped for DMA"
>>  vfio_listener_region_add_no_dma_map(const char *name, uint64_t iova, uint64_t size, uint64_t page_size) "Region \"%s\" 0x%"PRIx64" size=0x%"PRIx64" is not aligned to 0x%"PRIx64" and cannot be mapped for DMA"
>>  vfio_listener_region_del_skip(uint64_t start, uint64_t end) "SKIPPING region_del 0x%"PRIx64" - 0x%"PRIx64
>>  vfio_listener_region_del(uint64_t start, uint64_t end) "region_del 0x%"PRIx64" - 0x%"PRIx64



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning
  2022-05-06  7:05   ` Eric Auger
@ 2022-05-06  7:34     ` Cornelia Huck
  2022-05-06  7:49       ` Eric Auger
  2022-05-06 12:40       ` Stefan Berger
  0 siblings, 2 replies; 8+ messages in thread
From: Cornelia Huck @ 2022-05-06  7:34 UTC (permalink / raw)
  To: eric.auger, Alex Williamson; +Cc: eric.auger.pro, qemu-devel, stefanb, f4bug

On Fri, May 06 2022, Eric Auger <eric.auger@redhat.com> wrote:

> Hi Alex,
>
> On 4/28/22 22:14, Alex Williamson wrote:
>> On Thu, 28 Apr 2022 15:49:45 +0200
>> Eric Auger <eric.auger@redhat.com> wrote:

>>> +static bool vfio_known_safe_misalignment(MemoryRegionSection *section)
>>> +{
>>> +    MemoryRegion *mr = section->mr;
>>> +
>>> +    if (!TPM_IS_CRB(mr->owner)) {
>>> +        return false;
>>> +    }
>> It looks like this test is going to need to be wrapped in #ifdef
>> CONFIG_TPM:
>
> sorry for the delay. Your message fell though the cracks :-(
>
> if I put an '#ifdef CONFIG_TPM' I need to inverse the logic because by
> default the function shall return false.
>
> solution #1
>
> #ifdef CONFIG_TPM  
>  if (TPM_IS_CRB(mr->owner)) {
>
>     /* this is a known safe misaligned region, just trace for debug purpose */
>     trace_vfio_known_safe_misalignment(memory_region_name(mr),
>                                        section->offset_within_address_space,
>                                        section->offset_within_region,
>                                        qemu_real_host_page_size());
>
>     return true;
>    }
>
> #endif
> return false;
>
> This looks weird to me.
>
> +    if (!object_dynamic_cast(mr->owner, TYPE_TPM_CRB)) {
> +        return false;
> +    }
>
>
> solution #2
> replace !object_dynamic_cast(mr->owner, TYPE_TPM_CRB) by
> !object_dynamic_cast(mr->owner, "tpm-crb")
> and add a comment saying that we don't use TYPE_TPM_CRB on purpose
>
> solution #3
> Move #define TPM_IS_CRB(chr) and related defined out of
> #ifdef CONFIG_TPM hoping it does not have other side effects
>
> Thoughts?
> Eric

solution #4

#ifndef CONFIG_TPM
/* needed for an alignment check in non-tpm code */
static inline Object *TPM_IS_CRB(Object *obj)
{
    return NULL;
}
#endif

I think it would be good if we could hide the configuration details in
the header.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning
  2022-05-06  7:34     ` Cornelia Huck
@ 2022-05-06  7:49       ` Eric Auger
  2022-05-06  7:56         ` Cornelia Huck
  2022-05-06 12:40       ` Stefan Berger
  1 sibling, 1 reply; 8+ messages in thread
From: Eric Auger @ 2022-05-06  7:49 UTC (permalink / raw)
  To: Cornelia Huck, Alex Williamson; +Cc: eric.auger.pro, qemu-devel, stefanb, f4bug

Hi Connie,

On 5/6/22 09:34, Cornelia Huck wrote:
> On Fri, May 06 2022, Eric Auger <eric.auger@redhat.com> wrote:
>
>> Hi Alex,
>>
>> On 4/28/22 22:14, Alex Williamson wrote:
>>> On Thu, 28 Apr 2022 15:49:45 +0200
>>> Eric Auger <eric.auger@redhat.com> wrote:
>>>> +static bool vfio_known_safe_misalignment(MemoryRegionSection *section)
>>>> +{
>>>> +    MemoryRegion *mr = section->mr;
>>>> +
>>>> +    if (!TPM_IS_CRB(mr->owner)) {
>>>> +        return false;
>>>> +    }
>>> It looks like this test is going to need to be wrapped in #ifdef
>>> CONFIG_TPM:
>> sorry for the delay. Your message fell though the cracks :-(
>>
>> if I put an '#ifdef CONFIG_TPM' I need to inverse the logic because by
>> default the function shall return false.
>>
>> solution #1
>>
>> #ifdef CONFIG_TPM  
>>  if (TPM_IS_CRB(mr->owner)) {
>>
>>     /* this is a known safe misaligned region, just trace for debug purpose */
>>     trace_vfio_known_safe_misalignment(memory_region_name(mr),
>>                                        section->offset_within_address_space,
>>                                        section->offset_within_region,
>>                                        qemu_real_host_page_size());
>>
>>     return true;
>>    }
>>
>> #endif
>> return false;
>>
>> This looks weird to me.
>>
>> +    if (!object_dynamic_cast(mr->owner, TYPE_TPM_CRB)) {
>> +        return false;
>> +    }
>>
>>
>> solution #2
>> replace !object_dynamic_cast(mr->owner, TYPE_TPM_CRB) by
>> !object_dynamic_cast(mr->owner, "tpm-crb")
>> and add a comment saying that we don't use TYPE_TPM_CRB on purpose
>>
>> solution #3
>> Move #define TPM_IS_CRB(chr) and related defined out of
>> #ifdef CONFIG_TPM hoping it does not have other side effects
>>
>> Thoughts?
>> Eric
> solution #4
>
> #ifndef CONFIG_TPM
> /* needed for an alignment check in non-tpm code */
> static inline Object *TPM_IS_CRB(Object *obj)
> {
>     return NULL;
> }
> #endif
>
> I think it would be good if we could hide the configuration details in
> the header.
>
Yep, I forgot to mention solution #3 also happened in include/sysemu/tpm.h.
Connie, either we add your stub function or we move the following out of
the #ifdef CONFIG_TPM. This should be harmless, no?
Stefan, any preference?

#define TYPE_TPM_TIS_ISA            "tpm-tis"
#define TYPE_TPM_TIS_SYSBUS         "tpm-tis-device"
#define TYPE_TPM_CRB                "tpm-crb"
#define TYPE_TPM_SPAPR              "tpm-spapr"

#define TPM_IS_TIS_ISA(chr)                         \
    object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS_ISA)
#define TPM_IS_TIS_SYSBUS(chr)                      \
    object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS_SYSBUS)
#define TPM_IS_CRB(chr)                             \
    object_dynamic_cast(OBJECT(chr), TYPE_TPM_CRB)
#define TPM_IS_SPAPR(chr)                           \
    object_dynamic_cast(OBJECT(chr), TYPE_TPM_SPAPR)

Eric





^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning
  2022-05-06  7:49       ` Eric Auger
@ 2022-05-06  7:56         ` Cornelia Huck
  0 siblings, 0 replies; 8+ messages in thread
From: Cornelia Huck @ 2022-05-06  7:56 UTC (permalink / raw)
  To: eric.auger, Alex Williamson; +Cc: eric.auger.pro, qemu-devel, stefanb, f4bug

On Fri, May 06 2022, Eric Auger <eric.auger@redhat.com> wrote:

> Hi Connie,
>
> On 5/6/22 09:34, Cornelia Huck wrote:
>> On Fri, May 06 2022, Eric Auger <eric.auger@redhat.com> wrote:
>>
>>> Hi Alex,
>>>
>>> On 4/28/22 22:14, Alex Williamson wrote:
>>>> On Thu, 28 Apr 2022 15:49:45 +0200
>>>> Eric Auger <eric.auger@redhat.com> wrote:
>>>>> +static bool vfio_known_safe_misalignment(MemoryRegionSection *section)
>>>>> +{
>>>>> +    MemoryRegion *mr = section->mr;
>>>>> +
>>>>> +    if (!TPM_IS_CRB(mr->owner)) {
>>>>> +        return false;
>>>>> +    }
>>>> It looks like this test is going to need to be wrapped in #ifdef
>>>> CONFIG_TPM:
>>> sorry for the delay. Your message fell though the cracks :-(
>>>
>>> if I put an '#ifdef CONFIG_TPM' I need to inverse the logic because by
>>> default the function shall return false.
>>>
>>> solution #1
>>>
>>> #ifdef CONFIG_TPM  
>>>  if (TPM_IS_CRB(mr->owner)) {
>>>
>>>     /* this is a known safe misaligned region, just trace for debug purpose */
>>>     trace_vfio_known_safe_misalignment(memory_region_name(mr),
>>>                                        section->offset_within_address_space,
>>>                                        section->offset_within_region,
>>>                                        qemu_real_host_page_size());
>>>
>>>     return true;
>>>    }
>>>
>>> #endif
>>> return false;
>>>
>>> This looks weird to me.
>>>
>>> +    if (!object_dynamic_cast(mr->owner, TYPE_TPM_CRB)) {
>>> +        return false;
>>> +    }
>>>
>>>
>>> solution #2
>>> replace !object_dynamic_cast(mr->owner, TYPE_TPM_CRB) by
>>> !object_dynamic_cast(mr->owner, "tpm-crb")
>>> and add a comment saying that we don't use TYPE_TPM_CRB on purpose
>>>
>>> solution #3
>>> Move #define TPM_IS_CRB(chr) and related defined out of
>>> #ifdef CONFIG_TPM hoping it does not have other side effects
>>>
>>> Thoughts?
>>> Eric
>> solution #4
>>
>> #ifndef CONFIG_TPM
>> /* needed for an alignment check in non-tpm code */
>> static inline Object *TPM_IS_CRB(Object *obj)
>> {
>>     return NULL;
>> }
>> #endif
>>
>> I think it would be good if we could hide the configuration details in
>> the header.
>>
> Yep, I forgot to mention solution #3 also happened in include/sysemu/tpm.h.
> Connie, either we add your stub function or we move the following out of
> the #ifdef CONFIG_TPM. This should be harmless, no?
> Stefan, any preference?
>
> #define TYPE_TPM_TIS_ISA            "tpm-tis"
> #define TYPE_TPM_TIS_SYSBUS         "tpm-tis-device"
> #define TYPE_TPM_CRB                "tpm-crb"
> #define TYPE_TPM_SPAPR              "tpm-spapr"
>
> #define TPM_IS_TIS_ISA(chr)                         \
>     object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS_ISA)
> #define TPM_IS_TIS_SYSBUS(chr)                      \
>     object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS_SYSBUS)
> #define TPM_IS_CRB(chr)                             \
>     object_dynamic_cast(OBJECT(chr), TYPE_TPM_CRB)
> #define TPM_IS_SPAPR(chr)                           \
>     object_dynamic_cast(OBJECT(chr), TYPE_TPM_SPAPR)

If it's just those simple defines, I can't see how that could break
things (you won't have the respective objects anyway). So yes, I think
that is the best solution.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning
  2022-05-06  7:34     ` Cornelia Huck
  2022-05-06  7:49       ` Eric Auger
@ 2022-05-06 12:40       ` Stefan Berger
  1 sibling, 0 replies; 8+ messages in thread
From: Stefan Berger @ 2022-05-06 12:40 UTC (permalink / raw)
  To: Cornelia Huck, eric.auger, Alex Williamson
  Cc: eric.auger.pro, qemu-devel, stefanb, f4bug



On 5/6/22 03:34, Cornelia Huck wrote:
> On Fri, May 06 2022, Eric Auger <eric.auger@redhat.com> wrote:
> 
>> Hi Alex,
>>
>> On 4/28/22 22:14, Alex Williamson wrote:
>>> On Thu, 28 Apr 2022 15:49:45 +0200
>>> Eric Auger <eric.auger@redhat.com> wrote:
> 
>>>> +static bool vfio_known_safe_misalignment(MemoryRegionSection *section)
>>>> +{
>>>> +    MemoryRegion *mr = section->mr;
>>>> +
>>>> +    if (!TPM_IS_CRB(mr->owner)) {
>>>> +        return false;
>>>> +    }
>>> It looks like this test is going to need to be wrapped in #ifdef
>>> CONFIG_TPM:
>>
>> sorry for the delay. Your message fell though the cracks :-(
>>
>> if I put an '#ifdef CONFIG_TPM' I need to inverse the logic because by
>> default the function shall return false.
>>
>> solution #1
>>
>> #ifdef CONFIG_TPM
>>   if (TPM_IS_CRB(mr->owner)) {
>>
>>      /* this is a known safe misaligned region, just trace for debug purpose */
>>      trace_vfio_known_safe_misalignment(memory_region_name(mr),
>>                                         section->offset_within_address_space,
>>                                         section->offset_within_region,
>>                                         qemu_real_host_page_size());
>>
>>      return true;
>>     }
>>
>> #endif
>> return false;
>>
>> This looks weird to me.
>>
>> +    if (!object_dynamic_cast(mr->owner, TYPE_TPM_CRB)) {
>> +        return false;
>> +    }
>>
>>
>> solution #2
>> replace !object_dynamic_cast(mr->owner, TYPE_TPM_CRB) by
>> !object_dynamic_cast(mr->owner, "tpm-crb")
>> and add a comment saying that we don't use TYPE_TPM_CRB on purpose
>>
>> solution #3
>> Move #define TPM_IS_CRB(chr) and related defined out of
>> #ifdef CONFIG_TPM hoping it does not have other side effects
>>
>> Thoughts?
>> Eric
> 
> solution #4
> 
> #ifndef CONFIG_TPM
> /* needed for an alignment check in non-tpm code */
> static inline Object *TPM_IS_CRB(Object *obj)
> {
>      return NULL;
> }
> #endif
> 
> I think it would be good if we could hide the configuration details in
> the header.
> 

Solution #4 looks good to me...


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-05-06 12:47 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-28 13:49 [PATCH v4] vfio/common: remove spurious tpm-crb-cmd misalignment warning Eric Auger
2022-04-28 13:58 ` Cornelia Huck
2022-04-28 20:14 ` Alex Williamson
2022-05-06  7:05   ` Eric Auger
2022-05-06  7:34     ` Cornelia Huck
2022-05-06  7:49       ` Eric Auger
2022-05-06  7:56         ` Cornelia Huck
2022-05-06 12:40       ` Stefan Berger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.