2019-10-15 15:18:08

by Joerg Roedel

[permalink] [raw]
Subject: [PATCH] vfio/type1: Initialize resv_msi_base

From: Joerg Roedel <[email protected]>

After enabling CONFIG_IOMMU_DMA on X86 a new warning appears when
compiling vfio:

drivers/vfio/vfio_iommu_type1.c: In function ‘vfio_iommu_type1_attach_group’:
drivers/vfio/vfio_iommu_type1.c:1827:7: warning: ‘resv_msi_base’ may be used uninitialized in this function [-Wmaybe-uninitialized]
ret = iommu_get_msi_cookie(domain->domain, resv_msi_base);
~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The warning is a false positive, because the call to iommu_get_msi_cookie()
only happens when vfio_iommu_has_sw_msi() returned true. And that only
happens when it also set resv_msi_base.

But initialize the variable anyway to get rid of the warning.

Signed-off-by: Joerg Roedel <[email protected]>
---
drivers/vfio/vfio_iommu_type1.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
index 96fddc1dafc3..d864277ea16f 100644
--- a/drivers/vfio/vfio_iommu_type1.c
+++ b/drivers/vfio/vfio_iommu_type1.c
@@ -1658,7 +1658,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
struct bus_type *bus = NULL;
int ret;
bool resv_msi, msi_remap;
- phys_addr_t resv_msi_base;
+ phys_addr_t resv_msi_base = 0;
struct iommu_domain_geometry geo;
LIST_HEAD(iova_copy);
LIST_HEAD(group_resv_regions);
--
2.16.4


2019-10-15 15:50:48

by Eric Auger

[permalink] [raw]
Subject: Re: [PATCH] vfio/type1: Initialize resv_msi_base

Hi Joerg,

On 10/15/19 5:16 PM, Joerg Roedel wrote:
> From: Joerg Roedel <[email protected]>
>
> After enabling CONFIG_IOMMU_DMA on X86 a new warning appears when
> compiling vfio:
>
> drivers/vfio/vfio_iommu_type1.c: In function ‘vfio_iommu_type1_attach_group’:
> drivers/vfio/vfio_iommu_type1.c:1827:7: warning: ‘resv_msi_base’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> ret = iommu_get_msi_cookie(domain->domain, resv_msi_base);
> ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> The warning is a false positive, because the call to iommu_get_msi_cookie()
> only happens when vfio_iommu_has_sw_msi() returned true. And that only
> happens when it also set resv_msi_base.
>
> But initialize the variable anyway to get rid of the warning.
>
> Signed-off-by: Joerg Roedel <[email protected]>
> ---
> drivers/vfio/vfio_iommu_type1.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
> index 96fddc1dafc3..d864277ea16f 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -1658,7 +1658,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
> struct bus_type *bus = NULL;
> int ret;
> bool resv_msi, msi_remap;
> - phys_addr_t resv_msi_base;
> + phys_addr_t resv_msi_base = 0;
> struct iommu_domain_geometry geo;
> LIST_HEAD(iova_copy);
> LIST_HEAD(group_resv_regions);
>
Reviewed-by: Eric Auger <[email protected]>

Thanks

Eric

2019-10-15 19:47:35

by Cornelia Huck

[permalink] [raw]
Subject: Re: [PATCH] vfio/type1: Initialize resv_msi_base

On Tue, 15 Oct 2019 17:16:50 +0200
Joerg Roedel <[email protected]> wrote:

> From: Joerg Roedel <[email protected]>
>
> After enabling CONFIG_IOMMU_DMA on X86 a new warning appears when
> compiling vfio:
>
> drivers/vfio/vfio_iommu_type1.c: In function ‘vfio_iommu_type1_attach_group’:
> drivers/vfio/vfio_iommu_type1.c:1827:7: warning: ‘resv_msi_base’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> ret = iommu_get_msi_cookie(domain->domain, resv_msi_base);
> ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> The warning is a false positive, because the call to iommu_get_msi_cookie()
> only happens when vfio_iommu_has_sw_msi() returned true. And that only
> happens when it also set resv_msi_base.
>
> But initialize the variable anyway to get rid of the warning.
>
> Signed-off-by: Joerg Roedel <[email protected]>
> ---
> drivers/vfio/vfio_iommu_type1.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
> index 96fddc1dafc3..d864277ea16f 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -1658,7 +1658,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
> struct bus_type *bus = NULL;
> int ret;
> bool resv_msi, msi_remap;
> - phys_addr_t resv_msi_base;
> + phys_addr_t resv_msi_base = 0;
> struct iommu_domain_geometry geo;
> LIST_HEAD(iova_copy);
> LIST_HEAD(group_resv_regions);

Reviewed-by: Cornelia Huck <[email protected]>

2019-10-19 08:31:09

by Alex Williamson

[permalink] [raw]
Subject: Re: [PATCH] vfio/type1: Initialize resv_msi_base

On Tue, 15 Oct 2019 17:16:50 +0200
Joerg Roedel <[email protected]> wrote:

> From: Joerg Roedel <[email protected]>
>
> After enabling CONFIG_IOMMU_DMA on X86 a new warning appears when
> compiling vfio:
>
> drivers/vfio/vfio_iommu_type1.c: In function ‘vfio_iommu_type1_attach_group’:
> drivers/vfio/vfio_iommu_type1.c:1827:7: warning: ‘resv_msi_base’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> ret = iommu_get_msi_cookie(domain->domain, resv_msi_base);
> ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> The warning is a false positive, because the call to iommu_get_msi_cookie()
> only happens when vfio_iommu_has_sw_msi() returned true. And that only
> happens when it also set resv_msi_base.
>
> But initialize the variable anyway to get rid of the warning.
>
> Signed-off-by: Joerg Roedel <[email protected]>
> ---
> drivers/vfio/vfio_iommu_type1.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
> index 96fddc1dafc3..d864277ea16f 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -1658,7 +1658,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
> struct bus_type *bus = NULL;
> int ret;
> bool resv_msi, msi_remap;
> - phys_addr_t resv_msi_base;
> + phys_addr_t resv_msi_base = 0;
> struct iommu_domain_geometry geo;
> LIST_HEAD(iova_copy);
> LIST_HEAD(group_resv_regions);

Thanks Joerg! Added to vfio for-linus branch with Connie and Eric's
reviews for v5.4. Thanks,

Alex