Hello Jan


On 27.07.22 20:54, Oleksandr wrote:

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.


Well, most likely that "valid" bridge pointer here is just used as an indicator of hwdom currently, so no need to perform virt->phys translation for sbdf.

You can see that domain_vpci_init() passes a valid value for hwdom and NULL for other domains when setting up vpci_mmio* callbacks.

Alternatively, I guess we could use "!is_hardware_domain(v->domain)" instead of "!bridge" in the first part of that check. Shall I?



--
Regards,

Oleksandr Tyshchenko


Reply via email to