qemu-devel
[Top][All Lists]
Advanced

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

Re: Intended purpose of virtio-rng's QOM link "rng"?


From: Markus Armbruster
Subject: Re: Intended purpose of virtio-rng's QOM link "rng"?
Date: Tue, 21 Jul 2020 09:05:15 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)

"Michael S. Tsirkin" <mst@redhat.com> writes:

> On Mon, Jul 20, 2020 at 05:07:08PM +0200, Markus Armbruster wrote:
>> What is the intended purpose of object_property_set_link() in
>> 
>>     static void virtio_rng_pci_realize(VirtIOPCIProxy *vpci_dev, Error 
>> **errp)
>>     {
>>         VirtIORngPCI *vrng = VIRTIO_RNG_PCI(vpci_dev);
>>         DeviceState *vdev = DEVICE(&vrng->vdev);
>> 
>>         if (!qdev_realize(vdev, BUS(&vpci_dev->bus), errp)) {
>>             return;
>>         }
>> 
>>         object_property_set_link(OBJECT(vrng), "rng", 
>> OBJECT(vrng->vdev.conf.rng),
>>                                  NULL);
>>     }
>> 
>> ?
>> 
>> I'm asking because the function *always* fails.  I believe it's been
>> failing for years.
>> 
>> Similar code in the CCW buddy.  Also virtio-crypto-pci and
>> virtio-crypto-ccw link "cryptodev".
>> 
>> I tried moving it before qdev_realize(), where it doesn't fail.  But
>> then *I* fail, namely at finding any effect in QOM.
>
> I suspect that's because there's already a link with that name
> created by virtio core. Is that right?

Looks like it, in virtio_rng_device_realize():

    if (vrng->conf.rng == NULL) {
        ... make up @default_backend ...
        object_property_set_link(OBJECT(dev), "rng", default_backend,
                                 &error_abort);
    }

The object_property_set_link actually sets vrng->vdev.conf.rng (but it
takes quite some digging to see that; MICAHI[*] at work).

For virtio-crypto, the link is vcrypto->vdev.conf.cryptodev.
virtio_crypto_pci_realize() first checks its already set:

    if (vcrypto->vdev.conf.cryptodev == NULL) {
        error_setg(errp, "'cryptodev' parameter expects a valid object");
        return;
    }

>> If it's really useless, I'll send a patch to drop it.

All four are useless; will send patches.

>> If it has a use, tell me more, so I can test my patch to move it.

Thanks!


[*] Make It Complicated And Hide It.




reply via email to

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