All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Yuji Shimada <shimada-yxb@necst.nec.co.jp>,
	Xen Devel <xen-devel@lists.xensource.com>,
	QEMU-devel <qemu-devel@nongnu.org>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [Qemu-devel] [PATCH V8 RESEND 4/8] pci.c: Add pci_check_bar_overlap
Date: Mon, 19 Mar 2012 15:15:30 +0200	[thread overview]
Message-ID: <20120319131529.GB4591@redhat.com> (raw)
In-Reply-To: <1331916862-20504-5-git-send-email-anthony.perard@citrix.com>

On Fri, Mar 16, 2012 at 04:54:18PM +0000, Anthony PERARD wrote:
> From: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
> 
> This function helps Xen PCI Passthrough device to check for overlap.
> 
> Signed-off-by: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

It seems that what's called for here really is
using the new memory region infrastructure.
That handles overlap etc nicely.

That said, I don't mind, but would prefer to
keep this mess outside the pci core. See below.

> ---
>  hw/pci.c |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  hw/pci.h |    5 +++++
>  2 files changed, 55 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 38e1de5..f950b4e 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -1992,6 +1992,56 @@ MemoryRegion *pci_address_space_io(PCIDevice *dev)
>      return dev->bus->address_space_io;
>  }
>  
> +/* This function

Comment blocks start with /* */

> checks if an io_region overlap an io_region from another

overlaps

> + * device.  The io_region to check is provide with (addr, size and type)

provided

> + * A callback can be provide and will be called for every region that is

provided

> + * overlapped.
> + * The return value indicate if the region is overlappsed */

indicates


> +bool pci_check_bar_overlap(PCIDevice *device,
> +                           pcibus_t addr, pcibus_t size, uint8_t type,
> +                           void (*c)(void *o, const PCIDevice *d, int index),
> +                           void *opaque)

IMO this is inlikely to be needed by anyone except Xen.
How about a generic pci_foreach_device and let Xen
implement the hacks internally.

> +{
> +    PCIBus *bus = device->bus;
> +    int i, j;
> +    bool rc = false;
> +
> +    for (i = 0; i < ARRAY_SIZE(bus->devices); i++) {
> +        PCIDevice *d = bus->devices[i];
> +        if (!d) {
> +            continue;
> +        }
> +
> +        if (d->devfn == device->devfn) {
> +            continue;
> +        }
> +
> +        /* xxx: This ignores bridges. */
> +        for (j = 0; j < PCI_NUM_REGIONS; j++) {
> +            PCIIORegion *r = &d->io_regions[j];
> +
> +            if (!r->size) {
> +                continue;
> +            }
> +            if ((type & PCI_BASE_ADDRESS_SPACE_IO)
> +                != (r->type & PCI_BASE_ADDRESS_SPACE_IO)) {
> +                continue;
> +            }
> +
> +            if (ranges_overlap(addr, size, r->addr, r->size)) {
> +                if (c) {
> +                    c(opaque, d, j);
> +                    rc = true;
> +                } else {
> +                    return true;
> +                }
> +            }
> +        }
> +    }
> +
> +    return rc;
> +}
> +
>  static void pci_device_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *k = DEVICE_CLASS(klass);
> diff --git a/hw/pci.h b/hw/pci.h
> index 4f19fdb..cbd04e1 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -628,4 +628,9 @@ extern const VMStateDescription vmstate_pci_device;
>      .offset     = vmstate_offset_pointer(_state, _field, PCIDevice), \
>  }
>  
> +bool pci_check_bar_overlap(PCIDevice *dev,
> +                           pcibus_t addr, pcibus_t size, uint8_t type,
> +                           void (*c)(void *o, const PCIDevice *d, int index),
> +                           void *opaque);
> +
>  #endif
> -- 
> Anthony PERARD

WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Yuji Shimada <shimada-yxb@necst.nec.co.jp>,
	Xen Devel <xen-devel@lists.xensource.com>,
	QEMU-devel <qemu-devel@nongnu.org>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [PATCH V8 RESEND 4/8] pci.c: Add pci_check_bar_overlap
