All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <Andrew.Cooper3@citrix.com>,
	"boris.ostrovsky@oracle.com" <boris.ostrovsky@oracle.com>,
	Roger Pau Monne <roger.pau@citrix.com>,
	Jan Beulich <jbeulich@suse.com>
Subject: Re: [PATCH v2 22/30] xen/x86: support PVHv2 Dom0 BAR remapping
Date: Mon, 3 Oct 2016 10:10:44 +0000	[thread overview]
Message-ID: <4bfac2f9375e4cee884ec2cbbd4fa5bd@AMSPEX02CL03.citrite.net> (raw)
In-Reply-To: <1474991845-27962-23-git-send-email-roger.pau@citrix.com>

> -----Original Message-----
> From: Roger Pau Monne [mailto:roger.pau@citrix.com]
> Sent: 27 September 2016 16:57
> To: xen-devel@lists.xenproject.org
> Cc: konrad.wilk@oracle.com; boris.ostrovsky@oracle.com; Roger Pau Monne
> <roger.pau@citrix.com>; Paul Durrant <Paul.Durrant@citrix.com>; Jan
> Beulich <jbeulich@suse.com>; Andrew Cooper
> <Andrew.Cooper3@citrix.com>
> Subject: [PATCH v2 22/30] xen/x86: support PVHv2 Dom0 BAR remapping
> 
> Add handlers to detect attemps from a PVHv2 Dom0 to change the position
> of the PCI BARs and properly remap them.
> 
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> Cc: Paul Durrant <paul.durrant@citrix.com>
> Cc: Jan Beulich <jbeulich@suse.com>
> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
> ---
>  xen/arch/x86/hvm/io.c         |   2 +
>  xen/drivers/passthrough/pci.c | 307
> ++++++++++++++++++++++++++++++++++++++++++
>  xen/include/asm-x86/hvm/io.h  |  19 +++
>  xen/include/xen/pci.h         |   3 +
>  4 files changed, 331 insertions(+)
> 
> diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c index
> 7de1de3..4db0266 100644
> --- a/xen/arch/x86/hvm/io.c
> +++ b/xen/arch/x86/hvm/io.c
> @@ -862,6 +862,8 @@ static int hvm_pt_add_register(struct hvm_pt_device
> *dev,  }
> 
>  static struct hvm_pt_handler_init *hwdom_pt_handlers[] = {
> +    &hvm_pt_bar_init,
> +    &hvm_pt_vf_bar_init,
>  };
> 
>  int hwdom_add_device(struct pci_dev *pdev) diff --git
> a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c index
> 6d831dd..60c9e74 100644
> --- a/xen/drivers/passthrough/pci.c
> +++ b/xen/drivers/passthrough/pci.c
> @@ -633,6 +633,313 @@ static int pci_size_bar(unsigned int seg, unsigned
> int bus, unsigned int slot,
>      return 0;
>  }
> 
> +static bool bar_reg_is_vf(uint32_t real_offset, uint32_t
> +handler_offset) {
> +    if ( real_offset - handler_offset == PCI_SRIOV_BAR )
> +        return true;
> +    else
> +        return false;
> +}
> +

Return the bool expression rather than the if-then-else?

