On 12.06.2025 11:29, Jiqian Chen wrote: > --- a/xen/drivers/vpci/vpci.c > +++ b/xen/drivers/vpci/vpci.c > @@ -83,6 +83,88 @@ static int assign_virtual_sbdf(struct pci_dev *pdev) > > #endif /* CONFIG_HAS_VPCI_GUEST_SUPPORT */ > > +static struct vpci_register *vpci_get_register(struct vpci *vpci, > + unsigned int offset, > + unsigned int size) > +{ > + struct vpci_register *r; > + > + ASSERT(spin_is_locked(&vpci->lock)); > + > + list_for_each_entry ( r, &vpci->handlers, node ) > + { > + if ( r->offset == offset && r->size == size ) > + return r; > + > + if ( offset <= r->offset ) > + break; > + } > + > + return NULL; > +} > + > +static struct vpci_register *vpci_get_previous_cap_register( > + struct vpci *vpci, unsigned int offset) > +{ > + uint32_t next; > + struct vpci_register *r; > + > + if ( offset < 0x40 ) > + { > + ASSERT_UNREACHABLE(); > + return NULL; > + } > + > + for ( r = vpci_get_register(vpci, PCI_CAPABILITY_LIST, 1); r; > + r = next >= 0x40 ? vpci_get_register(vpci, > + next + PCI_CAP_LIST_NEXT, 1) > + : NULL ) > + { > + next = (uint32_t)(uintptr_t)r->private; > + ASSERT(next == (uintptr_t)r->private); > + if ( next == offset ) > + break; > + } > + > + return r; > +} > + > +static int vpci_capability_hide(struct pci_dev *pdev, unsigned int cap)
I really only noticed it in the next patch, but the question applies equally here: Any reason the first parameter isn't pointer-to-const? Jan