From: Evgeny Voevodin <e.voevodin@samsung.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Kyungmin Park <kyungmin.park@samsung.com>,
Dmitry Solodkiy <d.solodkiy@samsung.com>,
qemu-devel@nongnu.org, Anthony Liguori <aliguori@us.ibm.com>
Subject: Re: [Qemu-devel] Virtio-pci issue
Date: Thu, 24 May 2012 07:18:33 +0400 [thread overview]
Message-ID: <4FBDA889.4000907@samsung.com> (raw)
In-Reply-To: <CAJSP0QVX-9nh6ChKPRqRLFxMZ5n+obzVwCOPZdL5+H4pfTZFuQ@mail.gmail.com>
On 23.05.2012 17:36, Stefan Hajnoczi wrote:
> On Thu, May 10, 2012 at 12:24 PM, Evgeny Voevodin
> <e.voevodin@samsung.com> wrote:
>> Hi, guys!
>>
>> While trying to refactor virtio-pci as continuation of my RFC
>> virtio-mmio patch series:
>> http://lists.gnu.org/archive/html/qemu-devel/2012-04/msg03665.html
>> I've faced a problem.
>>
>> I try to create virtio-pci-transport device to which virtio-blk,net,etc
>> could be connected. Any board could create as many transport devices as
>> it wants and then any actual back-end could be connected to that
>> transport through a provided virtio-pci.x bus. virtio-pci-transport is
>> derived from TYPE_PCI_DEVICE.
>> The problem is that if I create transport devices and wish to connect
>> back-ends to them, each back-end would set its properties to the class,
>> not to the object.
>> For example, vendor_id property is different for blk and net, but since
>> they are both have same class PCIDeviceClass, they share that property.
>>
>> How to deal with this?
> I think you are asking how a virtio-pci adapter can have device_id
> value that depends on its VirtioDevice (not known at compile-time and
> different between virtio-pci adapters).
>
> You should be able to set the PCI device ID at runtime:
>
> pci_config_set_device_id(pci_dev->config, device_id_from_virtio_device);
>
> Take a look at hw/pci.c:pci_qdev_init(). The order of operations is important:
>
> 1. do_pci_register_device() sets up default values from PCIDeviceClass.
> 2. ->init(pci_dev) gets called, this is where your init code gets executed.
>
> So it should be fine to set the PCI device ID at runtime from
> VirtioPCIAdapter::init().
>
> Stefan
>
Oh, thanks a lot, Stefan! As soon as I have a time to continue
refactoring, I'll check this functionality.
And also there is another problem that I've faced with. It is the
ability to plug as many pci back-ends as board wants.
I mean that if for each back-end board should create a transport, then
user have to know maximum number of transport instances
created by board. In the case of mmio transport I think that it's a
correct behaviour, but for pci transport seems not.
--
Kind regards,
Evgeny Voevodin,
Leading Software Engineer,
ASWG, Moscow R&D center, Samsung Electronics
e-mail: e.voevodin@samsung.com
next prev parent reply other threads:[~2012-05-24 3:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-10 11:24 [Qemu-devel] Virtio-pci issue Evgeny Voevodin
2012-05-23 13:36 ` Stefan Hajnoczi
2012-05-24 3:18 ` Evgeny Voevodin [this message]
2012-05-28 12:37 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4FBDA889.4000907@samsung.com \
--to=e.voevodin@samsung.com \
--cc=aliguori@us.ibm.com \
--cc=d.solodkiy@samsung.com \
--cc=kyungmin.park@samsung.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.