> +static int bar_reg_init(struct hvm_pt_device *s,
> +                        struct hvm_pt_reg_handler *handler,
> +                        uint32_t real_offset, uint32_t *data) {
> +    uint8_t seg, bus, slot, func;
> +    uint64_t addr, size;
> +    uint32_t val;
> +    unsigned int index = handler->offset / 4;
> +    bool vf = bar_reg_is_vf(real_offset, handler->offset);
> +    struct hvm_pt_bar *bars = (vf ? s->vf_bars : s->bars);
> +    int num_bars = (vf ? PCI_SRIOV_NUM_BARS : s->num_bars);
> +    int rc;
> +
> +    if ( index >= num_bars )
> +    {
> +        *data = HVM_PT_INVALID_REG;
> +        return 0;
> +    }
> +
> +    seg = s->pdev->seg;
> +    bus = s->pdev->bus;
> +    slot = PCI_SLOT(s->pdev->devfn);
> +    func = PCI_FUNC(s->pdev->devfn);
> +    val = pci_conf_read32(seg, bus, slot, func, real_offset);
> +
> +    if ( index > 0 && bars[index - 1].type == HVM_PT_BAR_MEM64_LO )
> +        bars[index].type = HVM_PT_BAR_MEM64_HI;
> +    else if ( (val & PCI_BASE_ADDRESS_SPACE) ==
> PCI_BASE_ADDRESS_SPACE_IO )
> +    {
> +        bars[index].type = HVM_PT_BAR_UNUSED;
> +    }
> +    else if ( (val & PCI_BASE_ADDRESS_MEM_TYPE_MASK) ==
> +              PCI_BASE_ADDRESS_MEM_TYPE_64 )
> +        bars[index].type = HVM_PT_BAR_MEM64_LO;
> +    else
> +        bars[index].type = HVM_PT_BAR_MEM32;
> +
> +    if ( bars[index].type == HVM_PT_BAR_MEM32 ||
> +         bars[index].type == HVM_PT_BAR_MEM64_LO )
> +    {
> +        /* Size the BAR and map it. */
> +        rc = pci_size_bar(seg, bus, slot, func, real_offset - handler->offset,
> +                          num_bars, &index, &addr, &size);
> +        if ( rc )
> +        {
> +            printk_pdev(s->pdev, XENLOG_ERR, "unable to size BAR#%d\n",
> +                        index);
> +            return rc;
> +        }
> +
> +        if ( size == 0 )
> +            bars[index].type = HVM_PT_BAR_UNUSED;
> +        else
> +        {
> +            printk_pdev(s->pdev, XENLOG_DEBUG,
> +                        "Mapping BAR#%u: %#lx size: %u\n", index, addr, size);
> +            rc = modify_mmio_11(s->pdev->domain, PFN_DOWN(addr),
> +                                DIV_ROUND_UP(size, PAGE_SIZE), true);
> +            if ( rc )
> +            {
> +                printk_pdev(s->pdev, XENLOG_ERR,
> +                            "failed to map BAR#%d into memory map: %d\n",
> +                            index, rc);
> +                return rc;
> +            }
> +        }
> +    }
> +
> +    *data = bars[index].type == HVM_PT_BAR_UNUSED ?
> HVM_PT_INVALID_REG : val;
> +    return 0;
> +}
> +
> +/* Only allow writes to check the size of the BARs */ static int
> +allow_bar_write(struct hvm_pt_bar *bar, struct hvm_pt_reg *reg,
> +                           struct pci_dev *pdev, uint32_t val) {
> +    uint32_t mask;
> +
> +    if ( bar->type == HVM_PT_BAR_MEM64_HI )
> +        mask = ~0;
> +    else
> +        mask = (uint32_t) PCI_BASE_ADDRESS_MEM_MASK;
> +
> +    if ( val != ~0 && (val & mask) != (reg->val.dword & mask) )
> +    {
> +        printk_pdev(pdev, XENLOG_ERR,
> +                "changing the position of the BARs is not yet supported: %#x\n",
> +                    val);

This doesn't seem to quite tally with commit comment. Can BARs be re-programmed or not?

> +        return -EINVAL;
> +    }
> +
> +    return 0;
> +}
> +
> +static int bar_reg_write(struct hvm_pt_device *s, struct hvm_pt_reg *reg,
> +                         uint32_t *val, uint32_t dev_value, uint32_t
> +valid_mask) {
> +    int index = reg->handler->offset / 4;
> +
> +    return allow_bar_write(&s->bars[index], reg, s->pdev, *val); }
> +
> +static int vf_bar_reg_write(struct hvm_pt_device *s, struct hvm_pt_reg
> *reg,
> +                            uint32_t *val, uint32_t dev_value,
> +                            uint32_t valid_mask) {
> +    int index = reg->handler->offset / 4;
> +
> +    return allow_bar_write(&s->vf_bars[index], reg, s->pdev, *val); }
> +
> +/* BAR regs static information table */ static struct
> +hvm_pt_reg_handler bar_handler[] = {
> +    /* BAR 0 reg */
> +    /* mask of BAR need to be decided later, depends on IO/MEM type */
> +    {
> +        .offset     = 0,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = bar_reg_write,
> +    },
> +    /* BAR 1 reg */
> +    {
> +        .offset     = 4,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = bar_reg_write,
> +    },
> +    /* BAR 2 reg */
> +    {
> +        .offset     = 8,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = bar_reg_write,
> +    },
> +    /* BAR 3 reg */
> +    {
> +        .offset     = 12,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = bar_reg_write,
> +    },
> +    /* BAR 4 reg */
> +    {
> +        .offset     = 16,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = bar_reg_write,
> +    },
> +    /* BAR 5 reg */
> +    {
> +        .offset     = 20,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = bar_reg_write,
> +    },
> +    /* TODO: we should also trap accesses to the expansion ROM base
> address. */
> +    /* End. */
> +    {
> +        .size = 0,
> +    },
> +};
> +
> +static int bar_group_init(struct hvm_pt_device *dev,
> +                          struct hvm_pt_reg_group *group) {
> +    uint8_t seg, bus, slot, func;
> +
> +    seg = dev->pdev->seg;
> +    bus = dev->pdev->bus;
> +    slot = PCI_SLOT(dev->pdev->devfn);
> +    func = PCI_FUNC(dev->pdev->devfn);
> +    dev->htype = pci_conf_read8(seg, bus, slot, func, PCI_HEADER_TYPE) &
> 0x7f;
> +    switch ( dev->htype )
> +    {
> +    case PCI_HEADER_TYPE_NORMAL:
> +        group->size = 36;
> +        dev->num_bars = 6;
> +        break;
> +    case PCI_HEADER_TYPE_BRIDGE:
> +        group->size = 44;
> +        dev->num_bars = 2;
> +        break;
> +    default:
> +        printk_pdev(dev->pdev, XENLOG_ERR, "device type %#x not
> supported\n",
> +                    dev->htype);
> +        return -EINVAL;
> +    }
> +    group->base_offset = PCI_BASE_ADDRESS_0;
> +
> +    return 0;
> +}
> +
> +struct hvm_pt_handler_init hvm_pt_bar_init = {
> +    .handlers = bar_handler,
> +    .init = bar_group_init,
> +};
> +
> +/* BAR regs static information table */ static struct
> +hvm_pt_reg_handler vf_bar_handler[] = {
> +    /* BAR 0 reg */
> +    /* mask of BAR need to be decided later, depends on IO/MEM type */
> +    {
> +        .offset     = 0,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = vf_bar_reg_write,
> +    },
> +    /* BAR 1 reg */
> +    {
> +        .offset     = 4,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = vf_bar_reg_write,
> +    },
> +    /* BAR 2 reg */
> +    {
> +        .offset     = 8,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = vf_bar_reg_write,
> +    },
> +    /* BAR 3 reg */
> +    {
> +        .offset     = 12,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = vf_bar_reg_write,
> +    },
> +    /* BAR 4 reg */
> +    {
> +        .offset     = 16,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = vf_bar_reg_write,
> +    },
> +    /* BAR 5 reg */
> +    {
> +        .offset     = 20,
> +        .size       = 4,
> +        .init_val   = 0x00000000,
> +        .init       = bar_reg_init,
> +        .u.dw.write = vf_bar_reg_write,
> +    },
> +    /* End. */
> +    {
> +        .size = 0,
> +    },
> +};
> +
> +static int vf_bar_group_init(struct hvm_pt_device *dev,
> +                          struct hvm_pt_reg_group *group) {
> +    uint8_t seg, bus, slot, func;
> +    struct pci_dev *pdev = dev->pdev;
> +    int sr_offset;
> +    uint16_t ctrl;
> +
> +    seg = dev->pdev->seg;
> +    bus = dev->pdev->bus;
> +    slot = PCI_SLOT(dev->pdev->devfn);
> +    func = PCI_FUNC(dev->pdev->devfn);
> +
> +    sr_offset = pci_find_ext_capability(seg, bus, pdev->devfn,
> +                                        PCI_EXT_CAP_ID_SRIOV);
> +    if ( sr_offset == 0 )
> +        return -EINVAL;
> +
> +    printk_pdev(pdev, XENLOG_DEBUG, "found SR-IOV capabilities\n");
> +    ctrl = pci_conf_read16(seg, bus, slot, func, sr_offset + PCI_SRIOV_CTRL);
> +    if ( (ctrl & (PCI_SRIOV_CTRL_VFE | PCI_SRIOV_CTRL_MSE)) )
> +    {
> +        printk_pdev(pdev, XENLOG_ERR,
> +                    "SR-IOV functions already enabled (%#04x)\n", ctrl);
> +        return -EINVAL;
> +    }
> +
> +    group->base_offset = sr_offset + PCI_SRIOV_BAR;
> +    group->size = PCI_SRIOV_NUM_BARS * 4;
> +
> +    return 0;
> +}
> +
> +struct hvm_pt_handler_init hvm_pt_vf_bar_init = {
> +    .handlers = vf_bar_handler,
> +    .init = vf_bar_group_init,
> +};
> +
>  int pci_add_device(u16 seg, u8 bus, u8 devfn,
>                     const struct pci_dev_info *info, nodeid_t node)  { diff --git
> a/xen/include/asm-x86/hvm/io.h b/xen/include/asm-x86/hvm/io.h index
> 80f830d..25af036 100644
> --- a/xen/include/asm-x86/hvm/io.h
> +++ b/xen/include/asm-x86/hvm/io.h
> @@ -19,6 +19,7 @@
>  #ifndef __ASM_X86_HVM_IO_H__
>  #define __ASM_X86_HVM_IO_H__
> 
> +#include <xen/pci_regs.h>
>  #include <asm/hvm/vpic.h>
>  #include <asm/hvm/vioapic.h>
>  #include <public/hvm/ioreq.h>
> @@ -275,6 +276,16 @@ struct hvm_pt_msi {
>      bool_t mapped;       /* when pirq is mapped */
>  };
> 
> +struct hvm_pt_bar {
> +    uint32_t val;
> +    enum bar_type {
> +        HVM_PT_BAR_UNUSED,
> +        HVM_PT_BAR_MEM32,
> +        HVM_PT_BAR_MEM64_LO,
> +        HVM_PT_BAR_MEM64_HI,
> +    } type;
> +};
> +
>  /*
>   * Guest passed-through PCI device.
>   */
> @@ -289,6 +300,14 @@ struct hvm_pt_device {
>      /* MSI status. */
>      struct hvm_pt_msi msi;
> 
> +    /* PCI header type. */
> +    uint8_t htype;
> +
> +    /* BAR tracking. */
> +    int num_bars;
> +    struct hvm_pt_bar bars[6];
> +    struct hvm_pt_bar vf_bars[PCI_SRIOV_NUM_BARS];
> +
>      struct list_head register_groups;
>  };
> 
> diff --git a/xen/include/xen/pci.h b/xen/include/xen/pci.h index
> b21a891..51e0255 100644
> --- a/xen/include/xen/pci.h
> +++ b/xen/include/xen/pci.h
> @@ -174,4 +174,7 @@ int msixtbl_pt_register(struct domain *, struct pirq *,
> uint64_t gtable);  void msixtbl_pt_unregister(struct domain *, struct pirq *);
> void msixtbl_pt_cleanup(struct domain *d);
> 
> +extern struct hvm_pt_handler_init hvm_pt_bar_init; extern struct
> +hvm_pt_handler_init hvm_pt_vf_bar_init;
> +
>  #endif /* __XEN_PCI_H__ */
> --
> 2.7.4 (Apple Git-66)

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2016-10-03 10:10 UTC|newest]

