KVM: Fix a warning in __kvm_gfn_to_hva_cache_init()
diff mbox series

Message ID 20200504190526.84456-1-peterx@redhat.com
State New
Headers show
Series
  • KVM: Fix a warning in __kvm_gfn_to_hva_cache_init()
Related show

Commit Message

Peter Xu May 4, 2020, 7:05 p.m. UTC
GCC 10.0.1 gives me this warning when building KVM:

  warning: ‘nr_pages_avail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  2442 |  for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {

It should not happen, but silent it.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 virt/kvm/kvm_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Gavin Shan May 4, 2020, 11:20 p.m. UTC | #1
On 5/5/20 5:05 AM, Peter Xu wrote:
> GCC 10.0.1 gives me this warning when building KVM:
> 
>    warning: ‘nr_pages_avail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
>    2442 |  for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {
> 
> It should not happen, but silent it.
> 
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>   virt/kvm/kvm_main.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 

Reviewed-by: Gavin Shan <gshan@redhat.com>

> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 74bdb7bf3295..2da293885a67 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -2425,7 +2425,7 @@ static int __kvm_gfn_to_hva_cache_init(struct kvm_memslots *slots,
>   	gfn_t start_gfn = gpa >> PAGE_SHIFT;
>   	gfn_t end_gfn = (gpa + len - 1) >> PAGE_SHIFT;
>   	gfn_t nr_pages_needed = end_gfn - start_gfn + 1;
> -	gfn_t nr_pages_avail;
> +	gfn_t nr_pages_avail = 0;
>   
>   	/* Update ghc->generation before performing any error checks. */
>   	ghc->generation = slots->generation;
>
Sean Christopherson May 5, 2020, 1:39 a.m. UTC | #2
On Mon, May 04, 2020 at 03:05:26PM -0400, Peter Xu wrote:
> GCC 10.0.1 gives me this warning when building KVM:
> 
>   warning: ‘nr_pages_avail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
>   2442 |  for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {
> 
> It should not happen, but silent it.

Heh, third times a charm?  This has been reported and proposed twice
before[1][2].  Are you using any custom compiler flags?  E.g. -O3 is known
to cause false positives with -Wmaybe-uninitialized.

If we do end up killing this warning, I'd still prefer to use
uninitialized_var() over zero-initializing the variable.

[1] https://lkml.kernel.org/r/20200218184756.242904-1-oupton@google.com
[2] https://bugzilla.kernel.org/show_bug.cgi?id=207173

> 
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  virt/kvm/kvm_main.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 74bdb7bf3295..2da293885a67 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -2425,7 +2425,7 @@ static int __kvm_gfn_to_hva_cache_init(struct kvm_memslots *slots,
>  	gfn_t start_gfn = gpa >> PAGE_SHIFT;
>  	gfn_t end_gfn = (gpa + len - 1) >> PAGE_SHIFT;
>  	gfn_t nr_pages_needed = end_gfn - start_gfn + 1;
> -	gfn_t nr_pages_avail;
> +	gfn_t nr_pages_avail = 0;
>  
>  	/* Update ghc->generation before performing any error checks. */
>  	ghc->generation = slots->generation;
> -- 
> 2.26.2
>
Peter Xu May 5, 2020, 2:12 p.m. UTC | #3
On Mon, May 04, 2020 at 06:39:29PM -0700, Sean Christopherson wrote:
> On Mon, May 04, 2020 at 03:05:26PM -0400, Peter Xu wrote:
> > GCC 10.0.1 gives me this warning when building KVM:
> > 
> >   warning: ‘nr_pages_avail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> >   2442 |  for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {
> > 
> > It should not happen, but silent it.
> 
> Heh, third times a charm?  This has been reported and proposed twice
> before[1][2].  Are you using any custom compiler flags?  E.g. -O3 is known
> to cause false positives with -Wmaybe-uninitialized.

No, what I did was only upgrading to Fedora 32 (which will auto-upgrade GCC),
so it should be using the default params of whatever provided.

> 
> If we do end up killing this warning, I'd still prefer to use
> uninitialized_var() over zero-initializing the variable.
> 
> [1] https://lkml.kernel.org/r/20200218184756.242904-1-oupton@google.com
> [2] https://bugzilla.kernel.org/show_bug.cgi?id=207173

OK, I didn't know this is a known problem and discussions going on.  But I
guess it would be good to address this sooner because it could become a common
warning very soon after people upgrades gcc.

Thanks,
Sean Christopherson May 11, 2020, 4:05 p.m. UTC | #4
+cc a few other people that have reported this at one time or another.

On Tue, May 05, 2020 at 10:12:45AM -0400, Peter Xu wrote:
> On Mon, May 04, 2020 at 06:39:29PM -0700, Sean Christopherson wrote:
> > On Mon, May 04, 2020 at 03:05:26PM -0400, Peter Xu wrote:
> > > GCC 10.0.1 gives me this warning when building KVM:
> > > 
> > >   warning: ‘nr_pages_avail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> > >   2442 |  for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {
> > > 
> > > It should not happen, but silent it.
> > 
> > Heh, third times a charm?  This has been reported and proposed twice
> > before[1][2].  Are you using any custom compiler flags?  E.g. -O3 is known
> > to cause false positives with -Wmaybe-uninitialized.
> 
> No, what I did was only upgrading to Fedora 32 (which will auto-upgrade GCC),
> so it should be using the default params of whatever provided.
> 
> > 
> > If we do end up killing this warning, I'd still prefer to use
> > uninitialized_var() over zero-initializing the variable.
> > 
> > [1] https://lkml.kernel.org/r/20200218184756.242904-1-oupton@google.com
> > [2] https://bugzilla.kernel.org/show_bug.cgi?id=207173
> 
> OK, I didn't know this is a known problem and discussions going on.  But I
> guess it would be good to address this sooner because it could become a common
> warning very soon after people upgrades gcc.

Ya, others are hitting this as well.  It's especially painful with the
existence of KVM_WERROR.

Paolo, any preference on how to resolve this?  It would appear GCC 10 got
"smarter".
Oliver Upton May 11, 2020, 5:04 p.m. UTC | #5
On Mon, May 11, 2020 at 9:05 AM Sean Christopherson
<sean.j.christopherson@intel.com> wrote:
>
> +cc a few other people that have reported this at one time or another.
>
> On Tue, May 05, 2020 at 10:12:45AM -0400, Peter Xu wrote:
> > On Mon, May 04, 2020 at 06:39:29PM -0700, Sean Christopherson wrote:
> > > On Mon, May 04, 2020 at 03:05:26PM -0400, Peter Xu wrote:
> > > > GCC 10.0.1 gives me this warning when building KVM:
> > > >
> > > >   warning: ‘nr_pages_avail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> > > >   2442 |  for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {
> > > >
> > > > It should not happen, but silent it.
> > >
> > > Heh, third times a charm?  This has been reported and proposed twice
> > > before[1][2].  Are you using any custom compiler flags?  E.g. -O3 is known
> > > to cause false positives with -Wmaybe-uninitialized.
> >
> > No, what I did was only upgrading to Fedora 32 (which will auto-upgrade GCC),
> > so it should be using the default params of whatever provided.
> >
> > >
> > > If we do end up killing this warning, I'd still prefer to use
> > > uninitialized_var() over zero-initializing the variable.
> > >
> > > [1] https://lkml.kernel.org/r/20200218184756.242904-1-oupton@google.com
> > > [2] https://bugzilla.kernel.org/show_bug.cgi?id=207173
> >
> > OK, I didn't know this is a known problem and discussions going on.  But I
> > guess it would be good to address this sooner because it could become a common
> > warning very soon after people upgrades gcc.
>
> Ya, others are hitting this as well.  It's especially painful with the
> existence of KVM_WERROR.
>
> Paolo, any preference on how to resolve this?  It would appear GCC 10 got
> "smarter".

Seems that doing absolutely nothing was the fix here :) See:

78a5255ffb6a ("Stop the ad-hoc games with -Wno-maybe-initialized")

--
Thanks,
Oliver
Sean Christopherson May 11, 2020, 5:10 p.m. UTC | #6
On Mon, May 11, 2020 at 10:04:29AM -0700, Oliver Upton wrote:
> On Mon, May 11, 2020 at 9:05 AM Sean Christopherson
> <sean.j.christopherson@intel.com> wrote:
> >
> > +cc a few other people that have reported this at one time or another.
> >
> > On Tue, May 05, 2020 at 10:12:45AM -0400, Peter Xu wrote:
> > > On Mon, May 04, 2020 at 06:39:29PM -0700, Sean Christopherson wrote:
> > > > On Mon, May 04, 2020 at 03:05:26PM -0400, Peter Xu wrote:
> > > > > GCC 10.0.1 gives me this warning when building KVM:
> > > > >
> > > > >   warning: ‘nr_pages_avail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> > > > >   2442 |  for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {
> > > > >
> > > > > It should not happen, but silent it.
> > > >
> > > > Heh, third times a charm?  This has been reported and proposed twice
> > > > before[1][2].  Are you using any custom compiler flags?  E.g. -O3 is known
> > > > to cause false positives with -Wmaybe-uninitialized.
> > >
> > > No, what I did was only upgrading to Fedora 32 (which will auto-upgrade GCC),
> > > so it should be using the default params of whatever provided.
> > >
> > > >
> > > > If we do end up killing this warning, I'd still prefer to use
> > > > uninitialized_var() over zero-initializing the variable.
> > > >
> > > > [1] https://lkml.kernel.org/r/20200218184756.242904-1-oupton@google.com
> > > > [2] https://bugzilla.kernel.org/show_bug.cgi?id=207173
> > >
> > > OK, I didn't know this is a known problem and discussions going on.  But I
> > > guess it would be good to address this sooner because it could become a common
> > > warning very soon after people upgrades gcc.
> >
> > Ya, others are hitting this as well.  It's especially painful with the
> > existence of KVM_WERROR.
> >
> > Paolo, any preference on how to resolve this?  It would appear GCC 10 got
> > "smarter".
> 
> Seems that doing absolutely nothing was the fix here :) See:
> 
> 78a5255ffb6a ("Stop the ad-hoc games with -Wno-maybe-initialized")

Ah, perfect!  Thanks Oliver.

Patch
diff mbox series

diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 74bdb7bf3295..2da293885a67 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -2425,7 +2425,7 @@  static int __kvm_gfn_to_hva_cache_init(struct kvm_memslots *slots,
 	gfn_t start_gfn = gpa >> PAGE_SHIFT;
 	gfn_t end_gfn = (gpa + len - 1) >> PAGE_SHIFT;
 	gfn_t nr_pages_needed = end_gfn - start_gfn + 1;
-	gfn_t nr_pages_avail;
+	gfn_t nr_pages_avail = 0;
 
 	/* Update ghc->generation before performing any error checks. */
 	ghc->generation = slots->generation;