* [Qemu-devel] [PULL 0/2] xen-20170920-tag
@ 2017-09-21 2:21 Stefano Stabellini
2017-09-21 2:22 ` [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build Stefano Stabellini
2017-09-21 9:55 ` [Qemu-devel] [PULL 0/2] xen-20170920-tag Peter Maydell
0 siblings, 2 replies; 5+ messages in thread
From: Stefano Stabellini @ 2017-09-21 2:21 UTC (permalink / raw)
To: peter.maydell, stefanha
Cc: sstabellini, stefanha, anthony.perard, xen-devel, qemu-devel
The following changes since commit b62b7ed0fc9c58e373b8946c9bd2e193be98dae6:
Merge remote-tracking branch 'remotes/gkurz/tags/for-upstream' into staging (2017-09-20 20:33:48 +0100)
are available in the git repository at:
git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-20170920-tag
for you to fetch changes up to a8036336609d2e184fc3543a4c439c0ba7d7f3a2:
xen/pt: allow QEMU to request MSI unmasking at bind time (2017-09-20 19:05:27 -0700)
----------------------------------------------------------------
Xen 2017/09/20
----------------------------------------------------------------
Olaf Hering (1):
xen-disk: use g_new0 to fix build
Roger Pau Monne (1):
xen/pt: allow QEMU to request MSI unmasking at bind time
hw/block/xen_disk.c | 2 +-
hw/xen/xen_pt.h | 1 +
hw/xen/xen_pt_config_init.c | 20 ++++++++++++++++++--
hw/xen/xen_pt_msi.c | 13 ++++++++++---
4 files changed, 30 insertions(+), 6 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build
2017-09-21 2:21 [Qemu-devel] [PULL 0/2] xen-20170920-tag Stefano Stabellini
@ 2017-09-21 2:22 ` Stefano Stabellini
2017-09-21 2:22 ` [Qemu-devel] [PULL 2/2] xen/pt: allow QEMU to request MSI unmasking at bind time Stefano Stabellini
2017-09-25 12:11 ` [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build Olaf Hering
2017-09-21 9:55 ` [Qemu-devel] [PULL 0/2] xen-20170920-tag Peter Maydell
1 sibling, 2 replies; 5+ messages in thread
From: Stefano Stabellini @ 2017-09-21 2:22 UTC (permalink / raw)
To: peter.maydell, stefanha
Cc: sstabellini, stefanha, anthony.perard, xen-devel, qemu-devel,
Olaf Hering
From: Olaf Hering <olaf@aepfle.de>
g_malloc0_n is available since glib-2.24. To allow build with older glib
versions use the generic g_new0, which is already used in many other
places in the code.
Fixes commit 3284fad728 ("xen-disk: add support for multi-page shared rings")
Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
---
hw/block/xen_disk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
index d42ed70..536e2ee 100644
--- a/hw/block/xen_disk.c
+++ b/hw/block/xen_disk.c
@@ -1232,7 +1232,7 @@ static int blk_connect(struct XenDevice *xendev)
return -1;
}
- domids = g_malloc0_n(blkdev->nr_ring_ref, sizeof(uint32_t));
+ domids = g_new0(uint32_t, blkdev->nr_ring_ref);
for (i = 0; i < blkdev->nr_ring_ref; i++) {
domids[i] = blkdev->xendev.dom;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL 2/2] xen/pt: allow QEMU to request MSI unmasking at bind time
2017-09-21 2:22 ` [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build Stefano Stabellini
@ 2017-09-21 2:22 ` Stefano Stabellini
2017-09-25 12:11 ` [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build Olaf Hering
1 sibling, 0 replies; 5+ messages in thread
From: Stefano Stabellini @ 2017-09-21 2:22 UTC (permalink / raw)
To: peter.maydell, stefanha
Cc: sstabellini, stefanha, anthony.perard, xen-devel, qemu-devel,
Roger Pau Monne
From: Roger Pau Monne <roger.pau@citrix.com>
When a MSI interrupt is bound to a guest using
xc_domain_update_msi_irq (XEN_DOMCTL_bind_pt_irq) the interrupt is
left masked by default.
This causes problems with guests that first configure interrupts and
clean the per-entry MSIX table mask bit and afterwards enable MSIX
globally. In such scenario the Xen internal msixtbl handlers would not
detect the unmasking of MSIX entries because vectors are not yet
registered since MSIX is not enabled, and vectors would be left
masked.
Introduce a new flag in the gflags field to signal Xen whether a MSI
interrupt should be unmasked after being bound.
This also requires to track the mask register for MSI interrupts, so
QEMU can also notify to Xen whether the MSI interrupt should be bound
masked or unmasked
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reported-by: Andreas Kinzler <hfp@posteo.de>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
---
hw/xen/xen_pt.h | 1 +
hw/xen/xen_pt_config_init.c | 20 ++++++++++++++++++--
hw/xen/xen_pt_msi.c | 13 ++++++++++---
3 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h
index 191d9ca..aa39a9a 100644
--- a/hw/xen/xen_pt.h
+++ b/hw/xen/xen_pt.h
@@ -180,6 +180,7 @@ typedef struct XenPTMSI {
uint32_t addr_hi; /* guest message upper address */
uint16_t data; /* guest message data */
uint32_t ctrl_offset; /* saved control offset */
+ uint32_t mask; /* guest mask bits */
int pirq; /* guest pirq corresponding */
bool initialized; /* when guest MSI is initialized */
bool mapped; /* when pirq is mapped */
diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c
index 1f04ec5..a3ce33e 100644
--- a/hw/xen/xen_pt_config_init.c
+++ b/hw/xen/xen_pt_config_init.c
@@ -1315,6 +1315,22 @@ static int xen_pt_msgdata_reg_write(XenPCIPassthroughState *s,
return 0;
}
+static int xen_pt_mask_reg_write(XenPCIPassthroughState *s, XenPTReg *cfg_entry,
+ uint32_t *val, uint32_t dev_value,
+ uint32_t valid_mask)
+{
+ int rc;
+
+ rc = xen_pt_long_reg_write(s, cfg_entry, val, dev_value, valid_mask);
+ if (rc) {
+ return rc;
+ }
+
+ s->msi->mask = *val;
+
+ return 0;
+}
+
/* MSI Capability Structure reg static information table */
static XenPTRegInfo xen_pt_emu_reg_msi[] = {
/* Next Pointer reg */
@@ -1393,7 +1409,7 @@ static XenPTRegInfo xen_pt_emu_reg_msi[] = {
.emu_mask = 0xFFFFFFFF,
.init = xen_pt_mask_reg_init,
.u.dw.read = xen_pt_long_reg_read,
- .u.dw.write = xen_pt_long_reg_write,
+ .u.dw.write = xen_pt_mask_reg_write,
},
/* Mask reg (if PCI_MSI_FLAGS_MASKBIT set, for 64-bit devices) */
{
@@ -1404,7 +1420,7 @@ static XenPTRegInfo xen_pt_emu_reg_msi[] = {
.emu_mask = 0xFFFFFFFF,
.init = xen_pt_mask_reg_init,
.u.dw.read = xen_pt_long_reg_read,
- .u.dw.write = xen_pt_long_reg_write,
+ .u.dw.write = xen_pt_mask_reg_write,
},
/* Pending reg (if PCI_MSI_FLAGS_MASKBIT set, for 32-bit devices) */
{
diff --git a/hw/xen/xen_pt_msi.c b/hw/xen/xen_pt_msi.c
index ff9a79f..6d1e3bd 100644
--- a/hw/xen/xen_pt_msi.c
+++ b/hw/xen/xen_pt_msi.c
@@ -24,6 +24,7 @@
#define XEN_PT_GFLAGS_SHIFT_DM 9
#define XEN_PT_GFLAGSSHIFT_DELIV_MODE 12
#define XEN_PT_GFLAGSSHIFT_TRG_MODE 15
+#define XEN_PT_GFLAGSSHIFT_UNMASKED 16
#define latch(fld) latch[PCI_MSIX_ENTRY_##fld / sizeof(uint32_t)]
@@ -155,7 +156,8 @@ static int msi_msix_update(XenPCIPassthroughState *s,
int pirq,
bool is_msix,
int msix_entry,
- int *old_pirq)
+ int *old_pirq,
+ bool masked)
{
PCIDevice *d = &s->dev;
uint8_t gvec = msi_vector(data);
@@ -171,6 +173,8 @@ static int msi_msix_update(XenPCIPassthroughState *s,
table_addr = s->msix->mmio_base_addr;
}
+ gflags |= masked ? 0 : (1u << XEN_PT_GFLAGSSHIFT_UNMASKED);
+
rc = xc_domain_update_msi_irq(xen_xc, xen_domid, gvec,
pirq, gflags, table_addr);
@@ -273,8 +277,10 @@ int xen_pt_msi_setup(XenPCIPassthroughState *s)
int xen_pt_msi_update(XenPCIPassthroughState *s)
{
XenPTMSI *msi = s->msi;
+
+ /* Current MSI emulation in QEMU only supports 1 vector */
return msi_msix_update(s, msi_addr64(msi), msi->data, msi->pirq,
- false, 0, &msi->pirq);
+ false, 0, &msi->pirq, msi->mask & 1);
}
void xen_pt_msi_disable(XenPCIPassthroughState *s)
@@ -355,7 +361,8 @@ static int xen_pt_msix_update_one(XenPCIPassthroughState *s, int entry_nr,
}
rc = msi_msix_update(s, entry->addr, entry->data, pirq, true,
- entry_nr, &entry->pirq);
+ entry_nr, &entry->pirq,
+ vec_ctrl & PCI_MSIX_ENTRY_CTRL_MASKBIT);
if (!rc) {
entry->updated = false;
--
1.9.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PULL 0/2] xen-20170920-tag
2017-09-21 2:21 [Qemu-devel] [PULL 0/2] xen-20170920-tag Stefano Stabellini
2017-09-21 2:22 ` [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build Stefano Stabellini
@ 2017-09-21 9:55 ` Peter Maydell
1 sibling, 0 replies; 5+ messages in thread
From: Peter Maydell @ 2017-09-21 9:55 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Stefan Hajnoczi, Stefan Hajnoczi, Anthony PERARD, open list:X86,
QEMU Developers
On 21 September 2017 at 03:21, Stefano Stabellini
<sstabellini@kernel.org> wrote:
> The following changes since commit b62b7ed0fc9c58e373b8946c9bd2e193be98dae6:
>
> Merge remote-tracking branch 'remotes/gkurz/tags/for-upstream' into staging (2017-09-20 20:33:48 +0100)
>
> are available in the git repository at:
>
>
> git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-20170920-tag
>
> for you to fetch changes up to a8036336609d2e184fc3543a4c439c0ba7d7f3a2:
>
> xen/pt: allow QEMU to request MSI unmasking at bind time (2017-09-20 19:05:27 -0700)
>
> ----------------------------------------------------------------
> Xen 2017/09/20
>
> ----------------------------------------------------------------
> Olaf Hering (1):
> xen-disk: use g_new0 to fix build
>
> Roger Pau Monne (1):
> xen/pt: allow QEMU to request MSI unmasking at bind time
>
> hw/block/xen_disk.c | 2 +-
> hw/xen/xen_pt.h | 1 +
> hw/xen/xen_pt_config_init.c | 20 ++++++++++++++++++--
> hw/xen/xen_pt_msi.c | 13 ++++++++++---
> 4 files changed, 30 insertions(+), 6 deletions(-)
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build
2017-09-21 2:22 ` [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build Stefano Stabellini
2017-09-21 2:22 ` [Qemu-devel] [PULL 2/2] xen/pt: allow QEMU to request MSI unmasking at bind time Stefano Stabellini
@ 2017-09-25 12:11 ` Olaf Hering
1 sibling, 0 replies; 5+ messages in thread
From: Olaf Hering @ 2017-09-25 12:11 UTC (permalink / raw)
To: Stefano Stabellini
Cc: peter.maydell, stefanha, stefanha, anthony.perard, xen-devel,
qemu-devel
[-- Attachment #1: Type: text/plain, Size: 438 bytes --]
On Wed, Sep 20, Stefano Stabellini wrote:
> From: Olaf Hering <olaf@aepfle.de>
> g_malloc0_n is available since glib-2.24. To allow build with older glib
> versions use the generic g_new0, which is already used in many other
> places in the code.
> Fixes commit 3284fad728 ("xen-disk: add support for multi-page shared rings")
In case this missed the release, please backport to the relevant stable
branches as well. Many thanks.
Olaf
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-09-25 12:12 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-21 2:21 [Qemu-devel] [PULL 0/2] xen-20170920-tag Stefano Stabellini
2017-09-21 2:22 ` [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build Stefano Stabellini
2017-09-21 2:22 ` [Qemu-devel] [PULL 2/2] xen/pt: allow QEMU to request MSI unmasking at bind time Stefano Stabellini
2017-09-25 12:11 ` [Qemu-devel] [PULL 1/2] xen-disk: use g_new0 to fix build Olaf Hering
2017-09-21 9:55 ` [Qemu-devel] [PULL 0/2] xen-20170920-tag Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).