All of lore.kernel.org
 help / color / mirror / Atom feed
From: Todd Poynor <toddpoynor@gmail.com>
To: Rob Springer <rspringer@google.com>,
	John Joseph <jnjoseph@google.com>,
	Ben Chan <benchan@chromium.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org,
	Todd Poynor <toddpoynor@google.com>
Subject: [PATCH 4/5] staging: gasket: page table: remove code for "no dma_ops"
Date: Fri, 27 Jul 2018 22:21:59 -0700	[thread overview]
Message-ID: <20180728052200.228796-5-toddpoynor@gmail.com> (raw)
In-Reply-To: <20180728052200.228796-1-toddpoynor@gmail.com>

From: Todd Poynor <toddpoynor@google.com>

Remove code with TODOs on it for working around apparent problems
previously seen in a qemu environment where dma_ops was not set
correctly.  There is no user of this in the current code.

Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
 drivers/staging/gasket/gasket_core.c       |  2 +-
 drivers/staging/gasket/gasket_page_table.c | 58 +++-------------------
 drivers/staging/gasket/gasket_page_table.h |  3 +-
 3 files changed, 8 insertions(+), 55 deletions(-)

diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index f44805c38159b..859a6df9e12df 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -916,7 +916,7 @@ static int gasket_enable_dev(
 			&gasket_dev->bar_data[
 				driver_desc->page_table_bar_index],
 			&driver_desc->page_table_configs[tbl_idx],
-			gasket_dev->dev, gasket_dev->pci_dev, true);
+			gasket_dev->dev, gasket_dev->pci_dev);
 		if (ret) {
 			dev_err(gasket_dev->dev,
 				"Couldn't init page table %d: %d\n",
diff --git a/drivers/staging/gasket/gasket_page_table.c b/drivers/staging/gasket/gasket_page_table.c
index 32f1c1e10c7e2..722839603f20d 100644
--- a/drivers/staging/gasket/gasket_page_table.c
+++ b/drivers/staging/gasket/gasket_page_table.c
@@ -212,12 +212,6 @@ struct gasket_page_table {
 	 * gasket_mmap function, so user_virt belongs in the driver anyhow.
 	 */
 	struct gasket_coherent_page_entry *coherent_pages;
-
-	/*
-	 * Whether the page table uses arch specific dma_ops or
-	 * whether the driver is supplying its own.
-	 */
-	bool dma_ops;
 };
 
 /* Mapping declarations */
@@ -290,7 +284,7 @@ int gasket_page_table_init(
 	struct gasket_page_table **ppg_tbl,
 	const struct gasket_bar_data *bar_data,
 	const struct gasket_page_table_config *page_table_config,
-	struct device *device, struct pci_dev *pci_dev, bool has_dma_ops)
+	struct device *device, struct pci_dev *pci_dev)
 {
 	ulong bytes;
 	struct gasket_page_table *pg_tbl;
@@ -353,7 +347,6 @@ int gasket_page_table_init(
 		bar_data->virt_base[page_table_config->extended_reg]);
 	pg_tbl->device = device;
 	pg_tbl->pci_dev = pci_dev;
-	pg_tbl->dma_ops = has_dma_ops;
 
 	dev_dbg(device, "Page table initialized successfully\n");
 
@@ -759,33 +752,6 @@ static int gasket_map_extended_pages(
 	return 0;
 }
 
-/*
- * TODO: dma_map_page() is not plugged properly when running under qemu. i.e.
- * dma_ops are not set properly, which causes the kernel to assert.
- *
- * This temporary hack allows the driver to work on qemu, but need to be fixed:
- * - either manually set the dma_ops for the architecture (which incidentally
- * can't be done in an out-of-tree module) - or get qemu to fill the device tree
- * properly so as linux plug the proper dma_ops or so as the driver can detect
- * that it is runnig on qemu
- */
-static inline dma_addr_t _no_op_dma_map_page(
-	struct device *dev, struct page *page, size_t offset, size_t size,
-	enum dma_data_direction dir)
-{
-	/*
-	 * struct dma_map_ops *ops = get_dma_ops(dev);
-	 * dma_addr_t addr;
-	 *
-	 * kmemcheck_mark_initialized(page_address(page) + offset, size);
-	 * BUG_ON(!valid_dma_direction(dir));
-	 * addr = ops->map_page(dev, page, offset, size, dir, NULL);
-	 * debug_dma_map_page(dev, page, offset, size, dir, addr, false);
-	 */
-
-	return page_to_phys(page);
-}
-
 /*
  * Get and map last level page table buffers.
  * @pg_tbl: Gasket page table pointer.
@@ -856,16 +822,9 @@ static int gasket_perform_mapping(
 			ptes[i].offset = offset;
 
 			/* Map the page into DMA space. */
-			if (pg_tbl->dma_ops) {
-				/* hook in to kernel map functions */
-				ptes[i].dma_addr = dma_map_page(pg_tbl->device,
-					page, 0, PAGE_SIZE, DMA_BIDIRECTIONAL);
-			} else {
-				ptes[i].dma_addr = _no_op_dma_map_page(
-					pg_tbl->device, page, 0, PAGE_SIZE,
-					DMA_BIDIRECTIONAL);
-			}
-
+			ptes[i].dma_addr =
+				dma_map_page(pg_tbl->device, page, 0, PAGE_SIZE,
+					     DMA_BIDIRECTIONAL);
 			dev_dbg(pg_tbl->device,
 				"%s i %d pte %p pfn %p -> mapped %llx\n",
 				__func__, i, &ptes[i],
@@ -1042,13 +1001,8 @@ static int gasket_alloc_extended_subtable(
 	}
 
 	/* Map the page into DMA space. */
-	if (pg_tbl->dma_ops) {
-		pte->dma_addr = dma_map_page(pg_tbl->device, pte->page, 0,
-			PAGE_SIZE, DMA_BIDIRECTIONAL);
-	} else {
-		pte->dma_addr = _no_op_dma_map_page(pg_tbl->device, pte->page,
-			0, PAGE_SIZE, DMA_BIDIRECTIONAL);
-	}
+	pte->dma_addr = dma_map_page(pg_tbl->device, pte->page, 0, PAGE_SIZE,
+				     DMA_BIDIRECTIONAL);
 	/* Wait until the page is mapped. */
 	mb();
 
diff --git a/drivers/staging/gasket/gasket_page_table.h b/drivers/staging/gasket/gasket_page_table.h
index 0e8afdb8c1139..765588649365f 100644
--- a/drivers/staging/gasket/gasket_page_table.h
+++ b/drivers/staging/gasket/gasket_page_table.h
@@ -37,7 +37,6 @@ struct gasket_page_table;
  *                 translation table.
  * @device: Device structure for the underlying device. Only used for logging.
  * @pci_dev: PCI system descriptor for the underlying device.
- * @bool has_dma_ops: Whether the page table uses arch specific dma_ops or
  * whether the driver will supply its own.
  *
  * Description: Allocates and initializes data to track address translation -
@@ -51,7 +50,7 @@ int gasket_page_table_init(
 	struct gasket_page_table **ppg_tbl,
 	const struct gasket_bar_data *bar_data,
 	const struct gasket_page_table_config *page_table_config,
-	struct device *device, struct pci_dev *pci_dev, bool dma_ops);
+	struct device *device, struct pci_dev *pci_dev);
 
 /*
  * Deallocate and cleanup page table data.
-- 
2.18.0.345.g5c9ce644c3-goog


  parent reply	other threads:[~2018-07-28  5:22 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-28  5:21 [PATCH 0/5] staging: gasket: fixes and cleanups Todd Poynor
2018-07-28  5:21 ` [PATCH 1/5] staging: gasket: sysfs: remove check for refcount already zero Todd Poynor
2018-07-28  5:21 ` [PATCH 2/5] staging: gasket: apex: fixup undefined PCI class Todd Poynor
2018-07-28  5:21 ` [PATCH 3/5] staging: gasket: sysfs: remove unnecessary NULL check on device ptr Todd Poynor
2018-07-28  5:21 ` Todd Poynor [this message]
2018-07-28  5:22 ` [PATCH 5/5] staging: gasket: core: hold reference on device kobj while in use Todd Poynor
2018-07-28  7:23   ` Greg Kroah-Hartman

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=20180728052200.228796-5-toddpoynor@gmail.com \
    --to=toddpoynor@gmail.com \
    --cc=benchan@chromium.org \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jnjoseph@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rspringer@google.com \
    --cc=toddpoynor@google.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 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.