From: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
To: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>,
Matthew Wilcox <matthew@wil.cx>,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
linux-rt-users@vger.kernel.org
Subject: [PATCH] msi: skip calling pci_find_capability from msi_set_mask_bits
Date: Mon, 19 May 2008 13:48:17 +0900 [thread overview]
Message-ID: <48310691.9050706@jp.fujitsu.com> (raw)
In-Reply-To: <200805161044.34938.jbarnes@virtuousgeek.org>
Jesse Barnes wrote:
> Since we know MSI is a problem, let's just go with fixing that for now. If we
> find that other caps are also causing problems we can revisit caching all of
> them; the patch is simple enough.
Humm...
I suppose it can be more simple. How about this patch?
> everytime handle_edge_irq is called it needs to mask and unmask MSI, and
> that leads to a series of very expensive calls to pci_find_capability
The position of MSI capability is already cached in the msi_desc when
we enter the msi_set_mask_bits(). Use it instead.
Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
---
drivers/pci/msi.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 8c61304..ccb1974 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -70,12 +70,10 @@ arch_teardown_msi_irqs(struct pci_dev *dev)
}
}
-static void msi_set_enable(struct pci_dev *dev, int enable)
+static void __msi_set_enable(struct pci_dev *dev, int pos, int enable)
{
- int pos;
u16 control;
- pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
if (pos) {
pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &control);
control &= ~PCI_MSI_FLAGS_ENABLE;
@@ -85,6 +83,11 @@ static void msi_set_enable(struct pci_dev *dev, int enable)
}
}
+static void msi_set_enable(struct pci_dev *dev, int enable)
+{
+ __msi_set_enable(dev, pci_find_capability(dev, PCI_CAP_ID_MSI), enable);
+}
+
static void msix_set_enable(struct pci_dev *dev, int enable)
{
int pos;
@@ -141,7 +144,8 @@ static void msi_set_mask_bits(unsigned int irq, u32 mask, u32 flag)
mask_bits |= flag & mask;
pci_write_config_dword(entry->dev, pos, mask_bits);
} else {
- msi_set_enable(entry->dev, !flag);
+ __msi_set_enable(entry->dev, entry->msi_attrib.pos,
+ !flag);
}
break;
case PCI_CAP_ID_MSIX:
--
1.5.4.3
next prev parent reply other threads:[~2008-05-19 4:48 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-15 16:04 [PATCH][PCI]: Introduce pci_find_capability_cached and make MSI use it Arnaldo Carvalho de Melo
2008-05-15 17:02 ` Arnaldo Carvalho de Melo
2008-05-15 17:04 ` Matthew Wilcox
2008-05-15 17:10 ` Arnaldo Carvalho de Melo
2008-05-16 17:44 ` Jesse Barnes
2008-05-16 18:33 ` Arnaldo Carvalho de Melo
2008-05-16 19:01 ` Jesse Barnes
2008-05-16 19:10 ` Arnaldo Carvalho de Melo
2008-05-19 4:48 ` Hidetoshi Seto [this message]
2008-05-19 20:11 ` [PATCH] msi: skip calling pci_find_capability from msi_set_mask_bits Jesse Barnes
2008-05-19 20:26 ` Arnaldo Carvalho de Melo
2008-05-20 19:56 ` Arnaldo Carvalho de Melo
2008-05-20 20:06 ` Jesse Barnes
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=48310691.9050706@jp.fujitsu.com \
--to=seto.hidetoshi@jp.fujitsu.com \
--cc=acme@redhat.com \
--cc=jbarnes@virtuousgeek.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=matthew@wil.cx \
/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.