Date: Mon, 19 Mar 2012 15:15:30 +0200	[thread overview]
Message-ID: <20120319131529.GB4591@redhat.com> (raw)
In-Reply-To: <1331916862-20504-5-git-send-email-anthony.perard@citrix.com>

On Fri, Mar 16, 2012 at 04:54:18PM +0000, Anthony PERARD wrote:
> From: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
> 
> This function helps Xen PCI Passthrough device to check for overlap.
> 
> Signed-off-by: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

It seems that what's called for here really is
using the new memory region infrastructure.
That handles overlap etc nicely.

That said, I don't mind, but would prefer to
keep this mess outside the pci core. See below.

> ---
>  hw/pci.c |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  hw/pci.h |    5 +++++
>  2 files changed, 55 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 38e1de5..f950b4e 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -1992,6 +1992,56 @@ MemoryRegion *pci_address_space_io(PCIDevice *dev)
>      return dev->bus->address_space_io;
>  }
>  
> +/* This function

Comment blocks start with /* */

> checks if an io_region overlap an io_region from another

overlaps

> + * device.  The io_region to check is provide with (addr, size and type)

provided

> + * A callback can be provide and will be called for every region that is

provided

> + * overlapped.
> + * The return value indicate if the region is overlappsed */

indicates


> +bool pci_check_bar_overlap(PCIDevice *device,
> +                           pcibus_t addr, pcibus_t size, uint8_t type,
> +                           void (*c)(void *o, const PCIDevice *d, int index),
> +                           void *opaque)

IMO this is inlikely to be needed by anyone except Xen.
How about a generic pci_foreach_device and let Xen
implement the hacks internally.

