linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/6] ata: Missing HAS_DMA dependencies
@ 2017-01-03 18:09 Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 1/6] ata: SATA_MV should depend on HAS_DMA Geert Uytterhoeven
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2017-01-03 18:09 UTC (permalink / raw)
  To: Tejun Heo, Bartlomiej Zolnierkiewicz
  Cc: linux-ide, linux-m68k, linux-kernel, Geert Uytterhoeven

	Hi all,

Bartlomiej's "[PATCH 1/3] ata: allow subsystem to be used on m68k arch"
exposed a few missing dependencies on HAS_DMA. This series allows to
build again "allmodconfig" and "allyesconfig" kernels tailored for
Sun-3, which sets NO_DMA=y.

Geert Uytterhoeven (6):
  ata: SATA_MV should depend on HAS_DMA
  ata: SATA_HIGHBANK should depend on HAS_DMA
  ata: ATA_BMDMA should depend on HAS_DMA
  ata: AHCI and other non-SFF native drivers should depend on HAS_DMA
  libata: Make ata_sg_clean() static again
  libata: Protect DMA core code by #ifdef CONFIG_HAS_DMA

 drivers/ata/Kconfig       |  7 ++++++
 drivers/ata/libata-core.c | 61 +++++++++++++++++++++++++++--------------------
 drivers/ata/libata.h      |  1 -
 3 files changed, 42 insertions(+), 27 deletions(-)

-- 
1.9.1

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/6] ata: SATA_MV should depend on HAS_DMA
  2017-01-03 18:09 [PATCH 0/6] ata: Missing HAS_DMA dependencies Geert Uytterhoeven
@ 2017-01-03 18:09 ` Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 2/6] ata: SATA_HIGHBANK " Geert Uytterhoeven
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2017-01-03 18:09 UTC (permalink / raw)
  To: Tejun Heo, Bartlomiej Zolnierkiewicz
  Cc: linux-ide, linux-m68k, linux-kernel, Geert Uytterhoeven

If NO_DMA=y:

    ERROR: "dma_pool_alloc" [drivers/ata/sata_mv.ko] undefined!
    ERROR: "dmam_pool_create" [drivers/ata/sata_mv.ko] undefined!
    ERROR: "dma_pool_free" [drivers/ata/sata_mv.ko] undefined!

Add a dependency on HAS_DMA to fix this.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
 drivers/ata/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index cbd101933c69322a..7b36b791078a4806 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -353,6 +353,7 @@ config SATA_HIGHBANK
 
 config SATA_MV
 	tristate "Marvell SATA support"
+	depends on HAS_DMA
 	depends on PCI || ARCH_DOVE || ARCH_MV78XX0 || \
 		   ARCH_MVEBU || ARCH_ORION5X || COMPILE_TEST
 	select GENERIC_PHY
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/6] ata: SATA_HIGHBANK should depend on HAS_DMA
  2017-01-03 18:09 [PATCH 0/6] ata: Missing HAS_DMA dependencies Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 1/6] ata: SATA_MV should depend on HAS_DMA Geert Uytterhoeven
@ 2017-01-03 18:09 ` Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 3/6] ata: ATA_BMDMA " Geert Uytterhoeven
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2017-01-03 18:09 UTC (permalink / raw)
  To: Tejun Heo, Bartlomiej Zolnierkiewicz
  Cc: linux-ide, linux-m68k, linux-kernel, Geert Uytterhoeven

If NO_DMA=y:

    ERROR: "bad_dma_ops" [drivers/ata/sata_highbank.ko] undefined!

Add a dependency on HAS_DMA to fix this.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
 drivers/ata/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 7b36b791078a4806..275dbbded6dbe03b 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -344,6 +344,7 @@ config SATA_DWC_VDEBUG
 
 config SATA_HIGHBANK
 	tristate "Calxeda Highbank SATA support"
