Re: [PATCH v3 6/9] spapr_pci: add spapr msi read method

2020-07-16 Thread Peter Maydell
On Tue, 30 Jun 2020 at 13:31, P J P  wrote:
>
> From: Prasad J Pandit 
>
> Add spapr msi mmio read method to avoid NULL pointer dereference
> issue.
>
> Reported-by: Lei Sun 
> Acked-by: David Gibson 
> Reviewed-by: Li Qiang 
> Signed-off-by: Prasad J Pandit 
> ---
>  hw/ppc/spapr_pci.c | 13 +++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
>
> Update v3: Add Acked-by: ...
>   -> https://lists.gnu.org/archive/html/qemu-devel/2020-06/msg08054.html
>
> diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> index 329002ac04..7033352834 100644
> --- a/hw/ppc/spapr_pci.c
> +++ b/hw/ppc/spapr_pci.c
> @@ -52,6 +52,7 @@
>  #include "sysemu/kvm.h"
>  #include "sysemu/hostmem.h"
>  #include "sysemu/numa.h"
> +#include "qemu/log.h"
>
>  /* Copied from the kernel arch/powerpc/platforms/pseries/msi.c */
>  #define RTAS_QUERY_FN   0
> @@ -738,6 +739,12 @@ static PCIINTxRoute spapr_route_intx_pin_to_irq(void 
> *opaque, int pin)
>  return route;
>  }
>
> +static uint64_t spapr_msi_read(void *opaque, hwaddr addr, unsigned size)
> +{
> +qemu_log_mask(LOG_UNIMP, "%s not implemented\n", __func__);
> +return 0;
> +}
> +
>  /*
>   * MSI/MSIX memory region implementation.
>   * The handler handles both MSI and MSIX.
> @@ -755,8 +762,10 @@ static void spapr_msi_write(void *opaque, hwaddr addr,
>  }
>
>  static const MemoryRegionOps spapr_msi_ops = {
> -/* There is no .read as the read result is undefined by PCI spec */
> -.read = NULL,
> +/* .read result is undefined by PCI spec

QEMU multiline comments should have the '/*' on a line of its own.

> + * define .read method to avoid assert failure in memory_region_init_io
> + */

If this is undefined behaviour per the PCI spec then LOG_UNIMP
is the wrong thing -- this should either be LOG_GUEST_ERROR
(if the guest can do this or program the h/w to do this)
or assert() (if the only way this could happen would be a bug
in a QEMU model of a PCI device).

> +.read = spapr_msi_read,
>  .write = spapr_msi_write,
>  .endianness = DEVICE_LITTLE_ENDIAN
>  };
> --
> 2.26.2

thanks
-- PMM



[PATCH v3 6/9] spapr_pci: add spapr msi read method

2020-06-30 Thread P J P
From: Prasad J Pandit 

Add spapr msi mmio read method to avoid NULL pointer dereference
issue.

Reported-by: Lei Sun 
Acked-by: David Gibson 
Reviewed-by: Li Qiang 
Signed-off-by: Prasad J Pandit 
---
 hw/ppc/spapr_pci.c | 13 +++--
 1 file changed, 11 insertions(+), 2 deletions(-)

Update v3: Add Acked-by: ...
  -> https://lists.gnu.org/archive/html/qemu-devel/2020-06/msg08054.html

diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 329002ac04..7033352834 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -52,6 +52,7 @@
 #include "sysemu/kvm.h"
 #include "sysemu/hostmem.h"
 #include "sysemu/numa.h"
+#include "qemu/log.h"
 
 /* Copied from the kernel arch/powerpc/platforms/pseries/msi.c */
 #define RTAS_QUERY_FN   0
@@ -738,6 +739,12 @@ static PCIINTxRoute spapr_route_intx_pin_to_irq(void 
*opaque, int pin)
 return route;
 }
 
+static uint64_t spapr_msi_read(void *opaque, hwaddr addr, unsigned size)
+{
+qemu_log_mask(LOG_UNIMP, "%s not implemented\n", __func__);
+return 0;
+}
+
 /*
  * MSI/MSIX memory region implementation.
  * The handler handles both MSI and MSIX.
@@ -755,8 +762,10 @@ static void spapr_msi_write(void *opaque, hwaddr addr,
 }
 
 static const MemoryRegionOps spapr_msi_ops = {
-/* There is no .read as the read result is undefined by PCI spec */
-.read = NULL,
+/* .read result is undefined by PCI spec
+ * define .read method to avoid assert failure in memory_region_init_io
+ */
+.read = spapr_msi_read,
 .write = spapr_msi_write,
 .endianness = DEVICE_LITTLE_ENDIAN
 };
-- 
2.26.2