qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] Give detailed info when pcie downstream port in


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH] Give detailed info when pcie downstream port init failed
Date: Mon, 30 Nov 2015 08:58:39 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Cao jin <address@hidden> writes:

> On 11/27/2015 10:22 PM, Markus Armbruster wrote:
>> Cao jin <address@hidden> writes:
>>
>>> Hi, Markus
>>>
>>> On 11/24/2015 06:08 PM, Markus Armbruster wrote:
> [...]
>>>
>>> and this will cover to output to the monitor, right?
>>
>> The device still implements the old PCIDeviceClass.init() instead of the
>> new .realize().  All devices need to be converted to .realize().  You
>> can help by converting this one.
>>
>> .init() reports errors with error_report() and returns 0 on success, -1
>> on failure.
>>
>> .realize() passes errors to its callers via its errp argument.
>>
>
> After reading you commit 28b07e7, I am aware of this;) Thanks very
> much for your detailed explanation:) I was always curious about why
> there are 2 function(.init() & .realize()) for initializing device,
> now I guess I get it: it has just .init() at first, because of error
> report issue, the .realize() is added to replace it, in order to pass
> the error above. Do I understand it right ?

Yes!

> If I understand it right, I see there are still devices initialization
> using .init() of DeviceClass & PCIDeviceClass, maybe I can help to
> convert some of these.

That would be helpful.  There are probably easy cases where you only
have to convert one device model at a time, and more complex cases,
where you have to convert supporting functions from error_report() to
error_set(), or convert device classes, not just individual devices.
Best try an easy one first.

>> Commit 28b07e7 can serve as example of how to convert a device to
>> realize().  There are many more.  The ones I did usually have "Convert
>> to realize()" in the commit message's first line.
>>
>
>> Regarding six error paths: I counted six places that return -1 directly
>> or goto err or similar.  Your patch adds a suitable error message to one
>> of them.  The other five need one, too.  You'll have to examine the
>> called functions to find out whether they report anything.  If they do,
>> they need to be first converted to pass an Error to their callers
>> instead.
>>
>
> It seems I have a misunderstanding about the "6 error paths":-[ I
> thought "error path" is a "error *reporting path*", like: fprintf the
> msg to stderr is a path, while output it via QMP is also a
> path. Because I did`t touch the code about -chardev/-mon/-monitor/-qmp
> before, so I spent 2 days reading the code:)

Welcome to the club :)

> Now I am cleared, Thanks you very much for the clarifying, Markus, I
> think this mistake won`t happen to me later;) And actually, I was
> already thinking add suitable error msg to each error path:)

Glad I could help you!



reply via email to

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