+	depends on HAS_DMA
 	depends on ARCH_HIGHBANK || COMPILE_TEST
 	help
 	  This option enables support for the Calxeda Highbank SoC's
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/6] ata: ATA_BMDMA should depend on HAS_DMA
  2017-01-03 18:09 [PATCH 0/6] ata: Missing HAS_DMA dependencies Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 1/6] ata: SATA_MV should depend on HAS_DMA Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 2/6] ata: SATA_HIGHBANK " Geert Uytterhoeven
@ 2017-01-03 18:09 ` Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 4/6] ata: AHCI and other non-SFF native drivers " Geert Uytterhoeven
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2017-01-03 18:09 UTC (permalink / raw)
  To: Tejun Heo, Bartlomiej Zolnierkiewicz
  Cc: linux-ide, linux-m68k, linux-kernel, Geert Uytterhoeven

If NO_DMA=y:

    ERROR: "dmam_alloc_coherent" [drivers/ata/libata.ko] undefined!

Add a dependency on HAS_DMA to fix this.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
 drivers/ata/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 275dbbded6dbe03b..a973aa8aa5513eea 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -289,6 +289,7 @@ config SATA_SX4
 
 config ATA_BMDMA
 	bool "ATA BMDMA support"
+	depends on HAS_DMA
 	default y
 	help
 	  This option adds support for SFF ATA controllers with BMDMA
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/6] ata: AHCI and other non-SFF native drivers should depend on HAS_DMA
  2017-01-03 18:09 [PATCH 0/6] ata: Missing HAS_DMA dependencies Geert Uytterhoeven
                   ` (2 preceding siblings ...)
  2017-01-03 18:09 ` [PATCH 3/6] ata: ATA_BMDMA " Geert Uytterhoeven
@ 2017-01-03 18:09 ` Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 5/6] libata: Make ata_sg_clean() static again Geert Uytterhoeven
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2017-01-03 18:09 UTC (permalink / raw)
  To: Tejun Heo, Bartlomiej Zolnierkiewicz
  Cc: linux-ide, linux-m68k, linux-kernel, Geert Uytterhoeven

If NO_DMA=y:

    ERROR: "bad_dma_ops" [drivers/ata/libahci_platform.ko] undefined!
    ERROR: "dmam_alloc_coherent" [drivers/ata/libahci.ko] undefined!

Add a block dependency on HAS_DMA to fix this.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
 drivers/ata/Kconfig | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index a973aa8aa5513eea..78c00202102913a0 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -80,6 +80,8 @@ config SATA_PMP
 	  This option adds support for SATA Port Multipliers
 	  (the SATA version of an ethernet hub, or SAS expander).
 
+if HAS_DMA
+
 comment "Controllers with non-SFF native interface"
 
 config SATA_AHCI
@@ -232,6 +234,8 @@ config SATA_SIL24
 
 	  If unsure, say N.
 
+endif # HAS_DMA
+
 config ATA_SFF
 	bool "ATA SFF support (for legacy IDE and PATA)"
 	default y
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/6] libata: Make ata_sg_clean() static again
  2017-01-03 18:09 [PATCH 0/6] ata: Missing HAS_DMA dependencies Geert Uytterhoeven
                   ` (3 preceding siblings ...)
  2017-01-03 18:09 ` [PATCH 4/6] ata: AHCI and other non-SFF native drivers " Geert Uytterhoeven