Thread overview: 146+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-27 15:56 [PATCH v2 00/30] PVHv2 Dom0 Roger Pau Monne
2016-09-27 15:56 ` [PATCH v2 01/30] xen/x86: move setup of the VM86 TSS to the domain builder Roger Pau Monne
2016-09-28 15:35   ` Jan Beulich
2016-09-29 12:57     ` Roger Pau Monne
2016-09-27 15:56 ` [PATCH v2 02/30] xen/x86: remove XENFEAT_hvm_pirqs for PVHv2 guests Roger Pau Monne
2016-09-28 16:03   ` Jan Beulich
2016-09-29 14:17     ` Roger Pau Monne
2016-09-29 16:07       ` Jan Beulich
2016-09-27 15:56 ` [PATCH v2 03/30] xen/x86: fix parameters and return value of *_set_allocation functions Roger Pau Monne
2016-09-28  9:34   ` Tim Deegan
2016-09-29 10:39   ` Jan Beulich
2016-09-29 14:33     ` Roger Pau Monne
2016-09-29 16:09       ` Jan Beulich
2016-09-30 16:48   ` George Dunlap
2016-10-03  8:05   ` Paul Durrant
2016-10-06 11:33     ` Roger Pau Monne
2016-09-27 15:56 ` [PATCH v2 04/30] xen/x86: allow calling {sh/hap}_set_allocation with the idle domain Roger Pau Monne
2016-09-29 10:43   ` Jan Beulich
2016-09-29 14:37     ` Roger Pau Monne
2016-09-29 16:10       ` Jan Beulich
2016-09-30 16:56   ` George Dunlap
2016-09-30 16:56     ` George Dunlap
2016-09-27 15:57 ` [PATCH v2 05/30] xen/x86: assert that local_events_need_delivery is not called by " Roger Pau Monne
2016-09-29 10:45   ` Jan Beulich
2016-09-30  8:32     ` Roger Pau Monne
2016-09-30  8:59       ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 06/30] x86/paging: introduce paging_set_allocation Roger Pau Monne
2016-09-29 10:51   ` Jan Beulich
2016-09-29 14:51     ` Roger Pau Monne
2016-09-29 16:12       ` Jan Beulich
2016-09-29 16:57         ` Roger Pau Monne
2016-09-30 17:00   ` George Dunlap
2016-09-27 15:57 ` [PATCH v2 07/30] xen/x86: split the setup of Dom0 permissions to a function Roger Pau Monne
2016-09-29 13:47   ` Jan Beulich
2016-09-29 15:53     ` Roger Pau Monne
2016-09-27 15:57 ` [PATCH v2 08/30] xen/x86: do the PCI scan unconditionally Roger Pau Monne
2016-09-29 13:55   ` Jan Beulich
2016-09-29 15:11     ` Roger Pau Monne
2016-09-29 16:14       ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 09/30] x86/vtd: fix and simplify mapping RMRR regions Roger Pau Monne
2016-09-29 14:18   ` Jan Beulich
2016-09-30 11:27     ` Roger Pau Monne
2016-09-30 13:21       ` Jan Beulich
2016-09-30 15:02         ` Roger Pau Monne
2016-09-30 15:09           ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 10/30] xen/x86: allow the emulated APICs to be enbled for the hardware domain Roger Pau Monne
2016-09-29 14:26   ` Jan Beulich
2016-09-30 15:44     ` Roger Pau Monne
2016-09-27 15:57 ` [PATCH v2 11/30] xen/x86: split Dom0 build into PV and PVHv2 Roger Pau Monne
2016-09-30 15:03   ` Jan Beulich
2016-10-03 10:09     ` Roger Pau Monne
2016-10-04  6:54       ` Jan Beulich
2016-10-04  7:09         ` Andrew Cooper
2016-09-27 15:57 ` [PATCH v2 12/30] xen/x86: make print_e820_memory_map global Roger Pau Monne
2016-09-30 15:04   ` Jan Beulich
2016-10-03 16:23     ` Roger Pau Monne
2016-10-04  6:47       ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 13/30] xen: introduce a new format specifier to print sizes in human-readable form Roger Pau Monne
2016-09-28  8:24   ` Juergen Gross
2016-09-28 11:56     ` Roger Pau Monne
2016-09-28 12:01       ` Andrew Cooper
2016-10-03  8:36   ` Paul Durrant
2016-10-11 10:27   ` Roger Pau Monne
2016-09-27 15:57 ` [PATCH v2 14/30] xen/mm: add a ceil sufix to current page calculation routine Roger Pau Monne
2016-09-30 15:20   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 15/30] xen/x86: populate PVHv2 Dom0 physical memory map Roger Pau Monne
2016-09-30 15:52   ` Jan Beulich
2016-10-04  9:12     ` Roger Pau Monne
2016-10-04 11:16       ` Jan Beulich
2016-10-11 14:01         ` Roger Pau Monne
2016-10-12 11:51           ` Jan Beulich
2016-10-11 14:06     ` Roger Pau Monne
2016-10-12 11:58       ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 16/30] xen/x86: parse Dom0 kernel for PVHv2 Roger Pau Monne
2016-10-06 15:14   ` Jan Beulich
2016-10-11 15:02     ` Roger Pau Monne
2016-09-27 15:57 ` [PATCH v2 17/30] xen/x86: setup PVHv2 Dom0 CPUs Roger Pau Monne
2016-10-06 15:20   ` Jan Beulich
2016-10-12 11:06     ` Roger Pau Monne
2016-10-12 11:32       ` Andrew Cooper
2016-10-12 12:02       ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 18/30] xen/x86: setup PVHv2 Dom0 ACPI tables Roger Pau Monne
2016-10-06 15:40   ` Jan Beulich
2016-10-06 15:48     ` Andrew Cooper
2016-10-12 15:35     ` Roger Pau Monne
2016-10-12 15:55       ` Jan Beulich
2016-10-26 11:35         ` Roger Pau Monne
2016-10-26 14:10           ` Jan Beulich
2016-10-26 15:08             ` Roger Pau Monne
2016-10-26 15:16               ` Jan Beulich
2016-10-26 16:03                 ` Roger Pau Monne
2016-10-27  7:25                   ` Jan Beulich
2016-10-27 11:08                     ` Roger Pau Monne
2016-10-26 17:14                 ` Boris Ostrovsky
2016-10-27  7:27                   ` Jan Beulich
2016-10-27 11:13                   ` Roger Pau Monne
2016-10-27 11:25                     ` Jan Beulich
2016-10-27 13:51                     ` Boris Ostrovsky
2016-10-27 14:02                       ` Jan Beulich
2016-10-27 14:15                         ` Boris Ostrovsky
2016-10-27 14:30                           ` Jan Beulich
2016-10-27 14:40                             ` Boris Ostrovsky
2016-10-27 15:04                               ` Roger Pau Monne
2016-10-27 15:20                                 ` Jan Beulich
2016-10-27 15:37                                   ` Roger Pau Monne
2016-10-28 13:51                                 ` Boris Ostrovsky
2016-09-27 15:57 ` [PATCH v2 19/30] xen/dcpi: add a dpci passthrough handler for hardware domain Roger Pau Monne
2016-10-03  9:02   ` Paul Durrant
2016-10-06 14:31     ` Roger Pau Monne
2016-10-06 15:44   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 20/30] xen/x86: add the basic infrastructure to import QEMU passthrough code Roger Pau Monne
2016-10-03  9:54   ` Paul Durrant
2016-10-06 15:08     ` Roger Pau Monne
2016-10-06 15:52       ` Lars Kurth
2016-10-07  9:13       ` Jan Beulich
2016-10-06 15:47   ` Jan Beulich
2016-10-10 12:41   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 21/30] xen/pci: split code to size BARs from pci_add_device Roger Pau Monne
2016-10-06 16:00   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 22/30] xen/x86: support PVHv2 Dom0 BAR remapping Roger Pau Monne
2016-10-03 10:10   ` Paul Durrant [this message]
2016-10-06 15:25     ` Roger Pau Monne
2016-09-27 15:57 ` [PATCH v2 23/30] xen/x86: route legacy PCI interrupts to Dom0 Roger Pau Monne
2016-10-10 13:37   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 24/30] x86/vmsi: add MSI emulation for hardware domain Roger Pau Monne
2016-09-27 15:57 ` [PATCH v2 25/30] xen/x86: add all PCI devices to PVHv2 Dom0 Roger Pau Monne
2016-10-10 13:44   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 26/30] xen/x86: add PCIe emulation Roger Pau Monne
2016-10-03 10:46   ` Paul Durrant
2016-10-06 15:53     ` Roger Pau Monne
2016-10-10 13:57   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 27/30] x86/msixtbl: disable MSI-X intercepts for domains without an ioreq server Roger Pau Monne
2016-10-10 14:18   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 28/30] xen/x86: add MSI-X emulation to PVHv2 Dom0 Roger Pau Monne
2016-10-03 10:57   ` Paul Durrant
2016-10-06 15:58     ` Roger Pau Monne
2016-10-10 16:15   ` Jan Beulich
2016-09-27 15:57 ` [PATCH v2 29/30] xen/x86: allow PVHv2 to perform foreign memory mappings Roger Pau Monne
2016-09-30 17:36   ` George Dunlap
2016-10-10 14:21   ` Jan Beulich
2016-10-10 14:27     ` George Dunlap
2016-10-10 14:50       ` Jan Beulich
2016-10-10 14:58         ` George Dunlap
2016-09-27 15:57 ` [PATCH v2 30/30] xen: allow setting the store pfn HVM parameter Roger Pau Monne
2016-10-03 11:01   ` Paul Durrant
2016-09-28 12:22 ` [PATCH v2 00/30] PVHv2 Dom0 Roger Pau Monne

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=4bfac2f9375e4cee884ec2cbbd4fa5bd@AMSPEX02CL03.citrite.net \
    --to=paul.durrant@citrix.com \
    --cc=Andrew.Cooper3@citrix.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=jbeulich@suse.com \
    --cc=roger.pau@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /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.