On 03/07/2012 02:51 PM, Amos Kong wrote:
> > > +
> > > + new_bus = kmemdup(bus, sizeof(*bus) + ((bus->dev_count - 1) *
> > > + sizeof(struct kvm_io_range)), GFP_KERNEL);
> > > + if (!new_bus)
> > > + return -ENOMEM;
> > > +
> > > + new_bus->dev_count--;
> > > + /* copy last entry of bus->range to deleted entry spot if
> > > + deleted entry isn't the last entry of bus->range */
> > > + if (i != bus->dev_count - 1) {
> >
> > The check is unneeded - if they compare equal, the copy is a no-op.
>
>
> In kvm_io_bus_unregister_dev(), we need to delete one entry from original bus
> array.
> so the allocated new bus array only has $N - 1 entries, ($N is the entry
> number of original bus array)
>
> If i equals to bus->dev_count - 1, then the entry which is need to be deleted
> is the last entry of original bus array.
> and the entry isn't copied to new bus array, so we don't need to do anything,
> sort isn't necessary.
It's actually wrong to avoid the copy like I suggested, since this isn't
an in-place delete, and we don't have space for the last entry.
btw you don't need to sort at all. Instead do
memcpy(new_bus->range, bus->range, i * sizeof)
memcpy(new_bus->range + i, bus->range + i + 1, new_bus->dev_count - i
* sizeof)
--
error compiling committee.c: too many arguments to function
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html