@ 2017-01-03 18:09 ` Geert Uytterhoeven
  2017-01-03 18:09 ` [PATCH 6/6] libata: Protect DMA core code by #ifdef CONFIG_HAS_DMA Geert Uytterhoeven
  2017-01-06 16:37 ` [PATCH 0/6] ata: Missing HAS_DMA dependencies Tejun Heo
  6 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2017-01-03 18:09 UTC (permalink / raw)
  To: Tejun Heo, Bartlomiej Zolnierkiewicz
  Cc: linux-ide, linux-m68k, linux-kernel, Geert Uytterhoeven

Commit 70e6ad0c6d1e6cb9 ("[PATCH] libata: prepare ata_sg_clean() for
invocation from EH") made ata_sg_clean() global, but no user outside
libata-core.c has ever materialized.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
 drivers/ata/libata-core.c | 2 +-
 drivers/ata/libata.h      | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 9cd0a2d4181699d9..a7e3df5abaa3124f 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -4822,7 +4822,7 @@ static unsigned int ata_dev_init_params(struct ata_device *dev,
  *	LOCKING:
  *	spin_lock_irqsave(host lock)
  */
-void ata_sg_clean(struct ata_queued_cmd *qc)
+static void ata_sg_clean(struct ata_queued_cmd *qc)
 {
 	struct ata_port *ap = qc->ap;
 	struct scatterlist *sg = qc->sg;
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index 8f3a5596dd676b95..1133e9439f9c537e 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -89,7 +89,6 @@ extern int ata_dev_revalidate(struct ata_device *dev, unsigned int new_class,
 extern int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel);
 extern unsigned int ata_dev_set_feature(struct ata_device *dev,
 					u8 enable, u8 feature);
-extern void ata_sg_clean(struct ata_queued_cmd *qc);
 extern void ata_qc_free(struct ata_queued_cmd *qc);
 extern void ata_qc_issue(struct ata_queued_cmd *qc);
 extern void __ata_qc_complete(struct ata_queued_cmd *qc);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 6/6] libata: Protect DMA core code by #ifdef CONFIG_HAS_DMA
  2017-01-03 18:09 [PATCH 0/6] ata: Missing HAS_DMA dependencies Geert Uytterhoeven
                   ` (4 preceding siblings ...)
  2017-01-03 18:09 ` [PATCH 5/6] libata: Make ata_sg_clean() static again Geert Uytterhoeven
@ 2017-01-03 18:09 ` Geert Uytterhoeven
  2017-01-06 16:37 ` [PATCH 0/6] ata: Missing HAS_DMA dependencies Tejun Heo
  6 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2017-01-03 18:09 UTC (permalink / raw)
  To: Tejun Heo, Bartlomiej Zolnierkiewicz
  Cc: linux-ide, linux-m68k, linux-kernel, Geert Uytterhoeven

If NO_DMA=y:

    ERROR: "bad_dma_ops" [drivers/ata/libata.ko] undefined!

To fix this, protect the DMA code by #ifdef CONFIG_HAS_DMA, and provide
dummies of ata_sg_clean() and ata_sg_setup() for the !CONFIG_HAS_DMA
case.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
 drivers/ata/libata-core.c | 61 +++++++++++++++++++++++++++--------------------
 1 file changed, 35 insertions(+), 26 deletions(-)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index a7e3df5abaa3124f..dc70b5f997f1f13e 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -4814,32 +4814,6 @@ static unsigned int ata_dev_init_params(struct ata_device *dev,
 }
 
 /**
- *	ata_sg_clean - Unmap DMA memory associated with command
- *	@qc: Command containing DMA memory to be released
- *
- *	Unmap all mapped DMA memory associated with this command.
- *
- *	LOCKING:
- *	spin_lock_irqsave(host lock)
- */
-static void ata_sg_clean(struct ata_queued_cmd *qc)
-{
-	struct ata_port *ap = qc->ap;
-	struct scatterlist *sg = qc->sg;
-	int dir = qc->dma_dir;
-
-	WARN_ON_ONCE(sg == NULL);
-
-	VPRINTK("unmapping %u sg elements\n", qc->n_elem);
-
-	if (qc->n_elem)
-		dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir);
-
-	qc->flags &= ~ATA_QCFLAG_DMAMAP;
-	qc->sg = NULL;
-}
-
-/**
  *	atapi_check_dma - Check whether ATAPI DMA can be supported
  *	@qc: Metadata associated with taskfile to check
  *
@@ -4923,6 +4897,34 @@ void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
 	qc->cursg = qc->sg;
 }
 
+#ifdef CONFIG_HAS_DMA
+
+/**
+ *	ata_sg_clean - Unmap DMA memory associated with command
+ *	@qc: Command containing DMA memory to be released
+ *
+ *	Unmap all mapped DMA memory associated with this command.
+ *
+ *	LOCKING:
+ *	spin_lock_irqsave(host lock)
+ */
+void ata_sg_clean(struct ata_queued_cmd *qc)
+{
+	struct ata_port *ap = qc->ap;
+	struct scatterlist *sg = qc->sg;
+	int dir = qc->dma_dir;
+
+	WARN_ON_ONCE(sg == NULL);
+
+	VPRINTK("unmapping %u sg elements\n", qc->n_elem);
+
+	if (qc->n_elem)
+		dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir);
+
+	qc->flags &= ~ATA_QCFLAG_DMAMAP;
+	qc->sg = NULL;
+}
+
 /**
  *	ata_sg_setup - DMA-map the scatter-gather table associated with a command.
  *	@qc: Command with scatter-gather table to be mapped.
@@ -4955,6 +4957,13 @@ static int ata_sg_setup(struct ata_queued_cmd *qc)
 	return 0;
 }
 
+#else /* !CONFIG_HAS_DMA */
+
+static inline void ata_sg_clean(struct ata_queued_cmd *qc) {}
+static inline int ata_sg_setup(struct ata_queued_cmd *qc) { return -1; }
+
+#endif /* !CONFIG_HAS_DMA */
+
 /**
  *	swap_buf_le16 - swap halves of 16-bit words in place
  *	@buf:  Buffer to swap
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/6] ata: Missing HAS_DMA dependencies
  2017-01-03 18:09 [PATCH 0/6] ata: Missing HAS_DMA dependencies Geert Uytterhoeven
                   ` (5 preceding siblings ...)
  2017-01-03 18:09 ` [PATCH 6/6] libata: Protect DMA core code by #ifdef CONFIG_HAS_DMA Geert Uytterhoeven
@ 2017-01-06 16:37 ` Tejun Heo
  6 siblings, 0 replies; 8+ messages in thread
