From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: linuxppc-dev@lists.ozlabs.org
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>,
Alistair Popple <alistair@popple.id.au>,
Alex Williamson <alex.williamson@redhat.com>,
kvm-ppc@vger.kernel.org,
David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH kernel 5/5] vfio/spapr_tce: Advertise and allow a huge DMA windows at 4GB
Date: Tue, 18 Feb 2020 07:36:50 +0000 [thread overview]
Message-ID: <20200218073650.16149-6-aik@ozlabs.ru> (raw)
In-Reply-To: <20200218073650.16149-1-aik@ozlabs.ru>
So far the only option for a big 64big DMA window was a window located
at 0x800.0000.0000.0000 (1<<59) which creates problems for devices
supporting smaller DMA masks.
This exploits a POWER9 PHB option to allow the second DMA window to map
at 0 and advertises it with a 4GB offset to avoid overlap with
the default 32bit window.
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---
include/uapi/linux/vfio.h | 2 ++
drivers/vfio/vfio_iommu_spapr_tce.c | 10 ++++++++--
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
index 9e843a147ead..c7f89d47335a 100644
--- a/include/uapi/linux/vfio.h
+++ b/include/uapi/linux/vfio.h
@@ -831,9 +831,11 @@ struct vfio_iommu_spapr_tce_info {
__u32 argsz;
__u32 flags;
#define VFIO_IOMMU_SPAPR_INFO_DDW (1 << 0) /* DDW supported */
+#define VFIO_IOMMU_SPAPR_INFO_DDW_START (1 << 1) /* DDW offset */
__u32 dma32_window_start; /* 32 bit window start (bytes) */
__u32 dma32_window_size; /* 32 bit window size (bytes) */
struct vfio_iommu_spapr_tce_ddw_info ddw;
+ __u64 dma64_window_start;
};
#define VFIO_IOMMU_SPAPR_TCE_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c
index 16b3adc508db..4f22be3c4aa2 100644
--- a/drivers/vfio/vfio_iommu_spapr_tce.c
+++ b/drivers/vfio/vfio_iommu_spapr_tce.c
@@ -691,7 +691,7 @@ static long tce_iommu_create_window(struct tce_container *container,
container->tables[num] = tbl;
/* Return start address assigned by platform in create_table() */
- *start_addr = tbl->it_offset << tbl->it_page_shift;
+ *start_addr = tbl->it_dmaoff << tbl->it_page_shift;
return 0;
@@ -842,7 +842,13 @@ static long tce_iommu_ioctl(void *iommu_data,
info.ddw.levels = table_group->max_levels;
}
- ddwsz = offsetofend(struct vfio_iommu_spapr_tce_info, ddw);
+ ddwsz = offsetofend(struct vfio_iommu_spapr_tce_info,
+ dma64_window_start);
+
+ if (info.argsz >= ddwsz) {
+ info.flags |= VFIO_IOMMU_SPAPR_INFO_DDW_START;
+ info.dma64_window_start = table_group->tce64_start;
+ }
if (info.argsz >= ddwsz)
minsz = ddwsz;
--
2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: linuxppc-dev@lists.ozlabs.org
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>,
Alistair Popple <alistair@popple.id.au>,
Alex Williamson <alex.williamson@redhat.com>,
kvm-ppc@vger.kernel.org,
David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH kernel 5/5] vfio/spapr_tce: Advertise and allow a huge DMA windows at 4GB
Date: Tue, 18 Feb 2020 18:36:50 +1100 [thread overview]
Message-ID: <20200218073650.16149-6-aik@ozlabs.ru> (raw)
In-Reply-To: <20200218073650.16149-1-aik@ozlabs.ru>
So far the only option for a big 64big DMA window was a window located
at 0x800.0000.0000.0000 (1<<59) which creates problems for devices
supporting smaller DMA masks.
This exploits a POWER9 PHB option to allow the second DMA window to map
at 0 and advertises it with a 4GB offset to avoid overlap with
the default 32bit window.
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---
include/uapi/linux/vfio.h | 2 ++
drivers/vfio/vfio_iommu_spapr_tce.c | 10 ++++++++--
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
index 9e843a147ead..c7f89d47335a 100644
--- a/include/uapi/linux/vfio.h
+++ b/include/uapi/linux/vfio.h
@@ -831,9 +831,11 @@ struct vfio_iommu_spapr_tce_info {
__u32 argsz;
__u32 flags;
#define VFIO_IOMMU_SPAPR_INFO_DDW (1 << 0) /* DDW supported */
+#define VFIO_IOMMU_SPAPR_INFO_DDW_START (1 << 1) /* DDW offset */
__u32 dma32_window_start; /* 32 bit window start (bytes) */
__u32 dma32_window_size; /* 32 bit window size (bytes) */
struct vfio_iommu_spapr_tce_ddw_info ddw;
+ __u64 dma64_window_start;
};
#define VFIO_IOMMU_SPAPR_TCE_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c
index 16b3adc508db..4f22be3c4aa2 100644
--- a/drivers/vfio/vfio_iommu_spapr_tce.c
+++ b/drivers/vfio/vfio_iommu_spapr_tce.c
@@ -691,7 +691,7 @@ static long tce_iommu_create_window(struct tce_container *container,
container->tables[num] = tbl;
/* Return start address assigned by platform in create_table() */
- *start_addr = tbl->it_offset << tbl->it_page_shift;
+ *start_addr = tbl->it_dmaoff << tbl->it_page_shift;
return 0;
@@ -842,7 +842,13 @@ static long tce_iommu_ioctl(void *iommu_data,
info.ddw.levels = table_group->max_levels;
}
- ddwsz = offsetofend(struct vfio_iommu_spapr_tce_info, ddw);
+ ddwsz = offsetofend(struct vfio_iommu_spapr_tce_info,
+ dma64_window_start);
+
+ if (info.argsz >= ddwsz) {
+ info.flags |= VFIO_IOMMU_SPAPR_INFO_DDW_START;
+ info.dma64_window_start = table_group->tce64_start;
+ }
if (info.argsz >= ddwsz)
minsz = ddwsz;
--
2.17.1
next prev parent reply other threads:[~2020-02-18 7:36 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-18 7:36 [PATCH kernel 0/5] powerpc/powenv/ioda: Allow huge DMA window at 4GB Alexey Kardashevskiy
2020-02-18 7:36 ` Alexey Kardashevskiy
2020-02-18 7:36 ` [PATCH kernel 1/5] powerpc/powernv/ioda: Move TCE bypass base to PE Alexey Kardashevskiy
2020-02-18 7:36 ` Alexey Kardashevskiy
2020-02-18 7:36 ` [PATCH kernel 2/5] powerpc/powernv/ioda: Rework for huge DMA window at 4GB Alexey Kardashevskiy
2020-02-18 7:36 ` Alexey Kardashevskiy
2020-02-18 7:36 ` [PATCH kernel 3/5] powerpc/powernv/ioda: Allow smaller TCE table levels Alexey Kardashevskiy
2020-02-18 7:36 ` Alexey Kardashevskiy
2020-02-18 7:36 ` [PATCH kernel 4/5] powerpc/powernv/phb4: Add 4GB IOMMU bypass mode Alexey Kardashevskiy
2020-02-18 7:36 ` Alexey Kardashevskiy
2020-02-18 7:36 ` Alexey Kardashevskiy [this message]
2020-02-18 7:36 ` [PATCH kernel 5/5] vfio/spapr_tce: Advertise and allow a huge DMA windows at 4GB Alexey Kardashevskiy
2020-02-20 18:19 ` Alex Williamson
2020-02-20 18:19 ` Alex Williamson
2020-03-18 4:31 ` [PATCH kernel 0/5] powerpc/powenv/ioda: Allow huge DMA window " Alexey Kardashevskiy
2020-03-18 4:31 ` Alexey Kardashevskiy
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=20200218073650.16149-6-aik@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=alex.williamson@redhat.com \
--cc=alistair@popple.id.au \
--cc=david@gibson.dropbear.id.au \
--cc=kvm-ppc@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.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.