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 1/2] PCI: hv: Reuse existing ITRE allocation in compose_msi_msg()
Date: Mon, 9 May 2022 15:48:21 -0600 [thread overview]
Message-ID: <1652132902-27109-2-git-send-email-quic_jhugo@quicinc.com> (raw)
In-Reply-To: <1652132902-27109-1-git-send-email-quic_jhugo@quicinc.com>
Currently if compose_msi_msg() is called multiple times, it will free any
previous ITRE allocation, and generate a new allocation. While nothing
prevents this from occurring, it is extranious when Linux could just reuse
the existing allocation and avoid a bunch of overhead.
However, when future ITRE allocations operate on blocks of MSIs instead of
a single line, freeing the allocation will impact all of the lines. This
could cause an issue where an allocation of N MSIs occurs, then some of
the lines are retargeted, and finally the allocation is freed/reallocated.
The freeing of the allocation removes all of the configuration for the
entire block, which requires all the lines to be retargeted, which might
not happen since some lines might already be unmasked/active.
Signed-off-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
---
drivers/pci/controller/pci-hyperv.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
index cf2fe575..5e2e637 100644
--- a/drivers/pci/controller/pci-hyperv.c
+++ b/drivers/pci/controller/pci-hyperv.c
@@ -1707,6 +1707,15 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
u32 size;
int ret;
+ /* Reuse the previous allocation */
+ if (data->chip_data) {
+ int_desc = data->chip_data;
+ msg->address_hi = int_desc->address >> 32;
+ msg->address_lo = int_desc->address & 0xffffffff;
+ msg->data = int_desc->data;
+ return;
+ }
+
pdev = msi_desc_to_pci_dev(irq_data_get_msi_desc(data));
dest = irq_data_get_effective_affinity_mask(data);
pbus = pdev->bus;
@@ -1716,13 +1725,6 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
if (!hpdev)
goto return_null_message;
- /* Free any previous message that might have already been composed. */
- if (data->chip_data) {
- int_desc = data->chip_data;
- data->chip_data = NULL;
- hv_int_desc_free(hpdev, int_desc);
- }
-
int_desc = kzalloc(sizeof(*int_desc), GFP_ATOMIC);
if (!int_desc)
goto drop_reference;
--
2.7.4
next prev parent reply other threads:[~2022-05-09 21:50 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-09 21:48 [PATCH 0/2] hyperv compose_msi_msg fixups Jeffrey Hugo
2022-05-09 21:48 ` Jeffrey Hugo [this message]
2022-05-09 23:13 ` [PATCH 1/2] PCI: hv: Reuse existing ITRE allocation in compose_msi_msg() 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-2-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 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).