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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to