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

Re: [PATCH V7 10/11] xen/arm: translate virtual PCI bus topology for guests




On 26.07.22 18:16, Jan Beulich wrote:

Hello Jan

On 19.07.2022 19:42, Oleksandr Tyshchenko wrote:
--- a/xen/arch/arm/vpci.c
+++ b/xen/arch/arm/vpci.c
@@ -41,6 +41,16 @@ static int vpci_mmio_read(struct vcpu *v, mmio_info_t *info,
      /* data is needed to prevent a pointer cast on 32bit */
      unsigned long data;
+ /*
+     * For the passed through devices we need to map their virtual SBDF
+     * to the physical PCI device being passed through.
+     */
+    if ( !bridge && !vpci_translate_virtual_device(v->domain, &sbdf) )
+    {
+        *r = ~0ul;
+        return 1;
+    }
I'm probably simply lacking specific Arm-side knowledge, but it strikes
me as odd that the need for translation would be dependent upon "bridge".


I am afraid I cannot answer immediately.

I will analyze that question and provide an answer later on.




--- a/xen/drivers/vpci/vpci.c
+++ b/xen/drivers/vpci/vpci.c
@@ -158,6 +158,32 @@ static void vpci_remove_virtual_device(const struct 
pci_dev *pdev)
      }
  }
+/*
+ * Find the physical device which is mapped to the virtual device
+ * and translate virtual SBDF to the physical one.
+ */
+bool vpci_translate_virtual_device(struct domain *d, pci_sbdf_t *sbdf)
+{
+    struct pci_dev *pdev;
const wherever possible please (i.e. likely also for the first function
parameter).


ok, will do



--- a/xen/include/xen/vpci.h
+++ b/xen/include/xen/vpci.h
@@ -276,6 +276,7 @@ static inline bool __must_check vpci_process_pending(struct 
vcpu *v)
  /* Notify vPCI that device is assigned/de-assigned to/from guest. */
  int vpci_assign_device(struct pci_dev *pdev);
  void vpci_deassign_device(struct pci_dev *pdev);
+bool vpci_translate_virtual_device(struct domain *d, pci_sbdf_t *sbdf);
  #else
  static inline int vpci_assign_device(struct pci_dev *pdev)
  {
@@ -285,6 +286,12 @@ static inline int vpci_assign_device(struct pci_dev *pdev)
  static inline void vpci_deassign_device(struct pci_dev *pdev)
  {
  };
+
+static inline bool vpci_translate_virtual_device(struct domain *d,
+                                                 pci_sbdf_t *sbdf)
+{
+    return false;
+}
Please don't add stubs which aren't really needed (which, afaict, is the
case for this one).


I assume, this is needed if HAS_VPCI is present, but HAS_VPCI_GUEST_SUPPORT is not. And the author added that stub specifically to drop a few "#ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT" from Arm's code.

Or I really missed something?




Jan

--
Regards,

Oleksandr Tyshchenko




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.