qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Re: [PATCH] pci: initialize header type register.


From: Anthony Liguori
Subject: Re: [Qemu-devel] Re: [PATCH] pci: initialize header type register.
Date: Mon, 08 Feb 2010 14:54:24 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091209 Fedora/3.0-4.fc12 Lightning/1.0pre Thunderbird/3.0

On 02/08/2010 02:34 PM, Michael S. Tsirkin wrote:
On Mon, Feb 08, 2010 at 02:32:26PM -0600, Anthony Liguori wrote:
On 02/08/2010 02:19 PM, Michael S. Tsirkin wrote:
On Mon, Feb 08, 2010 at 08:55:58PM +0100, Gerd Hoffmann wrote:

    Hi,


This still means we have two copies of same data
and need to maintain code that keeps them in sync,
even if that is called just at init time.

No.  There is nothing to keep in sync.  And there is no extra copy of data.

Today you have pci_set_*() calls somewhere in PCIDeviceInfo->init().
I'd like to see them replaced with PCIDeviceInfo->$field + setup in
common code.  The information that device $foo has vendor id 42 and
device id 4711 (and other properties) just moves from code to data.

We still need it in config array which is read by guest.
So that is two places.

There's no reason that we couldn't make the config space read like all
of the other spaces we support.  IOW, instead of using an array to store
the data, store each element in a structure, and have a big switch().

I'm not sure one's better than the other though TBH.
Yea. So the solution that needs less code is better.

I think just universally moving to a set of accessors that took a
PCIDevice as an argument in the form of pci_device_set_vendor() would be
a big improvement.

Regards,

Anthony Liguori
Not sure it's such a *big* improvement, but I won't object to that.

Sorry, but:

versatile_pci.c:    d->config[0x04] = 0x00;
versatile_pci.c:    d->config[0x05] = 0x00;
versatile_pci.c:    d->config[0x06] = 0x20;
versatile_pci.c:    d->config[0x07] = 0x02;

To:

pci_config_set_command(d, 0);
pci_config_set_status(d, PCI_STATUS_DEVSEL_MEDIUM | PCI_STATUS_66MHZ);

Is a huge improvement. I'm staring at a PCI config space diagram right now and I'm *still* not even sure I'm interpreting the versatile_pci code correctly :-)

Having a nice structure with:

{  .command = 0,
    .status = PCI_STATUS_DEVSEL_MEDIUM | PCI_STATUS_66MHZ,
}

would be nice but I can live without it.

Regards,

Anthony Liguori






reply via email to

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