|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 09/11] xen/arm: Setup MMIO range trap handlers for hardware domain
Hi Oleksandr,
> On 17 Sep 2021, at 7:13 am, Oleksandr Andrushchenko
> <Oleksandr_Andrushchenko@xxxxxxxx> wrote:
>
> Hi, Rahul!
>
> On 15.09.21 23:33, Stefano Stabellini wrote:
>> On Wed, 15 Sep 2021, Rahul Singh wrote:
>>> Hi Oleksandr, Stefano,
>>>
>>>> On 15 Sep 2021, at 6:30 am, Oleksandr Andrushchenko
>>>> <Oleksandr_Andrushchenko@xxxxxxxx> wrote:
>>>>
>>>> Hi, Rahul!
>>>>
>>>> On 14.09.21 17:24, Oleksandr Andrushchenko wrote:
>>>>> }
>>>>>>> +static int pci_ecam_register_mmio_handler(struct domain *d,
>>>>>>> + struct pci_host_bridge
>>>>>>> *bridge,
>>>>>>> + const struct
>>>>>>> mmio_handler_ops *ops)
>>>>>>> +{
>>>>>>> + struct pci_config_window *cfg = bridge->sysdata;
>>>>>>> +
>>>>>>> + register_mmio_handler(d, ops, cfg->phys_addr, cfg->size, NULL);
>>>>>>> + return 0;
>>>>>>> +}
>>>>>> Given that struct pci_config_window is generic (it is not specific to
>>>>>> one bridge), I wonder if we even need the .register_mmio_handler
>>>>>> callback here.
>>>>>>
>>>>>> In fact,pci_host_bridge->sysdata doesn't even need to be a void*, it
>>>>>> could be a struct pci_config_window*, right?
>>>>> Rahul, this actually may change your series.
>>>>>
>>>>> Do you think we can do that?
>>>>>
>>>> This is the only change requested that left unanswered by now.
>>>>
>>>> Will it be possible that you change the API accordingly, so I can
>>>>
>>>> implement as Stefano suggests?
>>> We need pci_host_bridge->sysdata as void* in case we need to implement the
>>> new non-ecam PCI controller in XEN.
>>> Please have a look once in Linux code[1] how bridge->sysdata will be used.
>>> struct pci_config_window is used only for
>>> ecam supported host controller. Different PCI host controller will have
>>> different PCI interface to access the PCI controller.
>>>
>>> [1]
>>> https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pci/controller/pcie-rcar-host.c*n309__;Iw!!GF_29dbcQIUBPA!kjkv6KIlvXOEgVaS6BNPRo0gyABihhO0XmNHRPFJaFAGhhTEuK1mIsWqPs0cXEipzkT_MmA-Eg$
>>> [git[.]kernel[.]org]
>>>
>>> I think we need bridge->sysdata in future to implement the new PCI
>>> controller.
>> In my opinion the pci_config_window is too important of an information
>> to be left inside an opaque pointer, especially when the info under
>> pci_config_window is both critical and vendor-neutral.
>>
>> My preference would be something like this:
>>
>>
>> diff --git a/xen/include/asm-arm/pci.h b/xen/include/asm-arm/pci.h
>> index 9c28a4bdc4..c80d846da3 100644
>> --- a/xen/include/asm-arm/pci.h
>> +++ b/xen/include/asm-arm/pci.h
>> @@ -55,7 +55,6 @@ struct pci_config_window {
>> uint8_t busn_start;
>> uint8_t busn_end;
>> void __iomem *win;
>> - const struct pci_ecam_ops *ops;
>> };
>>
>> /*
>> @@ -68,7 +67,8 @@ struct pci_host_bridge {
>> uint16_t segment; /* Segment number */
>> u8 bus_start; /* Bus start of this bridge. */
>> u8 bus_end; /* Bus end of this bridge. */
>> - void *sysdata; /* Pointer to the config space window*/
>> + struct pci_config_window* cfg; /* Pointer to the bridge config window
>> */
>> + void *sysdata; /* Pointer to bridge private data */
>> const struct pci_ops *ops;
>> };
>>
>>
>> As a reference the attached patch builds. However, I had to remove const
>> where struct pci_ecam_ops *ops is used.
>
> I'd like to know which route we go with this as this is now the last
>
> thing which stops me from sending v2 of this series.
I will modify the code as per Stefano request and will send the next version.
Regards,
Rahul
>
> Thank you,
>
> Oleksandr
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |