|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 03/11] x86/mmcfg: add handlers for the PVH Dom0 MMCFG areas
>>> On 19.09.17 at 17:29, <roger.pau@xxxxxxxxxx> wrote:
> +static int vpci_mmcfg_read(struct vcpu *v, unsigned long addr,
> + unsigned int len, unsigned long *data)
> +{
> + struct domain *d = v->domain;
> + const struct hvm_mmcfg *mmcfg;
> + unsigned int reg;
> + pci_sbdf_t sbdf;
> +
> + *data = ~0ul;
> +
> + read_lock(&d->arch.hvm_domain.mmcfg_lock);
> + mmcfg = vpci_mmcfg_find(d, addr);
> + if ( !mmcfg )
> + {
> + read_unlock(&d->arch.hvm_domain.mmcfg_lock);
> + return X86EMUL_OKAY;
> + }
With the lock dropped between accept() and read() (or write() below),
is it really appropriate to return OKAY here? The access again should
be forwarded to qemu, I would think.
> +int __hwdom_init register_vpci_mmcfg_handler(struct domain *d, paddr_t addr,
> + unsigned int start_bus,
> + unsigned int end_bus,
> + unsigned int seg)
> +{
> + struct hvm_mmcfg *mmcfg;
> +
> + ASSERT(is_hardware_domain(d));
> +
> + write_lock(&d->arch.hvm_domain.mmcfg_lock);
> + if ( vpci_mmcfg_find(d, addr) )
> + {
> + write_unlock(&d->arch.hvm_domain.mmcfg_lock);
> + return -EEXIST;
> + }
You check here for an exact match in starting address. Is it really
to reject just this special case, rather than doing a proper overlap
check?
> + mmcfg = xmalloc(struct hvm_mmcfg);
Whenever possible without too much trouble allocations should be done
with no lock held.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |