All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeffrey Hugo <quic_jhugo@quicinc.com>
To: <kys@microsoft.com>, <haiyangz@microsoft.com>,
	<sthemmin@microsoft.com>, <wei.liu@kernel.org>,
	<decui@microsoft.com>, <lorenzo.pieralisi@arm.com>,
	<robh@kernel.org>, <kw@linux.com>, <bhelgaas@google.com>
Cc: <jakeo@microsoft.com>, <dazhan@microsoft.com>,
	<linux-hyperv@vger.kernel.org>, <linux-pci@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>,
	Jeffrey Hugo <quic_jhugo@quicinc.com>
Subject: [PATCH 0/2] hyperv compose_msi_msg fixups
Date: Mon, 9 May 2022 15:48:20 -0600	[thread overview]
Message-ID: <1652132902-27109-1-git-send-email-quic_jhugo@quicinc.com> (raw)

While multi-MSI appears to work with pci-hyperv.c, there was a concern about
how linux was doing the ITRE allocations.  Patch 2 addresses the concern.

However, patch 2 exposed an issue with how compose_msi_msg() was freeing a
previous allocation when called for the Nth time.  Imagine a driver using
pci_alloc_irq_vectors() to request 32 MSIs.  This would cause compose_msi_msg()
to be called 32 times, once for each MSI.  With patch 2, MSI0 would allocate
the ITREs needed, and MSI1-31 would use the cached information.  Then the driver
uses request_irq() on MSI1-17.  This would call compose_msi_msg() again on those
MSIs, which would again use the cached information.  Then unmask() would be
called to retarget the MSIs to the right VCPU vectors.  Finally, the driver
calls request_irq() on MSI0.  This would call conpose_msi_msg(), which would
free the block of 32 MSIs, and allocate a new block.  This would undo the
retarget of MSI1-17, and likely leave those MSIs targeting invalid VCPU vectors.
This is addressed by patch 1, which is introduced first to prevent a regression.

Jeffrey Hugo (2):
  PCI: hv: Reuse existing ITRE allocation in compose_msi_msg()
  PCI: hv: Fix interrupt mapping for multi-MSI

 drivers/pci/controller/pci-hyperv.c | 76 ++++++++++++++++++++++++++++---------
 1 file changed, 59 insertions(+), 17 deletions(-)

-- 
2.7.4


             reply	other threads:[~2022-05-09 21:51 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-09 21:48 Jeffrey Hugo [this message]
2022-05-09 21:48 ` [PATCH 1/2] PCI: hv: Reuse existing ITRE allocation in compose_msi_msg() Jeffrey Hugo
2022-05-09 23:13   ` Dexuan Cui
2022-05-10  2:29     ` Jeffrey Hugo
2022-05-10 10:52       ` Wei Liu
2022-05-09 21:48 ` [PATCH 2/2] PCI: hv: Fix interrupt mapping for multi-MSI Jeffrey Hugo
2022-05-09 23:21   ` Dexuan Cui
2022-05-09 23:23 ` [PATCH 0/2] hyperv compose_msi_msg fixups Dexuan Cui
2022-05-10  2:31   ` Jeffrey Hugo
2022-05-10 18:13 ` Michael Kelley (LINUX)
2022-05-11 14:41 ` Wei Liu
2022-05-11 14:47   ` Jeffrey Hugo
2022-05-11 15:19     ` Wei Liu
2022-05-11 15:21       ` Jeffrey Hugo

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=1652132902-27109-1-git-send-email-quic_jhugo@quicinc.com \
    --to=quic_jhugo@quicinc.com \
    --cc=bhelgaas@google.com \
    --cc=dazhan@microsoft.com \
    --cc=decui@microsoft.com \
    --cc=haiyangz@microsoft.com \
    --cc=jakeo@microsoft.com \
    --cc=kw@linux.com \
    --cc=kys@microsoft.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=robh@kernel.org \
    --cc=sthemmin@microsoft.com \
    --cc=wei.liu@kernel.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.