diff options
| author | Michael S. Tsirkin <mst@redhat.com> | 2012-06-03 11:34:08 +0300 | 
|---|---|---|
| committer | Avi Kivity <avi@redhat.com> | 2012-06-06 15:26:12 +0300 | 
| commit | 79f702a6d18c75760c68202007265b2310d6f44e (patch) | |
| tree | 43cf82edcc521f2442927cfb8351816c6517e13f /fs/btrfs/async-thread.c | |
| parent | a737f256bf14adf94920aa70d150ab4dcd145109 (diff) | |
KVM: disable uninitialized var warning
I see this in 3.5-rc1:
arch/x86/kvm/mmu.c: In function ‘kvm_test_age_rmapp’:
arch/x86/kvm/mmu.c:1271: warning: ‘iter.desc’ may be used uninitialized in this function
The line in question was introduced by commit
1e3f42f03c38c29c1814199a6f0a2f01b919ea3f
 static int kvm_test_age_rmapp(struct kvm *kvm, unsigned long *rmapp,
                              unsigned long data)
 {
-       u64 *spte;
+       u64 *sptep;
+       struct rmap_iterator iter;   <- line 1271
        int young = 0;
        /*
The reason I think is that the compiler assumes that
the rmap value could be 0, so
static u64 *rmap_get_first(unsigned long rmap, struct rmap_iterator
*iter)
{
        if (!rmap)
                return NULL;
        if (!(rmap & 1)) {
                iter->desc = NULL;
                return (u64 *)rmap;
        }
        iter->desc = (struct pte_list_desc *)(rmap & ~1ul);
        iter->pos = 0;
        return iter->desc->sptes[iter->pos];
}
will not initialize iter.desc, but the compiler isn't
smart enough to see that
        for (sptep = rmap_get_first(*rmapp, &iter); sptep;
             sptep = rmap_get_next(&iter)) {
will immediately exit in this case.
I checked by adding
        if (!*rmapp)
                goto out;
on top which is clearly equivalent but disables the warning.
This patch uses uninitialized_var to disable the warning without
increasing code size.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'fs/btrfs/async-thread.c')
0 files changed, 0 insertions, 0 deletions
