[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 2/2] xen/pci: replace call to is_memory_hole to pci_check_bar
Hi Julien, > On 6 Sep 2022, at 10:53 am, Julien Grall <julien@xxxxxxx> wrote: > > > > On 06/09/2022 10:39, Rahul Singh wrote: >> Hi Julien, >>> On 3 Sep 2022, at 8:18 am, Julien Grall <julien@xxxxxxx> wrote: >>> >>> Hi Rahul, >>> >>> On 01/09/2022 10:29, Rahul Singh wrote: >>>> is_memory_hole was implemented for x86 and not for ARM when introduced. >>>> Replace is_memory_hole call to pci_check_bar as function should check >>>> if device BAR is in defined memory range. Also, add an implementation >>>> for ARM which is required for PCI passthrough. >>>> On x86, pci_check_bar will call is_memory_hole which will check if BAR >>>> is not overlapping with any memory region defined in the memory map. >>>> On ARM, pci_check_bar will go through the host bridge ranges and check >>>> if the BAR is in the range of defined ranges. >>>> Signed-off-by: Rahul Singh <rahul.singh@xxxxxxx> >>>> --- >>>> Changes in v3: >>>> - fix minor comments >>>> --- >>>> xen/arch/arm/include/asm/pci.h | 2 ++ >>>> xen/arch/arm/pci/pci-host-common.c | 43 ++++++++++++++++++++++++++++++ >>>> xen/arch/x86/include/asm/pci.h | 10 +++++++ >>>> xen/drivers/passthrough/pci.c | 8 +++--- >>>> 4 files changed, 59 insertions(+), 4 deletions(-) >>>> diff --git a/xen/arch/arm/include/asm/pci.h >>>> b/xen/arch/arm/include/asm/pci.h >>>> index 80a2431804..8cb46f6b71 100644 >>>> --- a/xen/arch/arm/include/asm/pci.h >>>> +++ b/xen/arch/arm/include/asm/pci.h >>>> @@ -126,6 +126,8 @@ int pci_host_iterate_bridges_and_count(struct domain >>>> *d, >>>> int pci_host_bridge_mappings(struct domain *d); >>>> +bool pci_check_bar(const struct pci_dev *pdev, mfn_t start, mfn_t end); >>>> + >>>> #else /*!CONFIG_HAS_PCI*/ >>>> struct arch_pci_dev { }; >>>> diff --git a/xen/arch/arm/pci/pci-host-common.c >>>> b/xen/arch/arm/pci/pci-host-common.c >>>> index 89ef30028e..0eb121666d 100644 >>>> --- a/xen/arch/arm/pci/pci-host-common.c >>>> +++ b/xen/arch/arm/pci/pci-host-common.c >>>> @@ -24,6 +24,16 @@ >>>> #include <asm/setup.h> >>>> +/* >>>> + * struct to hold pci device bar. >>>> + */ >>> >>> I find this comment a bit misleading. What you are storing is a >>> candidate region. IOW, this may or may not be a PCI device bar. >>> >>> Given the current use below, I would rename the structure to something more >>> specific like: pdev_bar_check. >> Ack. >>> >>>> +struct pdev_bar >>>> +{ >>>> + mfn_t start; >>>> + mfn_t end; >>>> + bool is_valid; >>>> +}; >>>> + >>>> /* >>>> * List for all the pci host bridges. >>>> */ >>>> @@ -363,6 +373,39 @@ int __init pci_host_bridge_mappings(struct domain *d) >>>> return 0; >>>> } >>>> +static int is_bar_valid(const struct dt_device_node *dev, >>>> + uint64_t addr, uint64_t len, void *data) >>>> +{ >>>> + struct pdev_bar *bar_data = data; >>>> + unsigned long s = mfn_x(bar_data->start); >>>> + unsigned long e = mfn_x(bar_data->end); >>>> + >>>> + if ( (s <= e) && (s >= PFN_DOWN(addr)) && (e <= PFN_UP(addr + len - >>>> 1)) ) >>> >>> AFAICT 's' and 'e' are provided by pci_check_bar() and will never change. >>> So can we move the check 's <= e' outside of the callback? >> Yes, We can move the check outside the callback but I feel that if we check >> here then it is more >> readable that we are checking for all possible values in one statement. Let >> me know your view on this. > The readability is really a matter of taste here. But my point is more on the > number of time a check is done. > > It seems pointless to do the same check N times when you know the values are > not going to change. Admittedly, the operation is fast (this is a comparison) > and N should be small (?). > > However, I think it raises the question on where do you draw the line? > > Personally, I think all invariant should be checked outside of callbacks. So > the line is very clear. > I will move the check for "s <=e” outside the callback and will send it for review. Regards, Rahul
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |