Re: [Qemu-devel] [RFC PATCH 3/6] RAMBlock: Add a name field

Alex Williamson
2010-06-09T04:19:18Z

On Wed, 2010-06-09 at 03:54 +0100, Paul Brook wrote:
> > On 06/08/2010 09:30 PM, Paul Brook wrote:
> > >> The offset given to a block created via qemu_ram_alloc/map() is
> > >> arbitrary, let the caller specify a name so we can make a positive
> > >> match.
> > >>
> > >>
> > >> @@ -1924,7 +1925,9 @@ static int pci_add_option_rom(PCIDevice *pdev)
> > >> + snprintf(name, sizeof(name), "pci:%02x.%x.rom",
> > >> + PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
> > >> + pdev->rom_offset = qemu_ram_alloc(name, size);
> > >
> > > This looks pretty bogus. It should be associated with the device, rather
> > > than incorrectly trying to generate a globally unique name.
> >
> > Not all ram is associated with a device.
>
> Maybe not, but where it is we should be using that information.
> Absolute minimum we should be using the existing qdev address rather than
> inventing a new one. Duplicating this logic inside every device seems like a
> bad idea so I suggest identifying ram blocks by a (name, device) pair. For now
> we can allow a NULL device for system memory.

I'm not sure if this is what you're after, but what if we change it to
something like:

+ snprintf(name, sizeof(name), "%s.%02x.%x.rom-%s",
+ pdev->bus->qbus.name, PCI_SLOT(pdev->devfn),
+ PCI_FUNC(pdev->devfn), pdev->qdev.info->name);

This gives us things like "pci.0.03.0.rom-rtl8139". For pci-assign, we
can expand on the host details, such as:

+ snprintf(name, sizeof(name),
+ "%s.%02x.%x.bar%d-%s(%04x:%02x:%02x.%d)",
+ pci_dev->dev.bus->qbus.name,
+ PCI_SLOT(pci_dev->dev.devfn),
+ PCI_FUNC(pci_dev->dev.devfn), i,
+ pci_dev->dev.qdev.info->name,
+ pci_dev->host.seg, pci_dev->host.bus,
+ pci_dev->host.dev, pci_dev->host.func);

Giving us "pci.0.04.0.bar0-pci-assign(0000:01:10.0)". Anywhere closer?
Thanks,

Alex