On 2025/3/31 19:04, Roger Pau Monné wrote:
> On Mon, Mar 31, 2025 at 09:32:02AM +0000, Chen, Jiqian wrote:
>> So, I need to refactor the emulating PCI capability list codes of 
>> init_header() to serve
>> for all domain(dom0+domUs) firstly, since current codes only emulate PCI 
>> capability list for domUs, right?
> 
> Yes, that would be my understanding.  The current logic in
> init_header() needs to be expanded/generalized so it can be used for
> masking random PCI capabilities, plus adapted to work with PCIe
> capabilities also.
OK, I will try to refactor the logic in next version.
Hoping the next version will be more in line with your ideas.
Thanks!
> 
>>>
>>>>
>>>>>
>>>>>> +    /*
>>>>>> +     * Capabilities with high priority like MSI-X need to
>>>>>> +     * be initialized before header
>>>>>> +     */
>>>>>> +    rc = vpci_init_cap_with_priority(pdev, VPCI_PRIORITY_HIGH);
>>>>>> +    if ( rc )
>>>>>> +        goto out;
>>>>>
>>>>> I understand this is not introduced by this change, but I wonder if
>>>>> there could be a way to ditch the priority stuff for capabilities,
>>>>> specially now that we only have two "priorities": before or after PCI
>>>>> header initialization.
>>>> I have an idea, but it seems like a hake.
>>>> Can we add a flag(maybe name it "msix_initialized") to struct vpci{}?
>>>> Then in vpci_make_msix_hole(), we can first check that flag, if it is 
>>>> false, we return an error to let modify_decoding() directly return in the 
>>>> process of init_header.
>>>> And in the start of init_msix(), to set msix_initialized=true, in the end 
>>>> of init_msix(), to call modify_decoding() to setup p2m.
>>>> Then we can remove the priorities.
>>>
>>> Maybe the initialization of the MSI-X capability could be done after
>>> the header, and call vpci_make_msix_hole()?  There's a bit of
>>> redundancy here in that the BAR is first fully mapped, and then a hole
>>> is punched in place of the MSI-X related tables.  Seems like the
>>> easier option to break the depedency of init_msix() in being called
>>> ahead of init_header().
>> You mean the sequence should be:
>> vpci_init_header()
>> vpci_init_capability() // all capabilities
>> vpci_make_msix_hole()
>>
>> Right?
> 
> Yes, I think that would be my preference.  The call to
> vpci_make_msix_hole() should be inside of init_msix().
Got it, will do in next version.

> 
> Thanks, Roger.

-- 
Best regards,
Jiqian Chen.

Reply via email to