Commit 73bb753d authored by Tristan Burgess's avatar Tristan Burgess Committed by Paolo Bonzini
Browse files

memory: Make operations using MemoryRegionIoeventfd struct pass by pointer.



This changes the functions memory_region_ioeventfd_equal, memory_region_ioeventfd_before, and their callers,
to pass the MemoryRegionIoeventfd struct via pointer, instead of directly passing the struct. This saves on stack space
and is considered safe practice.

Signed-off-by: default avatarTristan Burgess <tburgessdev@gmail.com>
Message-Id: <20180529030445.177867-1-tburgessdev@gmail.com>
Fixes: Launchpad bug 1720969
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 12fb0ac0
Loading
Loading
Loading
Loading
+22 −22
Original line number Diff line number Diff line
@@ -172,38 +172,38 @@ struct MemoryRegionIoeventfd {
    EventNotifier *e;
};

static bool memory_region_ioeventfd_before(MemoryRegionIoeventfd a,
                                           MemoryRegionIoeventfd b)
static bool memory_region_ioeventfd_before(MemoryRegionIoeventfd *a,
                                           MemoryRegionIoeventfd *b)
{
    if (int128_lt(a.addr.start, b.addr.start)) {
    if (int128_lt(a->addr.start, b->addr.start)) {
        return true;
    } else if (int128_gt(a.addr.start, b.addr.start)) {
    } else if (int128_gt(a->addr.start, b->addr.start)) {
        return false;
    } else if (int128_lt(a.addr.size, b.addr.size)) {
    } else if (int128_lt(a->addr.size, b->addr.size)) {
        return true;
    } else if (int128_gt(a.addr.size, b.addr.size)) {
    } else if (int128_gt(a->addr.size, b->addr.size)) {
        return false;
    } else if (a.match_data < b.match_data) {
    } else if (a->match_data < b->match_data) {
        return true;
    } else  if (a.match_data > b.match_data) {
    } else  if (a->match_data > b->match_data) {
        return false;
    } else if (a.match_data) {
        if (a.data < b.data) {
    } else if (a->match_data) {
        if (a->data < b->data) {
            return true;
        } else if (a.data > b.data) {
        } else if (a->data > b->data) {
            return false;
        }
    }
    if (a.e < b.e) {
    if (a->e < b->e) {
        return true;
    } else if (a.e > b.e) {
    } else if (a->e > b->e) {
        return false;
    }
    return false;
}

static bool memory_region_ioeventfd_equal(MemoryRegionIoeventfd a,
                                          MemoryRegionIoeventfd b)
static bool memory_region_ioeventfd_equal(MemoryRegionIoeventfd *a,
                                          MemoryRegionIoeventfd *b)
{
    return !memory_region_ioeventfd_before(a, b)
        && !memory_region_ioeventfd_before(b, a);
@@ -788,8 +788,8 @@ static void address_space_add_del_ioeventfds(AddressSpace *as,
    while (iold < fds_old_nb || inew < fds_new_nb) {
        if (iold < fds_old_nb
            && (inew == fds_new_nb
                || memory_region_ioeventfd_before(fds_old[iold],
                                                  fds_new[inew]))) {
                || memory_region_ioeventfd_before(&fds_old[iold],
                                                  &fds_new[inew]))) {
            fd = &fds_old[iold];
            section = (MemoryRegionSection) {
                .fv = address_space_to_flatview(as),
@@ -801,8 +801,8 @@ static void address_space_add_del_ioeventfds(AddressSpace *as,
            ++iold;
        } else if (inew < fds_new_nb
                   && (iold == fds_old_nb
                       || memory_region_ioeventfd_before(fds_new[inew],
                                                         fds_old[iold]))) {
                       || memory_region_ioeventfd_before(&fds_new[inew],
                                                         &fds_old[iold]))) {
            fd = &fds_new[inew];
            section = (MemoryRegionSection) {
                .fv = address_space_to_flatview(as),
@@ -1440,7 +1440,7 @@ static bool memory_region_dispatch_write_eventfds(MemoryRegion *mr,
        ioeventfd.match_data = mr->ioeventfds[i].match_data;
        ioeventfd.e = mr->ioeventfds[i].e;

        if (memory_region_ioeventfd_equal(ioeventfd, mr->ioeventfds[i])) {
        if (memory_region_ioeventfd_equal(&ioeventfd, &mr->ioeventfds[i])) {
            event_notifier_set(ioeventfd.e);
            return true;
        }
@@ -2210,7 +2210,7 @@ void memory_region_add_eventfd(MemoryRegion *mr,
    }
    memory_region_transaction_begin();
    for (i = 0; i < mr->ioeventfd_nb; ++i) {
        if (memory_region_ioeventfd_before(mrfd, mr->ioeventfds[i])) {
        if (memory_region_ioeventfd_before(&mrfd, &mr->ioeventfds[i])) {
            break;
        }
    }
@@ -2245,7 +2245,7 @@ void memory_region_del_eventfd(MemoryRegion *mr,
    }
    memory_region_transaction_begin();
    for (i = 0; i < mr->ioeventfd_nb; ++i) {
        if (memory_region_ioeventfd_equal(mrfd, mr->ioeventfds[i])) {
        if (memory_region_ioeventfd_equal(&mrfd, &mr->ioeventfds[i])) {
            break;
        }
    }