Skip to content

Commit

Permalink
kvm/ppc/mpic: Eliminate mmio_mapped
Browse files Browse the repository at this point in the history
We no longer need to keep track of this now that MPIC destruction
always happens either during VM destruction (after MMIO has been
destroyed) or during a failed creation (before the fd has been exposed
to userspace, and thus before the MMIO region could have been
registered).

Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
  • Loading branch information
Scott Wood authored and Alexander Graf committed Apr 26, 2013
1 parent 07f0a7b commit 9119491
Showing 1 changed file with 1 addition and 28 deletions.
29 changes: 1 addition & 28 deletions arch/powerpc/kvm/mpic.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,6 @@ struct openpic {
struct kvm_io_device mmio;
struct list_head mmio_regions;
atomic_t users;
bool mmio_mapped;

gpa_t reg_base;
spinlock_t lock;
Expand Down Expand Up @@ -1428,24 +1427,13 @@ static int kvm_mpic_write(struct kvm_io_device *this, gpa_t addr,
return ret;
}

static void kvm_mpic_dtor(struct kvm_io_device *this)
{
struct openpic *opp = container_of(this, struct openpic, mmio);

opp->mmio_mapped = false;
}

static const struct kvm_io_device_ops mpic_mmio_ops = {
.read = kvm_mpic_read,
.write = kvm_mpic_write,
.destructor = kvm_mpic_dtor,
};

static void map_mmio(struct openpic *opp)
{
BUG_ON(opp->mmio_mapped);
opp->mmio_mapped = true;

kvm_iodevice_init(&opp->mmio, &mpic_mmio_ops);

kvm_io_bus_register_dev(opp->kvm, KVM_MMIO_BUS,
Expand All @@ -1455,10 +1443,7 @@ static void map_mmio(struct openpic *opp)

static void unmap_mmio(struct openpic *opp)
{
if (opp->mmio_mapped) {
opp->mmio_mapped = false;
kvm_io_bus_unregister_dev(opp->kvm, KVM_MMIO_BUS, &opp->mmio);
}
kvm_io_bus_unregister_dev(opp->kvm, KVM_MMIO_BUS, &opp->mmio);
}

static int set_base_addr(struct openpic *opp, struct kvm_device_attr *attr)
Expand Down Expand Up @@ -1637,18 +1622,6 @@ static void mpic_destroy(struct kvm_device *dev)
{
struct openpic *opp = dev->private;

if (opp->mmio_mapped) {
/*
* Normally we get unmapped by kvm_io_bus_destroy(),
* which happens before the VCPUs release their references.
*
* Thus, we should only get here if no VCPUs took a reference
* to us in the first place.
*/
WARN_ON(opp->nb_cpus != 0);
unmap_mmio(opp);
}

dev->kvm->arch.mpic = NULL;
kfree(opp);
}
Expand Down

0 comments on commit 9119491

Please sign in to comment.