qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCHv3 08/13] qemu: add support for resizing regions


From: Glauber Costa
Subject: Re: [Qemu-devel] [PATCHv3 08/13] qemu: add support for resizing regions
Date: Tue, 9 Jun 2009 14:36:21 -0300
User-agent: Jack Bauer

On Fri, Jun 05, 2009 at 01:23:55PM +0300, Michael S. Tsirkin wrote:
> Make it possible to resize PCI regions.  This will be used by virtio
> with MSI-X, where the region size depends on whether MSI-X is enabled,
> and can change across load/save.
> 
> Signed-off-by: Michael S. Tsirkin <address@hidden>
> ---
>  hw/pci.c |   54 ++++++++++++++++++++++++++++++++++++------------------
>  hw/pci.h |    3 +++
>  2 files changed, 39 insertions(+), 18 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index ed011b5..042a216 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -392,6 +392,41 @@ void pci_register_io_region(PCIDevice *pci_dev, int 
> region_num,
>      *(uint32_t *)(pci_dev->wmask + addr) = cpu_to_le32(wmask);
>  }
>  
> +static void pci_unmap_region(PCIDevice *d, PCIIORegion *r)
> +{
> +    if (r->addr == -1)
> +        return;
> +    if (r->type & PCI_ADDRESS_SPACE_IO) {
> +        int class;
> +        /* NOTE: specific hack for IDE in PC case:
> +           only one byte must be mapped. */
> +        class = pci_get_word(d->config + PCI_CLASS_DEVICE);
> +        if (class == 0x0101 && r->size == 4) {
> +            isa_unassign_ioport(r->addr + 2, 1);
> +        } else {
> +            isa_unassign_ioport(r->addr, r->size);
> +        }
> +    } else {
> +        cpu_register_physical_memory(pci_to_cpu_addr(r->addr),
> +                                     r->size,
> +                                     IO_MEM_UNASSIGNED);
> +        qemu_unregister_coalesced_mmio(r->addr, r->size);
> +    }
> +}
> +
this is a good cleanup...

> +void pci_resize_io_region(PCIDevice *pci_dev, int region_num,
> +                          uint32_t size)
> +{
> +
> +    PCIIORegion *r = &pci_dev->io_regions[region_num];
> +    if (r->size == size)
> +        return;
> +    r->size = size;
> +    pci_unmap_region(pci_dev, r);
> +    r->addr = -1;
> +    pci_update_mappings(pci_dev);
> +}
> +
but the only user of this one seem to be commented out, and later removed.
Why is this needed?






reply via email to

[Prev in Thread] Current Thread [Next in Thread]