From: "tone.zhang" <tone.zhang@arm.com>
To: dev@dpdk.org
Cc: nd@arm.com
Subject: [dpdk-dev] [PATCH] pci_vfio: Support 64KB kernel page_size with vfio-pci driver
Date: Wed, 24 Oct 2018 10:20:04 +0800 [thread overview]
Message-ID: <1540347604-18590-1-git-send-email-tone.zhang@arm.com> (raw)
With a larger PAGE_SIZE it is possible for the MSI table to very
close to the end of the BAR s.t. when we align the MSI table to
the PAGE_SIZE, the end offset of the MSI table is out the PCI BAR
boundary.
This patch addresses the issue by comparing both the start and the
end offset of the MSI table with the BAR size.
The patch fixes the debug log as below:
EAL: Skipping BAR0
Signed-off-by: tone.zhang <tone.zhang@arm.com>
Reviewed-by: Gavin Hu <Gavin.Hu@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Steve Capper <Steve.Capper@arm.com>
---
drivers/bus/pci/linux/pci_vfio.c | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c
index b1f0683..1373345 100644
--- a/drivers/bus/pci/linux/pci_vfio.c
+++ b/drivers/bus/pci/linux/pci_vfio.c
@@ -445,9 +445,11 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
struct pci_msix_table *msix_table = &vfio_res->msix_table;
struct pci_map *bar = &vfio_res->maps[bar_index];
- if (bar->size == 0)
+ if (bar->size == 0) {
/* Skip this BAR */
+ RTE_LOG(INFO, EAL, "Skipping this BAR%d\n", bar_index);
return 0;
+ }
if (msix_table->bar_index == bar_index) {
/*
@@ -457,7 +459,12 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
uint32_t table_start = msix_table->offset;
uint32_t table_end = table_start + msix_table->size;
table_end = (table_end + ~PAGE_MASK) & PAGE_MASK;
- table_start &= PAGE_MASK;
+ table_start = (table_start + ~PAGE_MASK) & PAGE_MASK;
+ /* after rounding to PAGE_SIZE, it is over the bar->size,
+ * fall back to the MSI-X table offset in the bar.
+ */
+ if (table_start >= bar->size)
+ table_start = msix_table->offset;
if (table_start == 0 && table_end >= bar->size) {
/* Cannot map this BAR */
@@ -469,8 +476,18 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
memreg[0].offset = bar->offset;
memreg[0].size = table_start;
- memreg[1].offset = bar->offset + table_end;
- memreg[1].size = bar->size - table_end;
+ if (bar->size < table_end) {
+ /*
+ * after rounding to PAGE_SIZE we don't have any space
+ * left after the MSI table, so don't try and map it.
+ */
+ memreg[1].offset = 0;
+ memreg[1].size = 0;
+ }
+ else {
+ memreg[1].offset = bar->offset + table_end;
+ memreg[1].size = bar->size - table_end;
+ }
RTE_LOG(DEBUG, EAL,
"Trying to map BAR%d that contains the MSI-X "
--
2.7.4
next reply other threads:[~2018-10-24 2:20 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-24 2:20 tone.zhang [this message]
2018-10-24 9:09 ` Burakov, Anatoly
2018-11-01 2:33 ` Tone Zhang (Arm Technology China)
2018-11-01 10:01 ` Burakov, Anatoly
[not found] ` <DB7PR08MB33859242951014EF340C897AE9C80@DB7PR08MB3385.eurprd08.prod.outlook.com>
2018-11-03 5:46 ` Tone Zhang (Arm Technology China)
2018-11-06 11:03 ` Burakov, Anatoly
2018-11-07 4:55 ` Tone Zhang (Arm Technology China)
2018-11-07 10:12 ` Burakov, Anatoly
2018-11-08 0:45 ` Tone Zhang (Arm Technology China)
2018-11-09 5:57 ` [dpdk-dev] [PATCH v2] " tone.zhang
2018-11-09 12:15 ` Burakov, Anatoly
2018-11-15 0:49 ` Tone Zhang (Arm Technology China)
2018-11-16 2:34 ` Tone Zhang (Arm Technology China)
2018-11-16 10:36 ` Burakov, Anatoly
2018-11-19 2:37 ` [dpdk-dev] [PATCH v3] " tone.zhang
2018-12-03 7:25 ` Tone Zhang (Arm Technology China)
2018-12-10 11:40 ` Burakov, Anatoly
2018-12-10 11:45 ` Burakov, Anatoly
2018-12-10 15:55 ` Stephen Hemminger
2018-12-12 10:49 ` Tone Zhang (Arm Technology China)
2018-12-12 10:48 ` Tone Zhang (Arm Technology China)
2018-12-12 11:25 ` [dpdk-dev] [PATCH v4] " tone.zhang
2018-12-12 11:27 ` Burakov, Anatoly
2018-12-19 23:05 ` Thomas Monjalon
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=1540347604-18590-1-git-send-email-tone.zhang@arm.com \
--to=tone.zhang@arm.com \
--cc=dev@dpdk.org \
--cc=nd@arm.com \
/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).