> +{
> +    PCIBus *bus = device->bus;
> +    int i, j;
> +    bool rc = false;
> +
> +    for (i = 0; i < ARRAY_SIZE(bus->devices); i++) {
> +        PCIDevice *d = bus->devices[i];
> +        if (!d) {
> +            continue;
> +        }
> +
> +        if (d->devfn == device->devfn) {
> +            continue;
> +        }
> +
> +        /* xxx: This ignores bridges. */
> +        for (j = 0; j < PCI_NUM_REGIONS; j++) {
> +            PCIIORegion *r = &d->io_regions[j];
> +
> +            if (!r->size) {
> +                continue;
> +            }
> +            if ((type & PCI_BASE_ADDRESS_SPACE_IO)
> +                != (r->type & PCI_BASE_ADDRESS_SPACE_IO)) {
> +                continue;
> +            }
> +
> +            if (ranges_overlap(addr, size, r->addr, r->size)) {
> +                if (c) {
> +                    c(opaque, d, j);
> +                    rc = true;
> +                } else {
> +                    return true;
> +                }
> +            }
> +        }
> +    }
> +
> +    return rc;
> +}
> +
>  static void pci_device_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *k = DEVICE_CLASS(klass);
> diff --git a/hw/pci.h b/hw/pci.h
> index 4f19fdb..cbd04e1 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -628,4 +628,9 @@ extern const VMStateDescription vmstate_pci_device;
>      .offset     = vmstate_offset_pointer(_state, _field, PCIDevice), \
>  }
>  
> +bool pci_check_bar_overlap(PCIDevice *dev,
> +                           pcibus_t addr, pcibus_t size, uint8_t type,
> +                           void (*c)(void *o, const PCIDevice *d, int index),
> +                           void *opaque);
> +
>  #endif
> -- 
> Anthony PERARD

  parent reply	other threads:[~2012-03-19 13:15 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-16 16:54 [Qemu-devel] [PATCH V8 RESEND 0/8] Xen PCI Passthrough Anthony PERARD
2012-03-16 16:54 ` Anthony PERARD
2012-03-16 16:54 ` [Qemu-devel] [PATCH V8 RESEND 1/8] pci_ids: Add INTEL_82599_VF id Anthony PERARD
2012-03-16 16:54   ` Anthony PERARD
2012-03-19 11:50   ` [Qemu-devel] " Stefano Stabellini
2012-03-19 11:50     ` Stefano Stabellini
2012-03-19 16:54     ` [Qemu-devel] " Anthony PERARD
2012-03-19 16:54       ` Anthony PERARD
2012-05-12  1:43       ` [Qemu-devel] [Xen-devel] " Konrad Rzeszutek Wilk
2012-05-12  1:43         ` Konrad Rzeszutek Wilk
2012-05-14 10:52         ` [Qemu-devel] [Xen-devel] " Anthony PERARD
2012-05-14 10:52           ` Anthony PERARD
2012-03-16 16:54 ` [Qemu-devel] [PATCH V8 RESEND 2/8] configure: Introduce --enable-xen-pci-passthrough Anthony PERARD
2012-03-16 16:54   ` Anthony PERARD
2012-03-19 11:51   ` [Qemu-devel] " Stefano Stabellini
2012-03-19 11:51     ` Stefano Stabellini
2012-05-12  1:42   ` [Qemu-devel] [Xen-devel] " Konrad Rzeszutek Wilk
2012-05-12  1:42     ` Konrad Rzeszutek Wilk
2012-05-14 10:49     ` [Qemu-devel] [Xen-devel] " Anthony PERARD
2012-05-14 10:49       ` Anthony PERARD
2012-05-16 11:15       ` [Qemu-devel] " Konrad Rzeszutek Wilk
2012-05-16 11:15         ` Konrad Rzeszutek Wilk
2012-03-16 16:54 ` [Qemu-devel] [PATCH V8 RESEND 3/8] Introduce HostPCIDevice to access a pci device on the host Anthony PERARD
2012-03-16 16:54   ` Anthony PERARD
2012-03-19 11:53   ` [Qemu-devel] " Stefano Stabellini
2012-03-19 11:53     ` Stefano Stabellini
2012-03-16 16:54 ` [Qemu-devel] [PATCH V8 RESEND 4/8] pci.c: Add pci_check_bar_overlap Anthony PERARD
2012-03-16 16:54   ` Anthony PERARD
2012-03-19 11:55   ` [Qemu-devel] " Stefano Stabellini
2012-03-19 11:55     ` Stefano Stabellini
2012-03-19 13:15   ` Michael S. Tsirkin [this message]
2012-03-19 13:15     ` Michael S. Tsirkin
2012-03-19 17:22     ` [Qemu-devel] " Anthony PERARD
2012-03-19 17:22       ` Anthony PERARD
2012-03-16 16:54 ` [Qemu-devel] [PATCH V8 RESEND 5/8] Introduce Xen PCI Passthrough, qdevice (1/3) Anthony PERARD
2012-03-16 16:54   ` Anthony PERARD
2012-03-19 12:00   ` [Qemu-devel] " Stefano Stabellini
2012-03-19 12:00     ` Stefano Stabellini
2012-05-12  1:53   ` [Qemu-devel] [Xen-devel] " Konrad Rzeszutek Wilk
2012-05-12  1:53     ` Konrad Rzeszutek Wilk
2012-03-16 16:54 ` [Qemu-devel] [PATCH V8 RESEND 6/8] Introduce Xen PCI Passthrough, PCI config space helpers (2/3) Anthony PERARD
2012-03-16 16:54   ` Anthony PERARD
2012-03-19 12:01   ` [Qemu-devel] " Stefano Stabellini
2012-03-19 12:01     ` Stefano Stabellini
2012-03-16 16:54 ` [Qemu-devel] [PATCH V8 RESEND 7/8] Introduce apic-msidef.h Anthony PERARD
2012-03-16 16:54   ` Anthony PERARD
2012-03-19 12:04   ` [Qemu-devel] " Stefano Stabellini
2012-03-19 12:04     ` Stefano Stabellini
2012-03-16 16:54 ` [Qemu-devel] [PATCH V8 RESEND 8/8] Introduce Xen PCI Passthrough, MSI (3/3) Anthony PERARD
2012-03-16 16:54   ` Anthony PERARD
2012-03-19 12:04   ` [Qemu-devel] " Stefano Stabellini
2012-03-19 12:04     ` Stefano Stabellini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120319131529.GB4591@redhat.com \
    --to=mst@redhat.com \
    --cc=anthony.perard@citrix.com \
    --cc=qemu-devel@nongnu.org \
    --cc=shimada-yxb@necst.nec.co.jp \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.