From: Tejun Heo @ 2017-01-06 16:37 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Bartlomiej Zolnierkiewicz, linux-ide, linux-m68k, linux-kernel

On Tue, Jan 03, 2017 at 07:09:43PM +0100, Geert Uytterhoeven wrote:
> 	Hi all,
> 
> Bartlomiej's "[PATCH 1/3] ata: allow subsystem to be used on m68k arch"
> exposed a few missing dependencies on HAS_DMA. This series allows to
> build again "allmodconfig" and "allyesconfig" kernels tailored for
> Sun-3, which sets NO_DMA=y.

Applied to 1-6 to libata/for-4.11.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-01-06 16:37 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-03 18:09 [PATCH 0/6] ata: Missing HAS_DMA dependencies Geert Uytterhoeven
2017-01-03 18:09 ` [PATCH 1/6] ata: SATA_MV should depend on HAS_DMA Geert Uytterhoeven
2017-01-03 18:09 ` [PATCH 2/6] ata: SATA_HIGHBANK " Geert Uytterhoeven
2017-01-03 18:09 ` [PATCH 3/6] ata: ATA_BMDMA " Geert Uytterhoeven
2017-01-03 18:09 ` [PATCH 4/6] ata: AHCI and other non-SFF native drivers " Geert Uytterhoeven
2017-01-03 18:09 ` [PATCH 5/6] libata: Make ata_sg_clean() static again Geert Uytterhoeven
2017-01-03 18:09 ` [PATCH 6/6] libata: Protect DMA core code by #ifdef CONFIG_HAS_DMA Geert Uytterhoeven
2017-01-06 16:37 ` [PATCH 0/6] ata: Missing HAS_DMA dependencies Tejun Heo

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).